Agent
このドキュメントでは、DifyのAgent戦略プラグインの開発プロセスについて詳しく説明します。ManifestファイルへのAgent戦略フィールドの追加、Agentプロバイダーの定義、Agent戦略を実装するためのコアステップが含まれます。パラメータの取得、モデルの呼び出し、ツールの呼び出し、ログの生成と管理に関する完全なサンプルコードも詳細に解説しています。
Agent戦略は、標準の入力内容と出力形式を定義する拡張可能なテンプレートです。具体的なAgent戦略インターフェースの機能コードを開発することで、CoT(思考の連鎖)/ ToT(思考の木)/ GoT(思考のグラフ)/ BoT(思考の骨格)など、さまざまなAgent戦略を実現し、Sementic Kernel のような複雑な戦略を実装できます。
Manifest内へのフィールド追加
プラグインにAgent戦略を追加するには、manifest.yaml
ファイル内にplugins.agent_strategies
フィールドを新たに追加し、Agentプロバイダーも定義する必要があります。サンプルコードは以下の通りです。
ここでは、manifest
ファイル内の一部の無関係なフィールドは省略されています。Manifestの詳細な形式については、マニフェストファイルによるプラグイン情報の定義ドキュメントを参照してください。
Agentプロバイダーの定義
次に、agent.yaml
ファイルを新規作成し、基本的なAgentプロバイダー情報を入力する必要があります。
主にいくつかの記述的な基本情報を含み、現在のプロバイダーがどの戦略を含むかを指定します。上記のサンプルコードでは、最も基本的なfunction_calling.yaml
戦略ファイルのみが指定されています。
Agent戦略の定義と実装
定義
次に、Agent戦略を実現できるコードを定義する必要があります。function_calling.yaml
ファイルを新規作成します:
コード形式はTool
標準形式に似ており、model
、tools
、query
、max_iterations
など合計4つのパラメータを定義し、最も基本的なAgent戦略の実装を容易にします。このコードの意味は、ユーザーがモデルと使用するツールを選択し、最大反復回数を設定し、最終的にqueryを渡してAgentの実行を開始できるようにすることです。
機能実装コードの作成
パラメータの取得
上記で定義された4つのパラメータに基づき、model
タイプのパラメータはmodel-selector
であり、tool
タイプのパラメータは特殊なarray[tools]
です。パラメータで取得された形式は、SDKに組み込まれているAgentModelConfig
とlist[ToolEntity]
を使用して変換できます。
モデルの呼び出し
指定されたモデルの呼び出しは、Agentプラグインに不可欠な機能です。SDK内のsession.model.invoke()
関数を使用してモデルを呼び出します。model
から必要な入力パラメータを取得できます。
invoke model
のメソッドシグネチャのサンプルコード:
モデル情報model_config
、プロンプト情報prompt_messages
、およびツール情報tools
を渡す必要があります。
そのうちprompt_messages
パラメータは以下のサンプルコードを参照して呼び出すことができますが、tool_messages
は一定の変換が必要です。
invoke model
の使用方法のサンプルコードを参照してください:
ツールの呼び出し
ツールの呼び出しもAgentプラグインに不可欠な機能です。self.session.tool.invoke()
を使用して呼び出すことができます。invoke tool
のメソッドシグネチャのサンプルコード:
必須パラメータはprovider_type
、provider
、tool_name
、parameters
です。そのうちtool_name
とparameters
は、Function CallingではLLMによって生成されることがよくあります。invoke tool
の使用例コード:
self.session.tool.invoke()
関数の出力はGeneratorであり、同様にストリーミング解析が必要であることを意味します。
解析方法については、以下の関数を参照してください:
Log
Agentの思考プロセスを確認したい場合、正常に返されたメッセージを確認する以外に、専用のインターフェースを使用してAgent全体の思考プロセスをツリー構造で表示することもできます。
ログの作成
- このインターフェースは
AgentLogMessage
を作成して返します。このMessageはログ内のツリーのノードを表します。 parent
が渡された場合、そのノードは親ノードを持つことを示します。- ステータスはデフォルトで”Success”(成功)です。ただし、タスクの実行プロセスをよりよく表示したい場合は、まずステータスを”start”に設定して「実行中」のログを表示し、タスク完了後にそのログのステータスを”Success”に更新することができます。これにより、ユーザーはタスクの開始から完了までの全プロセスを明確に確認できます。
label
は、最終的にユーザーにログのタイトルを表示するために使用されます。
ログの完了
前のステップで開始ステータスとしてstart
状態を選択した場合、ログ完了インターフェースを使用してステータスを変更できます。
インスタンス
この例では、単純な2ステップの実行プロセスを示しています。まず「思考中」のステータスログを出力し、次に実際のタスク処理を完了します。
関連リソース
- プラグイン開発の基本概念 - プラグイン開発の全体的なアーキテクチャを理解する
- Agent戦略プラグイン開発例 - 実際のAgent戦略プラグイン開発例
- マニフェストファイルによるプラグイン情報の定義 - Manifestファイルの詳細な形式を理解する
- モデルの逆呼び出し - プラットフォーム内のモデル機能を呼び出す方法を理解する
- ツールの逆呼び出し - 他のプラグインを呼び出す方法を理解する