Hermes Agent 工具调用循环完全拆解
【免费下载链接】hermes-agentThe agent that grows with you项目地址: https://gitcode.com/GitHub_Trending/he/hermes-agent
Hermes Agent 是一款自进化 AI 代理框架:它把跑过的复杂任务沉淀成技能,让 Hermes Agent 工具调用随使用次数增长而越来越省。
Hermes Agent 工具调用与多平台网关架构示意
一个会"长记性"的代理,定位先说清
多数 AI 工具助手的记忆是会话级的:窗口一关,学到的东西就清零。Hermes Agent 反着来——它内置一套学习闭环:完成复杂任务后自动把做法写成可复用的技能,下次直接调用而不再从头推理;跨会话还能检索自己过去的对话,逐步拼出对你的使用画像。
部署上它也不挑地方:一个网关进程(后台常驻,对接所有聊天平台)就能让你从 Telegram、Discord、Slack、CLI 同时找到同一个代理,而它实际干活的可能是台 5 美元的 VPS 或 serverless 容器。模型侧没有锁定,hermes model一条命令切换提供商,不用改任何代码。
15 种失败策略:错误分类器如何决定"下一步怎么办"
API 调用总会失败,问题是怎么恢复。Hermes 的做法是把恢复策略写进一个枚举,由classify_api_error在出错瞬间对号入座:
rate_limit = "rate_limit" # 429 — 退避后换凭据重试 upstream_rate_limit = "upstream_rate_limit" # 聚合方限流 — 换模型,不换凭据 ssl_cert_verification = "ssl_cert_verification" # 重试必然复现 — 快速失败并给提示为什么值得细看?因为它区分了两种"长得一样"的限流:你自己的配额打满,退避再试;聚合方上游被限,你的凭据是健康的,直接降级到别的模型。TLS 证书校验失败这类重试必然复现的错误,系统选择快速失败并给出可操作提示,而不是烧掉重试次数。完整清单见 agent/error_classifier.py。
为什么用线程池跑工具,而不是一股脑并发
一批工具调用怎么调度?Hermes 的答案是线程池,而且每个 worker 都是 daemon 线程(进程退出时不会等它善后)。
选择线程池而非协程,是因为工具调用大量涉及子进程和外部脚本,线程能把风险隔离:单个卡死的工具只会卡死自己那条 worker 线程,主循环不被拖住。并发度也不是拍脑袋定的——每批调用按负载动态计算 worker 数,图片生成类工具还会单独压并发上限。另外有个小细节:像clarify这类需要问你问题的交互工具被放进禁并发名单,单独执行并等你的回复,避免"边跑边问"的混乱。
调度逻辑都在 agent/tool_executor.py,并发策略辅助判断在同目录的 agent/tool_dispatch_helpers.py。
还有一个容易忽略的兜底:上下文逼近模型窗口上限时,agent/conversation_compression.py 会把较早的历史压成摘要而不是直接报错。这就是 Hermes Agent 工具调用循环在多轮长任务里不崩的底层原因。
三分钟跑起来:从 clone 到第一句对话
上手路径很短:
git clone https://gitcode.com/GitHub_Trending/he/hermes-agent curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash source ~/.bashrc hermes model # 选提供商和模型 hermes tools # 勾选要启用的工具跑完hermes就能进入终端界面开始对话,多行编辑、斜杠命令补全、流式工具输出都是自带的。配置项用hermes config set单条修改,遇到不对劲先跑hermes doctor,它会按类别把环境问题列出来。
想继续深挖,四个入口比读主文件更高效:错误分类器决定"失败后走哪条路",工具执行器决定"并发怎么切",会话压缩决定"长对话怎么续",而 agent/conversation_loop.py 里的run_conversation是串起这一切的主循环——它约四千字节级的体量,本身就是这套设计取舍最好的注脚。
【免费下载链接】hermes-agentThe agent that grows with you项目地址: https://gitcode.com/GitHub_Trending/he/hermes-agent
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考