hermes解读
Hermes Agent Loop 深度解读一、整体架构run_agent.py是 hermes-agent 的核心文件约 10,500 行实现了AIAgent类——一个支持多模型、多 API 协议、多工具调用的 AI Agent 编排器。用户输入 → run_conversation() → 主循环(while) → LLM API 调用 → 工具执行 → 循环/终止其中Thought 藏在 “LLM API 调用” 这一步里面。一次 API 调用模型同时返回了 Thought Actionassistant_message response.choices[0].message.content → Thought推理文本.reasoning → Thought结构化推理.tool_calls → Action工具调用所以之前的流程图没有错只是粒度不够细——LLM API 调用 Thought Action它们不是两步而是同一个 response 的不同字段。主循环(while)├── ① LLM API 调用 → 同时返回 Thought Action├── ② 工具执行 → 产生 Observation└── ③ 回到循环顶部 → 带着 Observation 继续二、Agent Loop 核心流程2.1 入口run_conversation() (行 7506)这是 Agent Loop 的唯一入口接收用户消息并返回完整对话结果。核心流程如下run_conversation(user_message) │ ├── 1. 初始化与预处理 │ ├── 安全 stdio 替换防管道断裂 │ ├── 恢复主运行时如上一轮激活了 fallback │ ├── 清理 surrogates 字符防止 JSON 序列化崩溃 │ ├── 重置各类重试计数器 │ ├── 清理失效 TCP 连接 │ └── 重建 iteration budget │ ├── 2. 构建/恢复 System Prompt │ ├── 首次会话从零构建_build_system_prompt │ └── 续接会话从 SQLite 恢复保持 cache prefix 一致 │ ├── 3. Preflight 上下文压缩 │ └── 若历史消息已超阈值 → 主动压缩最多 3 轮 │ ├── 4. Plugin 钩子pre_llm_call │ └── 将插件上下文注入 user message非 system prompt保护 cache prefix │ └── 5. 主循环 while (api_call_count max_iterations) │ ├── 检查中断请求 ├── 消耗 iteration budget ├── 准备 API 消息注入 memory、plugin 上下文 ├── 应用 Anthropic prompt caching ├── 消息规范化JSON 排序、去除无效字段 │ ├── 内层 retry 循环 (最多 3 次) │ ├── 构建 API 参数_build_api_kwargs │ ├── 执行 API 调用优先 streaming │ ├── 处理各类异常 │ │ ├── 429 限流 → 指数退避 fallback │ │ ├── 上下文长度溢出 → 压缩后重试 │ │ ├── 认证失败 → 特定 provider 重试 │ │ └── 空响应 → 重试 fallback │ └── 成功 → break 退出 retry 循环 │ ├── 处理 API 响应 │ ├── 规范化响应支持 chat_completions / codex_responses / anthropic_messages │ └── 标准化 content 为 string │ ├── 分支判断 │ ├── 【有 tool_calls】→ 工具执行路径 │ └── 【无 tool_calls】→ 最终响应路径 │ ├── 工具执行路径 │ ├── 校验工具名称自动修复 → 3 次无效则中止 │ ├── 校验 JSON 参数无效则重试 → 注入错误让模型自纠 │ ├── 去重 限制 delegate_task 调用数 │ ├── 构建 assistant message 并追加到 messages │ ├── 执行工具_execute_tool_calls │ │ ├── 判断是否可并行_should_parallelize_tool_batch │ │ ├── 并行路径ThreadPoolExecutor │ │ └── 串行路径逐个执行 │ ├── 追加 tool results 到 messages │ ├── 上下文压力预警85% 橙色、95% 红色 │ ├── 判断是否需要上下文压缩 │ └── continue → 回到主循环顶部 │ └── 最终响应路径 ├── 检查空内容优先使用前一轮附带内容 ├── thinking-only 响应 → prefill 继续最多 2 次 ├── 真正空响应 → 重试 3 次 → 尝试 fallback ├── Codex 中间确认 → 继续推送 ├── 截断续接truncated_response_prefix ├── 清理 think blocks └── break → 退出主循环2.2 循环退出条件退出原因触发条件处理方式text_response模型返回纯文本无 tool_calls正常结束返回最终响应interrupted_by_user用户发送中断信号保存会话返回中断状态budget_exhaustediteration budget 用完注入 grace 消息请求总结max_iterations_reachedAPI 调用次数达上限调用 _handle_max_iterations 生成摘要all_retries_exhausted3 次重试全失败返回错误empty_response_exhausted多次空响应 fallback 耗尽返回 “(empty)”error_near_max_iterations接近上限时出错返回错误消息各种 truncation输出被截断且无法恢复返回 partial 结果2.3 Grace Call 机制当 iteration budget 耗尽时不是直接退出而是注入一条用户消息让模型总结Your tool budget ran out. Please give me the information or actions youve completed so far.给模型一次额外的 API 调用机会产出文本回复。三、三大 API 协议适配hermes 支持三种 API 协议通过api_mode自动检测和切换api_mode触发条件响应解析方式chat_completions默认OpenAI 兼容端点response.choices[0].messagecodex_responsesOpenAI GPT-5.x、直接 OpenAI URL_normalize_codex_response()anthropic_messagesapi.anthropic.com、URL 以 /anthropic 结尾normalize_anthropic_response()自动检测逻辑在__init__中优先级显式指定 provider 名称 URL 特征四、工具执行系统4.1 工具分发 (_execute_tool_calls)_execute_tool_calls(assistant_message, messages, ...) │ ├── 判断是否可并行化 (_should_parallelize_tool_batch) │ ├── 只读工具 → 允许并行 │ ├── 读/写工具路径不重叠 → 允许并行 │ └── 否则 → 串行执行 │ ├── 并行路径 (_execute_tool_calls_concurrent) │ └── ThreadPoolExecutor(max_workersmin(num_tools, _MAX_TOOL_WORKERS)) │ └── 每个工具一个 _run_tool 线程 │ └── _invoke_tool(name, args, task_id, call_id) │ └── 串行路径 (_execute_tool_calls_sequential) └── 逐个调用 _invoke_tool 逐个追加结果4.2 工具路由 (_invoke_tool)工具名称路由目标说明todotodo_tool内置 todo 管理session_searchsession_search会话搜索memorymemory_tool内置记忆 通知外部 memory providerclarifyclarify_tool交互式澄清需 callbackdelegate_taskdelegate_task子 Agent 委派外部 memory 工具memory_manager.handle_tool_call外部记忆 Provider其他handle_function_call通用注册工具文件、终端、浏览器等4.3 Checkpoint 机制对文件变更工具write_file,patch和破坏性终端命令在执行前自动创建 checkpointiffunction_namein(write_file,patch)andself._checkpoint_mgr.enabled:self._checkpoint_mgr.ensure_checkpoint(work_dir,fbefore{function_name})五、上下文管理5.1 上下文压缩由ContextCompressor驱动在多个时机触发触发时机条件说明Preflight 压缩进入主循环前历史消息已超阈值最多 3 轮压缩运行中压缩工具执行后 should_compress() 返回 True基于真实 token 计数API 错误触发收到 context_length 错误自动压缩后重试压缩策略保护最早 N 条 最近 N 条消息中间部分被摘要替换。5.2 Prompt Caching对 Claude 模型通过 OpenRouter 使用时自动注入cache_control断点system 最近 3 条消息缓存命中率可达 ~75%。关键设计Plugin 上下文注入 user message 而非 system prompt保持 system prompt 稳定以利用 prefix cache。5.3 上下文压力预警进度等级表现≥ 85% 橙色警告提醒用户上下文即将满≥ 95% 红色严重强烈警告压缩即将触发同一会话 300 秒冷却期不重复警告。六、容错与恢复6.1 多层重试机制错误类型最大重试恢复策略API 限流 (429)3 次指数退避 jitter (5s~120s)上下文溢出3 次压缩消息后重试无效工具名3 次返回可用工具列表让模型自纠无效 JSON 参数3 次重试 → 注入错误让模型自纠空响应3 次重试 → fallback provider不完整 scratchpad2 次不追加消息直接重试Codex incomplete3 次追加中间消息后继续Thinking-only2 次prefill 继续让模型产出文本截断 (length)3 次续接指令继续输出6.2 Fallback Provider Chain当主 provider 持续失败时自动切换到 fallback 链中的下一个self._try_activate_fallback()# 切换到下一个 providerself._restore_primary_runtime()# 下一轮恢复主 provider触发场景空响应、429 限流、上下文溢出无法压缩、认证失败等。6.3 连接健康检查每次对话开始前清理失效 TCP 连接self._cleanup_dead_connections()# 检测并清理僵尸 socket七、Iteration Budget 管理属性/方法类型说明max_totalint总预算默认 90usedint已消耗次数remainingint剩余次数consume()方法消耗 1 次返回是否成功refund()方法退还 1 次execute_code 调用免费父 Agent 创建 budget子 Agentdelegate_task共享同一个实例execute_code工具调用自动 refund成本极低Budget 耗尽时触发 Grace Call 机制八、记忆系统8.1 内置记忆工具功能说明memoryadd / replace / read基于文件存储写入时同步通知外部 providersession_search搜索历史对话在会话数据库中检索定期 nudge每隔 N 轮提醒提醒模型检查记忆8.2 外部记忆 Provider通过MemoryManager接入操作时机说明Prefetch每轮开始前基于用户查询预取相关记忆注入到 user messageWrite-back内置 memory 工具写入时同步通知外部 provider九、插件系统通过hermes_cli.plugins.invoke_hook实现钩子名称触发时机用途on_session_start新会话创建时初始化会话状态pre_llm_call每轮 LLM 调用前注入额外上下文到 user messagepre_api_request每次 API 请求前监控/计量post_api_request每次 API 请求后监控/计量十、总结Agent Loop 设计亮点#设计亮点详细说明1 三协议统一用 api_mode 抽象层统一处理 OpenAI Chat Completions / Codex Responses / Anthropic Messages上层逻辑无感知2 防御性编程极强几乎每个可能失败的操作都有 try/except、重试、fallback从管道断裂到 JSON 解析失败到连接失效全覆盖3 上下文生命周期Preflight 压缩 → 运行中压缩 → 压力预警 → Grace Call形成完整的上下文溢出防护链4 工具并行化智能判断只读/读写工具的路径依赖自动选择并行或串行执行5 Cache-friendlySystem prompt 只在首次构建后缓存复用Plugin 上下文注入 user message最大化 prefix cache 命中率6 Budget 共享父子 Agent 共享 iteration budget子 Agent 不会无限消耗资源

