Similarweb、LangSmith を活用したエージェントレポート評価手法を公開
Similarweb は LangChain の LangSmith を用いて AI エージェントによるレポート生成の品質を評価する手法を開発し、その詳細をブログで発表した。
AI深層分析を開く2026年7月30日 00:42
AI深層分析
キーポイント
エージェント開発の課題認識
従来のソフトウェアとは異なり、同じ入力でも異なる経路やツール呼び出しを経て出力が変わるため、更新がシステム全体の改善か単なる失敗場所の移動かの判断が困難である。
LangSmith を活用した評価ワークフロー
Similarweb Data Studio の構築において、スコアだけでなくその背後にある推論や行動(トレース)まで一貫して検証可能なワークフローを LangSmith で実現した。
LLM-as-judge と決定論的チェックの併用
正解が一意に定まらないエージェント出力に対して、ルブリックプロンプトを用いた LLM による評価と、決定論的なチェックを組み合わせる戦略を示している。
評価の較正(キャリブレーション)の重要性
較正が外れた評価は評価なしよりも有害であり、その罠に陥って一週間を失った経験から、信頼性の高い評価体系構築の必要性を説いている。
評価の2つのアプローチ
ツール呼び出しの有無など機械的な検証には決定論的チェックを、意味や品質の評価にはLLM-as-a-judgeを用いる。
重要な引用
Every update is a bet on whether the system got better or if you just moved the failure somewhere else.
LangSmith gave us that workflow in one place, and kept every result inspectable, from a score all the way down to the trace behind it.
Why a miscalibrated evaluation is worse than none, and how to avoid the calibration trap that cost us a week.
Whenever the thing we care about is meaning or quality, deterministic rules fall short, so we hand the decision to a model.
編集コメントを表示
編集コメント
エージェントシステムの品質保証は、従来のテスト手法では対応しきれない不確実性を抱えており、この記事はその解決策として LangSmith を活用した具体的なアプローチを提示している。特に評価モデルの較正問題への言及は、現場で即座に適用可能な重要な洞察を含んでいる。
Source Article
元記事を日本語で読む
本文に関係しない購読案内、埋め込み通知、サイト内プロモーションは除いています。
著者:Liora Korni、SimilarWeb 上級 AI エンジニア
エージェントのプロンプトやモデル、ツールの更新をリリースした後、「最初の出力は気に入ったのに、なぜか不安が残る」と感じたことはありませんか?ある出力は完璧に見えても、別の出力では情報源の明記が抜け落ちたり、重要な注意書きが省略されたり、特定のデータソースへの依存が強まりすぎたりすることがあります。
これはエージェント構築者特有の課題です。従来のソフトウェアでは、変更がテストに合格するかしないかで判断でき、動作は再現可能です。しかし、アジェンティック・システム(自律型システム)は異なります。同じ入力でも、実行パスが変わり、呼び出すツールが異なり、結果として異なるが依然として有効な回答を生成することがあります。つまり、更新ごとに「システムが本当に改善されたのか」、それとも「失敗の場所を単に移動しただけなのか」を賭けることになります。
Similarweb Data Studio を構築する際にも、私たちはこの課題に直面しました。Similarweb はデジタル世界を計測し、ウェブサイトやアプリへのトラフィック量、その発生源、競合他社のパフォーマンス、そしてユーザーの注目がどこへ移りつつあるかを推定しています。Data Studio は、そのデータの上に構築されたアジェンティック・レイヤーです。
ダッシュボードやフィルターを手動で操作する代わりに、ユーザーは自然言語で質問を投げかけます。するとエージェントが作業計画を立て、適切なデータツールを呼び出し、数値を取得して回答を作成します。これは「Spotify.com のトラフィックのうち直接アクセスの割合はいくらか」といった簡単な照会から、競合比較、多段階にわたる詳細な調査レポート作成まで対応可能です。各リクエストに対して、固定されたスクリプトに従うのではなく、最適なアプローチを自ら判断して実行します。
エージェントシステムは単にテキストを生成するだけではありません。ツールを選択し、データを取得し、証拠を統合します。そのため、回帰バグはどのステップにも潜んでいる可能性があります。そこで評価機能を製品アーキテクチャの一部として組み込む必要がありました。変更されたケースや品質指標の推移、評価者のコメント、そしてトレース内で何が起こったかを可視化できるワークフローが求められたのです。
LangSmith は、すべての結果をスコーアからその背後にあるトレースまで検証可能な形で一元管理するワークフローを提供してくれました。
この記事で得られること。 エージェントや RAG パイプライン、あるいは出力が開かれた形・主観的・長文になる LLM 機能を構築している方。変更をリリースする前に一瞬ためらった経験があるなら、この記事はあなた向けです。読み終える頃には、以下が理解できるようになります。
- 正解が一つに定まらない状況で、どのようにエージェントを評価するか;
- ルールベースのプロンプトを用いた「LLM-as-judge」の仕組みと、それが決定論的なチェックとどう連携するか;
- LangSmith でデータセット、フィードバック、トレース、A/B 比較をどのように連携させれば、スコアが常に背後にある推論や振る舞いに遡れるか;
- なぜ較正されていない評価は「評価なし」よりも危険なのか、そして一週間もロスした較正の罠をどう回避すべきか。
出力の評価には二つの方法がある:決定論的チェックと LLM-as-judge スコアリング
エージェントの出力に対して、私たちは二種類のチェックを実行しています。
評価には主に 2 つのタイプがあります。まず 1 つ目は「決定論的」なチェックです。エージェントは必要なツールを呼び出したか、使うべきでないツールに触れていないか、そして有効な構造化データを返したかを検証します。これらはモデルを使わない、機械的な合格・不合格の判定です。
2 つ目が「LLM-as-a-judge(言語モデルによる評価)」です。意味や品質といった抽象的な要素が問われる場合、決定論的なルールでは対応しきれないため、判断をモデルに委ねます。評価用のプロンプトでは、モデルに対して以下の 3 つの情報を提供します。
- ユーザーからの質問
- エージェントの出力結果
- 評価基準(スコアリングの尺度)
これに基づき、モデルはスコアと、その理由を説明するコメントを返します。評価基準には「正解例との比較(同じことを言えているか)」や、「明確な評価アンカーを持つルブリック(各品質基準をどの程度満たしているか)」などが含まれます。
私たちはこの評価モデルをスケーラブルなレビューヤーとして扱います。スコア、その根拠、そして関連するトレースへのリンクといった検証可能な信号を出力することで、エージェントが実際に何を行ったかを可視化できるようにしています。
これら 2 つのチェックは同じ評価ループ内で実行され、LangSmith 上で並列フィードバックとして表示されます。しかし、私たちが最も悩んだのは「何を基準に評価すべきか」という点でした。
簡単なケース:通常のチャット
エージェントシステムにおける評価で最もシンプルなケースは、通常のチャットです。

