最近 Ollama + LangChain でローカルエージェントを動かしていて、ちょっと不快なことに気づきました——エージェントが内部で完全にナンセンスをやっているのに、最終回答だけは完全に正しいものを返せてしまうのです。
話しているのは、最初に間違ったツールを呼んでから「回復」するようなことです。必要のないツールを使ったり、収束するまでに数回ループしたり、あるいは危険なほど不適切なものを呼びそうになったり、そういう類のことです。そして最終出力だけをチェックしているなら、それらは…全部通ってしまいます。
これで、エージェントにとって出力はほとんど最も面白くない部分だということに気づきました。重要なシグナルがあるのはプロセスです。
たとえば、2人のエージェントがどちらもドキュメントを正しく要約するとします。1つ目は読み取り → そのまま2ステップで要約、というきれいな流れです。もう1つは読み取り → 検索 → 再度読み取り → 要約 → 再試行、です。同じ結果ですが、明らかに前者の方が効率的で、リスクもずっと低い。トレースを見ていなければ、両者を同等だと扱ってしまうでしょう。
そこで、ローカル環境で実際に評価すべきことは何かを考え始めました。たとえば、エージェントが正しいツールを選んだかどうか、触れるべきでないツールを避けられているかどうか、何ステップかかったか、ループに詰まっていないかどうか、そして推論がそもそも筋が通っているかどうか。要するに、「どこにたどり着いたか」だけでなく、「そこにどうやって到達したか」を評価するべきです。
この点について、ローカル側で具体的に語っている人はあまり見かけません。これまで出会ったほとんどの評価(eval)設定は、まだ最終回答に強く焦点を当てているか、あるいは、判定のために外部APIへデータを送っても問題ないと前提にしていることが多いです。
ここで皆さんはどう対応していますか? トレースを評価していますか、それとも出力だけですか? もし評価しているなら、ループ検出やツール効率といった項目に対して、どのような指標(メトリクス)を使っていますか?
私はこれにけっこう遭遇したので、思い切ってそれ用の小さなローカル評価(eval)環境を自作しました。
凝ったものではありませんが、以下ができます:
- ツールの使用をチェック(期待されるもの vs 禁止されるもの)
- ループ/余計なステップをペナルティする
- 完全にローカルで実行(判定者として Ollama を使用しています)
もし誰かが触ってみたいなら:
https://github.com/Kareem-Rashed/rubric-eval
トレースのより良い指標について、ぜひアイデアをもらえると嬉しいです
[link] [comments]