前言
为什么选hermes-agent?
- Letta 优点是“记忆”
- claude code 优点是”编码“
- openclaw 优点是预定义工作流
- hermes 自进化 + 通用 + 可审计(开源 LLM 微调的机构开源)
核心特点
- 持久化记忆,每次启动不需要重新认识
- 自沉淀能力,可自写技能
- 跨入口统一,cli、微信、飞书、web不同入口,都是同一个大脑
- 可观测、可评估、可审计
自动生成 skill
- 当检测到一个”值得沉淀的重复模式“,会主动和用户协商是否要创建skill
- 协商机制会在后面说
数据库 db 介绍
- 每次问答,包括模型的思考过程、调用工具的参数、工具返回的结果,都会完整的保存下来,放进 db 数据库
- 数据库介绍
- FTS5:构建高效全文搜索的虚拟表模块。虚拟表模块,用来做关键词搜索;普通数据库,使用 LIKE 操作符匹配,速度太慢,性能太差,会扫描每一条记录
- Hermes记忆 = sqlite会话历史 + memory/目录下的持久化笔记 + skills/目录下程序化知识 + FTS5索引 + LLM压缩摘要
记忆系统
记忆是agent讨论最多的,被作对最少得部分;能把记忆做成一个可工程化的子系统的项目屈指可数。原因很简单,记忆不是一个算法问题,而是一个何时写、何时读、何时忘的策略问题,而策略的好坏只能在使用中验证
window context 上下文 ≠ memory
LLM 上下文窗口,有128K,大的有2M了(Gemini 1.5 Pro);足够塞进去一本书,把所有对话历史都塞进 context,不就有记忆了?
会有如下问题
- 成本问题,太耗token了
- 延迟,首 token 延迟会增加,200K的 context 通常会有3-5秒后才会有第一个 token 输出,而10k的context,通常在500ms以内
- 注意力被稀释,模型对开头和结尾注意力高于中间位置的
content window 是工作记忆,应该装载当前任务直接相关的信息
Hermes的三层记忆
对于不同的写入频率、检索策略、淘汰机制,归纳到不同的层
- 会话历史 -> sqlite: state.db messages表、按对话分组、FTS5全文检索
- 持久化笔记 -> memory目录:纯md文档、按主题组织、用户画像 事实 偏好等
- 程序化知识 -> skills目录:每个skills文件
会话历史
- 采用sqlite 记录全部过程,FTS5 全文索引能够精确回忆,比向量索引更准。
- sqlite .db 文件方便迁移。
- 方便阅读,sqlite3 命令行快速打开查看
代价是超大规模的记忆有性能问题(千万级别);单对于个人组手,目前是够用的
持久化笔记
前言
为什么选hermes-agent?
核心特点
自动生成 skill
数据库 db 介绍
记忆系统
window context 上下文 ≠ memory
LLM 上下文窗口,有128K,大的有2M了(Gemini 1.5 Pro);足够塞进去一本书,把所有对话历史都塞进 context,不就有记忆了?
会有如下问题
content window 是工作记忆,应该装载当前任务直接相关的信息
Hermes的三层记忆
对于不同的写入频率、检索策略、淘汰机制,归纳到不同的层
会话历史
代价是超大规模的记忆有性能问题(千万级别);单对于个人组手,目前是够用的
持久化笔记