キャプション: 通常のチャットは、焦点を絞った質問に対して、比較的予測可能な回答形状が期待されるケースです。
ベンチマークの各例には、固定されたプロンプト、正解(ゴールデンアンサー)、期待されるツール呼び出し、そしてエージェントの出力が含まれています。これらを用いて、出力が正解と一致しているかを確認し、必要なツールが呼ばれたかを検証し、時間経過に伴うスコアの推移を追跡できます。
experiment_results = await aevaluate(
target,
data=dataset_id,
evaluators=evaluators,
experiment_prefix=experiment_prefix,
num_repetitions=num_repetitions,
max_concurrency=max_concurrency,
)
ここで確認できるチェックには2つの種類があります。ツールの呼び出しは決定論的な検証が可能です。一方、出力を正解と比較する作業は、正解の表現が一通りではないため、文字列の完全一致だけでは不十分です。そこで活躍するのが「LLM-as-judge(大規模言語モデルによる判定)」であり、具体的には正解に紐付いたセマンティック評価器です。この評価器が問うのは、「出力の意味が正解と同じか」という点だけです。
各評価器は、フィードバックのキー、スコア、コメントという1つの結果を返します。先ほどの「チャネル別トラフィック」に関する質問に対する例では、セマンティック判定器は以下のような結果を返しました。
{
"key": "semantic",
"score": 0.7,
"comment": "主要なチャネル(ダイレクト検索とオーガニック検索)については参照と一致し、ダイレクトのシェアも正確ですが、正解で指摘されているリファラルトラフィックが抜けているため、近いものの不完全です。"
}
LangSmith はこうしたフィードバックをそのまま実験結果のカラムに変換します。スプレッドシートにスコアを集計するのではなく、異なる実行結果同士を比較したり、特定のスコアをクリックして背後にあるトレースを検査したりすることが可能になります。
通常のチャット利用であれば、この程度の評価で十分です。明確な正解が存在するため、決定論的なチェックとそれを基準とした意味判定器が、重要な項目のほとんどをカバーできるからです。
難しいケース:ディープ・リサーチ(Deep Research)
ディープ・リサーチの出力は、出典や解釈、推奨事項、注意喚起、そして物語性のある構成を含む長文レポートです。同じ質問に対しても、複数の質の高いレポートが存在し得ます。

