Last updated
Last updated
Agent 策略是一个定义了标准输入内容与输出格式的可扩展模板。通过开发具体 Agent 策略接口的功能代码,你可以实现众多不同的 Agent 策略如 CoT(思维链)/ ToT(思维树)/ GoT(思维图)/ BoT(思维骨架),实现一些诸如 的复杂策略。
在插件中添加 Agent 策略需要在 manifest.yaml
文件内新增 plugins.agent_strategies
字段,并且也需要定义 Agent 供应商,示例代码如下
此处已省去 manifest
文件内部分无关的字段。如需了解 Manifest 的详细格式,请参考 文档。
随后,你需要新建 agent.yaml
文件并填写基础的 Agent 供应商信息。
其主要包含一些描述性质的基础内容,并且指明当前供应商包含哪些策略。在上述示例代码中仅指定了一个最基础的 function_calling.yaml
策略文件。
接下来需要定义能够实现 Agent 策略的代码。新建一个 function_calling.yaml
文件:
获取参数
根据上文定义的四个参数,其中 model 类型参数为model-selector
,tool 类型参数为特殊的 array[tools]。
在参数中获取到的形式可以通过 SDK 中内置的 AgentModelConfig
和 list[ToolEntity]
进行转换。
调用模型
调用指定模型是 Agent 插件中必不可少的能力。通过 SDK 中的 session.model.invoke()
函数调用模型。可以从 model 中获取所需的传入参数。
invoke model 的方法签名示例代码:
需要传入模型信息 model_config
,prompt 信息 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,代表着同样需要进行流式解析。
解析方法请参考以下函数:
如果你希望看到 Agent 思考的过程,除了通过查看正常返回的消息以外,还可以使用专门的接口实现以树状结构展示整个 Agent 的思考过程。
创建日志
该接口创建并返回一个 AgentLogMessage
,该 Message 表示日志中树的一个节点。
如果有传入 parent 则表示该节点具备父节点。
状态默认为"Success"(成功)。但如果你想要更好地展示任务执行过程,可以先设置状态为"start"来显示"正在执行"的日志,等任务完成后再将该日志的状态更新为"Success"。这样用户就能清楚地看到任务从开始到完成的整个过程。
label 将用于最终给用户展示日志标题。
完成日志
如果在前一个步骤选择了 start 状态作为初始状态,可以使用完成日志的接口来更改状态。
实例
这个示例展示了一个简单的两步执行过程:首先输出一条"正在思考"的状态日志,然后完成实际的任务处理。
代码格式类似 ,定义了 model
tools
query
max_iterations
等一共四个参数,以便于实现最基础的 Agent 策略。该代码的含义是可以允许用户选择模型和需要使用的工具,配置最大迭代次数并最终传入一个 query 后开始执行 Agent。