Engineer Post||5 min

Harness Engineering Meets TDD: Designing Evaluation Loops for AI Agents

Harness Engineering Meets TDD: Designing Evaluation Loops for AI Agents

こんにちは!株式会社雲海設計の技術部です。

「LLMエージェントが先週まで動いていた業務フローで、今週急に違う回答を返し始めた」「プロンプトを少し直したら、別のテストケースが壊れた」「評価が人手のスポットチェックで属人化している」——2025年にAIエージェント案件が一気に増えた反動で、2026年に入ってからハーネスエンジニアリング tdd の接続点に関する相談が、毎週のように飛んできます。本記事では、従来のソフトウェア開発で培われたTDD(テスト駆動開発)の思想を、AIエージェントのハーネスエンジニアリング tdd としてどう移植するか、評価ループの設計と運用までを実装目線で整理します。

  • TL;DR

  • ハーネスエンジニアリングは「LLMを取り囲む評価・実行・観測の足場」であり、TDDはそれを駆動する開発スタイル

  • AIエージェントのTDDは「決定論的アサーション」と「LLM-as-Judge」の二層で組む。片方では必ず漏れる

  • Red-Green-Refactor は 「失敗ケース追加 → プロンプト/ツール修正 → 既存ケース回帰確認」に翻訳される

  • 評価セットは最低30件、3カテゴリ(成功・境界・敵対的)から開始し、本番ログから毎週追加

  • CI連携でスコア閾値を下回ったらマージブロック。これがないとプロンプト変更が事故の温床になる

TDD開発サイクルがLLMエージェント評価フレームワークを包含する仕組み
TDD開発サイクルがLLMエージェント評価フレームワークを包含する仕組み

なぜ今ハーネスエンジニアリングにTDDを持ち込むのか?

結論から言うと、AIエージェントは「コードを変えていないのに振る舞いが変わる」唯一のソフトウェアだからです。プロンプトの語順、モデルのマイナーアップデート、RAGの取得チャンクの順序——どれも本番挙動を静かに壊します。従来の単体テストだけでは検知できず、Forbesが2025年末に紹介した調査でも、エージェント案件の本番事故の約6割が「テスト不足ではなくテスト設計のミスマッチ」が原因とされています。

ハーネスエンジニアリングとTDDの関係

用語を整理しておきます。両者は対立概念ではなく、足場(ハーネス)と駆動スタイル(TDD)の関係です。

項目ハーネスエンジニアリングTDD
目的LLMを業務品質で運用する足場づくりテスト先行で設計品質を担保
主な成果物評価セット・実行基盤・観測ログ失敗するテスト → 通すコード
時間軸運用しながら継続改善実装の各サイクル
対象システム全体個別の振る舞い

ハーネスを土台として、その上でTDDのサイクルを回す——これが2026年現在、業務AIエージェントで最も再現性の高い設計です。前提知識はハーネスエンジニアリングとは?LLM時代に必須の新常識ハーネスエンジニアリング ベストプラクティスを併読すると掴みやすくなります。


AIエージェントにおけるTDDサイクルはどう変形するのか?

結論として、Red-Green-Refactor のサイクルは保ったまま、「アサーションの定義方法」と「Refactorの対象」が変わります。コードだけでなく、プロンプト・ツール定義・RAGインデックスがリファクタ対象に入ってきます。

従来のTDDとの差分

  1. Red(失敗するテストを書く): 入出力ペアではなく、振る舞いの期待値を書く。例「医療系の質問には必ず免責文をつける」

  2. Green(通す): コードではなく、システムプロンプト・few-shot・ツール定義を調整して通す

  3. Refactor: プロンプトの冗長部分を削る、ツールを統合する、RAGのチャンク戦略を見直す。既存30〜100件の評価セットが緑のままであることをCIで保証

テストが通らないコードは出荷しない——という古い原則は、AI時代にも生きている。違うのは「テストが通る」の意味が、決定論的成功から「期待された振る舞い分布の維持」に変わったことだ。

評価セットの3カテゴリ設計

  • 成功ケース(Happy Path): 業務要件を素直に満たす入力。最低15件。CI閾値の主軸

  • 境界ケース(Edge): 入力が長文・空・多言語混在・あいまい指示。最低10件

  • 敵対的ケース(Adversarial): プロンプトインジェクション、矛盾要件、業務範囲外。最低5件

敵対的ケースの設計はAIセキュリティ対策実装ガイド2026と接続して考えると抜けが減ります。


評価ループの実装はどう組むのか?

評価ループの中核は「決定論的アサーション」と「LLM-as-Judge」の併用です。前者だけでは表現の揺れに弱く、後者だけではコストと再現性に問題が出ます。

決定論的アサーションの例

def test_refund_agent_keeps_disclaimer():
    result = agent.run("返金ポリシーを教えて")
    # 1. 構造アサーション
    assert "免責" in result.text
    assert result.tool_calls[0].name == "search_policy"
    # 2. 出力フォーマット
    assert result.json_schema_valid
    # 3. 禁止語チェック
    assert not any(w in result.text for w in BANNED_WORDS)

LLM-as-Judge の例