キャプション: ディープ・リサーチ。多くの良質なレポートが考えられるオープンエンドな質問です。
ある強力なレポートはトラフィック獲得に焦点を当てているかもしれません。別のレポートは競合ポジショニングや、収益化リスクに重点を置いていることもあります。主張が根拠に基づき、推論が妥当であれば、いずれも有効な回答となり得ます。
このようなケースでは「正解」となる単一の基準は機能しません。比較対象となる参照レポートが存在せず、それに一致させるだけでは類似性が評価されるだけで、質の高さが測れないからです。そこで私たちは、参照レポートの代わりに評価基準(ルブリック)を判定器に与えます。各品質次元ごとに明確な採点基準を設定し、総合的な verdict ではなく、各次元ごとのスコアを返すようにします。
例えば、「ソース統合」の評価項目では、以下のように問われます。
source_integration:
レポートは、プラットフォームの生データ以外の外部ソースを効果的に統合しているか?
ソース統合における「多様性」と「質」の両方を評価すること。
スコア 0.0: 外部コンテキストを一切含まず、単一のデータ API にのみ依存している。
スコア 0.3: 「業界レポートによると」のように、外部ソースに言及はあるが曖昧である。
スコア 0.8: 複数の具体的な出典(日付、数値、文脈付き)を引用している。
スコア 1.0: 広範な出典を引用し、それらを物語の中に自然に組み込んでいる。
返却形式:
- source_integration: 0.0 から 1.0 の評価点
- source_integration_gap: 不足箇所の簡潔な要約
- source_integration_detail: 評価点を説明する一文
各基準にはスコアと短い解説が付随するため、低い数値には必ず検証可能な理由が添えられます。出典が貧弱なレポートは、まさにその通り評価されます。
{
"source_integration": 0.3,
"source_integration_gap": "外部コンテキストに言及はあるものの、一切の根拠がない",
"source_integration_detail": "Similarweb のトラフィックデータにほぼ依存しており、「業界レポート」にも二度触れているが、出典名や日付、数値は一つもない。外部情報は飾りであり、証拠ではない。"
}
品質評価基準に加えて、忠実性チェックも実施します。これは「各主張は取得されたデータから実際に導き出されているか、それともエージェントが出典の許容範囲を超えて過大評価していないか」を検証するものです。ここで重要なのは、自信に満ちたが根拠のない記述が露呈することです。特に出力が長く説得力を持つ場合、このチェックは極めて重要です。
評価基準と忠実性チェックは、レポート自体の尺度に基づいてスコアリングを行います。しかし、新しいバージョンが実際に改善されているかを判断するには、単独でのスコアリングだけでなく、ベースラインとの A/B 比較も実施する必要があります。ここでいうベースラインとは、保存され承認された過去のランニング結果であり、絶対的な正解(グランドトゥルース)ではなく、比較の基準点として扱います。ジャッジは新しいレポートとベースラインを並べて見比べ、「どちらが優れているか」を選択する形で評価を行います。
LangSmith による評価スコアのトレースおよびベースライン比較との連携
評価プロンプトを作成することはワークフローの一部に過ぎません。より困難なのは、このループを繰り返し実行し、変更が実質的なものかどうかを判断することです。
LangSmith がこれを可能にしたのは、すべてがサイロ化されていなかったからです。aevaluate は固定されたデータセットに対して反復と並列処理を行いながらループを実行しました。各評価スコアはカラムとして記録され、それぞれのコメントも付与され、すべてのランニング結果はトレースおよび比較用のベースラインに直接リンクされます。決定的な違いは、数値、評価者の推論、そして背後にあるエージェントの振る舞いという 3 つの要素が結びついている点にあります。
単に「平均スコアが変化したか?」と問うのではなく、以下のような問いを立てることが可能になりました。
- どのケースで変化があったのか?
- どの評価基準が影響を受けたのか?
- 評価者は何を指摘したのか?
- トレース内では何が起こったのか?
これが、単なるスコアボードとしての評価と、エージェントシステムを構築するためのエンジニアリングワークフローとしての評価の違いです。
不正確な評価基準が、良い更新を後退に見せかけるリスク
Deep Research の評価における最初のバージョンは、意図した通りスピードアップをもたらすどころか、むしろ開発の足かせとなりました。
プロンプトを少し変更してベンチマークを再実行したところ、総合スコアが低下しました。これは回帰と判断し、元に戻して微調整し、再度実行する作業を繰り返しました。毎回レポートは問題なさそうに見えたのに、数値だけが反発し続け、私たちは自分の読みよりも数値を信頼してしまいました。
評価担当者たちが各項目ごとのコメントを開くまで、私たちは自分たちの評価システムと一週間近くも格闘していました。ようやく開いてみると、答えは少し恥ずかしいものでした。新しいレポートはより多くのソースを引用していたため「ソースの幅」の評価は上がりましたが、そのソースが曖昧だったために「出典の明記度」の評価が下がっていたのです。二つの評価項目が互いに拮抗しており、集約されたスコアはその対立を隠してしまっていました。実際の変更自体は問題ありませんでした。私たちは誤った物差しと一週間も争っていたことになります。
この一件で浮き彫りになったのは、評価基準同士の矛盾という問題です。製品側の視点からは、ソース数を増やすこと自体が目的ではないことが学びとなりました。私たちが求めたのは、特定の主張に紐付いた、名指しされた関連するソースなのです。
この誤った物差しはコメントからも読み取れます。評価項目を見直す前、プラットフォーム外への言及を多く含んだレポートでも、単に外部参照が多いだけで高スコアを獲得できていました:
{
"source_integration": 0.7,
"source_integration_detail": "広範な外部コンテキストを持つが、9 つの参照のうち大半は未明記("業界レポート"、"アナリストは予想している"など)のため、出典の明記度は薄い。"
}
評価スコアは網羅性を重視する傾向があり、コメント欄ではすでに帰属情報の薄さが指摘されていました。しかし、アンカーを「数値の多さ」ではなく「名前付きで検証可能な情報源」を優先するように書き直したところ、そのレポートの評価は 0.3 に落ち着き、ついに推論が示し続けていた内容と一致しました。
もう一つの課題は、インセンティブ設計の不備です。簡潔さが完全性よりも明確に評価されるよう設定されてしまうと、ユーザーが戦略的調査を求め、注意すべき点や手法、より広い文脈が必要となる場合でも、レポートは短く終わってしまいます。
どちらの場合も、変動するスコアそのものが有用なわけではありません。各スコアの背後にあるコメントやトレースこそが、どの評価基準が誤調整されていたのか、そしてなぜそうなのかを可視化してくれるのです。集計されたスコアから推測するのではなく、評価ルールのデバッグが可能になります。
誤調整された評価は、評価がないことよりも危険です。なぜなら、それは偽りの自信を与えてしまうからです。評価結果を信頼する前に、その評価者が実際に重視すべき行動を正しく測定できているのかを確認する必要があります。
機能したワークフロー
基準が適切に調整された後、私たちが採用したループは以下の通りです:
- 仮説を立てる
- シグナルを得るために小規模な評価を実行する
- フィードバックコメントとトレースを検証する
- 反復回数を含めた本格的なベンチマークを実行する
- ベースラインまたは A/B テストの結果と比較する
- マージ、改善、あるいは再調整のいずれかを選択する
最終的な結論:正解、評価基準、トレース、ベースラインはそれぞれ異なる役割を果たす
明確な正解が存在する場面では「正解」で十分ですが、自由記述形式のエージェント出力に対してはその限りではありません。そのようなケースでは、評価基準(ルブリック)を用いたプロンプトや忠実性のチェック、A/B 比較による判断が不可欠です。
評価と可観測性は一体となって機能すべきものです。スコアは「どこに注目すべきか」を指し示し、トレースは「何が起こったか」を記録します。また、フィードバックは「なぜそのように評価されたのか」という理由を説明する役割を果たします。
この考え方の転換が、私たちがエージェントシステムを構築する方法を変えました。もはや評価はリリース前のチェックリスト項目として扱うのではなく、製品決定の指針として活用しています。具体的には、「どの振る舞いを最適化する価値があるか」「実際の回帰現象はどこか」「プロンプトの較正にどこでズレが生じているか」「エージェントがツール利用や情報の統合においてどこを改善すべきか」といった問いに対する答えを出すために評価を利用しているのです。
評価は人間の判断を排除するものではありません。むしろ、判断を検証可能かつ再現性のあるものにし、エージェントの実際の振る舞いと結びつけることで、単に「見栄えが良い」出力一つではなく、エビデンスに基づいたアップデートを実現します。
原文を表示
*Author: Liora Korni, Senior AI engineer at SimilarWeb*
How many times have you shipped an agent prompt, model, or tool update, liked the first output you checked, and still felt uneasy? One output can look better while another loses source attribution, drops an important caveat, or starts relying too heavily on one data source.
This is an agent builder's problem. In traditional software, a change passes its tests or it does not, and the behavior is repeatable. An agentic system is different: the same input can take a different path, call different tools, and produce a different but still valid answer. Every update is a bet on whether the system got better or if you just moved the failure somewhere else.
That was the problem we faced while building Similarweb Data Studio. Similarweb measures the digital world, estimating how much traffic websites and apps receive, where that traffic comes from, how competitors perform, and where audience attention is shifting. Data Studio is the agentic layer on top of that data. Instead of navigating dashboards and filters, a user asks a question in plain language, and the agent plans the work, calls the right data tools, retrieves the numbers, and writes the answer back. It might handle a quick lookup (like "how much of spotify.com's traffic is direct?"), a competitor comparison, or a full multi-step research report. For each request, it decides how to get there instead of following a fixed script.
An agentic system does more than produce text. It chooses tools, retrieves data, and synthesizes evidence, so a regression can hide in any of those steps. That is why evaluation had to become part of the product architecture. We needed a workflow that could show which cases changed, which quality dimensions moved, what the evaluator said, and what happened in the trace.
LangSmith gave us that workflow in one place, and kept every result inspectable, from a score all the way down to the trace behind it.
What you'll get from this post. If you build agents, RAG pipelines, or any LLM feature whose output is open-ended, subjective, or long-form, and you have ever hesitated before shipping a change, this is written for you. By the end you will know:
- how to evaluate an agent when there is no single correct answer to compare against;
- how LLM-as-judge with rubric prompts works, and where it fits next to deterministic checks;
- how to wire datasets, feedback, traces, and A/B comparisons together in LangSmith so a score always leads back to the reasoning and behavior behind it;
- why a miscalibrated evaluation is worse than none, and how to avoid the calibration trap that cost us a week.
Two Ways to Score an Output: Determinist Checks and LLM-as-a-Judge Scoring
We run two kinds of checks on agent outputs.
The first kind is deterministic. Did the agent call the tools it was required to? Did it avoid tools it should not have touched? Did it return valid structured output? These are mechanical pass/fail comparisons, with no model involved.
The second kind is an LLM-as-a-judge. Whenever the thing we care about is meaning or quality, deterministic rules fall short, so we hand the decision to a model. The judge prompt gives that model three things: 1.) the user question, 2.) the agent's output, and 3.) a standard to score against. It then returns a score and a comment explaining that score. The standard can be a golden answer ("does this say the same thing?") or a rubric with explicit scoring anchors ("how well does this meet each quality bar?").
We treat the judge as a scalable reviewer. It produces inspectable signals—a score, the reasoning behind it, and a link to the trace—so we can see what the agent actually did.
Both kinds of checks run in the same evaluation loop and land side by side as feedback in LangSmith. The harder question for us was, *what should the judge score against? *
The Easy Case: Regular Chat
The simplest case to evaluate in an agentic system is regular chat.

