AIAgent 才是 Hermes Agent 的“总调度器”:run_agent.py 在系统里到底负责什么?

news2026/5/24 3:24:44
一、先给结论AIAgent 不是“大模型”而是“任务总控台”很多人第一次看 Hermes Agent容易把核心误解成“调用某个大模型的代码”。但从官方文档和源码结构看真正的核心不是模型本身而是 run_agent.py 里的 AIAgent。它像一个任务总控台先把用户问题、项目上下文、长期记忆、技能、工具说明组织成模型能理解的输入再选择合适的 Provider/API Mode 调用模型如果模型要求调用工具就调度工具执行如果上下文太长就压缩如果主模型失败就切换备用模型如果任务跑太久就用预算机制刹车。二、普通调用大模型 VS AIAgent 调度 Agent有什么本质区别普通大模型调用通常是“给模型一段文本等模型返回一段文本”。AIAgent 要处理的是“让模型在真实环境里完成任务”它需要读文件、查网页、调用终端、管理会话、记住历史、处理异常、在不同平台展示进度。对比项普通 Chat / LLM APIHermes AIAgent输入用户消息用户消息 系统 Prompt Memory Skills Context Files Tool Schemas输出文本回复文本回复或多轮工具调用后的最终结果执行能力模型只能生成内容AIAgent 调度文件、终端、浏览器、MCP 等工具状态管理通常由外部系统维护AIAgent 维护 OpenAI-style conversation history 和 session容错能力调用失败就报错支持 retry、fallback provider、credential refresh 等成本控制通常靠外部限制IterationBudget、上下文压缩、辅助任务 fallback三、两个入口chat() 是简洁版run_conversation() 是完整版AIAgent 对外有两个主要入口。chat() 更像“省心模式”传入一个问题拿回最终文本run_conversation() 更像“工程模式”它返回包含最终回答、完整消息历史、元数据和使用统计的结构化结果。官方文档也说明chat() 本质上是 run_conversation() 的薄封装只是把 final_response 抽出来返回。这意味着如果你只是把 Hermes 当命令行助手用 chat() 就够如果你要把 Hermes 嵌到 Web 系统、自动化平台、任务平台、企业内部工具中就应该重点看 run_conversation()。四、初始化阶段AIAgent 先把运行时“装备”装好看 run_agent.py 的构造函数会发现 AIAgent 初始化参数非常多。GitHub 的项目说明里也提到真实的 AIAgent.__init__ 大约有 60 个参数覆盖凭证、路由、回调、session context、预算、credential pool 等。这些参数不是“堆功能”而是在描述一个 Agent 运行时需要的所有资源。可以把初始化理解成“任务开始前的装备检查”模型用哪个、工具开哪些、当前平台是谁、会话 ID 是什么、最大循环次数是多少、有没有进度回调、是否跳过记忆和上下文文件。五、run_conversation() 主循环一次任务真正怎么跑起来官方文档把每一轮 Turn Lifecycle 拆成清晰步骤生成 task_id、追加用户消息、构建或复用系统 Prompt、检查是否需要预检压缩、按 API mode 构造消息、注入预算/上下文压力提示、应用缓存标记、发起可中断模型调用、解析模型响应。如果返回 tool_calls就执行工具并把结果追加回历史然后回到构造 API 消息继续循环如果返回文本就持久化 session、刷新 memory 并返回。这套流程说明了一个关键事实Agent 不是“一次模型调用”而是“模型思考 → 工具执行 → 结果回填 → 模型再思考”的循环。AIAgent 就是这个循环的控制器。六、Prompt 组装AIAgent 不是自己写 Prompt而是调度 Prompt BuilderAIAgent 并不是把用户输入原封不动丢给模型。它会通过 prompt_builder.py 组装有效系统提示词把 Memory、Skills、Context Files、Personality、工具 schema 等内容组织起来。官方关键源码文件说明中也把 agent/prompt_builder.py 定义为“从 memory、skills、context files、personality 组装系统提示词”的模块。通俗理解Prompt Builder 负责“把菜配齐”AIAgent 负责“决定什么时候上菜、上给哪个模型、用哪种接口格式”。七、Provider 与 API Mode同一套 Agent要能切换不同模型接口Hermes 不是只绑定一个模型。官方文档说明它支持 chat_completions、codex_responses、anthropic_messages 三种 API 执行模式并按显式 api_mode、provider 检测、base_url 推断、默认 chat_completions 的顺序解析。GitHub README 也强调 Hermes 可以使用 Nous Portal、OpenRouter、OpenAI、Anthropic 或自定义端点并可通过 hermes model 切换模型。这就是 AIAgent 的另一个价值业务层不必关心每个模型厂商的消息格式细节AIAgent 把内部消息统一成 OpenAI-style再按目标 Provider 转换。八、可中断模型调用长任务 Agent 必须允许用户打断官方文档提到API 请求会被包装在 _interruptible_api_call() 里实际 HTTP 调用运行在后台线程主线程监听响应完成、interrupt event 或 timeout。如果用户发送新消息、执行 /stop 或系统信号打断API 线程结果会被丢弃不会把半截回复写进历史。这对真实产品很重要。用户可能在 Agent 跑任务时发现方向错了需要立刻改口如果系统不能打断就会浪费 token、时间和工具调用成本。九、工具执行模型负责“提议”AIAgent 负责“审批与落地”当模型返回 tool_calls 时AIAgent 会解析工具调用单个工具直接执行多个工具可通过 ThreadPoolExecutor 并发执行交互式工具会强制顺序执行结果会按原始 tool_call 顺序重新插回历史。这意味着模型并不是直接操作终端或文件系统它只是提出“我要调用哪个工具、参数是什么”真正的执行由 AIAgent 和工具注册表完成。工具执行链路通常包括从 tools/registry.py 查找 handler、触发 pre_tool_call hook、检查危险命令、等待用户审批、执行 handler、触发 post_tool_call hook、把工具结果追加为 roletool 消息。十、Agent-Level Tools有些工具必须由 AIAgent 自己拦截官方文档特别指出有些工具会被 run_agent.py 在进入普通 handle_function_call() 之前拦截例如 todo、memory、session_search、delegate_task。原因是这些工具会修改 Agent 自身状态todo 读写任务状态memory 写长期记忆session_search 查会话库delegate_task 启动子 Agent。这类设计很关键普通工具更多是“对外部世界做动作”Agent-Level Tools 则是“改变 Agent 自身的运行状态”。所以它们不能完全当作普通外部函数处理。十一、消息历史守门人为什么要维护统一 Message FormatAIAgent 内部统一使用 OpenAI 兼容消息格式system、user、assistant、tool。官方文档还强调消息角色必须严格交替system 后是 User → Assistant → User → Assistant工具调用时是 Assistant(with tool_calls) → Tool → Tool → Assistant不能连续两个 assistant也不能连续两个 user只有 tool 可以连续出现。这个“守门”动作看起来不起眼但非常重要。很多模型供应商会拒绝格式错乱的历史消息工具调用如果不成对回填下一轮模型就可能看不懂自己刚刚做了什么。十二、预算、压缩、FallbackAIAgent 的三套刹车系统能连续行动的 Agent 必须有“刹车”。官方文档说明AIAgent 通过 IterationBudget 跟踪循环次数默认 90 次子 Agent 有独立预算受 delegation.max_iterations 控制预算到 100% 时停止并返回已完成工作的总结。上下文方面AIAgent 在 API 调用前发现会话超过模型上下文 50% 时会触发预检压缩Gateway 层在 85% 时也会更激进地自动压缩。压缩前会先 flush memory然后摘要中间消息、保留最近 N 条消息、保证 tool call/result 成对不被拆开。模型失败方面遇到 429、5xx、401/403 等情况时AIAgent 会检查 fallback_providers按顺序尝试备用 provider/model辅助任务如 vision、compression、web extraction 也可以有独立 fallback 链。十三、Callback Surface为什么同一个 AIAgent 能接 CLI、Gateway、ACPAIAgent 支持多种平台回调例如 tool_progress_callback、thinking_callback、reasoning_callback、clarify_callback、step_callback、stream_delta_callback、tool_gen_callback、status_callback。官方文档说明这些回调用于 CLI、Gateway 和 ACP 集成中的实时进度展示。这也是 Hermes 和普通命令行脚本的区别它不是把结果憋到最后一次性吐出来而是让不同平台能看到“正在思考、正在调用工具、需要澄清、已完成一步、正在流式输出”等状态。十四、持久化与记忆刷新一次任务结束不代表信息丢失官方 Agent Loop 文档说明在每轮结束后消息会保存到 SQLite session store由 hermes_state.py 管理Memory 变更会刷新到 MEMORY.md / USER.md用户之后可以通过 /resume 或 hermes chat --resume 恢复会话。[1] GitHub README 也强调 Hermes 会搜索过去对话、构建跨会话用户模型并通过内置学习闭环创建和改进 skills。所以 AIAgent 不只是把这次请求跑完还要把“这次执行过什么、用户偏好是什么、哪些信息值得长期保存”沉淀下来为下一次任务提供上下文。十五、源码协作关系run_agent.py 很大但不是孤岛官方文档在关键源码文件列表中明确写到run_agent.py 是完整 agent loopagent/prompt_builder.py 负责系统 Prompt 组装agent/context_compressor.py 负责默认有损摘要算法agent/prompt_caching.py 负责 Anthropic prompt cachingagent/auxiliary_client.py 负责视觉、摘要等辅助 LLM 任务model_tools.py 负责工具 schema 收集和 handle_function_call() 调度。因此看源码时不建议从 run_agent.py 第 1 行硬啃到最后。更好的方式是围绕一次任务执行链路顺藤摸瓜去看它调用的模块。十六、推荐源码阅读路线别硬啃按职责切片先看 AIAgent.__init__知道它运行时需要哪些配置、凭证、工具、回调、会话和预算。再看 chat()理解简单入口为什么只是 run_conversation() 的封装。重点看 run_conversation()把官方 9 步 Turn Lifecycle 和源码结构对上。看 Provider/API Mode 解析理解为什么同一个 Agent 能接不同模型。看工具调用处理理解 registry、审批、并发、结果回填。看压缩、Fallback 和预算理解长期任务为什么不容易失控。最后看持久化理解 session、memory、resume 如何让任务跨平台延续。十七、用一句话总结 AIAgentAIAgent 是 Hermes Agent 的“运行时大脑外壳”模型负责生成判断和行动意图AIAgent 负责把意图变成可控、可追踪、可恢复、可压缩、可切换模型、可跨平台延续的真实执行过程。如果你要学习 Hermes Agent 架构run_agent.py 不只是一个文件而是一条主线。沿着它你会看到 Agent 工程最核心的几个问题上下文怎么拼、模型怎么选、工具怎么调、危险动作怎么审批、失败怎么降级、长任务怎么压缩、历史怎么保存、经验怎么沉淀。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2636360.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…