Candidlyは、債務返済、貯蓄、退職、教育費などの重要な財務決定を支援する企業であり、AIファイナンシャルプランナー「Cait」はユーザーと対話しながらアドバイスを提供します。従来のチャットボットは会話終了後に評価されることが多いですが、Candidlyは会話中に介入できるようにするため、状態認識型のエージェントハーネスを構築しました。
まず、プロダクションのCaitトレースに対して、決定論的ルールとLLM評価者を組み合わせたハイブリッドラベリングパイプラインを構築し、解決または放棄の結果をラベル付けしました。このパイプラインは人間によるラベル付けと92.3%の一致率を示しました。次に、これらのラベルを予測するモデルを訓練するために、トレースから抽出した軽量な特徴(Q/A整合性、話題の連続性、ユーザーメッセージ長、大文字比率など)を使用しました。勾配ブースティングモデルはAUC 0.90で解決と放棄を分離することに成功しました。
この予測能力をリアルタイムの制御信号に変換するため、Candidlyは入力出力隠れマルコフモデル(IO-HMM)を採用しました。このモデルは各ターンを2つの部分に分けます:ユーザー側の信号は観測出力、エージェント側の特徴は遷移入力です。期待値最大化法により数千の会話から学習した結果、4つの解釈可能なエンゲージメント状態が得られました。Engaged(53%)、Detailed(7%)、Guided(17%)、Disengaging(23%)です。これらの状態は行動パターンと解決率が大きく異なり、Disengaging状態の解決率は約30%であるのに対し、Engaged状態では78%に達します。
重要なのは、各状態が同じエージェント行動に対して異なる反応を示すことです。例えば、話題の連続性を保つことはEngagedユーザーには有効ですが、Disengagingユーザーを低解決率の状態に閉じ込めてしまう可能性があります。そこで、状態に基づいて応答を調整するポリシーを開発しました。Detailed状態には行動喚起を追加し、Disengaging状態にはユーザーの機能語パターンを模倣するなどです。シミュレーションでは、このポリシーによりDisengaging状態の割合が23%から11%に減少し、Engaged状態が53%から64%に増加しました。
ポリシーを実際に動作させるために、CandidlyはモデルをCaitのリクエストパスに統合し、各ターンで状態を推測してトレースに書き込みます。状態ごとにバージョン管理されたポリシー変更(プロンプトの挿入など)を用意し、LangSmithで記録します。本番展開前に保持データセットでオフライン検証を行い、ランダム化実験で効果を測定します。LangSmithはトレース管理、実験割り当て、効果モニタリングを一元化し、評価を制御信号として活用するループを実現しています。