AI Agent记忆系统实战:Hermes三层知识架构搭建第二大脑
为什么AI Agent需要记忆系统
大语言模型的上下文窗口是有限的。即使是128K context的模型,一次对话消耗完就没了——下次对话从零开始。这意味着:
- 你每次告诉Agent”用简体中文回复”,下次对话它又忘了
- 上周调通的策略参数,这次又要重新推导
- 三个月前踩过的坑,今天又踩一遍
解决方案是给Agent建一套持久化记忆系统。 不是简单的聊天记录,而是分层的、可进化的、跨领域关联的知识网络。
本文以我实际运行的Hermes Agent为例,展示一套三层知识架构——从即时会话记忆,到中期自我进化,再到长期Wiki知识库,全部基于开源工具和零成本方案。
架构全景
┌──────────────────────────────────────────────────────────────────┐
│ Hermes Agent 三层知识架构 │
│ │
│ ┌───────────────┐ ┌───────────────┐ ┌───────────────────┐ │
│ │ 第一层:会话记忆 │ │ 第二层:自我进化 │ │ 第三层:Wiki知识库 │ │
│ │ (Always-on) │ │ (Daily cron) │ │ (Weekly compound)│ │
│ │ │ │ │ │ │ │
│ │ MEMORY.md │ │ ~/self-improving/│ │ ~/wiki/ (Obsidian)│ │
│ │ USER.md │ │ ├── memory.md │ │ ├── entities/ │ │
│ │ 2,200字符上限 │ │ ├── corrections│ │ ├── concepts/ │ │
│ │ 每轮自动注入 │ │ ├── suggestions│ │ ├── comparisons/ │ │
│ │ │ │ └── report_*.md│ │ ├── lessons/ │ │
│ │ ←快速偏好/规则 │ │ ←中期学习/纠错 │ │ └── raw/ │ │
│ └───────────────┘ └───────────────┘ └───────────────────┘ │
│ │ │ │ │
│ └───────────────────┼──────────────────────┘ │
│ ▼ │
│ ┌───────────────┐ │
│ │ IMA知识库云端 │ │
│ │ 9,153条内容 │ │
│ │ 对话记录归档 │ │
│ └───────────────┘ │
└──────────────────────────────────────────────────────────────────┘
三层各有分工:
| 层级 | 名称 | 触发频率 | 容量 | 用途 |
|---|---|---|---|---|
| 第一层 | 会话记忆 | 每轮对话 | 2,200字符 | 偏好、规则、关键参数 |
| 第二层 | 自我进化 | 每日cron | ~50KB/天 | 搜索发现、经验纠错、建议追踪 |
| 第三层 | Wiki知识库 | 每周cron | 178页/42万字 | 结构化知识、跨域关联、长期复利 |
第一层:会话记忆(MEMORY.md + USER.md)
设计理念
这是最底层的记忆——每轮对话自动注入system prompt,确保Agent始终”记得”你是谁、你的偏好是什么。
文件结构
~/.hermes/memories/
├── MEMORY.md # Agent的工作笔记(24条规则/参数/经验)
├── USER.md # 用户画像(12条身份/偏好/习惯)
├── MEMORY.md.lock
└── USER.md.lock
MEMORY.md:Agent的工作记忆
容量限制2,200字符(约24条条目),用§分隔。每条是一个紧凑的事实陈述:
核心规则 > 日常流程: **每日01:00**: 增量数据下载(pytdx CSV)→DuckDB同步
§
核心规则 > 关键信息: **飞书群聊ID**: oc_xxxxxx(您的群聊ID)
§
DuckDB > 5/8去重: 45M重复(75%→0%), ETL改UPSERT防重复. 股票15.2M行
§
策略: ETF轮动S1.37/白马v2.3年化+18.3%/聚宽组合S1.94
§
HTTP 400修复(6/18): fallback改deepseek-chat, reasoning_effort:none
关键设计原则:
- 声明式而非指令式 — “用户偏好简体中文” ✅,不要写”请用简体中文回复” ❌。声明式让Agent理解这是事实,指令式会被当成待执行任务
- 极度压缩 — 每条不超过一行。缩写、符号、代码片段都可以,只要Agent能理解
- 分类清晰 — 用
>做层级分隔(核心规则 > 日常流程、数据源 > pytdx),方便定位 - 过期清理 — 7天内会过期的信息不写入(如PR号、临时状态),保持信噪比
USER.md:用户画像
记录用户的身份和偏好,让Agent个性化响应:
姓名: 一名量化爱好者
§
**Timezone:** Asia/Shanghai (CST, UTC+8)
§
工作习惯:执行多任务时,完成一个自动开始下一个,不询问。
每小时汇报进度。不要在任务之间停下来问"需要继续吗"。
§
偏好:命令直接执行,不需要申请批准。
§
券商佣金: 万0.5 (0.005%)
§
饮食: 早晚餐规律午餐不规律,爱面条,重口味。
5:50起23:00睡(不足6h). 工程技术人员(某能源企业)
为什么有2,200字符限制?
这是刻意的设计。在128K context窗口中,记忆注入占用的空间必须控制——否则会挤压实际对话和工具调用的空间。2,200字符约500 token,不到context的0.4%,但足以携带最高优先级的24条规则。
超过限制时怎么办? 合并相似条目、删除过期信息、将详细内容下沉到第二层或第三层。这迫使你做信息筛选——只有真正重要的东西才留在HOT层。
第二层:自我进化引擎(~/self-improving/)
设计理念
第一层记忆是”被动记住”,第二层是”主动学习”。每天凌晨5点,Agent自动搜索互联网,发现新工具、新策略、新技术,将高价值信息归档。
文件结构
~/self-improving/
├── memory.md # WARM记忆(219行,12.8KB)
├── corrections.md # 纠错日志(最近50条)
├── heartbeat-state.md # 运行状态追踪
├── suggestions.md # 累计建议(561行,37.6KB)
├── report_2026-06-08.md # 每日进化报告(永久存档)
├── report_2026-06-05.md
├── ...
├── projects/ # 项目级学习(按项目隔离)
├── domains/ # 领域级学习(按领域隔离)
└── archive/ # 冷存储(过期内容)
每日进化流程
05:00 Cron触发 → flock并发保护
│
├── Step 0: 去重检查(读取最近3天报告的URL列表)
├── Step 1: 动态搜索(11组关键词,每天轮换)
│ ├── 固定池轮换(10类,按日期%d取模)
│ ├── 动态关键词(加入月份/季节/当前热点)
│ ├── Hermes Agent更新(每次必搜)
│ └── 当日财经热点
├── Step 2: 内容提取(web_extract深度读取)
│ └── 质量把关:跳过内容农场,保留GitHub/arXiv/官方文档
├── Step 3: 生成进化报告卡片
│ └── /tmp/hermes_self_evol_card_YYYY-MM-DD.md
├── Step 4: 上传飞书群聊(文件卡片)
└── Step 5: 追加到suggestions.md(长期追踪)
memory.md:WARM层记忆
与第一层的MEMORY.md不同,这里的memory.md没有2,200字符限制,可以展开记录完整的技术发现:
## [Agent] Context Engineering 取代 Prompt Engineering (2026趋势)
- Karpathy (2025.06) 提出: LLM=CPU, 上下文窗口=RAM, Agent=操作系统
- 任务: 给上下文加载"正确的代码和数据"
- 生产环境失败主因: 上下文拼装错误 > 提示词错误
- LangChain 4策略: write/select/compress/isolate
- "Lost in the Middle"问题: 关键信息放开头或结尾(>30%精度损失)
- 来源: https://thomas-wiegold.com/blog/...
## [量化] Dynamic Grid Trading (arXiv:2506.11921)
- 传统固定网格策略期望收益为零,仅是波动捕获器
- DGT: Geometric Grid + 动态参考价格 + 波动率自适应间距
- 对中国可转债网格V6.4: 动态间距思路可借鉴
三级存储机制
| 层级 | 位置 | 容量限制 | 行为 |
|---|---|---|---|
| HOT | 第一层MEMORY.md | ≤100行 | 每轮对话自动加载 |
| WARM | ~/self-improving/memory.md | ≤200行/文件 | 按上下文匹配加载 |
| COLD | ~/self-improving/archive/ | 无限 | 仅显式查询时加载 |
自动流转规则:
- 模式被3天内使用3次 → 提升到HOT
- 30天未使用 → 降级到WARM
- 90天未使用 → 归档到COLD
- 从不删除(只降级)
纠错机制:corrections.md
当Agent犯错被纠正时,自动记录到corrections.md,追踪同一错误的重复次数:
## 2026-02-19
### 14:32 — Code style
- **Correction:** "Use 2-space indentation, not 4"
- **Context:** Editing TypeScript file
- **Count:** 1 (first occurrence)
### 16:15 — Communication
- **Correction:** "Don't start responses with 'Great question!'"
- **Count:** 3 → **PROMOTED to memory.md**
同一纠正出现3次 → 自动提升到第一层MEMORY.md。这是防止反复犯错的防线。
第三层:Wiki知识库(Karpathy LLM Wiki模式)
设计理念
前两层解决”记住”和”学习”,第三层解决”知识复利”。基于Andrej Karpathy提出的LLM Wiki模式——不是每次从零检索(传统RAG),而是编译一次、持续维护、交叉引用。
核心思想:Wiki vs RAG
| 维度 | 传统RAG | LLM Wiki |
|---|---|---|
| 检索方式 | 每次查询从零检索向量 | 预编译知识网络 |
| 知识质量 | 原始文档直出 | 已综合、已去重、已交叉引用 |
| 矛盾处理 | 可能返回冲突信息 | 冲突已标记(contested字段) |
| 更新成本 | 重新embedding | Agent直接编辑markdown |
| 可读性 | 向量碎片 | 人类可读结构化文档 |
目录结构(三层架构)
~/wiki/ → YourVault/07_LLM_Wiki/ (符号链接)
├── SCHEMA.md # 层3: 规范定义(版本/标签/frontmatter规则)
├── index.md # 层3: 内容目录(每页一行摘要)
├── log.md # 层3: 操作日志(append-only,19.5KB)
├── raw/ # 层1: 不可变原始素材(86页)
│ ├── articles/ # - 网页文章
│ ├── papers/ # - arXiv论文
│ ├── ima/ # - IMA知识库回采(81个日报)
│ └── market-valuation-reports/
├── entities/ # 层2: 实体页(20页)
├── concepts/ # 层2: 概念页(41页)
├── comparisons/ # 层2: 对比分析(11页)
├── lessons/ # 层2: 教训提取(13页)
└── queries/ # 层2: 查询归档(2页)
Layer 1 — Raw Sources: 不可变。Agent读取但不修改。raw/下的每个文件带sha256哈希,重复摄入时检测漂移。
Layer 2 — The Wiki: Agent拥有和维护的markdown文件。创建、更新、交叉引用。
Layer 3 — The Schema: SCHEMA.md定义结构规范、frontmatter字段、标签分类。
SCHEMA v2.2:质量信号系统
每个wiki页面必须携带YAML frontmatter质量信号:
---
title: 可转债低价轮动
created: 2026-05-20
updated: 2026-06-15
type: entity
tags: [bond, cb, rotation, backtesting]
domain: quant
confidence: high # 多源(≥2)支持 + 数据明确
sources: [raw/articles/jisilu-cb.md]
# 可选质量信号
contested: false # 是否包含未解决矛盾
contradictions: [] # 冲突页面列表
sha256: <hex> # 仅raw/文件,检测源漂移
---
置信度判定:
high— 多源(≥2)支持 + 数据/证据明确medium— 单源但来源权威,或多源但有矛盾low— 单源非权威、推测、记忆模糊
每周lint时,所有confidence: low的页面被标记,待补强或降级。
六大领域 + 跨领域链接
Wiki覆盖6个领域,强制跨领域关联防止信息孤岛:
| 领域 | 页面数 | 示例 |
|---|---|---|
| 量化交易 | ~80 | 策略/回测/数据/风控/实盘 |
| 健康档案 | ~15 | 体检/血压/TG/脂肪肝/饮食 |
| 工作业务 | ~10 | 煤矿通风/党建/谈心谈话 |
| 家庭决策 | ~5 | 理财/教育/家事 |
| 读书学习 | ~5 | 技术/通识/历史 |
| 自我认知 | ~5 | 个人画像/目标/反思 |
跨领域硬性指标:
- 每个新页面至少1条出链指向其他领域
- 每月至少新建1页在非量化领域
- 跨领域链接密度 ≥ 10%
实际效果——这是我最喜欢的跨领域对比页:
┌─────────────────────────────────────────────────────┐
│ comparisons/quant-risk-YOUR_API_KEY-health-risk.md │
│ │
│ 维度 量化交易 健康 │
│ 回撤 策略最大回撤 体检指标恶化 │
│ 黑天鹅 流动性危机 急性病/意外 │
│ 杠杆放大 融资融券 多项坏习惯叠加 │
│ 止损规则 止损/仓位/分散 控压/控糖/控盐 │
│ 复利效应 年化+20% 每天散步30min │
│ 均值回归 策略失效回归基准 不良习惯会回归 │
└─────────────────────────────────────────────────────┘
用量化交易的风险管理思维,反过来理解健康管理——这就是跨领域知识复利。
思考循环(O-D-W Hook)
wiki-think-hook skill强制Agent在研究/决策任务中执行Orient→Decide→Write循环:
┌─ ORIENT(前置)──────────────────────────────────┐
│ 读index.md + search_files + 读log.md最近30行 │
│ → 了解已有知识,避免重复创建 │
└──────────────────────────────────────────────────┘
↓
┌─ DECIDE(引用)──────────────────────────────────┐
│ 回答必引用 [[page-a]] [[page-b]] │
│ 标注 confidence(high/medium/low) │
│ 存在 contested: true 必呈现双方立场 │
│ 指出wiki知识缺口 │
└──────────────────────────────────────────────────┘
↓
┌─ WRITE(回写)───────────────────────────────────┐
│ 综合对比 → comparisons/<topic>.md │
│ 新问题被答 → queries/<date>-<topic>.md │
│ 失败教训 → lessons/<type>-<topic>.md │
│ 新事实 → 更新entity/concept页 + bump updated │
└──────────────────────────────────────────────────┘
关键规则: 任何”X是什么/为什么/怎么办”的问题,先读index再回答。策略对比先搜现有comparison。>5次工具调用的长任务结束后,必须评估是否写回Wiki。
知识管道:5路Pre-Collection
每周日凌晨3:40,一条完整的知识管道自动执行:
03:10 P1 IMA回采 → raw/ima/*.md (从IMA知识库反向提取)
03:20 P2 Session提炼 → lessons/session-digest.md (从551MB FTS5数据库)
03:30 P3 Skills提取 → concepts/skill-inventory.md (193个Skill元数据)
03:40 Main Update → 新建≥3页 + 更新≥5页 + ≥1跨域 + ≥1 comparison/lesson
P1 IMA回采: 从腾讯IMA个人知识库(9,153条内容)反向提取7天的对话知识。IMA API的search_note_book按相关度排序,按日期搜索更可靠。
P2 Session提炼: 查询Hermes的~/.hermes/state.db(551.7MB SQLite FTS5数据库),找到高价值用户会话(非cron、>20条消息、含知识关键词),提取核心讨论到Wiki。
P3 Skills提取: 扫描所有193个Skill的YAML frontmatter,生成完整技能清单。
数据规模
| 指标 | 数值 |
|---|---|
| Wiki总页数 | 178页 |
| 总字符数 | 419,482(41.9万字) |
| SCHEMA版本 | v2.2 |
| 跨领域对比页 | 11页 |
| 教训提取页 | 13页 |
| 原始素材页 | 86页(含81个IMA日报) |
| 自我进化建议累计 | 561行 |
IMA知识库:云端对话归档
除了三个本地层级,还有一个云端备份层——腾讯IMA个人知识库。
每日00:00 Cron自动执行
│
├── 提取当天Hermes对话记录
├── 格式化为Markdown文档
└── 上传到IMA知识库(API: import-topic-data)
IMA知识库当前9,153条内容,涵盖:
- 每日对话归档(81天连续记录)
- 全市场估值周报(每周一自动归档)
- 策略研究报告
双向管道: IMA不只是归档目标。P1回采脚本每周日从IMA反向提取知识到Wiki,形成闭环。
实际效果:系统运行数据
三层协同时间线(典型一天)
01:00 📥 增量数据下载(量化系统K线更新)
03:10 🔄 P1 IMA回采(从云端提取知识到Wiki)
03:20 🔄 P2 Session提炼(从对话数据库提取知识)
03:30 🔄 P3 Skills提取(更新技能清单)
03:40 📝 周日Wiki综合更新(新建+更新+lint)
05:00 🧠 自我进化搜索(全网搜索新知识)
06:00 🌅 早间检查(系统巡检→飞书通知)
07:20 📝 自我进化报告→博客文章
00:00 📤 对话记录归档到IMA
知识流转路径
用户对话 → Session DB(551MB FTS5)
│ ↓
│ P2提炼 → Wiki lessons/
│
├──→ IMA云端(9,153条)
│ ↓
│ P1回采 → Wiki raw/ima/
│
└──→ 自我进化(每日搜索)
↓
suggestions.md(561行)
↓
MEMORY.md(精选24条)
周度Lint评分
Wiki每周自动执行12项Lint检查,综合评分公式:
总分 = pages(20) + cross-domain(10) + outlinks(15) + broken-links(10)
+ orphans(10) + confidence(10) + completeness(10) + cross-domain-depth(15)
= 100
最近一次评分:95/100(A+级),7领域均衡发展。
避坑指南
坑1:MEMORY.md膨胀
问题: 记忆条目越加越多,超过2200字符限制
根因: 把临时状态(PR号、Bug编号)写入了持久记忆
解决: 只写"7天后仍有价值"的事实。临时状态用session_search检索
坑2:Wiki退化为单领域堆栈
问题: Wiki 90%都是量化交易,健康/工作/家庭页面稀少
根因: 没有跨领域强制规则
解决: SCHEMA v2.2新增跨领域硬性指标:每月≥1页非量化、跨域链接密度≥10%
坑3:自我进化报告重复
问题: 每天的进化报告和前三天高度重复
根因: 搜索关键词固定不变
解决: 10类关键词按日期%d取模轮换 + 每天必须生成2个全新搜索词
+ 读取最近3天报告URL列表做去重
坑4:O-D-W Hook被跳过
问题: Agent面对复杂问题直接回答,不读Wiki
根因: think-hook是建议性的,Agent可能跳过
解决: 将O-D-W写入skill的HARD RULES,用关键词触发
("为什么/怎么办/X vs Y" → 强制读index.md)
坑5:raw/目录缺乏哈希校验
问题: 重新摄入同一篇文章时不知道内容是否变化
解决: raw/文件frontmatter加sha256字段
相同URL摄入 → 比对哈希 → 相同跳过/不同标记漂移
技术栈总结
| 组件 | 技术选型 | 成本 |
|---|---|---|
| AI Agent | Hermes Agent (Nous Research) | 开源免费 |
| 会话记忆 | MEMORY.md + USER.md(文件) | 免费 |
| 自我进化 | ~/self-improving/(Markdown) | 免费 |
| Wiki知识库 | YourVault + Markdown | 免费 |
| 知识搜索 | SQLite FTS5(551MB session DB) | 免费 |
| 云端归档 | 腾讯IMA个人知识库 | 免费 |
| 搜索引擎 | Tavily + arXiv API + GitHub API | 免费额度 |
| 通知 | 飞书群聊(文件卡片+消息) | 免费 |
| 调度 | Hermes Cron(28个定时任务) | 免费 |
总成本:0元。 全部基于开源工具和免费API额度。
从零搭建:行动清单
如果你想复制这套架构,按以下顺序操作:
第一步(30分钟):会话记忆
- 安装Hermes Agent
- 编辑
~/.hermes/memories/MEMORY.md:写入你的核心偏好(语言、时区、工作习惯) - 编辑
~/.hermes/memories/USER.md:写入用户画像(身份、专长、约束)
第二步(1小时):自我进化
- 创建
~/self-improving/目录结构 - 设置每日cron job:搜索你关注领域的最新信息
- 建立
suggestions.md做长期追踪
第三步(2小时):Wiki知识库
- 安装Obsidian(可选,Agent直接操作markdown也行)
- 创建Wiki目录结构(entities/concepts/comparisons/lessons/raw)
- 写
SCHEMA.md定义你的领域和规范 - 写
index.md做内容目录 - 从最重要的10个概念开始建页
第四步(持续优化):管道打通
- 设置每日对话归档(到云笔记或本地)
- 设置每周Wiki更新cron(新建+更新+lint)
- 加入wiki-think-hook(O-D-W思考循环)
- 持续优化搜索关键词和去重策略
本文基于作者实际运行的Hermes Agent系统(2026年6月状态)。178页Wiki、24条持久记忆、561条进化建议、28个定时任务——全部从零搭建,零成本运行。