コンテンツにスキップ
lait
Esc
↑↓移動↵開く⌘Jプレビュー
このページの内容

出力品質の評価(lait eval)

ワークフロー/モデル+プロンプトを実際に実行し、contains/jq/llm_judge のアサーションで出力品質を評価する方法。

lait eval は、ワークフローまたはモデル+プロンプトテンプレートを実際のモデルに対して実行し、その出力がテストケースの期待(文字列包含・jq式・LLMによる採点)を満たすかどうかを評価します。

eval 定義と、それが参照する workflow・agent・schema・設定ファイルの読み込み中も Ctrl-C で 実行を中断できます。実行時に読み込む各ファイルは最大16 MiBです。

決定的テスト(lait test)が「制御フローが壊れていないか」を replay で確認する(LLM API へのリクエストを再送しない)のに対して、lait eval は「今のモデル/プロンプトの出力品質が保たれているか」を確認するための仕組みで、常に実際のモデルへ接続します。プロンプトやワークフローの変更が品質を下げていないかを確認する回帰テストとして、モデル更新が頻繁なローカル LLM 運用で特に有用です。

使い方

$ lait eval eval.yml
case 1: 3/3 (100%) PASS
3 of 3 case(s) fully passed

eval.yml のスキーマ

target:
  workflow: ./summarize.yml   # または model + prompt テンプレート
cases:
  - input: "..."
    assert:
      - type: contains        # 文字列包含
        value: "結論"
      - type: jq               # jq 式が真偽値として真であること
        expr: '.title | length > 0'
      - type: llm_judge        # LLM による採点
        criteria: "要約が原文の主旨を保っているか"
        model: gemma-4-12b
        threshold: 0.7

target: は次のいずれか一方の形式を取ります。

形式 説明
workflow: <path> このeval.ymlファイルからの相対パスにあるワークフローファイルを、各ケースのinputを初期入力(lait run の PROMPT と同じく、ワークフローの input_schema: に従って解釈)として実行する。ワークフローが inputs: を宣言している場合は、target.inputs: に値を書ける(例: target: {workflow: ./summarize.yml, inputs: {lang: ja}})。
model: <name>/prompt: <template> prompt: は{{ input }}を参照できるテンプレートで、ケースごとにレンダリングして単発のモデル呼び出しを行う。

その他のフィールドは次のとおりです。

フィールド 説明
cases[].input そのケースの入力文字列。
cases[].assert そのケースの出力に対するアサーションのリスト。lait testのassert:と語彙を共有しており、equals(完全一致)も使えます。

assert: の type: に指定できる値は次のとおりです。

type 説明
contains 出力にvalueが部分文字列として含まれること。
jq exprを出力に対して評価し、真(jqの真偽値ルール — false/null以外はすべて真)であること。出力がJSONとしてパース可能ならそのJSON値、そうでなければ生文字列をJSON文字列値として評価対象にする。
llm_judge criteriaをもとにLLMに0.0〜1.0でスコアを付けさせ、threshold(省略時0.7)以上ならpass。modelを省略した場合はevalのtargetが使っているモデル(target.model、またはワークフローのdefault.model)にフォールバックする。判定はStructured Outputsで{"score": number, "reasoning": string}を1回のモデル呼び出しで取得して行う。
tool_called/usage/step_output 実行トレースを参照する trajectory アサーション(決定的テストを参照)。

--repeat・複数ケースは並行実行されますが、各 (ケース, リピート) は専用の実行コンテキストを持つため、他のケース/リピートのイベントやトークン使用量が混ざることはありません。

--repeat N

モデルの非決定性を考慮し、各ケースをN回実行してケースごとの成功率を表示します(省略時は1回)。

$ lait eval --repeat 5 eval.yml
case 1: 4/5 (80%) FAIL
  run 2: assertion 1: jq expression `contains("結論")` was false for output "..."
0 of 1 case(s) fully passed

いずれかのケースの成功率が100%未満の場合、lait eval全体の終了コードは非ゼロになります。

--format json

$ lait eval --format json eval.yml

ケースごとにcase/input/passed/total/success_rate/runs(各実行のpassed/failures)を持つ配列を出力します。CI での自動判定に利用できます。

このページは役に立ちましたか?