相关新闻

如何在5分钟内免费获取全网高品质音乐:洛雪音乐音源终极指南

如何在5分钟内免费获取全网高品质音乐:洛雪音乐音源终极指南

如何在5分钟内免费获取全网高品质音乐:洛雪音乐音源终极指南 【免费下载链接】lxmusic- lxmusic(洛雪音乐)全网最新最全音源 项目地址: https://gitcode.com/gh_mirrors/lx/lxmusic- 还在为找不到免费高品质音乐而烦恼吗?洛雪音乐音源项目为你提供…

2026/9/25 2:35:29 阅读更多 →
AACE2026北京算力展官方预定!展前采购清单精准配

AACE2026北京算力展官方预定!展前采购清单精准配

AACE2026北京算力展将于2026年11月12日-14日在北京举办,目前官方展位预定工作有序推进,展会核心优势之一在于前置化的采购清单归集与精准匹配服务,从源头提升供需对接的匹配度与成交效率。组委会提前开启线上采购需求征集通道,面向…

2026/9/20 6:11:20 阅读更多 →
学习C语言第五天第五讲

学习C语言第五天第五讲

前言 今天是学习C语言的第五天,刚刚过完第五讲的课程,一如既往的仅仅3个小时的课程信息量巨大。随着学习的不断深入,各种上机实操接踵而来,课程难度也在不断增加……但同时也带来了很多可能。今天老师带我们做了两款非常有趣的小程…

