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

依存関係をインストールする

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

エージェントを設定する

Weave を初期化したら、システムを構成するエージェントを定義します。このチュートリアルでは、データ分析タスクをユースケースとして取り上げます。 まず、4 つのエージェントで構成されるシステムを設定します。
  • トリアージエージェント: どのエージェントを呼び出すかを判断します。
  • データ前処理エージェント: データのクリーンアップなどを行い、分析できる状態にデータを整えます。
  • データ分析エージェント: データを分析します。
  • データ可視化エージェント: 分析結果を可視化し、インサイトを引き出します。
はじめに、各エージェントのシステムプロンプトを定義します。これらのプロンプトによって、各エージェントの役割と、呼び出すことができるツールが決まります。
次に、各エージェントのツールを定義します。 トリアージエージェント以外の各エージェントには、それぞれの役割に応じたツールがあります。 データ前処理エージェント: データのクリーニング、変換、集計。 データ分析エージェント: 統計分析、相関分析、回帰分析。 データ可視化エージェント: 棒グラフ、折れ線グラフ、円グラフの作成。

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

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

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

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

まとめ

このチュートリアルでは、OpenAI の構造化出力を使用してマルチエージェントシステムを開発し、Weave で入力、最終出力、中間の出力形式をトラッキングする方法を学びました。これで動作するサンプルができたので、エージェントやツール、構造化された応答スキーマを追加して、さらに拡張できます。
最終更新日 2026年9月30日