本文档详细介绍了Dify的Agent策略插件开发流程,包括在Manifest文件中添加Agent策略字段、定义Agent供应商以及实现Agent策略的核心步骤。文档详细介绍了如何获取参数、调用模型、调用工具以及生成和管理日志的完整示例代码。
manifest.yaml
文件内新增 plugins.agent_strategies
字段,并且也需要定义 Agent 供应商,示例代码如下
manifest
文件内部分无关的字段。如需了解 Manifest 的详细格式,请参考 通过清单文件定义插件信息 文档。
agent.yaml
文件并填写基础的 Agent 供应商信息。
function_calling.yaml
策略文件。
function_calling.yaml
文件:
Tool
标准格式,定义了 model
tools
query
max_iterations
等一共四个参数,以便于实现最基础的 Agent 策略。该代码的含义是可以允许用户选择模型和需要使用的工具,配置最大迭代次数并最终传入一个 query 后开始执行 Agent。
model-selector
,tool 类型参数为特殊的 array[tools]。
在参数中获取到的形式可以通过 SDK 中内置的 AgentModelConfig
和 list[ToolEntity]
进行转换。
session.model.invoke()
函数调用模型。可以从 model 中获取所需的传入参数。
invoke model 的方法签名示例代码:
model_config
,prompt 信息 prompt_messages
和工具信息 tools
。
其中prompt_messages
参数可以参考以下示例代码调用;而tool_messages
则需要进行一定的转换。
请参考 invoke model 使用方法的示例代码:
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,代表着同样需要进行流式解析。
解析方法请参考以下函数:
AgentLogMessage
,该 Message 表示日志中树的一个节点。