Agent(エージェント)
エージェント戦略の概要
エージェント戦略とは、標準的な入力コンテンツと出力形式を定義する拡張可能なテンプレートです。特定のエージェント戦略インターフェースを開発することで、CoT(Chain of Thought:思考の連鎖)、ToT(Tree of Thought:思考の木)、GoT(Graph of Thought:思考のグラフ)、BoT(Backbone of Thought:思考のバックボーン)といった様々なエージェント戦略を実装したり、Semantic Kernel のような複雑な戦略を実現したりできます。
マニフェストへのフィールド追加
プラグインにエージェント戦略を追加するには、manifest.yamlファイルにplugins.agent_strategies
フィールドを追加し、エージェントプロバイダーを定義します。以下にコード例を示します。
マニフェストファイル内の関連性のないフィールドは省略されています。詳細なマニフェスト形式については、Manifestを参照してください。
エージェントプロバイダーの定義
基本的なエージェントプロバイダー情報を含むagent.yamlファイルを作成します。
エージェント戦略の定義と実装
定義
エージェント戦略のコードを定義するために、function_calling.yamlファイルを作成します。
このコード形式はToolの標準形式に似ており、最も基本的なエージェント戦略を実装するために、model
、tools
、query
、max_iterations
の4つのパラメーターを定義しています。これにより、ユーザーは以下のことが可能になります。
- 使用するモデルを選択する
- 利用するツールを選択する
- 最大反復回数を設定する
- エージェントの実行を開始するためのクエリを入力する
これらのパラメーターはすべて連携して、エージェントがタスクを処理し、選択されたツールやモデルとどのように対話するかを定義します。
機能実装
パラメーターの取得
前述の4つのパラメーターに基づき、モデルタイプのパラメーターはmodel-selector、ツールタイプのパラメーターは特別なarray[tools]です。取得したパラメーターは、SDKに組み込まれているAgentModelConfigとlist[ToolEntity]を使用して変換できます。
モデルの呼び出し
特定モデルの呼び出しは、エージェントプラグインの不可欠な機能です。SDKのsession.model.invoke()関数を使用してモデルを呼び出します。必要な入力パラメーターはモデルから取得できます。
モデルを呼び出すメソッドの例:
モデル情報(model_config)、プロンプト情報(prompt_messages)、ツール情報(tools)を渡す必要があります。prompt_messagesパラメーターは以下のコード例を参照できますが、tool_messagesには特定の変換が必要です。
モデル呼び出しのコード例を参照してください。
ツールの呼び出し
ツールの呼び出しも、エージェントプラグインの重要な機能です。ツールを呼び出すには、self.session.tool.invoke()を使用します。
ツールを呼び出すメソッドの例:
必要なパラメーターには、provider_type、provider、tool_name、parametersが含まれます。通常、tool_nameとparametersは関数呼び出し中にLLMによって生成されます。
ツールを呼び出すコード例:
self.session.tool.invoke()関数の出力はジェネレーターであり、ストリーム解析が必要です。
解析については、以下の関数を参照してください。
ログ
エージェントの思考プロセスを表示するために、通常のメッセージの戻り値に加えて、専用のインターフェースを使用して、エージェントの思考プロセス全体をツリー構造で表示できます。
ログの作成
- このインターフェースは、ログツリー内のノードを表す
AgentLogMessage
を作成して返します。 - 親が渡された場合、このノードに親ノードがあることを示します。
- デフォルトのステータスは「Success」です。ただし、タスク実行プロセスをより適切に表示したい場合は、最初にステータスを「start」に設定して「進行中」のログを表示し、タスク完了後にログステータスを「Success」に更新できます。これにより、ユーザーは最初から最後までプロセス全体を明確に把握できます。
- ラベルは、ユーザーに表示されるログタイトルとして使用されます。
ログの完了
以前に初期ステータスとして「start」を設定した場合、ログ完了エンドポイントを使用してステータスを変更できます。
実装例
この例では、簡単な2段階の実行プロセスを示します。最初に「考え中」の状態のログを出力し、次に実際のタスク処理を完了します。