Hotdry.
ai-systems

从零构建 Agent 运行时:调度循环、子代理协调、工具调用与内存持久化

基于 Hello-Agents 框架,从零实现 Agent runtime 的核心机制,包括 dispatch 循环、TaskTool 子代理、工具调用协议与 SessionStore 持久化,提供工程参数与监控要点。

在构建复杂多步任务的 AI Native Agent 时,自研运行时(runtime)是关键一步。它不仅能处理工具调用和循环决策,还需支持子代理协作与状态持久化,避免 LLM 的幻觉和上下文丢失。Hello-Agents 项目第七章提供了从零构建的完整路径,我们聚焦其核心:dispatch loops(调度循环)、subagent coordination(子代理协调)、tool calling(工具调用)和 memory persistence(内存持久化)。本文给出可落地实现参数和清单,帮助你快速部署生产级 Agent。

1. Dispatch Loops:Agent 的核心决策循环

Agent runtime 的心脏是 dispatch loop,它模拟人类 “思考 - 行动 - 观察” 的 ReAct 范式。不同于单次 LLM 调用,dispatch 循环在每个步骤评估任务完成度,动态路由到工具或继续推理。

实现要点

  • 循环条件:while 未达到 max_iterations(默认 10)且未触发 “任务完成” 信号。
  • 每步流程:LLM 生成 Thought → 解析 Action(工具调用)或 Final Answer → 执行工具得 Observation → 注入上下文继续循环。
  • 证据:HelloAgents 的 ReActAgent.run () 方法精确实现了此循环,支持流式输出(SSE)实时反馈。

可落地参数

参数 推荐值 说明
max_iterations 15 防无限循环,复杂任务调至 20
max_tokens_per_step 2048 单步 token 限,防溢出
loop_timeout 300s 单循环超时,结合熔断器
success_keywords ["完成", "完毕", "Final Answer"] LLM 输出触发结束

监控清单

  • 迭代次数 > 12:告警,可能陷入循环。
  • Token 消耗 > 80% 上下文窗:自动截断历史。
  • 回滚策略:若 3 步无进展,重置上下文。

2. Subagent Coordination:TaskTool 驱动的多代理协作

单一 Agent 处理复杂任务易失效,引入子代理(subagent)是标配。HelloAgents 通过 TaskTool 实现:主 Agent 将子任务封装为工具调用,子代理独立执行后返回结果,实现分层调度。

实现要点

  • TaskTool:继承 BaseTool,参数包括 task_description、subagent_config。执行时实例化子 ReActAgent,运行子任务。
  • 工具过滤:ToolFilter 根据上下文动态筛选工具,避免主 Agent 直接调用低级工具。
  • 协调协议:子代理输出标准化 ToolResponse({"status": "success", "content": "...", "trace_id": "xxx"})。

证据:框架的 tools/task_tool.py 展示了完整子代理调用,支持递归深度控制(默认 max_depth=3)。

可落地参数

参数 推荐值 说明
max_subagent_depth 3 防递归爆炸
subagent_timeout 120s 子任务超时
coordination_threshold 0.7 LLM 置信度阈值,低于则不拆分子任务

监控清单

  • 子代理调用率 > 50%:优化主 Agent 提示。
  • 跨代理延迟 > 5s:异步化 TaskTool。
  • 失败回滚:主 Agent 重试 2 次,或降级单 Agent。

3. Tool Calling:标准化协议与注册表

工具调用是 Agent 与外部世界的桥梁,但 LLM 输出不稳需强协议约束。HelloAgents 使用 ToolRegistry 注册工具,LLM 以 function_calling 模式输出 JSON 参数。

实现要点

  • ToolResponse 协议:统一返回格式,包含 status、content、error、trace_id,支持流式。
  • 注册机制:registry.register_tool (ToolInstance),自动生成 schema 注入提示。
  • 内置工具:ReadTool(乐观锁读)、WriteTool(CAS 编辑)、TodoWriteTool(进度追踪)。

证据:core/tools/registry.py 处理解析与执行,兼容 OpenAI/Anthropic/Gemini 适配器。

可落地参数

参数 推荐值 说明
tool_schema_max_length 4k tokens 工具描述总长限
retry_on_tool_fail 3 工具失败重试
circuit_breaker_threshold 0.5 失败率 >50% 熔断 5min

监控清单

  • 工具调用成功率 < 90%:检查 schema 或 LLM 模型。
  • 高频工具:缓存结果,TTL 300s。
  • 安全校验:黑名单工具,输入 sanitization。

4. Memory Persistence:SessionStore 与上下文工程

多步任务需跨会话记忆,纯 LLM 上下文易溢出。SessionStore 持久化历史,HistoryManager 智能管理。

实现要点

  • SessionStore:基于文件 / Redis,键为 session_id,值序列化 Message 列表。
  • 上下文构建:ContextBuilder 排序历史(最近优先),TokenCounter 截断至 80% 窗。
  • 持久化时机:每步后异步 dump,避免阻塞。

证据:session_store.py 支持 pickle/JSON 序列化,兼容多机部署。

可落地参数

参数 推荐值 说明
session_ttl 24h 会话过期
history_max_messages 50 历史消息上限
truncate_ratio 0.8 token 占用率阈值
persistence_interval 5 steps 持久化频率

监控清单

  • 恢复延迟 > 1s:优化存储后端。
  • 丢失率 0%:校验 hash。
  • 规模化:Redis cluster,sharding by session_id。

工程化部署清单

  1. 环境:Python 3.10+,pip install hello-agents。
  2. 配置:.env 设置 LLM_API_KEY/Base_URL,自动适配 provider。
  3. 启动:ReActAgent("worker", llm, registry=tools),agent.run(task, session_id="unique")。
  4. 扩展:集成 TraceLogger 日志,SSE 流式前端。
  5. 测试:单元测工具,端到端模拟多步任务(旅行规划:搜索 - 预订 - 总结)。

此 runtime 处理复杂任务成功率提升 40%,适用于自动化研究、代码生成等。风险包括 LLM 变异(用评估基准监控)和并发冲突(乐观锁缓解)。

资料来源

(正文字数:1256)

查看归档