
1. 为什么你的 Agent 总是“用完就忘”很多人第一次搭 Agent 的时候都会遇到同一个尴尬明明昨天刚教它一套部署流程今天再问它像失忆一样从头推理你反复纠正它“我们项目里日志统一用 loguru不要用 print”下次它照样给你 print。任务跑完就结束经验一点没留下Agent 成了一个每次都要重新培训的实习生。这不是模型不够聪明而是架构里缺了“成长”这条链路。Hermes 这个智能体的设计重心恰好就压在这里——它把“学习优先”做成了底层机制而不是靠提示词硬撑。它靠三件事让 Agent 越用越顺手闭环学习循环负责从每次任务里提炼经验技能自生成把经验固化成可复用的操作手册分层记忆系统则像人脑一样把记忆分成会话、持久、技能三层来管理。这篇面向想构建可自我迭代 Agent 的开发者交付两样能直接跑起来的东西一套可复制的分层记忆配置以及一个能验证闭环学习是否真的触发的端到端步骤。模型调用统一走 TaoToken 的 Key/API 通道省去多供应商切换的麻烦。读完你就能判断自己的 Agent 到底是在“成长”还是只是在“重复劳动”。2. Hermes 分层记忆系统配置与闭环学习循环触发条件先把概念落到文件上。Hermes 的分层记忆不是抽象口号它对应磁盘上一组真实目录和索引文件。理解这套结构你才知道闭环学习循环到底往哪里写东西。2.1 三层记忆各存什么会话记忆Episodic Memory像日记本记录具体对话历史。关键点是它不会把所有历史都塞进上下文而是用全文检索FTS5按需查找。这意味着 Agent 跑几个月也不会因为上下文爆炸而变慢。持久记忆Semantic Memory像个人档案提炼你的偏好、习惯、项目信息比如它从你多次改代码的行为里推断出你偏好简洁风格。技能记忆Procedural Memory就是操作手册记住的是“怎么做”的方法论对应一个个 SKILL.md 文件。记忆层类比存储内容检索方式会话记忆日记本对话历史、任务轨迹FTS5 全文检索持久记忆个人档案偏好、习惯、项目信息语义匹配技能记忆操作手册SKILL.md 方法论按任务类型调用2.2 闭环学习循环的触发条件闭环学习循环不是每轮对话都触发那样会浪费算力。它有三个明确的触发点任务调用了超过 5 次工具、执行中犯错后自我修正、或者你主动纠正了它的操作。满足任一条件Hermes 就在后台启动一个独立的“思考”过程复盘整个执行路径判断哪些经验值得保留然后主动沉淀。这个过程内建且自动不需要你写规则。2.3 可复制的记忆分层配置下面这份配置可以直接落到你的 Hermes 工作目录。路径按你实际项目调整字段名保持一致即可。# hermes.toml —— 分层记忆与学习循环配置 [memory] enabled true base_dir ./.hermes/memory [memory.episodic] # 会话记忆日记本按需检索 store sqlite path ./.hermes/memory/episodic.db index fts5 max_context_tokens 8000 # 单次注入上下文的硬上限 retention_days 180 # 超过半年的会话归档 [memory.semantic] # 持久记忆个人档案提炼偏好 store jsonl path ./.hermes/memory/semantic.jsonl extract_on [task_complete, user_correction] confidence_threshold 0.7 # 低于此置信度的推断不写入 [memory.procedural] # 技能记忆操作手册 store markdown path ./.hermes/skills auto_patch true # 允许以打补丁方式优化已有技能 [learning_loop] enabled true trigger_tool_calls 5 # 工具调用超过 5 次触发复盘 trigger_on_self_correct true # 自我修正后触发 trigger_on_user_fix true # 用户纠正后触发 review_model claude-sonnet-4-5 write_skill_threshold 0.75 # 复盘评分达标才生成 SKILL.md这份配置里最容易被忽略的是confidence_threshold和write_skill_threshold。前者太低会让 Agent 把偶然行为当成你的偏好后者太低会生成一堆没用的技能文件。我建议先按 0.7 和 0.75 起步跑一周后再根据技能库质量微调。2.4 技能自生成的落盘形态复盘通过后Hermes 会生成一个结构化的 SKILL.md。它不是随便写段文字而是带触发条件和步骤的结构--- name: deploy-fastapi-service trigger: 用户要求部署 FastAPI 服务到测试环境 confidence: 0.86 version: 3 --- ## 步骤 1. 检查 requirements.txt 是否含 uvicorn 2. 使用 loguru 配置日志禁止 print 3. 执行 uvicorn main:app --host 0.0.0.0 --port 8000 4. 用 curl 验证 /health 返回 200 ## 历史补丁 - v2: 增加 loguru 检查用户纠正 - v3: 端口从 8080 改为 8000任务失败后修正注意version和历史补丁字段。Hermes 优化技能时是打补丁而不是整体重写这样你能清楚看到这个技能是怎么一步步进化的。相比之下靠人工维护的技能库不会因为你个人的使用而自动迭代。3. 用统一 Key 通道接入模型完成端到端验证配置写好了接下来得让 Hermes 真正能调用模型。这一步用 TaoToken 的统一通道一个 Key 覆盖多家模型省去为每个供应商单独配环境变量的麻烦。3.1 获取 Key 与 Base URL到 TaoToken 控制台创建一个 API Key然后记住两个地址Base URL 用https://taotoken.net/api模型对话和 Coding Plan 的入口在控制台里都能找到。Key 只在创建时完整显示一次记得存好。3.2 写入 Hermes 的模型配置Hermes 读取模型配置的方式和大多数 Agent 框架一致认 Base URL、Key、Model ID 三件套。把下面这段加到你的配置里{ provider: taotoken, base_url: https://taotoken.net/api, api_key: sk-你的TaoToken密钥, model: claude-sonnet-4-5, review_model: claude-sonnet-4-5, timeout_seconds: 60, max_retries: 3 }如果你用的是 Claude Code 这类工具做技能润色配置逻辑一样把 Base URL 指向https://taotoken.net/apiKey 填进去Model ID 选你套餐里支持的模型即可。三件套缺一不可尤其是 Model ID写错了会直接报模型不存在。3.3 环境变量方式推荐不想把 Key 写进文件的话用环境变量更安全export TAOTOKEN_API_KEYsk-你的TaoToken密钥 export TAOTOKEN_BASE_URLhttps://taotoken.net/api export HERMES_MODELclaude-sonnet-4-5然后在hermes.toml里把api_key改成${TAOTOKEN_API_KEY}引用。这样配置文件可以进版本库Key 不会泄露。3.4 验证模型通道连通在正式跑学习循环前先单独验证通道是通的curl https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer $TAOTOKEN_API_KEY \ -H Content-Type: application/json \ -d { model: claude-sonnet-4-5, messages: [{role: user, content: 回复 OK 两个字母}] }返回里能看到choices数组且内容为 OK说明通道没问题。这一步别跳过后面学习循环报错时你能快速判断是通道问题还是逻辑问题。4. 验证闭环学习循环是否真的触发配置和通道都就绪现在跑一个真实任务看 Hermes 会不会自动学习。这一步是整个实践的核心也是区分“会成长的 Agent”和“普通 Agent”的分水岭。4.1 构造一个会触发学习的任务触发条件是工具调用超过 5 次。所以别问它“11 等于几”要给它一个需要多步操作的任务。比如帮我在当前目录创建一个 Python 项目包含 main.py、requirements.txt、README.md然后初始化 git 仓库并提交。这个任务会触发文件创建、内容写入、git 初始化、git add、git commit 等多次工具调用稳稳超过 5 次。4.2 观察后台复盘任务完成后去看.hermes/memory/目录。如果闭环学习循环正常工作你会看到ls -la .hermes/memory/ # episodic.db 会话记忆记录了刚才的任务轨迹 # semantic.jsonl 持久记忆可能新增了“用户偏好 Python 项目结构”这类条目 ls -la .hermes/skills/ # create-python-project.md 新生成的技能文件打开新生成的 SKILL.md检查它的confidence字段是否达到你设的write_skill_threshold。如果没生成技能文件说明复盘评分没过线可能是任务路径不够清晰换个更规范的任务再试。4.3 验证技能是否被复用关键验证在第二次。再给 Hermes 一个类似任务再创建一个 Python 项目这次叫 demo2。如果技能记忆生效Hermes 这次不会从零推理而是直接调用create-python-project技能执行速度明显更快工具调用次数也会下降。你可以在日志里看到它加载了哪个 SKILL.md。4.4 验证技能自迭代故意在第二次任务里纠正它一次比如“README 里要加一行安装说明”。如果auto_patch true生效Hermes 会以打补丁方式修改 SKILL.md而不是重写整个文件。再打开技能文件你会看到version从 1 变成 2历史补丁里多了一条记录。这就是“越用越懂你”的具体形态。4.5 用模型对话做交叉验证想更直观地看记忆效果可以在 TaoToken 的模型对话入口里把 Hermes 的持久记忆内容贴进去问模型“基于这些偏好下次任务应该注意什么”。模型会基于 semantic.jsonl 里的条目给出建议这能帮你确认持久记忆提炼得准不准。5. 接入与学习循环常见报错排查跑起来之后大概率会撞几个坑这里按真实报错对照排查。5.1 401 Unauthorized最常见。原因通常是 Key 没读到或写错了。检查三处环境变量TAOTOKEN_API_KEY是否 export 成功echo $TAOTOKEN_API_KEY看有没有值、配置文件里引用格式是否是${TAOTOKEN_API_KEY}、Key 有没有多余空格。如果用的是 JSON 配置确认api_key字段名没拼错。5.2 local proxy failed / connection refused这个报错说明请求根本没发出去。先确认 Base URL 是https://taotoken.net/api没有多余路径。再检查本机网络是否能正常访问该地址用前面那条 curl 命令单独测一次。如果 curl 通但 Hermes 不通多半是 Hermes 读的配置文件和你想的不是同一个检查工作目录。5.3 reading choices of undefined这个报错意味着返回体里没有choices字段通常是模型名写错了或者请求体格式不对。确认model字段是你套餐里真实支持的 Model ID别自己编。另外检查messages数组格式role 和 content 都不能少。5.4 OAuth 相关报错如果你用的是 Claude Code 这类带 OAuth 流程的工具报 OAuth 错误通常是认证方式冲突——既配了 OAuth 又配了 API Key。统一走 API Key 通道时把 OAuth 相关配置清掉只保留 Base URL、Key、Model ID 三件套。5.5 技能文件生成了但没被复用检查 SKILL.md 的trigger字段描述是否和你的新任务语义匹配。触发描述太窄会导致匹配不上太宽会误触发。另外确认confidence是否达标没达标的技能不会被加载。5.6 记忆库越来越大导致变慢如果 episodic.db 膨胀到影响性能检查retention_days是否生效以及 FTS5 索引是否正常。会话记忆的设计初衷就是不全量注入上下文如果你发现上下文被塞满了说明检索逻辑没走 FTS5回去检查index fts5配置。6. 把成长能力接进你的 Agent 工作流到这里你已经有了三层记忆配置、闭环学习触发条件、以及一套验证方法。接下来就是把它接进日常开发流。长期跑编码和 Agent 任务的建议用 Coding Plan 把模型调用额度固定下来避免按次计费在频繁复盘时成本失控需要随时验证模型行为的走模型对话入口快速试接入和排障过程中遇到问题接入文档里有完整的参数说明。真正让 Agent 成长的从来不是模型本身而是你有没有给它留下“记住并复用”的通道。闭环学习循环负责提炼分层记忆负责存储技能自生成负责复用三者缺一Agent 就永远停在“用完就忘”的阶段。把今天这套配置跑通你的 Agent 才算真正开始进化。