ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

读懂 Hermes Agent 架构:一次多轮工具调用的完整生命周期

读懂 Hermes Agent 架构:一次多轮工具调用的完整生命周期 读懂 Hermes Agent 架构一次多轮工具调用的完整生命周期【免费下载链接】hermes-agentThe agent that grows with you项目地址: https://gitcode.com/GitHub_Trending/he/hermes-agentHermes Agent 是一个 AI 代理框架核心能力是让模型与工具反复协作直到任务真正完成。本文拆解 Hermes Agent 架构里循环引擎、结果结构与工具执行器的分工并按一次真实任务的时间线走完全流程适合刚接触这个项目的开发者与爱好者。 先搞懂它在解决什么问题假设你让 AI修掉这个 bug。模型本身只会输出文本要真的修好得跑测试、读文件、改代码、再跑一轮。没有循环引擎时你得手动把上一轮输出粘进下一轮输入中途一个报错整个链路就断了。有了多轮工具调用循环之后模型每轮自己决定调哪个工具系统执行完把结果写回对话模型看到结果再决定下一步直到它判断任务完成或触达最大轮次。Hermes Agent 架构就是围绕这个决策—执行—反馈闭环搭起来的。 角色分工Hermes Agent 架构里谁负责什么循环里有三个角色分工互不越界。对话循环引擎run_conversation调度员。位于agent/conversation_loop.py是项目里最大的单文件。它负责驱动整个用户回合构建请求、调用模型、接收工具调用、派发执行、处理重试与降级。关键设计点所有分支限流、上下文超限、空响应都收敛在这一处行为好追查。回合状态与结果承载记录员。每轮的推理内容、工具返回、token 用量、重试次数被分别写进历史与回合状态agent/turn_context.py、agent/turn_retry_state.py。出问题时能按步回放。工具执行器动手的人。位于agent/tool_executor.py把模型给出的工具调用逐条验证名称与参数然后放进独立线程执行并回收结果。关键设计点单个工具再慢再卡也不会拖住主循环。组件职责关键文件对话循环引擎构建请求、调模型、派发工具、判定结束agent/conversation_loop.py回合上下文与重试状态记录每轮历史、管理重试次数agent/turn_context.py、agent/turn_retry_state.py工具执行器校验工具名与参数、线程执行、回收结果agent/tool_executor.py错误分类器把 API 错误分成可重试与致命两类agent/error_classifier.py⏱️ 跟着一次任务走完 AgentLoop 的执行流程初始化确定模型、工具清单、最大轮次与工作目录。原因工具定义必须在首次请求前定型模型才知道自己能调什么。失败时配置缺失会直接报错、不进入循环。构建请求把历史消息、系统提示、工具 schema 和温度等参数打包成标准请求。原因统一成 OpenAI 规范后OpenAI、VLLM、SGLang、OpenRouter 等多种服务器都能接入。失败时历史超长度就先尝试压缩压缩不了则结束本轮并记录原因。模型响应发送请求并读取回复。先提取推理内容兼容reasoning_content、reasoning_details等各家字段再找工具调用。失败时错误分类器先判性质可重试的退避后重试不可重试的立即结束本轮并落日志。工具执行有工具调用时先校验工具名、解析参数再整批交给线程池。每个工具跑在独立 worker 线程里结果按序写回历史。失败时单个工具的异常不终止本轮而是把错误包装成结果返回给模型让它知道这步错了并自行纠正。结束判定响应里没有工具调用说明模型认为完成循环结束达到最大轮次则强制退出防止死转。两种路径都返回完整历史、所用轮次和错误清单供你调试。 Hermes Agent 架构里藏在细节的设计取舍线程池为什么用守护线程。工具执行放在独立线程卡死的工具不能拖死进程。项目用了定制的DaemonThreadPoolExecutortools/daemon_pool.py超时后不再等待 worker主循环先走线程随进程退出自行消失。原因对交互式代理来说还活着比等完最后一个慢工具更重要。为什么一套主循环能兼容多家模型。厂商差异被隔离在适配层agent/anthropic_adapter.py、agent/bedrock_adapter.py等各家响应先归一成统一结构再进循环。好处是新增服务器类型时不用碰几千行的主循环。为什么错误处理要先分类再重试。API 错误先经分类器判成限流、过载、上下文超限等类别每类有独立策略抖动退避、压缩上下文、直接终止而不是统一重试 N 次。这既省掉无谓调用也避免漏掉致命错误。为什么每轮状态拆得这么细。推理、工具结果、token 用量、重试次数各自成字段是结构化数据而不是一行日志。这样事后做性能分析、回放调试才有据可查。️ 上手前必须知道的几件事别乱改线程池大小worker 数要和工具超时、并发批量配套调整。改并发前先看tools/daemon_pool.py的超时配置否则容易看到假卡死。调试先看结果回放出问题时先读循环返回的每轮历史与错误清单。工具参数错误通常已作为结果写回对话你能直接定位是哪一轮跑偏。最大轮次就是你的保险丝按任务复杂度设值。代码修复类任务可以放宽些但务必保留退出路径否则模型进入死循环时会持续烧 token。读码入口先读agent/conversation_loop.py的run_conversation再读agent/tool_executor.py两个文件覆盖了绝大多数问题。Hermes Agent 的价值在于把模型只会输出文本变成系统能完成任务循环引擎、状态记录、工具执行三者各司其职。建议 clone 仓库后按上面的流程跟跑一个小任务边运行边读码一轮下来整个 Hermes Agent 架构就清楚了。【免费下载链接】hermes-agentThe agent that grows with you项目地址: https://gitcode.com/GitHub_Trending/he/hermes-agent创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表