Hermes Agent
NousResearch/hermes-agent项目目录
项目简介
Hermes Agent 是面向持续任务的个人助手,可调用终端等工具执行任务,通过跨会话记忆保留常用信息,以 Skill 保存和复用操作流程,并支持检索历史对话。
如何写进简历
续航 · 研发版本发布协作助手 | 场景化示例
项目描述:基于 Hermes Agent,面向研发负责人整理版本待办、验收记录与发布约定,跨周生成准备清单、阻塞事项和下一步安排。
技术栈:Python、Hermes Agent、SQLite、FTS5
主要工作:
- 文件记忆与提示快照:基于
Hermes Agent将通用偏好与环境约定存入文件记忆,通过文件锁和原子替换更新,在压缩边界重载提示快照;当前版本进度单独读取,避免旧记忆替代实时状态。 - 跨周历史检索:利用
SQLite FTS5检索先前发布讨论,按会话沿袭关系去重,再依据消息锚点回读原文,为跨周待办续接和阻塞项追查提供依据。 - Skill 渐进加载与经验组织:通过技能索引提供名称与用途,按需读取
SKILL.md和配套脚本,将发布流程与常驻事实记忆分开;结合任务反馈更新技能,复用处理步骤并控制常驻提示规模。
面试题与回答
Hermes Agent 的学习闭环如何工作?
展开收起
核心回答
Hermes Agent的学习闭环是执行任务、保留过程、筛选经验、写入记忆或技能,再在后续任务中加载使用并修订。它改变的是运行时可用的知识与操作流程,不涉及模型参数训练。这里有三种不同的材料:会话历史保留“当时说过什么、做过什么”,
Memory保留跨任务稳定的事实,Skill保存一类任务的步骤、易错点和可选脚本。主 Agent 可以主动写入;满足配置的计数条件后,也可由后台复盘 Agent 检查是否值得保存。最终仍需实际调用存储工具,不能把一句“我记住了”当作已经持久化。任务经验从哪里来
Agent 执行工具、收到结果和用户更正后,可以从当前上下文提取有效方法。较早的细节则由
session_search回查:该版从SQLite FTS5发现相关会话,按会话沿袭根去重,但保留原始session_id与消息锚点配对,再读取附近原文或浏览近期会话。这样可以减少压缩、续接记录重复占据结果,同时保住回读原文的位置。历史发现与沿袭去重。没有命中时,工具会提示
FTS5默认按AND组合词项,可改用OR、短语或前缀查询;检索出错或数据库不可用则返回错误,不能把它当作“没有历史”。已检索到的材料仍可能过时,需要回读上下文后判断。数据库不可用处理。检索结果提供数据库中的历史材料与消息位置。历史命中也只是证据,仍需判断当时的方法是否成功、适用于什么环境,以及后来有没有被更正。把整段失败轨迹原样保存成“可靠流程”,会让下次任务重复走弯路。
怎样筛选并写入
系统提示引导 Agent 把可复用流程记录为技能。
skill_manage能创建技能、修改已有步骤和写入配套文件;已有技能只是漏了一个检查步骤时,适合修订原技能,避免每次任务再建一份近似版本。用户明确请求/learn时,也由普通 Agent 回合收集材料,再通过同一工具保存。稳定环境事实或跨任务个人信息进入受容量限制的
MEMORY.md、USER.md;任务专属方法与偏好优先放在对应技能中。外置文件只是载体,保存动作仍可能因容量、校验或写入审批配置而失败或等待处理,应以工具结果与实际文件为准。该版还有自动后台复盘:记忆按用户回合累计,技能按工具迭代累计,达到相应间隔且本轮正常交付后,可启动独立复盘。复盘模型读取会话快照,判断要更新什么,也可以选择没有值得保存的内容;配置可关闭自动复盘。因此它具备自动积累入口,但没有“每完成一个任务就必然生成技能”的保证。
后续怎样复用并继续改进
启用内置记忆时,Agent 在会话加载阶段把文件渲染为提示快照。写盘当时不会立即重刷当前系统提示;压缩边界重建提示或后续会话加载时,才重新读取这些记忆。
技能采用渐进加载:先通过名称与描述发现候选,再用
skill_view读取正文,需要细节时继续读取对应参考文件。会话中新增或删除的技能,在支持该通知路径时可通过后续用户回合携带的变化说明被发现;这不要求把全部技能正文长期放进窗口。当后续使用暴露了新限制或错误,Agent 可以再次修订技能,形成“使用、反馈、更新、再使用”的循环。闭环是否有效,要看保存内容能否被正确发现、是否减少同类错误,以及旧方法是否随环境变化得到修订;技能数量增加本身不能证明能力提升。
每日工作计划能力应沉淀为 Skill 还是长期记忆来持久化?
展开收起
在
Hermes Agent中,每日规划同样应拆成规划 Skill、通用用户记忆和当天状态。它已有 Skill 按需读取、持久记忆和会话历史能力;每日计划可以利用这些机制组织,无需把一整天的待办都塞进全局记忆。规划步骤与任务专属偏好放在 Skill
例如可以将“读取最新日程和待办、识别固定时间与截止日期、安排任务、输出冲突和待确认项”写入一个每日规划 Skill;只在规划任务使用的排序偏好、模板和任务系统使用说明也放在其中。这里描述的是 Skill 的编排方式,不是一个已内置的日程业务模块。
Hermes先提供技能名称和描述,执行相关任务时通过skill_view(name)读取完整SKILL.md,需要额外说明时再读取其目录内的参考文件。创建或修正规划方法可使用skill_manage的create、patch等操作;应按工具返回的状态确认修改是否已经生效。这样修改办理方法与更新当天计划各有入口。按需加载说明、读取实现、管理入口。全局记忆只留跨任务通用的信息
当前实现把记忆保存在所选 profile 的
memories/中:USER.md保存用户档案、偏好与风格,MEMORY.md保存助手笔记、环境事实和通用约定。memory工具支持add、patch、remove。这一版本的工具说明还进一步收紧了范围:全局记忆用于不依赖具体任务、每次会话都可能需要的信息。因此,用户时区、通用沟通语言可以进入
USER.md;“每日计划只展示三个最重要任务”这类只服务规划工作的偏好,应随对应 Skill 加载。当天待办、完成日志和临时进度不写入这两个全局文件。记忆工具的范围与目标定义。当天状态读最新来源,区分保存与提示更新
一次规划可以按这样的顺序完成:加载规划 Skill,读取当前日程和待办,结合通用用户信息生成当天计划;用户说“第二项已完成”,就更新对应任务或当天计划产物。下次继续规划时,再读取最新状态,而不是从旧偏好或昨天的回答推断任务是否完成。
还要区分记忆文件与模型当前看到的记忆:
load_from_disk()在加载时生成提示快照,format_for_system_prompt()返回该快照。记忆写入存储不会立即重刷提示;上下文压缩后,invalidate_system_prompt()会重新从磁盘加载记忆并清理提示缓存,后续重建时带入更新。 新会话也会重新加载。因此当轮使用刚改的内容,应依据用户当前指令和工具返回结果,不必等待提示刷新。这是在更新时效与提示前缀复用之间的取舍。加载与快照实现、快照读取、压缩后的重新加载。短期和长期记忆在何时写入、保存,采用同步还是异步方式?
展开收起
Hermes Agent是支持持续任务、工具执行和跨会话记忆的个人助手。它用SQLite保存会话历史,用MEMORY.md保存环境事实与通用约定,用USER.md保存用户偏好。历史保存、记忆更新、提示加载分别有自己的时机。会话历史在消息和工具边界增量保存
启用会话数据库时,用户输入在首次模型调用前保存;模型产生工具调用后,先保存调用消息,再执行工具;工具结果返回后继续增量保存。完整回答形成后也会写入,退出路径再补充保存,因此不是等整个会话结束才统一落库。
这些保存调用在当前执行路径中等待
SQLite写入完成,已保存消息的标记用于避免重复追加。工具调用前若明确写入失败,会停止执行该批工具;最终回答的写入失败则留给收尾阶段重试,不能据此承诺任何故障下都不丢历史。流式文本也不是逐个词元落盘;中断时可以将已累积的部分回答记录为中断消息。显式记忆更新同步写文件,提示在边界重载
memory工具处理新增、修改或删除时,会在文件锁内重新读取当前内容,校验字符预算和修改条件,再通过临时文件与原子替换保存。成功结果在写入完成后返回。启用memory.write_approval时,部分写入可能先暂存待审批,需要区分“已提交审批”和“已写入记忆文件”。记忆文件更新成功,不会立即重建当前系统提示。正常调用继续使用已加载的快照,以保持提示前缀稳定;发生上下文压缩后,系统会清除提示缓存并重新从磁盘加载记忆,新会话也会加载最新文件。因而写入与进入模型提示并非同一个动作。
后台复盘按条件异步触发
内置记忆复盘的默认间隔是 10 个用户回合。达到周期,且本轮有最终回复、未被中断、没有跳过后台复盘,并满足相关配置条件时,系统在交付回复后启动后台复盘;
auxiliary.background_review.enabled默认开启,也可以关闭。复盘会判断是否有值得保存的内容,可以得出“没有需要保存的信息”,并非每轮都提炼一条记忆。后台复盘使用独立执行分支,不把复盘对话混进用户的会话历史;真正更新内置记忆时,仍通过同一套同步文件写入机制。异步的是复盘调度与模型处理,文件更新本身仍等待写入完成。 该后台线程属于尽力而为的处理,进程退出可能使它中止,不等于具有持久队列和失败重放能力。额外接入外部记忆提供方时,还要按对应插件的同步与提取策略判断,不能套用内置文件记忆的时机。