Python记忆与任务协作

项目目录

项目简介

Hermes Agent 是面向持续任务的个人助手,可调用终端等工具执行任务,通过跨会话记忆保留常用信息,以 Skill 保存和复用操作流程,并支持检索历史对话。

如何写进简历

续航 · 研发版本发布协作助手 | 场景化示例

项目描述:基于 Hermes Agent,面向研发负责人整理版本待办、验收记录与发布约定,跨周生成准备清单、阻塞事项和下一步安排。

技术栈:Python、Hermes Agent、SQLite、FTS5

主要工作:

  • 文件记忆与提示快照:基于 Hermes Agent 将通用偏好与环境约定存入文件记忆,通过文件锁和原子替换更新,在压缩边界重载提示快照;当前版本进度单独读取,避免旧记忆替代实时状态。
  • 跨周历史检索:利用 SQLite FTS5 检索先前发布讨论,按会话沿袭关系去重,再依据消息锚点回读原文,为跨周待办续接和阻塞项追查提供依据。
  • Skill 渐进加载与经验组织:通过技能索引提供名称与用途,按需读取 SKILL.md 和配套脚本,将发布流程与常驻事实记忆分开;结合任务反馈更新技能,复用处理步骤并控制常驻提示规模。

面试题与回答

  1. 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 可以再次修订技能,形成“使用、反馈、更新、再使用”的循环。闭环是否有效,要看保存内容能否被正确发现、是否减少同类错误,以及旧方法是否随环境变化得到修订;技能数量增加本身不能证明能力提升。

  2. 每日工作计划能力应沉淀为 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() 会重新从磁盘加载记忆并清理提示缓存,后续重建时带入更新。 新会话也会重新加载。因此当轮使用刚改的内容,应依据用户当前指令和工具返回结果,不必等待提示刷新。这是在更新时效与提示前缀复用之间的取舍。加载与快照实现、快照读取、压缩后的重新加载。

  3. 短期和长期记忆在何时写入、保存,采用同步还是异步方式?

    展开收起

    Hermes Agent 是支持持续任务、工具执行和跨会话记忆的个人助手。它用 SQLite 保存会话历史,用 MEMORY.md 保存环境事实与通用约定,用 USER.md 保存用户偏好。历史保存、记忆更新、提示加载分别有自己的时机。

    会话历史在消息和工具边界增量保存

    启用会话数据库时,用户输入在首次模型调用前保存;模型产生工具调用后,先保存调用消息,再执行工具;工具结果返回后继续增量保存。完整回答形成后也会写入,退出路径再补充保存,因此不是等整个会话结束才统一落库。

    这些保存调用在当前执行路径中等待 SQLite 写入完成,已保存消息的标记用于避免重复追加。工具调用前若明确写入失败,会停止执行该批工具;最终回答的写入失败则留给收尾阶段重试,不能据此承诺任何故障下都不丢历史。流式文本也不是逐个词元落盘;中断时可以将已累积的部分回答记录为中断消息。

    显式记忆更新同步写文件,提示在边界重载

    memory 工具处理新增、修改或删除时,会在文件锁内重新读取当前内容,校验字符预算和修改条件,再通过临时文件与原子替换保存。成功结果在写入完成后返回。启用 memory.write_approval 时,部分写入可能先暂存待审批,需要区分“已提交审批”和“已写入记忆文件”。

    记忆文件更新成功,不会立即重建当前系统提示。正常调用继续使用已加载的快照,以保持提示前缀稳定;发生上下文压缩后,系统会清除提示缓存并重新从磁盘加载记忆,新会话也会加载最新文件。因而写入与进入模型提示并非同一个动作。

    后台复盘按条件异步触发

    内置记忆复盘的默认间隔是 10 个用户回合。达到周期,且本轮有最终回复、未被中断、没有跳过后台复盘,并满足相关配置条件时,系统在交付回复后启动后台复盘;auxiliary.background_review.enabled 默认开启,也可以关闭。复盘会判断是否有值得保存的内容,可以得出“没有需要保存的信息”,并非每轮都提炼一条记忆。

    后台复盘使用独立执行分支,不把复盘对话混进用户的会话历史;真正更新内置记忆时,仍通过同一套同步文件写入机制。异步的是复盘调度与模型处理,文件更新本身仍等待写入完成。 该后台线程属于尽力而为的处理,进程退出可能使它中止,不等于具有持久队列和失败重放能力。额外接入外部记忆提供方时,还要按对应插件的同步与提取策略判断,不能套用内置文件记忆的时机。