ARTICLE DETAIL

资讯详情

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

AI Agent 记忆系统架构设计:OpenClaw、Claude Code、Hermes Agent 配置对比与 TaoToken 接入实践

AI Agent 记忆系统架构设计:OpenClaw、Claude Code、Hermes Agent 配置对比与 TaoToken 接入实践 1. 为什么 Agent 的记忆系统值得单独拆开看AI Agent 的记忆系统说白了就是解决一个很朴素的问题大模型本身没有状态每次调用都从零开始。你昨天告诉它的偏好、上周踩过的坑、项目里那条不能碰的约定它默认全都不记得。所以任何能长期干活的 Agent都得在模型外面自己搭一套记忆机制。这套机制要回答四件事存什么、存在哪、怎么取、怎么管。OpenClaw、Claude Code、Hermes Agent 这三个框架恰好给出了三种完全不同的答案。OpenClaw 把文件系统当唯一真理来源Claude Code 把 Token 预算当稀缺资源来调度Hermes 则把记忆按访问模式切成四层情景记忆是它的核心差异点。这篇不聊空泛的架构哲学直接落到能跑起来的配置上。我会先讲清楚三者的记忆骨架差异然后给出各自的配置文件片段settings.json、config.toml 这类最后用 TaoToken 做统一 Key 和 API 通道把三个 Agent 的模型调用都接进来并给出记忆读写的验证动作。适合已经在折腾 Agent、想让记忆系统可复现、而不是每次重装都靠记忆重建的开发者。2. 三类 Agent 记忆架构的骨架差异2.1 OpenClaw文件即记忆两层结构OpenClaw 的核心约束是一句话没有写进文件的不存在。它的长期状态全部落在磁盘的 Markdown 文件里目录结构大致是这样~/.openclaw/workspace/ ├── MEMORY.md # 长期记忆精华每次会话加载 ├── SOUL.md # Agent 身份定义 └── memory/ ├── 2026-04-12.md # 当日日志短期追加写入 ├── 2026-04-11.md └── ...短期层是memory/YYYY-MM-DD.md当天的工作日志追加写入不做整理今天和昨天的自动注入上下文。长期层是MEMORY.md从日志里沉淀出来的稳定事实和用户偏好每次会话都在场。这个两层设计解决的是「想记住很多」和「上下文放不下很多」之间的矛盾。检索上 OpenClaw 用混合搜索语义搜索加 BM25 关键词搜索并行跑结果合并取最相关片段。向量索引存在 SQLite 里走 sqlite-vec 扩展不额外起向量数据库部署简单。它最容易被忽略、也最容易出问题的环节是 Context Compaction。长会话撑爆窗口时要压缩历史但只存在于对话历史里的约定会在压缩中消失。OpenClaw 的解法是 Memory Flush压缩触发前先跑一个静默轮次提示模型把当前上下文里的重要信息写进磁盘然后再压缩。文件里的内容压缩不碰只有对话历史会被压。2.2 Claude Code上下文工程优先路径编码相关性Claude Code 不把自己当存储系统而是一套 Token 预算分配和信息注入机制。它的判断是上下文窗口的容量不等于可用容量模型对头尾注意力强、中间弱所以关键不是存更多而是在正确时机注入正确信息。它的分层文件体系用路径来编码相关性~/.claude/CLAUDE.md # 用户级所有项目都加载 ~/project/CLAUDE.md # 项目级进入项目加载 ~/project/src/CLAUDE.md # 目录级进入该目录加载不需要写检索算法当前工作目录在哪文件系统路径本身就决定加载哪些规则。代价是只能做静态的「这个目录用什么规则」做不了动态的「这个任务需要什么知识」。另外 Claude Code 对 Token 消耗有三档预警70% 提示、85% 再提示、90% 自动压缩并且把 Token 使用量注入 Agent 自身上下文让它能感知剩余预算来规划任务。2.3 Hermes Agent四层分离情景记忆是核心Hermes 的思路是不同访问模式的记忆必须在不同介质里用不同方式管理。它把记忆严格切成四层。第一层热记忆始终注入、零延迟~/.hermes/memories/ ├── MEMORY.md # 环境事实上限约 800 token └── USER.md # 用户偏好上限约 500 token上限设得小是刻意的强制你做信息质量控制同时对 Prefix Cache 友好。第二层历史归档放在~/.hermes/state.dbSQLite 加 FTS5 全文索引由 Agent 主动调用session_search检索不自动注入。第三层是情景记忆也就是 Skills 系统~/.hermes/skills/ ├── research-workflow.md # 某类任务的最优执行路径 ├── image-generation.md # 图片生成任务的经验积累 └──>export TAOTOKEN_API_KEYsk-你的key export TAOTOKEN_BASE_URLhttps://taotoken.net/api注意Key 只放环境变量或本地配置文件不要提交进 Git。三个 Agent 的配置里都引用同一个变量换 Key 时只改一处。4. 可复制配置三个 Agent 的骨架片段4.1 OpenClaw 的 config.tomlOpenClaw 的模型通道和记忆目录分开配。下面这段把模型指向 TaoToken同时固定 workspace 路径保证记忆文件位置可复现# ~/.openclaw/config.toml [model] provider openai-compatible base_url https://taotoken.net/api api_key_env TAOTOKEN_API_KEY model claude-sonnet-4 max_tokens 8192 [memory] workspace ~/.openclaw/workspace short_term_dir memory long_term_file MEMORY.md auto_inject_days 2 # 今天和昨天日志自动注入 hybrid_search true # 语义 BM25 混合检索 vector_store sqlite # 向量索引落 SQLite [compaction] threshold 0.85 # 达到 85% 触发 memory_flush true # 压缩前先静默写盘memory_flush true是重点别关。它保证压缩前重要信息先落文件避免「对话里说好的规则被压没了」这个经典 bug。4.2 Claude Code 的 settings.jsonClaude Code 走环境变量注入通道settings.json 里配权限和记忆文件层级{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_API_KEY: ${TAOTOKEN_API_KEY} }, memory: { userFile: ~/.claude/CLAUDE.md, projectFile: CLAUDE.md, directoryFiles: true }, context: { tokenWarnThresholds: [0.7, 0.85, 0.9], injectTokenUsage: true } }injectTokenUsage打开后Agent 能感知自己还剩多少预算规划任务时会更保守不会一口气读十个大文件然后卡在压缩点。4.3 Hermes Agent 的 config.tomlHermes 四层记忆要分别指定路径和上限# ~/.hermes/config.toml [model] base_url https://taotoken.net/api api_key_env TAOTOKEN_API_KEY model claude-sonnet-4 [memory.hot] memory_file ~/.hermes/memories/MEMORY.md user_file ~/.hermes/memories/USER.md memory_token_limit 800 user_token_limit 500 [memory.archive] db_path ~/.hermes/state.db index fts5 auto_inject false # 历史归档不自动注入靠主动检索 [memory.skills] dir ~/.hermes/skills progressive_disclosure true # 先加载名称描述相关才加载全文 auto_update true # Skill 使用中自我更新auto_inject false和progressive_disclosure true是 Hermes 省 Token 的关键别为了「记得全」把它们改成 true否则系统提示会随使用时间无限膨胀。5. 验证请求与记忆读写动作配置写完先验证模型通道通不通再验证记忆读写。5.1 验证 TaoToken 通道用 curl 打一次对话接口确认 Key 和 base_url 生效curl -s https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer $TAOTOKEN_API_KEY \ -H Content-Type: application/json \ -d { model: claude-sonnet-4, messages: [{role: user, content: 只回复两个字通了}] }返回里能看到choices[0].message.content是「通了」说明通道没问题。如果报 401检查 Key 有没有带Bearer前缀报 404检查 base_url 是不是多了或少了/v1。5.2 验证 OpenClaw 记忆写入启动 OpenClaw 后在对话里让它记一条明确的事实然后直接看文件# 对话里说记住本项目部署分支是 release-2.3 cat ~/.openclaw/workspace/memory/$(date %F).md当日日志里应该出现这条记录。再触发一次压缩或手动跑 flush确认MEMORY.md里也沉淀了这条。如果只在日志里、没进长期记忆说明提炼环节没跑检查 Dreaming 是否开启或手动补写。5.3 验证 Claude Code 分层加载在项目根目录建CLAUDE.md写一条规则进子目录建另一个然后启动会话问它当前目录适用哪条规则。它应该只加载当前路径链上的文件。验证 Token 预警是否生效可以在长会话里观察 70% 和 85% 的提示是否出现。5.4 验证 Hermes 的 Skills 检索让 Hermes 完成一个多步任务五次以上工具调用然后看 skills 目录ls -la ~/.hermes/skills/如果生成了新的 Markdown 文件说明情景记忆写入成功。再开一个新会话问它「上次那个任务是怎么做的」观察它是否主动调用session_search或加载对应 Skill。这一步能验证「主动检索」而不是「自动注入」的设计是否按预期工作。6. 本篇常见错排查Key 配了但三个 Agent 只有一个能通。大概率是环境变量没导出到当前 shell。export只对当前会话有效写进~/.bashrc或~/.zshrc后记得source一次。三个 Agent 如果跑在不同用户下各自都要配。OpenClaw 记忆文件不生成。先确认workspace路径存在且可写路径里的~有些版本不展开建议写绝对路径。再看memory_flush是否被关掉关掉后压缩前不写盘长会话里记忆会丢。Claude Code 加载了不该加载的 CLAUDE.md。检查当前工作目录路径层级是 O(1) 查找你在哪个目录启动就加载哪条链。跨项目复用时别把用户级~/.claude/CLAUDE.md写得太具体否则所有项目都被污染。Hermes 系统提示越来越长。多半是把auto_inject改成了 true或者热记忆上限调太大。热记忆上限小是特性不是 bug它逼你做信息取舍。历史归档就该靠主动检索别图省事全塞进去。检索搜不到想要的内容。OpenClaw 的混合搜索如果只命中语义、没命中关键词检查 BM25 是否开启。Hermes 的 FTS5 语义理解弱搜「auth service」找不到「身份验证微服务」是已知权衡需要语义能力就上向量扩展。压缩后 Agent 行为变了。这是记忆系统最隐蔽的坑。确认 Memory Flush 在压缩前真的跑了日志里应该有静默轮次的记录。如果没跑重要约定只存在于对话历史压缩即消失。排障和接入相关的问题优先查接入文档 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 和 API Keys 页面 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 。想先验证模型通道是否正常可以直接用模型对话 https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodelsutm_campaignrewrite 跑一轮。如果你是要长期跑编码类 Agent、反复调记忆和上下文Coding Plan https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite 会更省心配合 Claude Code 的 Anthropic 兼容通道 https://taotoken.net/claude-code-anthropic?utm_sourcetaotoken_aicg_blog_endutm_contentclaudecodeutm_campaignrewrite 直接接上就行。最后说个我自己的习惯三个 Agent 的记忆目录我都用 Git 管起来MEMORY.md、CLAUDE.md、skills/全部纳入版本控制。这样每次记忆被改、被压缩、被 Skill 自我更新都能 diff 出来。记忆系统出问题时git log比任何日志都好用——你能看到 Agent 到底在哪一步把哪条记忆弄丢了。
返回列表