こんにちは、皆さん、
Difyでチャットボットを構築しているのですが、複数ターン会話でのみ発生し、シングルターンQ&Aでは発生しない品質問題に直面しています。
問題
シングルターンのテストは簡単です。質問をして、答えを確認するだけです。しかし、ユーザーが複数ターンの会話をするようになると、異なる種類の障害が現れます。
-
RAG検索ドリフト: 会話が長くなるにつれて、検索クエリが複数のトピックの混合になります。知識ベースは関連性の低いチャンクを返すようになり、ボットは間違ったドキュメントからの情報で自信満々に答えます。
-
指示の希薄化: 8〜10ターン以上になると、ボットはシステムプロンプトの制約から徐々に逸脱します。トーンが変化したり、拒否すべき範囲外の質問に答え始めたり、書式設定ルールに従わなくなったりします。
-
サイレントリグレッション: ワークフロー(システムプロンプトの変更、RAGパラメーターの調整、モデルの入れ替え)を更新した後、以前は機能していた会話パターンがログにエラーなしで壊れます。
これらは、「間違った答え」と示すものがログにないため、捕捉が困難です。LLM呼び出しは成功し、応答は流暢に見えますが、情報が不正確であったり、意図した動作から逸脱していたりします。
検討したこと
Difyは、いくつかの可観測性/評価ツールと統合されています。
| ツール | 提供内容 |
|---|---|
| LangSmith | データセット + 評価器、LLM-as-Judge、人間によるフィードバック |
| Langfuse | データセット、LLM-as-Judge、人間によるフィードバック、カスタムスコア |
| Opik | LLM-as-Judge、8つの会話固有のメトリクス、データセット評価 |
| Arize AX | LLM-as-Judge、セッション評価、人間によるアノテーション |
| Phoenix | LLM-as-Judge、評価ハブ |
これらはトレーシングやシングルターンの評価には優れています。しかし、私の知る限り、これらツールのどれも、複数ターンの会話シナリオ(例:「Xを尋ね、その応答に基づいてYまたはZを尋ねる」)を設計し、Difyチャットボットに対してエンドツーエンドで実行することを可能にするものではありません。
このフォーラムやGitHub Discussionsを検索しましたが、更新後のリグレッションに言及するGitHubのIssueが211件、可観測性に関するものが524件もあるにもかかわらず、体系的なチャットボットの品質評価についての議論がほとんどないことに驚きました。
コミュニティへの質問
-
変更をリリースする前に、Difyチャットボットの品質をどのようにテストしていますか? 上記のツールを使用していますか?プレビューでの手動テストですか?カスタムスクリプトですか?それとも何か別の方法ですか?
-
ワークフローやRAG構成を更新した後、サイレントリグレッションを経験したことはありますか? どのようにしてそれらを検出しましたか?
-
複数ターンの評価、つまり個別のQ&Aペアではなく、会話フロー全体をテストしている人はいますか?
皆さんのうまくいっていること(またはうまくいっていないこと)を聞きたいです。