天工DeepResearchAgent 多步智能体类分析
·
天工DeepResearchAgent 多步智能体类分析
类概述
MultiStepAgent是一个抽象基类,实现了基于ReAct框架的多步骤智能体核心逻辑。该类负责任务规划、工具调用、状态管理和结果生成的完整流程,支持流式输出、内存管理和代理协作等高级功能。
架构概览
核心属性
model: 语言模型实例,用于生成决策和规划tools: 工具集合,以字典形式存储(名称->工具实例)memory: 智能体内存系统,存储对话历史和执行步骤max_steps: 最大执行步数限制(默认20步)planning_interval: 规划步骤执行间隔managed_agents: 可调用的子代理集合prompt_templates: 各类提示模板(系统提示、规划提示、最终答案提示等)
主要方法解析
初始化方法 (__init__)
def __init__(self, tools: list[Tool], model: Model, prompt_templates: PromptTemplates | None = None, ...)
- 初始化提示模板、工具和子代理
- 设置内存系统和日志监控
- 验证工具和代理名称唯一性
- 配置回调函数和执行参数
运行流程 (run)
def run(self, task: str, stream: bool = False, reset: bool = True, ...)
- 核心执行入口,支持流式/非流式输出
- 初始化任务状态和内存
- 根据
stream参数选择同步执行或生成器模式 - 返回最终结果或
RunResult对象(包含详细执行信息)
流式执行 (_run_stream)
生成器方法,实现主要执行循环:
执行流程详解:
- 按规划间隔执行规划步骤(初始步骤或间隔步骤)
- 执行行动步骤:思考→行动→观察的完整循环
- 处理工具输出和错误情况
- 检查终止条件(达到最大步数或获得最终答案)
- 生成最终答案并结束循环
规划机制 (_generate_planning_step)
- 初始规划:基于任务和可用工具生成初始行动计划
- 规划更新:根据执行历史动态调整计划
- 支持流式规划输出和可视化
工具调用流程
- 行动生成:通过
_step_stream(抽象方法)生成工具调用指令 - 参数解析:通过
extract_action解析模型输出的行动指令 - 工具执行:调用对应工具并获取结果
- 结果处理:将工具输出存入内存并决定下一步行动
状态管理
memory属性存储完整执行历史(系统提示、任务、规划、行动、观察)state字典维护运行时变量step_number跟踪当前执行步数
结果生成 (provide_final_answer)
基于执行历史生成最终答案:
def provide_final_answer(self, task: str, images: list["PIL.Image.Image"] | None = None) -> ChatMessage
- 构建最终答案生成提示
- 调用模型生成格式化回答
- 支持多模态输入(图像)
扩展能力
高级功能详解
流式输出机制
支持实时返回执行过程中的中间结果,通过生成器模式实现:
- 规划步骤流式输出:实时返回规划思考过程
- 工具调用流式输出:实时返回工具执行结果
- 错误处理流式反馈:即时报告执行异常
内存管理策略
采用分层内存结构,优化长对话性能:
- 短期记忆:存储最近执行步骤
- 长期记忆:通过摘要机制压缩历史对话
- 工具记忆:缓存工具调用结果避免重复计算
代理协作
代理协作
通过managed_agents属性支持子代理调用,实现能力组合:
def _setup_managed_agents(self, managed_agents: list | None = None) -> None
- 子代理注册和验证
- 自动生成子代理调用接口
- 支持代理间参数传递
持久化与部署
save方法:将代理配置、工具和提示模板保存为可部署格式push_to_hub:直接部署到Hugging Face Spacefrom_hub/from_folder:从Hub或本地文件夹加载代理
Hugging Face Hub 集成
- 加载代理:使用
from_hub方法从 Hub 加载预训练代理agent = MultiStepAgent.from_hub( repo_id="username/agent-repo", filename="agent.json" ) - 上传代理:使用
push_to_hub方法分享代理到 Hubagent.push_to_hub( repo_id="username/agent-repo", commit_message="Add financial analysis agent" )
配置文件说明
代理行为可通过TOML配置文件自定义(如configs/config_general.toml):
[agent]
max_steps = 20
stream_output = true
[model]
type = "openai"
name = "gpt-4"
temperature = 0.7
[tools]
enabled = ["python_interpreter", "web_search"]
关键参数说明:
max_steps: 最大执行步骤数stream_output: 是否启用流式输出temperature: 模型采样温度(0-1)
性能优化建议
- 工具缓存机制:对频繁调用的无状态工具(如Web搜索)实现结果缓存,减少重复API调用
- 异步执行:结合
async_multistep_agent.py实现工具调用并行化,提升多步骤任务效率 - 内存优化:对长对话历史实现滑动窗口机制,只保留最近N步关键信息
测试策略
单元测试
针对核心组件进行独立测试:
# 测试工具调用解析
def test_extract_action():
agent = MultiStepAgent(tools=[PythonInterpreterTool()])
llm_output = "<|FunctionCallBegin|>[{"name":"python_interpreter","parameters":{"code":"1+1"}}]<|FunctionCallEnd|>"
action = agent.extract_action(llm_output)
assert action.name == "python_interpreter"
集成测试
验证完整任务执行流程:
def test_agent_run():
agent = MultiStepAgent.from_folder("./agents/research_agent")
result = agent.run("分析2023年AI领域研究热点")
assert "最终答案" in result.content
异常处理
主要异常类型:
ToolNotFoundError: 工具未找到时抛出InvalidActionError: 解析动作失败时抛出MaxStepsReachedError: 达到最大步骤限制时抛出LLMAPIError: 大语言模型调用失败时抛出
异常处理示例:
try:
result = agent.run(task)
except MaxStepsReachedError:
# 处理步骤超限情况
result = agent.provide_final_answer("任务复杂,已尽力分析主要结果...")
扩展机制
自定义提示模板
通过继承PromptTemplates类修改系统提示:
class CustomPromptTemplates(PromptTemplates):
planning = "自定义规划提示模板..."
managed_agent = "自定义托管代理提示..."
agent = MultiStepAgent(prompt_templates=CustomPromptTemplates())
多代理协作
使用_setup_managed_agents方法配置子代理网络,实现复杂任务分工协作:
agent = MultiStepAgent(
managed_agents=[
ResearchAgent(),
WritingAgent(),
EditingAgent()
]
)
关键数据结构
RunResult:封装执行结果、状态、内存和性能指标ActionStep/PlanningStep:记录执行步骤详情PromptTemplates:结构化提示模板定义TokenUsage/Timing:性能监控指标
使用示例
agent = MultiStepAgent(tools=[CalculatorTool()], model=MyModel())
result = agent.run("计算3.14的平方")
print(result)
继承关系
作为抽象基类,需要子类实现:
initialize_system_prompt:系统提示初始化_step_stream:行动步骤生成逻辑
常见子类:ToolCallingAgent、CodeAgent等
更多推荐
所有评论(0)