メインコンテンツへスキップ
これはインタラクティブなノートブックです。ローカルで実行することも、次のリンクを使用することもできます。
このチュートリアルでは、OpenAIのStructured Outputs機能を使用するマルチエージェントシステムを構築する方法と、Weaveでエージェント間のやり取りをトレースする方法を紹介します。最後には、中間の入力と出力をWeave UIで確認できる、4つのエージェントからなるデータ分析パイプラインが完成します。 OpenAIは、強い表現のプロンプトを使わなくても、指定したJSON Schemaに常に準拠する応答をモデルが生成できるように、Structured Outputsをリリースしました。Structured Outputsを使用すると、形式が正しくない応答を検証したり再試行したりする必要はありません。 パラメーター strict: true を使用すると、応答が指定したスキーマに従うことを保証できます。 マルチエージェントシステムで構造化出力を使用すると、エージェント間で一貫性があり、予測可能な形で処理できるデータを生成できます。また、明示的な拒否もサポートされるため、再試行や応答の検証も不要になります。
ソース: このクックブックは、OpenAIのStructured Outputsのサンプルコードをベースに、Weaveでの可視化を改善するための変更をいくつか加えたものです。

依存関係のインストール

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

エージェントを設定する

Weave を初期化したら、システムを構成するエージェントを定義します。このチュートリアルのユースケースは、データ分析タスクです。 まず、4 つのエージェントで構成されるシステムを設定します。
  • トリアージエージェント: どのエージェントを呼び出すかを決定します。
  • データ前処理エージェント: たとえばデータをクリーンアップして、分析できるように準備します。
  • データ分析エージェント: データを分析します。
  • データ可視化エージェント: 分析結果の出力を可視化して、インサイトを引き出します。
まず、これらの各エージェントのシステムプロンプトを定義します。これらのプロンプトでは、各エージェントの役割と、呼び出しを許可するツールを定めます。
次に、各エージェントのツールを定義します。 トリアージ エージェントを除き、各エージェントにはその役割に応じた固有のツールがあります。 Data pre-processing agent: データのクリーニング、データの変換、データの集計。 Data analysis agent: 統計分析、相関分析、回帰分析。 Data visualization agent: 棒チャートの作成、折れ線チャートの作成、円チャートの作成。

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

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

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

各エージェント、ツール、ハンドラーが揃ったので、システムを実行する準備は完了です。最後に、ユーザーの入力を使ってメインのhandle_user_message関数を実行し、結果を確認します。
Weave の URL をクリックすると、実行トレースを確認できます。Traces ページでは、入力と出力を確認できます。わかりやすいように、この図には各出力をクリックしたときに表示される結果のスクリーンショットも含めています。Weave は OpenAI API と連携し、コストを自動的に計算します。各トレースには、コストとレイテンシもあわせて表示されます。 コストとレイテンシを含むマルチエージェント実行を示す Weave Traces ページ 行をクリックすると、マルチエージェントシステム内で実行された中間プロセスを確認できます。たとえば、analysis_agent の入力と出力は structured output 形式で表示されます。OpenAI の Structured Outputs はエージェント同士の連携に役立ちますが、システムが複雑になるにつれて、こうしたやり取りの形式は把握しにくくなります。Weave を使えば、これらの中間プロセスとその入出力を詳しく確認できます。
analysis agent の structured input と output を示す Weave トレースの詳細
最後に、Weave でトレースがどのように処理されるかをもう少し詳しく見てみましょう。

結論

このチュートリアルでは、OpenAI の構造化出力と Weave を使って、inputs、最終出力、中間出力形式をトラッキングしながら、マルチエージェントシステムを開発する方法を学びました。これで、追加のエージェント、ツール、または構造化された応答スキーマで拡張できる、動作する実例ができました。