知識がなくても始められる、AIと共にある豊かな毎日。
AI

Trace-Driven Development (TrDD):非決定論的エージェントのテスト手法

dify-api

「Assert」が効かない世界

従来のソフトウェアテストは「入力 A に対する出力は必ず B である」という決定論に基づいていました。

しかし、LLMベースのエージェントは確率的(Stochastic)です。

「このデータを要約して」という指示に対し、毎回異なる単語、異なる順序で出力が返ってきます。時には「ツールを使う順序」さえ変わります。

これを assert output == expected でテストしようとすれば、あなたのCIパイプラインは “Flaky”(不安定)なテストで埋め尽くされ、誰もテスト結果を信用しなくなるでしょう。

2026年、我々が必要としているのはTDD(Test-Driven Development)ではなく、TrDD (Trace-Driven Development) です。

TrDDの基本概念

TrDDでは、最終的な出力(Output)だけを見るのではなく、エージェントの思考プロセスと行動履歴(Trace)全体を評価対象にします。

1. 実行トレースのキャプチャ

まず、エージェントの実行をOpenTelemetry互換のトレーサーで記録します。

  • 入力プロンプト
  • 思考(CoT)
  • ツール呼び出し(引数と結果)
  • 最終回答

2. LLM-as-a-Judge による「意味的」検証

次に、このトレースを別のLLM(Judge Model)に渡し、「振る舞いの正当性」を検証させます。

例えば、「ユーザーの住所を変更する」タスクの場合:

  • × assert_equal(tool_call, "update_address") (厳密すぎる)
  • judge("Did the agent verify the user's identity before modifying the database?")

このように、「不変条件(Invariants)」「安全ポリシー(Policy)」を守っているかを自然言語で評価します。

実践:PyTest + LangSmith での実装例

以下は、PythonでのTrDD実装例です。

import pytest
from langsmith import evaluate, Client

# テスト対象のエージェント
def agent_executor(inputs):
    # ... (Actual agent logic) ...
    return trace

# 評価基準(Evaluator)の定義
def policy_check_evaluator(run, example):
    # トレースからツール呼び出し履歴を抽出
    tools_used = [t.name for t in run.trace.tools]

    # ルール:DB書き込み前に必ず検索を行うこと
    if "write_db" in tools_used:
        if "search_user" not in tools_used:
            return {"score": 0, "comment": "Policy Violation: Write without Read"}

    return {"score": 1, "comment": "Passed"}

@pytest.mark.asyncio
async def test_agent_behavior():
    client = Client()

    # データセットに対してエージェントを実行し、評価関数を適用
    results = await evaluate(
        agent_executor,
        data="address-change-dataset-v1",
        evaluators=[policy_check_evaluator]
    )

    # 全体の合格率が95%以上であることを要求
    assert results.pass_rate >= 0.95

このテストは、エージェントが「どのような手順で」住所変更を行っても、「検索せずに書き込む」という危険な振る舞いをした時だけ落ちます。これがTrDDの本質です。

「良いJudge」を育てる

TrDDの成功は、Judge Modelの品質にかかっています。

最初はGemini 3 Proのような汎用モデルで始めますが、組織固有のポリシー(コンプライアンス等)を学習させた小型のカスタムJudgeモデル(Llama-3-8B fine-tuned)を育てることが2026年のベストプラクティスです。

結論:テストコードも「確率的」になる

「テストが100%通ること」はもはや絶対的な目標ではありません。

「95%の確率で安全な振る舞いをする」ことを統計的に保証する。それが、確率的なAIをエンジニアリングするということです。

あなたのCIパイプラインは、まだ完全一致(Exact Match)を探していますか?

ABOUT ME
swiftwand
swiftwand
AIを使って、毎日の生活をもっと快適にするアイデアや将来像を発信しています。 初心者にもわかりやすく、すぐに取り入れられる実践的な情報をお届けします。
記事URLをコピーしました