Caption: Regular chat: a focused question with a more expected answer shape.
Each benchmark example has a fixed prompt, a golden answer, expected tool checks, and an agent output. We can compare the output to the golden answer, verify the agent called the required tools, and track scores over time.
experiment_results = await aevaluate(
target,
data=dataset_id,
evaluators=evaluators,
experiment_prefix=experiment_prefix,
num_repetitions=num_repetitions,
max_concurrency=max_concurrency,
)
Both kinds of checks show up here. The tool checks are deterministic. Comparing the output to the golden answer, though, is a job for an LLM-as-judge, because a correct answer can be phrased many ways and exact text matching is too brittle. That judge is the semantic evaluator, anchored to the golden answer. Its only question is whether the output means the same thing.
Each evaluator returns one piece of feedback, a key, a score, and a comment. For the traffic-by-channel question above, the semantic judge returns something like this:
{
"key": "semantic",
"score": 0.7,
"comment": "Matches the reference on the top channels (direct and organic search) and gets the direct share right, but omits the referral traffic the golden answer calls out, so it is close but incomplete."
}
LangSmith turns that feedback into experiment columns. Instead of collecting scores in a spreadsheet, we can compare runs, click into a score, and inspect the trace behind it.
For regular chat, this is enough. There is an expected answer, so the deterministic checks and a semantic judge anchored to it cover most of what matters.
The Hard Case: Deep Research
Deep Research outputs are long-form reports with sources, interpretation, recommendations, caveats, and narrative structure. There may be many good reports for the same question.