JUDGE_PROMPT = """
以下の回答を、次の観点で 1-5 で採点せよ。
- 事実整合性(提供コンテキストと矛盾しないか)
- 業務トーン(敬体か)
- 完全性(必要項目が揃っているか)
JSON で {"facts":n,"tone":n,"completeness":n,"reason":"..."} を返せ。
"""

def judge(answer, context):
    return llm.json(JUDGE_PROMPT, answer=answer, context=context)

評価パイプラインの全体像

graph LR
  A[評価セット YAML] --> B[エージェント実行]
  B --> C[決定論アサーション]
  B --> D[LLM-as-Judge]
  C --> E[スコア集計]
  D --> E
  E --> F{閾値判定}
  F -->|Pass| G[CI 緑]
  F -->|Fail| H[マージブロック]
  B --> I[本番ログ]
  I --> A

本番ログを評価セットに還流させる仕組みが、ハーネスエンジニアリングTDDの最大の差別化要素です。プロンプト設計の細部はハルシネーションを防ぐプロンプト設計10選も合わせて参照してください。


CI/CD と回帰検知はどう設計するか?

結論、「閾値ゲート」「サンプリング再評価」「人間レビュー」の三層でCIに組み込みます。スコアが揺れる前提で、単発のFailで止めず、トレンドで判断する仕組みが鉄則です。

CIゲートの推奨ルール

レベル条件動作
Block成功カテゴリの平均スコアが基準値-10%以下マージ不可
Warn境界・敵対的の平均が前回比-5%以下レビュー必須
Info個別ケースの揺れログのみ

回帰の典型パターン

  • サイレント回帰: モデルアップデートで突然出力が変化。夜間定期評価で検知

  • プロンプトドリフト: few-shot を増やしすぎて元の意図がぼやける

  • ツール衝突: 新ツール追加で既存タスクのツール選択が変わる


雲海設計の現場事例:30件から始める評価ハーネス

当社で2026年初に支援した受託開発案件(社内文書RAG+業務エージェント)では、初期にスポット検証だけで運用していたところ、本番投入後3週間で回答品質に関するクレームが7件発生しました。そこで以下を導入したところ、翌月のクレームはゼロに収束しています。

  1. 初期評価セット30件をTDD的に「Redから」書き起こし

  2. 決定論アサーション+LLM-as-Judge をGitHub Actions に組み込み

  3. 本番ログから毎週5件を評価セットへ昇格させる運用

  4. プロンプト変更PRはスコア閾値ゲートを通過しないとマージ不可

規模感としては、初期構築に約2週間、運用フローの定着に1ヶ月。「テストを書いてから直す」文化を作るまでの摩擦が最大の壁でしたが、一度乗ると変更コストが目に見えて下がります。本番運用の全体像は2026年版AIエンジニアロードマップの評価・運用パートと地続きで考えてください。


導入のロードマップ

フェーズ別ステップ

  1. Week 1: 業務要件から成功ケース15件をYAML化、決定論アサーションのみで開始

  2. Week 2: LLM-as-Judge を追加、境界・敵対的ケースを各5件以上

  3. Week 3-4: CI連携・閾値ゲート・夜間定期評価を整備

  4. Month 2 以降: 本番ログ還流、評価セットを100件規模に拡張

「自社のエージェント開発でハーネスとTDDをどう接続するか具体に落とし込みたい」という方は、雲海設計のDXソリューションITコンサルティングでも個別の評価ハーネス設計を支援しています。設計レビューだけでもお問い合わせからご相談ください。


よくある質問

Q. 既存のユニットテストと評価ハーネスは別物として持つべきですか?

A. はい、分離を推奨します。決定論的なロジック(パーサ・APIラッパー等)は従来のpytest等で、エージェント振る舞いはハーネス側で扱うと、CIの実行時間とコスト管理が破綻しません。

Q. LLM-as-Judge のコストが気になります。

A. 全ケースに毎回かける必要はありません。決定論アサーションで一次フィルタを通し、合格分のみJudgeに回す二段構成がコスト最適です。さらにJudgeは安価なモデルでも十分機能するケースが多いです。

Q. 評価セットは何件まで増やすべきですか?

A. 業務クリティカル度次第ですが、目安は本番投入時で50〜100件、安定運用フェーズで200〜500件です。件数より3カテゴリのバランスと本番ログ還流のほうが品質に効きます。

Q. プロンプト変更だけのPRもCIに通すべきですか?

A. 必須です。むしろプロンプト変更こそ最も振る舞いが変わるため、コード変更より厳密にゲートを通すべきです。これを徹底するとプロンプトの属人化も解消されます。

Q. TDDの「Red先行」をAIエージェントで守るコツは?

A. 失敗ケースを書く前に「期待される振る舞いを自然言語で1文に圧縮」する習慣をつけることです。曖昧な期待値はテスト化できないため、要件定義の解像度自体が上がります。


ハーネスエンジニアリングとTDDの接続は、AIエージェントを「動くデモ」から「業務に耐えるシステム」に変える最短ルートです。雲海設計では、評価ハーネスの設計から運用フロー整備まで一貫して支援しています。気軽にご相談ください。