ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

揭秘 Hermes Agent 三层记忆架构:SQLite+FTS5+Honcho 配置 TaoToken 实战

揭秘 Hermes Agent 三层记忆架构:SQLite+FTS5+Honcho 配置 TaoToken 实战 1. 为什么你的 Hermes Agent 总是“失忆”很多人第一次跑 Hermes Agent 时都会遇到同一个尴尬昨天刚在对话里说清楚“后端统一用 Go错误处理显式返回 error”今天新开一个会话让它写登录接口它又老老实实问一句“请问你想用什么语言”。这不是模型笨而是记忆链路没打通——会话一结束上下文就随风而去所有偏好都只活在当前 Context Window 里。Hermes Agent 被社区称为“越用越懂你”靠的不是更大的模型而是三层记忆架构的协同会话记忆负责当下对话的连贯持久记忆用 SQLite FTS5 把跨会话的事实和偏好落盘技能记忆把成功执行路径沉淀成可复用的 Skill。三层各司其职缺一层都会退化成普通聊天机器人。这篇不聊虚的架构图直接落到配置怎么在config.toml和settings.json里把三层记忆打开怎么把模型请求统一走 TaoToken 的 Key/API 通道以及怎么逐层验证“它真的记住了”。适合已经在本地跑 Hermes、但发现记忆时灵时不灵的开发者也适合准备把 Agent 投入长周期项目的人。下面每一步都能复制粘贴跑完你能亲眼看到 FTS5 检索命中历史偏好。2. 前置准备TaoToken 通道与 Hermes 环境在动记忆配置之前先把模型通道理顺。Hermes 的记忆层本身不产生推理它只负责存取真正“理解偏好”的动作还是模型完成的所以模型请求必须稳定、可切换。我习惯把 Hermes 的所有模型调用统一指向 TaoToken这样换模型不用改业务代码记忆层也不用关心底层是哪个模型。TaoToken 在这里扮演的是统一 Key/API 通道你拿到一个 Key就能在 Hermes 的配置里同时驱动对话模型和后续可能接入的编码模型。官网入口在 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 注册后在控制台生成 Key 即可。API 基址固定用 https://taotoken.net/api 注意这个地址不带任何查询参数配置里别画蛇添足。拿 Key 的路径很直接进控制台 → API Keys → 新建。生成后先复制到本地临时文件后面写进settings.json。如果你还没决定用哪个模型可以先去模型对话页面感受一下响应风格再回来配 Hermes。这一步不涉及记忆逻辑但它是后面所有验证的前提——通道不通记忆检索回来的内容也没法被模型正确消费。环境侧确认三件事Hermes 版本支持memory配置段较新版本才有、本地有可写的~/.hermes/目录、SQLite 编译时带 FTS5。第三点最容易被忽略很多系统自带的 sqlite3 没开 FTS5导致持久记忆建表直接报错。验证命令后面会给。3. 三层记忆的可复制配置骨架3.1 config.toml打开持久记忆与 FTS5Hermes 的主配置在~/.hermes/config.toml。三层记忆里会话记忆默认开启真正需要显式配置的是持久记忆和技能记忆。下面这份骨架可以直接用重点看[memory]段# ~/.hermes/config.toml [agent] name hermes-local workspace ~/.hermes/workspace [memory] enabled true persist true # 持久记忆落盘位置SQLite 文件 db_path ~/.hermes/memory/memories.db # 开启 FTS5 全文检索虚拟表 fts5 true # 记忆保留天数超期非关键记忆归档 retention_days 90 # 自动压缩琐碎对话为摘要 auto_compact true [memory.session] # 会话记忆的动态摘要阈值token summarize_threshold 6000 # 保留最近 N 轮原文更早的走摘要 keep_recent_turns 8 [memory.skill] enabled true # 技能沉淀目录 skill_dir ~/.hermes/skills # 触发沉淀的最小工具调用次数 min_tool_calls 5这里几个参数值得说清楚。fts5 true是持久记忆能否精准召回的关键关掉它 Hermes 只能做 LIKE 模糊匹配实体名、版本号这类精确信息召回率会明显下降。retention_days不是硬删除而是把超期记忆标记为可归档避免 FTS5 索引被临时测试数据污染。min_tool_calls 5对应技能记忆的触发条件——一次复杂任务至少五次工具调用才值得复盘成 Skill否则会沉淀一堆没价值的碎片。3.2 settings.json接入 TaoToken 统一通道模型通道写在~/.hermes/settings.json。Hermes 支持多 provider我们把默认 provider 指向 TaoToken{ provider: { default: taotoken, taotoken: { base_url: https://taotoken.net/api, api_key: sk-你的TaoToken密钥, model: claude-sonnet-4-5, timeout: 60 } }, memory: { inject_on_start: true, max_injected_items: 5, inject_categories: [user_preference, project_context, fact] } }memory.inject_on_start决定每次新会话开始时是否自动把持久记忆注入上下文max_injected_items控制注入条数——别设太大否则会挤占正常对话的窗口。inject_categories对应 FTS5 表里的分类字段只注入偏好、项目背景和事实三类把临时对话排除在外。Key 的获取和更多接入细节可以对照接入文档里面有不同语言的调用示例。如果你后面要跑长期编码任务Coding Plan 页面有面向 Agent 的套餐说明适合把 Hermes 挂在项目里持续用。3.3 初始化记忆库并确认 FTS5 可用配置写完先别急着跑 Agent手动初始化一次记忆库顺便验证 FTS5 是否真的可用# 确认 sqlite3 支持 FTS5 sqlite3 :memory: CREATE VIRTUAL TABLE t USING fts5(x); SELECT fts5-ok; # 初始化 Hermes 记忆库 hermes memory init --config ~/.hermes/config.toml # 查看生成的表结构 sqlite3 ~/.hermes/memory/memories.db .tables正常输出里应该能看到memories和memories_fts两张表后者就是 FTS5 的倒排索引虚拟表。如果第一条命令报no such module: fts5说明系统 SQLite 没编译 FTS5需要换一个带 FTS5 的构建或者用 Hermes 自带的 bundled sqlite。这一步过了持久记忆的地基才算稳。4. 逐层验证确认 AI 真的记住了偏好4.1 写入一条偏好并触发持久化先手动写一条偏好模拟真实使用中“告诉它我习惯用什么”的动作hermes memory add \ --category user_preference \ --content 后端统一使用 Go Gin错误处理显式返回 error禁止 panic写入后立刻用 FTS5 检索验证hermes memory search Go 错误处理预期返回刚才那条偏好并且带rank排序值。如果搜不到八成是fts5 true没生效或者写入时分类字段没进索引。这一步是整个三层架构里最该先跑通的因为后面 Honcho 建模和技能沉淀都依赖持久记忆能被准确召回。4.2 验证 Honcho 偏好建模是否生效Honcho 层不是简单存原文它会把多次交互归纳成结构化偏好。触发方式是让 Agent 在真实对话里反复否定同一类输出。比如连续两次让它写 Python你都反馈“类型提示不够严格”然后查看 Honcho 是否提取出深层偏好hermes memory list --category user_preference如果建模生效你会看到类似User prefers strict type hinting (mypy strict mode) in Python projects的归纳条目而不是两条零散的对话记录。这就是“记录”和“理解”的区别——前者是记事本后者是能跨项目复用的认知模型。4.3 验证技能记忆沉淀技能记忆的验证需要一次完整任务。让 Hermes 执行一个涉及五次以上工具调用的流程比如“扫描项目目录 → 读取配置 → 生成接口代码 → 跑测试 → 修复报错”。任务成功后检查技能目录ls ~/.hermes/skills/ cat ~/.hermes/skills/*.md | head -40应该能看到一个结构化的 Skill.md里面记录了触发条件、执行步骤和成功模式。下次遇到类似触发词Agent 会直接加载这个 Skill而不是重新走一遍 ReAct 循环。实测下来重复任务的耗时会有肉眼可见的下降。4.4 端到端验证新会话是否自动带上偏好最后做一次端到端验证。完全退出 Hermes重新启动一个新会话直接输入“帮我写一个用户登录接口”不要提任何语言和错误处理要求。如果三层记忆都通了它应该直接生成 Go Gin 代码带标准if err ! nil判断并在注释里说明遵循了你之前的规范。这一步成功说明从 SQLite 落盘、FTS5 召回、Honcho 建模到上下文注入的整条链路都通了。5. 本篇常见错排查FTS5 建表失败报no such module: fts5。原因是系统 SQLite 未编译 FTS5。解决方式是确认sqlite3版本并换用带 FTS5 的构建或让 Hermes 使用内置 sqlite。验证命令见 3.3。记忆写入了但搜不到先查config.toml里fts5是否为 true再确认写入时--category是否在inject_categories白名单内。分类不在白名单的记忆不会被注入但检索应该仍能命中如果检索也空就是索引没建。新会话不注入偏好检查settings.json里inject_on_start是否为 true以及max_injected_items是否被设成 0。另一个常见原因是db_path指向了不同文件导致读的是空库。TaoToken 请求 401Key 复制时带了空格或者base_url误写成带路径的形式。基址就用https://taotoken.net/api不要追加/v1之类。Key 失效就去 API Keys 页面重新生成。技能记忆不沉淀任务工具调用次数没到min_tool_calls阈值或者skill.enabled为 false。调低阈值测试确认目录可写。记忆库膨胀导致检索变慢retention_days设得太大或auto_compact关闭。定期跑一次hermes doctor检查完整性并按活跃项目清理过期上下文。6. 把通道和记忆一起用起来三层记忆配好之后Hermes 的行为会有明显变化它开始主动规避你踩过的坑自动采用你偏好的代码风格重复任务的执行路径越来越短。这套体验的前提是模型通道稳定所以建议把 TaoToken 的 Key 管理当成日常运维的一部分——需要排障或接入新模型时直接去 API Keys 页面处理想先感受模型响应风格模型对话页面可以快速试如果打算把 Hermes 长期挂在编码项目里Coding Plan 的套餐更贴合 Agent 的持续调用场景。记忆层负责“记住”通道层负责“稳定调用”两者都通了AI 才真正从工具变成懂你的协作伙伴。
返回列表