2026/9/23 18:52:38 阅读更多 →

最新新闻

PaddleSeg PP-HumanSeg-Lite(ConnectNet)实时人像分割模型完全指南

PaddleSeg PP-HumanSeg-Lite(ConnectNet)实时人像分割模型完全指南

人工智能计算机视觉预训练 【免费下载链接】PaddleSeg Easy-to-use image segmentation library with awesome pre-trained model zoo, supporting wide-range of practical tasks in Semantic Segmentation, Interactive Segmentation, Panoptic Segmentation, Image Matting,…

2026/9/25 2:35:10 阅读更多 →
Databasus 后端开发工作流:从 .env 配置、make 运行测试,到 goose 迁移与 Swagger 文档

Databasus 后端开发工作流:从 .env 配置、make 运行测试,到 goose 迁移与 Swagger 文档

数据库灾备 【免费下载链接】databasus PostgreSQL backup tool with Point-In-Time-Recovery and restore verification 项目地址: https://gitcode.com/gh_mirrors/po/databasus 点击查看 免费下载 本篇以 backend/README.md 为主线,讲解 Databasus 后…

2026/9/25 2:35:10 阅读更多 →
PaddleSpeech audiotools 工具箱全解析:AudioSignal 音频信号处理、数据增强与模型训练一站式指南

