キッチン・ナイトメア:LangChainエージェント編

レシピを解析して食事プランを作成するヘルスケアアプリを開発しました。

WebアプリにはFastAPIとReactを使用しました。エージェントにはLangChainを、エージェントの動作確認にはLangSmithを使用しました。

目標はシンプルでした。ユーザーがURLを入力すると、アプリがレシピを取得し、メイン、サイド、ソースといった構成要素に分割します。ユーザーはこれらを組み合わせて食事を作ったり、カロリーを管理したりできます。

エージェントの信頼性に関して、大きな問題に直面しました。

最初は、レシピをグループ化して出力をフォーマットするために、1つのエージェントを使用していました。しかし、これは頻繁に失敗しました。項目の重複が発生したり、指示が抜け落ちたり、すべてが巨大な一つの塊になってしまったりしたのです。

これを解決するために、2つのエージェントによる構成を試みました:

  • エージェント1(Grouping):レシピの各構成要素を見つけ、材料と手順を整理します。
  • エージェント2(Structuring):整理されたテキストを受け取り、きれいなJSON形式に変換します。

これで1日はうまくいきました。しかし、翌日にはエラーが再発しました。構造化エージェントが、材料や手順がすべて欠落したJSONを返し始めたのです。

print文を使うのをやめ、LangSmithを使い始めました。

LangSmithを使えば、レイテンシ、トークン使用量、コストを確認できます。そして最も重要なのは、チェーンのどこで失敗しているのかを正確に特定できることです。

私の場合、グループ化エージェントは完璧に動作していました。詳細を含む素晴らしいMarkdownを生成していました。失敗は2番目のエージェントで起きていました。変換の過程でデータが失われていたのです。

現在、3つの修正に取り組んでいます:

  • エージェントの信頼性の向上:構造化エージェントが、元のプロンプトにはない cuisine フィールドを推測しようとしていることに気づきました。この混乱がエラーの原因となっています。
  • バリデーションの追加:Python関数を使用して出力をチェックします。Markdownが正しいこと、および重複がないことを保証したいと考えています。
  • 観測性の向上:追跡を容易にするため、すべてのエージェントの実行を特定のユーザーリクエストに紐付けたいと考えています。

エージェントを用いた開発は、一度やって終わりではありません。テストと修正の絶え間ないループなのです。

Source: https://dev.to/kristianroopnarine/kitchen-nightmares-langchain-agents-edition-45co

Optional learning community: https://t.me/GyaanSetuAi