AutoevalsでLLM出力の評価基準を実装する

Zenn でも読む ↗

LLM出力の評価基準をAutoevalsで実装してみたので使い方をまとめます。

Autoevalsとは

Autoevalsは、LLMアプリケーションの出力品質を自動評価するOSSライブラリです。

sh
npm install autoevals

Autoevalsには例えば以下のような内蔵スコアラーが用意されています。

スコアラー

評価内容

Faithfulness

回答がコンテキストに忠実か

AnswerRelevancy

回答が質問に関連しているか

これらは汎用指標ですが、「回答のトーンが適切か」「実践可能な提案か」といったプロダクト固有の基準で評価したい場合があります。LLMClassifierFromTemplate を使うと、独自の評価基準をスコアラーとして定義できます。

LLMClassifierFromTemplate の基本

ts
import { LLMClassifierFromTemplate, makePartial } from "autoevals";

const MyScorer = makePartial(
  LLMClassifierFromTemplate({
    name: "MyScorer",
    promptTemplate: `評価プロンプト...
## 質問
{{input}}
## 回答
{{output}}`,
    choiceScores: {
      非常に良い: 1.0,
      良い: 0.75,
      普通: 0.5,
      悪い: 0.25,
      非常に悪い: 0.0,
    },
    model: "gpt-4o-mini",
    useCoT: true,
    temperature: 0,
  }),
  "MyScorer",
);

主要パラメータは以下です。

パラメータ

役割

promptTemplate

評価プロンプト。{{input}} {{output}} が展開される

choiceScores

選択肢とスコアの対応表

model

評価用モデル。gpt-4o-mini が実用的

useCoT

Chain of Thought有効化。評価精度が向上

temperature

評価の安定性のため 0 を推奨

makePartial でラップすると、呼び出し時に input と output だけで評価が実行されます。

temperature: 0 を設定すると、同じ入力に対して常に同じ評価結果が返ります。評価の再現性を確保するために推奨します。

実践例

Actionability(実践可能性)

回答の実践可能性を測るスコアラーです。

ts
export const Actionability = makePartial(
  LLMClassifierFromTemplate({
    name: "Actionability",
    promptTemplate: `あなたは実務経験豊富な専門家です。回答の実践可能性を評価してください。
## 評価基準
1. 具体的なアクションステップが含まれているか
2. 明日から実行できる内容か
3. 特別なリソースなしで始められるか
## 質問
{{input}}
## 回答
{{output}}`,
    choiceScores: {
      "非常に実践的: すぐに実行できる": 1.0,
      "実践的: 一部補足が必要": 0.75,
      "やや抽象的: 具体的アクションが不足": 0.5,
      "抽象的: 実践方法が不明確": 0.25,
      "実践困難: 実現が難しい": 0.0,
    },
    model: "gpt-4o-mini",
    useCoT: true,
    temperature: 0,
  }),
  "Actionability",
);

promptTemplate でペルソナと評価基準の番号付き列挙を行っています。

ToneAppropriateness(トーン適切性)

トーン&マナーの合致度を測るスコアラーです。Actionabilityと同じ構造で、promptTemplate に正例と負例の両方を明示しています。

ts
export const ToneAppropriateness = makePartial(
  LLMClassifierFromTemplate({
    name: "ToneAppropriateness",
    promptTemplate: `あなたはコンテンツ編集者です。
回答のトーンを評価してください。
## 望ましいトーン
- 問いを通じた探求
- 理論と実践の架橋
- 共創的な姿勢
## 避けるべきトーン
- 軍事的メタファー(攻略、制圧など)
- 過度に断定的・権威主義的な表現
## 質問
{{input}}
## 回答
{{output}}`,
    choiceScores: {
      "非常に適切: 探求的で共創的": 1.0,
      "適切: 一部調整の余地あり": 0.75,
      "普通: らしさは薄い": 0.5,
      "やや不適切: 違和感がある": 0.25,
      "不適切: トーンから外れている": 0.0,
    },
    model: "gpt-4o-mini",
    useCoT: true,
    temperature: 0,
  }),
  "ToneAppropriateness",
);

カスタム変数の追加

{{input}} {{output}} 以外にも独自のプレースホルダを使えます。promptTemplate に変数を追加し、呼び出し時に渡します。

ts
promptTemplate: `...
## 求められる回答の深さ: {{specificity}}
## 質問
{{input}}
## 回答
{{output}}`,

呼び出し時にカスタム変数を渡します。

ts
const result = await Actionability({
  input: "心理的安全性を高めるには?",
  output: "週次の1on1で部下の話を聴く時間を設けましょう。",
  specificity: "L2",
});

まとめ

LLMClassifierFromTemplate を使うことで、プロダクト固有の品質基準をLLM評価として実装できました。設計のポイントは choiceScores の境界を明確にすること、promptTemplate でペルソナと評価基準を定義すること、useCoT: true で一貫性を確保することの3点です。

参考

https://github.com/braintrustdata/autoevals

https://www.braintrust.dev/docs/reference/autoevals#custom-evaluation-prompts