主要技术:Hermes Agent、SQLite、FTS5
项目目录
项目简介
Hermes Agent 是一套基于 Python 的个人智能体,提供终端和消息网关入口,可以调用文件、命令、搜索等工具完成持续任务。它把当前对话、可检索的历史、常驻用户记忆与按需加载的技能结合起来,支持跨会话继续处理工作。
例如,用户可以让它整理研究资料或排查开发环境问题,之后再回查“上次尝试过什么”。已验证的操作步骤可保存为 Skill,通用用户偏好和环境约定可写入文件记忆;后续任务按需加载并修订。经验以可读取的技能和记忆文件积累,后续任务按需复用。
项目亮点
- 会话历史可检索、可回读:
SQLite FTS5查找历史讨论,按会话沿袭关系去重,同时保留会话标识与消息锚点,便于返回原文核对,而不只依赖一段历史摘要。 - 记忆写入与提示加载分开:
MEMORY.md、USER.md受容量和修改条件约束,写入时锁内重读并原子替换;当前模型使用已加载的快照,在新会话或压缩边界重载。 - 技能渐进加载与修订: 先用名称和描述发现技能,再通过
skill_view读取正文及参考文件,skill_manage负责创建、修改和保存步骤,避免所有操作手册常驻窗口。 - 按条件后台复盘: 用户回合或工具迭代达到配置间隔,且本轮正常交付后,可以启动独立复盘,判断是否需要更新记忆或技能。复盘根据新增材料决定是否提交更新。
技术架构
交互与任务执行: CLI 或消息网关把输入交给 Agent,运行循环组装模型请求、执行工具并交付结果;会话持久化模块在消息和工具边界增量保存历史。
知识积累与复用: 会话搜索从 SQLite 回读旧材料,文件记忆参与系统提示构建,技能工具按需提供流程知识;后台复盘使用独立会话快照,再通过存储工具提交更新。
| 代码位置 | 主要职责 |
|---|---|
run_agent.py、agent/conversation_loop.py |
Agent 组装和任务运行 |
agent/session_persistence.py、tools/session_search_tool.py |
会话增量保存及历史搜索 |
tools/memory_tool_store.py、agent/system_prompt.py |
文件记忆、提示快照与重载 |
tools/skills_tool.py、tools/skill_manager_tool.py |
技能发现、读取和维护 |
agent/turn_finalizer.py、agent/background_review.py |
交付后复盘调度与执行 |
如何写进简历
交班宝 · 设备维护交接助手 | 制造业场景示例
项目描述:面向设备维护人员的故障交接助手,持续整理故障现象、已试动作和待处理事项,回查历史排查记录及依据,生成交接说明与后续排查清单。
技术栈:Python、Hermes Agent、SQLite、FTS5
主要工作:
- 分层记忆与提示快照:通过
USER.md与MEMORY.md分别保存通用偏好和稳定工作环境,当前故障进展留在任务材料;利用锁内重读、原子替换更新文件,在新会话或压缩边界刷新提示快照,降低旧状态对交接的干扰。 - FTS5 历史检索与原文回查:基于
SQLite FTS5用设备标识和故障关键词检索既往讨论,按会话沿袭关系归并压缩后的同源记录;通过消息锚点回读附近原文,找回已试方法及当时条件。 - 交接 Skill 与渐进资料加载:编写交接
Skill组织故障现象、已试动作和待办,先通过轻量技能目录发现流程,再按需读取正文、手册与参考文件;把操作方法与当前故障输入分开,减少整份资料常驻上下文。
复盘管家 · 电商活动复盘助手 | 电商零售场景示例
项目描述:面向电商运营团队的活动复盘助手,结合本轮活动材料和历史方案,梳理执行结果与调整原因,输出带原始依据的复盘材料和行动建议。
技术栈:Python、Hermes Agent、SQLite、FTS5
主要工作:
- 跨会话偏好与活动事实分层:将通用表达偏好放入
USER.md,稳定工作约定放入MEMORY.md,活动要求留在当前会话与任务材料;区分记忆写盘和提示快照更新,在新会话或压缩边界加载保存内容,承接长期复盘习惯。 - 活动历史检索与决策溯源:利用
session_search检索往期活动方案和复盘讨论,对压缩拆分的同源会话归并;保留消息锚点回读决策原文,核对当时规则、调整原因和本轮输入的差异。 - 复盘流程的渐进加载:通过技能索引发现复盘流程,按需读取
SKILL.md与报告模板,再结合活动说明、执行记录和历史原文组织复盘;将可复用步骤与每次活动细节分开,控制流程资料进入上下文的时机。
面试题与回答
3 题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默认开启,也可以关闭。复盘会判断是否有值得保存的内容,可以得出“没有需要保存的信息”,并非每轮都提炼一条记忆。后台复盘使用独立执行分支,不把复盘对话混进用户的会话历史;真正更新内置记忆时,仍通过同一套同步文件写入机制。异步的是复盘调度与模型处理,文件更新本身仍等待写入完成。 该后台线程属于尽力而为的处理,进程退出可能使它中止,不等于具有持久队列和失败重放能力。额外接入外部记忆提供方时,还要按对应插件的同步与提取策略判断,不能套用内置文件记忆的时机。