PaddleSpeech audiotools 工具箱全解析:AudioSignal 音频信号处理、数据增强与模型训练一站式指南

人工智能语音音频NLP媒体生成 【免费下载链接】PaddleSpeech Easy-to-use Speech Toolkit including Self-Supervised Learning model, SOTA/Streaming ASR with punctuation, Streaming TTS with text frontend, Speaker Verification System, End-to-End Speech Translation …

2026/9/25 2:35:10 阅读更多 →
使用 PaddleSpeech 将 CC-CEDICT 中英词典解析为 JSON 格式的完整指南

使用 PaddleSpeech 将 CC-CEDICT 中英词典解析为 JSON 格式的完整指南

人工智能语音音频NLP媒体生成 【免费下载链接】PaddleSpeech Easy-to-use Speech Toolkit including Self-Supervised Learning model, SOTA/Streaming ASR with punctuation, Streaming TTS with text frontend, Speaker Verification System, End-to-End Speech Translation …

2026/9/25 2:35:10 阅读更多 →
SSM 图书管理系统

SSM 图书管理系统

🥂(❁◡❁)您的点赞👍➕评论📝➕收藏⭐是作者创作的最大动力🤞💖📕🎉🔥 支持我:点赞👍收藏⭐️留言📝欢迎留言讨论🔥🔥&am…

2026/9/25 2:35:10 阅读更多 →
PHP微信支付v3迁移实战:从签名体系到回调解密全解析

PHP微信支付v3迁移实战:从签名体系到回调解密全解析

简介:一套基于PHP微信支付V3的完整接入实例,面向需要为商城、小程序或线下收银场景快速集成微信支付的PHP开发者,重点解决统一下单、回调验签、证书配置、订单查询与退款申请等实际开发难点。压缩包共16个文件,体积仅61KB&#xf…

2026/9/25 2:34:10 阅读更多 →

日新闻

AI元人文:从工具使用到思维重构的深度探索

AI元人文:从工具使用到思维重构的深度探索

最近半年我一直在琢磨一件事:AI元人文到底是什么?说白了,就是“用元视角重新审视人与AI的关系”,也在“探索AI如何反向逼着我们发现自己的思考边界”。标题里的“元探索”,在我看就是一层套一层的追问——当你用AI解决…

2026/9/25 0:00:41 阅读更多 →
Python+CNN车牌识别实战:从数据预处理到模型训练与部署

Python+CNN车牌识别实战:从数据预处理到模型训练与部署

简介:基于Python与卷积神经网络的车牌识别项目,面向计算机视觉初学者及智能交通开发者,目标是帮助用户掌握从数据预处理、模型构建到实际部署的完整流程。压缩包共25个文件,包含jpg/png图像样本、py训练脚本、md说明文档、dat数据…

2026/9/25 0:00:41 阅读更多 →
Vim基础操作全攻略:保存退出、模式切换与高频命令实战

Vim基础操作全攻略:保存退出、模式切换与高频命令实战

1. 项目概述1.1 核心需求解析今天聊聊Vim。写这个题目的原因是:几乎每个后端开发者、运维人员、数据工程师某天都会遇到一个场景——深夜加班,服务器登录界面只有黑底白字,编辑器只有vi/vim,你必须在五分钟内完成一次配置修改并保…

2026/9/25 0:00:41 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/24 14:34:13 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/24 9:10:42 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/24 14:33:56 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/24 12:50:34 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/24 14:33:48 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/24 12:49:17 阅读更多 →