メインコンテンツへスキップ
これはインタラクティブなノートブックです。ローカルで実行することも、以下のリンクを利用することもできます。

マルチエージェントシステム向け Structured Outputs

OpenAI は、強い調子のプロンプトを使わなくても、指定した JSON Schema に常に従うレスポンスをモデルが生成できるようにするため、Structured Outputs をリリースしました。Structured Outputs を使えば、形式が正しくないレスポンスに対して検証や再試行を行う必要がありません。 新しいパラメーター strict: true を使用することで、レスポンスが指定したスキーマに従うことを保証できます。 マルチエージェントシステムで Structured Outputs を使用すると、エージェント間で一貫性があり処理しやすいデータをやり取りできるため、連携が向上します。また、明示的な拒否を可能にすることで安全性も高まり、再試行や検証が不要になることでパフォーマンスも向上します。これによりやり取りが簡素化され、システム全体の効率が高まります。 このチュートリアルでは、マルチエージェントシステムで Structured Outputs を活用し、それらを Weave でトレースする方法を示します。
ソース: この cookbook は、OpenAI の Structured Outputs のサンプルコード をもとに、Weave を使用した可視化を改善するために一部変更を加えています。

依存関係のインストール

このチュートリアルでは、次のライブラリが必要です。
  • マルチエージェントシステムを構築するための OpenAI
  • LLM のワークフローをトラッキングし、プロンプト戦略を評価するための Weave
wandb.login() で簡単にログインできるよう、環境変数 WANDB_API_KEY を設定します (これはシークレットとして Colab に渡す必要があります) 。 ログ先の W&B プロジェクトを name_of_wandb_project に設定します。 : トレースのログ先チームを指定するには、name_of_wandb_project{team_name}/{project_name} 形式を指定することもできます。 次に、weave.init() を呼び出して Weave クライアントを取得します。 OpenAI API を使用するため、OpenAI の APIキー も必要です。自分の APIキー を取得するには、OpenAI プラットフォームで sign up してください。 (これもシークレットとして Colab に渡す必要があります。)

エージェントの設定

今回取り組むユースケースは、データ分析タスクです。 まず、4つのエージェントから成るシステムを設定しましょう。
  • Triaging エージェント: どのエージェントをcallするかを決定します
  • Data pre-processing Agent: 分析用にデータを準備します。たとえば、データをクリーンアップします
  • Data Analysis Agent: データを分析します
  • Data Visualization Agent: 分析結果を可視化し、インサイトを引き出します まず、これら各エージェントのsystem promptを定義します。
次に、各エージェントで使用するツールを定義します。 振り分けエージェントを除き、各エージェントには役割に応じた専用のツールを用意します。 データ前処理エージェント : 1. データのクリーニング, 2. データの変換, 3. データの集計 データ分析エージェント : 1. 統計分析, 2. 相関分析, 3. 回帰分析 データ可視化エージェント : 1. 棒グラフの作成, 2. 折れ線グラフの作成, 3. 円グラフの作成

Weave でマルチエージェントのトラッキングを有効にする

次の処理を行うコードロジックを記述する必要があります。
  • ユーザーのクエリをマルチエージェントシステムに渡す
  • マルチエージェントシステムの内部処理を扱う
  • ツール呼び出し を実行する
ユーザーのクエリから、呼び出す必要があるツールは clean_datastart_analysisuse_line_chart だと推測できます。 まず、ツール呼び出しを実行する実行用の関数を定義します。 Python 関数に @weave.op() をデコレートすると、言語モデルの入力、出力、トレースをログしてデバッグできます。 マルチエージェントシステムを作成すると、多くの関数が出てきますが、それらの先頭に @weave.op() を追加するだけで十分です。
次に、各サブエージェント用のツールハンドラーを作成します。これらには、それぞれ固有のプロンプトとツールセットがモデルに渡されます。続いて、その出力は実行関数に渡され、この関数がツール呼び出しを実行します。
最後に、ユーザーのクエリ処理を担う全体的なツールを作成します。この関数はユーザーのクエリを受け取り、モデルから応答を取得し、それを他のエージェントに渡して実行します。

Weave でマルチエージェントシステムを実行し、可視化する

最後に、ユーザーの入力を使ってメインの handle_user_message 関数を実行し、結果を確認します。
Weave の URL をクリックすると、実行が次のようにトレースされていることを確認できます。トレースページでは、入力と出力を確認できます。わかりやすくするために、各出力をクリックしたときに表示される結果のスクリーンショットも図に追加しています。Weave は OpenAI API とのインテグレーションを提供しているため、コストは自動的に計算されます。そのため、右端にはコストとレイテンシも表示されていることがわかります。 1-1.png 行をクリックすると、マルチエージェントシステム内で実行された中間処理を確認できます。たとえば、analysis_agent の入力と出力を見ると、構造化出力形式になっていることがわかります。OpenAI の 構造化出力 はエージェント間の連携を容易にしますが、システムが複雑になるにつれて、こうしたやり取りがどのような形式で行われているのか把握しにくくなります。Weave を使えば、こうした中間処理やその入力・出力を手に取るように理解できます。
3.png
Weave でトレースがどのように扱われるのか、ぜひ詳しく見てみてください。

結論

このチュートリアルでは、OpenAI の構造化出力と Weave を使って、inputs、最終出力、中間出力形式をトラッキングしながら、マルチエージェントシステムを手軽に開発する方法を学びました。