行业资讯
📅 2026/8/28 8:58:59
Hermes Agent 工具调用循环拆解:一次工具调用到底跑了几层
Hermes Agent 工具调用循环拆解一次工具调用到底跑了几层【免费下载链接】hermes-agentThe agent that grows with you项目地址: https://gitcode.com/GitHub_Trending/he/hermes-agent你在聊天里丢一句把这堆报错修了屏幕就停了几秒。我们拆开看看这几秒里发生了什么。它到底在解决什么问题大多数 AI 代理框架把模型调用、工具执行、上下文管理切成三套各自为政的模块长任务一跑起来就在上下文膨胀、瞬时 API 报错、工具并发这些地方掉链子。Hermes Agent 的思路是把一轮对话从头到尾放在一条主循环里用预算、围栏和错误分类把这三类风险各自兜住而不是靠你写重试逻辑去硬扛。说白了它想让模型说了句工具到结果回到对话这条链路在任何一家模型的服务器上都跑得通。这条链路到底怎么跑我们从最上层往下看。一次工具调用的完整链路从入口说起你这句话先被prompt_builder.py包上系统提示——环境信息、技能清单、记忆块都在这一层拼进去然后交给agent/conversation_loop.py的run_conversation。它是整个循环的调度中心组装 API 请求、处理流式响应、决定下一轮做什么全程在一个 while 里打转。模型回包后若响应里挂着 tool_calls循环并不会傻等——agent/tool_dispatch_helpers.py的_plan_tool_batch_segments先做批次规划_should_parallelize_tool_batch逐个检查这些调用碰的文件路径有没有重叠没有冲突的进并发段有冲突的排进顺序段。接着agent/tool_executor.py的execute_tool_calls_concurrent用线程池把并发段的工具各自扔到 worker 里执行顺序段则一个接一个跑保证写同一份文件的编辑不会互相踩。每个工具跑完结果经make_tool_result_message包成标准 tool 消息追加回历史模型下一轮就能看到。然后回到开头再问一次模型还调不调工具直到它只回纯文本或者撞上预算红线循环才收工。看完全链路有几个地方是刻意为之的值得单独聊。三个设计取舍并行、围栏与预算默认并行但先查路径。问题顺序执行一批读文件工具要白等几秒。选择批次级并发是默认唯一代价是一层路径重叠检测。好处读为主的批次直接并行一旦两个调用要写同一个文件自动退化成顺序不会互相踩脏。工具输出按不可信对待。问题工具结果里夹一句忽略之前的指令就可能被模型当真。选择_is_untrusted_tool判定来源后用围栏包裹这类输出再入历史。好处提示注入多了一道结构性防线不依赖模型自觉。max_iterations默认是无限。问题子代理和批处理任务常常真的需要几十轮定死上限要么误杀长任务要么不够用。选择入口默认sys.maxsize真正的刹车交给IterationBudget和run_budget_seconds两个显式预算。好处想要护栏就设一个数不想要就不拦两条路都干净。上手时容易踩的几个点默认迭代数无限自己跑批任务前先设max_iterations或run_budget_seconds别让失控循环烧 token。模型吐的arguments是字符串不是对象_repair_tool_call_arguments专门修畸形 JSON接自定义工具时保持同样的宽容度。长会话中途报错十有八九是上下文超窗先看压缩阈值默认 50%和模型窗口配置别急着怀疑网络。想动手的话从run_conversation的函数体顺着 while 往下读工具分发那一段正好接得上跑起来再开verbose_logging每一轮的工具批次和结果都会打在日志里对照着读最快。【免费下载链接】hermes-agentThe agent that grows with you项目地址: https://gitcode.com/GitHub_Trending/he/hermes-agent创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考