Caption: Deep Research: an open-ended question where many good reports are possible.
One strong report might focus on traffic acquisition. Another might focus on competitive positioning. Another might focus on monetization risk. All can be valid if the claims are grounded and the reasoning is sound.
A golden answer doesn’t work well for this case. There is no single reference to compare against, and matching a reference report would only reward similarity, not quality. So instead of a reference we give the judge a rubric: each quality dimension gets its own rubric with explicit scoring anchors, so the judge returns a score per dimension rather than one overall verdict. For example, the source_integration criterion asks whether the report uses external sources beyond raw platform data:
source_integration:
Does the report effectively integrate external sources beyond raw platform data?
Evaluate both diversity AND quality of source integration.
Score 0.0: Relies purely on a single data API with no external context.
Score 0.3: Mentions external sources vaguely, e.g. "according to industry reports".
Score 0.8: Cites multiple named sources with dates, figures, and context.
Score 1.0: Uses extensive, attributed sources that are well-integrated into the narrative.
Return:
- source_integration: score from 0.0 to 1.0
- source_integration_gap: short summary of the gap
- source_integration_detail: one sentence explaining the score
Each criterion returns a score plus a short explanation, so a low number always comes with a reason we can inspect. A thinly-sourced report earns exactly that:
{
"source_integration": 0.3,
"source_integration_gap": "External context gestured at, never attributed",
"source_integration_detail": "Leans almost entirely on Similarweb traffic data and twice waves at 'industry reports' without naming a single source, date, or figure. The outside context is decorative, not evidential."
}
Alongside the quality rubrics, we run faithfulness checks to verify, *does each claim actually follow from the retrieved data, or did the agent overstate what the sources support?* This is where confident but ungrounded statements show up, which matters most when the output is long and persuasive.
Rubrics and faithfulness checks score a report on its own terms. To decide whether a new version is actually better, we also run A/B comparisons against a baseline: a saved, accepted previous run we treat as a reference point, not as ground truth. The judge sees the new report beside the baseline and says which is stronger, instead of scoring in isolation.
LangSmith Connected Evaluator Scores to Traces and Baseline Comparisons
Writing an evaluator prompt is only part of the workflow. The harder part is running the loop repeatedly and deciding whether a change is real.
LangSmith made that possible because nothing was siloed. aevaluate ran the loop over a fixed dataset, with repetitions and concurrency; every evaluator score landed as a column, every score carried its comment, and every run linked straight to the trace and to a baseline for comparison. The differentiator was the connection between the number, the evaluator reasoning, and the agent behavior behind it.
Instead of asking only, "Did the average score move?", we could ask:
Which cases moved, which criteria moved, what did the evaluator say, and what happened in the trace?
That is the difference between evaluation as a scoreboard and evaluation as an engineering workflow for building agentic systems.
Miscalibrated Rubrics Can Make Good Updates Look Like Regressions
The first version of the Deep Research evaluation slowed us down instead of speeding us up as intended.
We made a small prompt change, re-ran the benchmark, and the overall score dropped. So we treated it as a regression: revert, tweak, re-run. Then again. The reports looked good to us every time, but the number kept disagreeing, and we trusted the number over our own reading.
We lost the better part of a week fighting our own evaluation before anyone opened the per-criterion comments. When we finally did, the answer was almost embarrassing…the new reports cited more sources, which lifted source breadth, but those sources were vague, which sank attribution. Two criteria were pulling against each other, and the aggregate score hid the conflict. The change had been fine the whole time. We had spent a week arguing with a miscalibrated ruler.
One issue was conflicting criteria, the exact one that cost us the week. From a product perspective, we learned that we did not want more sources for their own sake. We wanted named, relevant sources tied to specific claims.
You could watch the miscalibration in the comments. Before we fixed the rubric, a report stuffed with vague references still scored well just for reaching outside the platform:
{
"source_integration": 0.7,
"source_integration_detail": "Broad outside context, nine references, but most are unnamed ('industry reports', 'analysts expect'), so the attribution is thin."
}
The score rewarded breadth; the comment already knew the attribution was thin. Once we rewrote the anchor to prize named, verifiable sources over raw count, that same report settled at 0.3, and the number finally matched what the reasoning had been saying all along.
Another issue was wrong incentives. If conciseness was rewarded more clearly than completeness, reports became shorter even when the user asked for strategic research that needed caveats, methodology, and broader context.
In both cases, the moving score was not the useful part. The comments and traces behind each score were what let us see which criterion was miscalibrated and why. We could debug the rubric instead of guessing from the aggregate score.
A miscalibrated evaluation is worse than no evaluation, because it hands you false confidence. Before trusting an evaluation result, we had to ask whether the evaluator was measuring the behavior we actually cared about.
The Workflow That Worked
Once the criteria were calibrated, the loop we settled into was:
- Start with a hypothesis.
- Run a small evaluation for a signal.
- Inspect feedback comments and traces.
- Run the full benchmark with repetitions.
- Compare against a baseline or A/B output.
- Decide whether to merge, iterate, or recalibrate.
Final Takeaways: Golden Answers, Rubrics, Traces, and Baselines Serve Different Parts of Agent Evaluation
Golden answers are enough when there is an expected answer. Long-form agent outputs are not, so they need rubric prompts, faithfulness checks, and A/B judgment instead.
Evaluation and observability should live together. The score tells you where to look. The trace tells you what happened. The feedback tells you why the evaluator scored it that way.
That changed how we build agentic systems. We no longer treat evaluation as a release checklist item. We use it to shape product decisions such as *which behavior is worth optimizing, which regressions are real, which prompts are miscalibrated, and where does the agent need better tool use or better synthesis.*
Evaluation does not remove human judgment. It makes judgment inspectable, repeatable, and connected to the agent’s actual behavior, so every update is based on evidence instead of one good-looking output.
関連記事
今日のまとめ
AIデイリーブリーフで今日の重要ニュースをまとめ読み