1. 为什么你的 OpenClaw 智能体总是“从零开始”
很多人第一次用 OpenClaw 搭智能体,都会遇到同一个困惑:明明昨天刚纠正过它“别用那种浮夸的语气”,今天开新会话,它又变回原样。于是开始怀疑是不是模型不行、是不是要换更大的参数、是不是得上一套复杂的编排框架。
问题不在模型。问题在于:智能体在会话之间没有记忆,每次启动都是重新开始。你昨天在对话框里说的那些纠正,只存在于那一次会话的上下文里,会话一关,全部蒸发。模型本身不会因为你多聊几句就进化,但它的输出可以因为你持续把反馈写进文件而越来越贴合要求。
这就是 OpenClaw 智能体系统“越用越好”的真正机制:不是模型变聪明了,而是磁盘上那套 Markdown 文件栈变厚了、变准了。文件系统本身就是集成层,你不需要消息队列、不需要数据库、不需要复杂编排。一个可长期维护、可复利的智能体系统,核心资产就是几个.md文件。
这套方法适合谁?适合已经在用 OpenClaw 跑重复任务的人——比如每天整理情报、写初稿、做代码审查、维护内容流水线。如果你只是偶尔问一句答一句,那没必要上这套;但只要你有一个“每周都要做、每次都要重新交代一遍”的任务,文件栈的复利就会非常明显。
我试过最笨的做法:把所有纠正都堆在一个超长的 prompt 里,每次手动粘贴。结果是 prompt 越来越长,模型注意力被稀释,效果反而下降。后来改成文件分层,每次只加载该加载的,才稳定下来。
这篇文章要交付三样东西:一份可复制的AGENTS.md模板、一套完整的文件栈目录结构、以及把 OpenClaw 的模型通道改到 TaoToken 统一 Key/API 的具体配置。最后会给你验证动作,确认智能体在重复任务里真的在变好,而不是你的错觉。
在动手之前,先明确一个原则:不要试图一个周末搭完。文件栈是长出来的,不是设计出来的。第一天你只需要三个身份文件加一个最重复的任务,剩下的等真实反馈出现再补。
2. TaoToken 前置:把 OpenClaw 的模型通道统一到一个 Key
在讲文件栈之前,得先把模型通道理顺。因为文件栈解决的是“记忆”,而模型通道解决的是“每次调用能不能稳定拿到结果”。如果你同时跑多个智能体、每个都配一套不同的 Key 和 Base URL,排障会非常痛苦——你分不清是文件没写对,还是某个通道挂了。
TaoToken 在这里的角色是统一入口:一个 Key、一个 Base URL,OpenClaw 里所有智能体都走同一条通道。官网地址是 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 端点是 https://taotoken.net/api (这个不加 UTM,配置里直接写)。
你需要准备的东西只有两样:一个 API Key,一个你想用的 Model ID。Key 在控制台的 API Keys 页面生成,地址是 https://taotoken.net/console/api-keys?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 。生成后先复制存好,页面刷新就看不到了。
Model ID 怎么选?如果你主要跑长期编码和 Agent 任务,走 Coding Plan 更划算,入口在 https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 。如果只是想先验证模型对话通不通,用模型对话页面试一句就行: https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 。
这里有个关键点:OpenClaw 的每个智能体都应该继承同一套 Base URL + Key + Model ID。不要给 research-agent 配一个模型、给 content-agent 配另一个,除非你有明确理由。统一通道的好处是,当某个智能体报错时,你能快速判断是通道问题还是文件问题——换个智能体试同一个 Key,如果也报错,那就是通道;如果只有它报错,那就是它的配置文件。
配置文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,里面有各客户端的接入方式。如果你用的是 Claude Code 类的工具,参考 https://taotoken.net/claude-code-anthropic?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 。
把通道理顺之后,再回头看文件栈,你会发现排障效率完全不一样:模型层稳定了,问题就只剩“文件写没写对”。
3. 可复制配置:AGENTS.md 模板与文件栈目录结构
这一节是全文的核心,给你可以直接复制改名使用的配置。先看目录结构,再看每个文件的内容。
3.1 文件栈目录结构
workspace/ SOUL.md IDENTITY.md USER.md AGENTS.md HEARTBEAT.md MEMORY.md memory/ 2026-03-01.md 2026-03-02.md shared-context/ THESIS.md FEEDBACK-LOG.md agents/ research-agent/ SOUL.md AGENTS.md memory/ content-agent/ SOUL.md AGENTS.md memory/三层结构对应三个问题:Identity 层回答“它是谁”,Operations 层回答“它怎么工作”,Knowledge 层回答“它学到了什么”。根目录的文件是所有智能体继承的,agents/下面的是角色专属的。
3.2 根级 AGENTS.md 模板
这是最重要的一个文件,它定义会话启动流程、文件读取顺序、记忆写入规则。直接复制:
# AGENTS.md ## Every Session (Startup) Before doing anything: 1. Read SOUL.md 2. Read USER.md 3. Read today's memory/YYYY-MM-DD.md and yesterday's 4. If this is the main/private session, also read MEMORY.md ## Memory Rules - If the user says "remember this" or corrects behavior, write it into: - daily log: memory/YYYY-MM-DD.md (raw) - and later distill into MEMORY.md (curated) - No "mental notes". Files are the memory. ## Safety - Do not leak private data. - Do not run destructive commands unless explicitly asked. - If uncertain, ask a single clarifying question.注意里面写死了两件事:智能体在会话之间没有记忆,每次都是重新开始;如果纠正没有进入文件,下次会话它就不存在。这两句话是整套系统的地基。
3.3 SOUL.md 与 IDENTITY.md 模板
SOUL.md控制在 60 行以内,只写身份、角色、原则、关系、语气。太长会吞掉留给任务的上下文。
# SOUL.md ## Core Identity You are a Research Agent. You are intense about accuracy. You care about sources. You hate hand-wavy claims. ## Role - Find high-signal information. - Verify before claiming. - Summarize for downstream creators/operators. ## Principles 1. Never fabricate. If unsure, label [UNVERIFIED]. 2. Signal over noise. Skip content that can't lead to action. 3. Always attach primary sources (links, API responses, official docs). ## Working Style - Short, structured, factual. - Prefer bullet points. - If the request is ambiguous, ask one clarifying question, then proceed.IDENTITY.md是名片,多智能体时一眼知道是谁在说话:
# IDENTITY.md - Name: Research Agent - Role: Verification + Intel - Vibe: Precise, skeptical, calm - One-liner: "I verify claims and extract signal."3.4 把模型通道写进配置
OpenClaw 的模型配置通常是一个 JSON 或 TOML 文件。以 JSON 为例,把 Base URL、Key、Model ID 三件套写全:
{ "provider": "taotoken", "base_url": "https://taotoken.net/api", "api_key": "sk-你的Key", "model_id": "你的ModelID", "agents": { "research-agent": { "inherit": true }, "content-agent": { "inherit": true } } }如果你用的是 TOML 风格:
[provider] name = "taotoken" base_url = "https://taotoken.net/api" api_key = "sk-你的Key" model_id = "你的ModelID" [agents.research-agent] inherit = trueinherit = true的意思是子智能体继承根配置,不用每个都写一遍。这样你换 Key 或换模型时,只改一处。
3.5 MEMORY.md 与每日日志
MEMORY.md不是日志,是“会反复用到的结论”。尤其建议写一节 Hard Lessons:
# MEMORY.md ## Writing Preferences - Keep paragraphs short. - Strong claims must have sources. - Avoid filler and buzzwords. ## Hard Lessons - Never delete project folders without explicit confirmation. - Never claim "#1" or "all-time" without verifiable ranking sources. ## Bad Patterns (Do Not Repeat) - Overuse of emojis/hashtags - Generic motivational tone - Unverifiable timelines每日日志memory/YYYY-MM-DD.md是原材料,每次只加载今天和昨天,定期归档:
# Daily Log — 2026-03-01 ## What happened - ... ## Outputs - Draft: ... ## Feedback received - Correction: ... ## Follow-ups - ...3.6 shared-context 与 HEARTBEAT
当你开始对不同智能体重复同一条纠正时,引入shared-context/FEEDBACK-LOG.md,写一次全员生效:
# shared-context/FEEDBACK-LOG.md ## Global corrections - "No em dashes" - "Always cite primary sources" ## Content rules - ...HEARTBEAT.md不要第一天就写,等你第一次被故障坑过之后再写,那时你最清楚要监控什么:
# HEARTBEAT.md ## Health Checks (run on every heartbeat) ### 1) Scheduler / Cron - Check whether key scheduled jobs have run in the last 26 hours. - If any is overdue, trigger it manually and log the incident. ### 2) Pipeline (optional) - Check whether there are stuck tasks or failures. - If stuck, surface a short alert with the last error.4. 验证请求:确认智能体真的在变好
配置写完不算完,你得有办法验证“越用越好”不是错觉。这一节给你三个可执行的验证动作。
4.1 验证模型通道通不通
先用最直接的方式确认 Base URL 和 Key 没问题。用 curl 发一个最小请求:
curl https://taotoken.net/api/v1/chat/completions \ -H "Content-Type: application/json" \ -H "Authorization: Bearer sk-你的Key" \ -d '{ "model": "你的ModelID", "messages": [{"role": "user", "content": "回复两个字:通了"}] }'如果返回里有choices字段和正常内容,说明通道没问题。如果报 401,说明 Key 不对或没带上;如果报连接错误,检查 Base URL 是不是写成了https://taotoken.net/api而不是别的路径。
4.2 验证记忆写入生效
这是最关键的一步。做一次纠正,然后检查文件有没有被写入。
第一步,在会话里说一句明确的纠正,比如“以后所有输出不要用感叹号”。第二步,去看memory/今天日期.md,应该出现一条 Feedback received 记录。第三步,开一个全新会话,问它“你的输出规范里关于标点有什么要求”,如果它能答出“不用感叹号”,说明记忆链路通了。
如果第三步答不出来,回去检查AGENTS.md里的 Startup 顺序有没有写对,以及每日日志的路径是不是memory/YYYY-MM-DD.md这种格式。路径写错是最常见的坑。
4.3 验证重复任务的表现提升
选一个你每周都做的任务,比如“整理本周行业动态”。第一周跑完,记录输出质量:有没有编造来源、语气对不对、结构清不清楚。把不满意的点写进MEMORY.md的 Hard Lessons。
第二周再跑同一个任务,对比。如果它这次主动避开了你上周记下的坑,说明文件栈在起作用。第三周继续。三周下来,你会看到同一个模型、同一套通道,输出却明显更贴合你的要求。
这里有个判断标准:如果连续两周你都在纠正同一个问题,那说明这个纠正没有真正进入文件。要么是AGENTS.md的 Memory Rules 没写清楚,要么是你纠正的时候没说“记住这个”,智能体没触发写入。
4.4 多智能体交接验证
当你加了第二个智能体,用文件做交接。上游 research-agent 写intel/DAILY-INTEL.md,下游 content-agent 读它。验证方法是:手动改一下DAILY-INTEL.md的内容,看下游下次跑的时候有没有用上新内容。如果没用上,检查下游的 Startup 顺序里有没有加这个文件的读取。
单写者原则要守住:一个共享文件永远只有一个写者。如果需要顺序,靠调度保证上游先跑、下游后跑。这样能避免几乎所有协调冲突。
5. 本篇常见错排查:401、local proxy failed 与 reading choices
配置过程中最容易卡在几个具体报错上。这一节按真实报错逐个拆。
5.1 401 Unauthorized
最常见。原因通常是三个:Key 没复制全、Key 前后有空格、Authorization 头格式写错。
检查方法:把 Key 重新从 https://taotoken.net/console/api-keys?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 复制一遍,注意不要带换行。请求头必须是Authorization: Bearer sk-xxx,Bearer 和 Key 之间一个空格,不能少。
如果你用的是 Claude Code 类工具,401 也可能是 OAuth 配置残留。检查一下是不是同时配了 OAuth 和 API Key,两者冲突时会优先走 OAuth 然后失败。清掉 OAuth 配置,只留 Key。
5.2 local proxy failed
这个报错通常出现在你本地起了代理层,但代理层没起来或者端口不对。OpenClaw 如果配置了本地代理转发,检查代理进程是否在跑、端口是否和配置一致。
另一个常见原因是 Base URL 写成了本地地址但本地没有服务。确认你的配置里base_url是https://taotoken.net/api,而不是http://localhost:xxxx。如果你确实需要本地代理做日志,确保代理正确转发到 TaoToken 的 API 端点。
5.3 reading choices 相关报错
这类报错一般是响应结构不符合预期。可能原因:Model ID 写错了,返回的不是标准 chat completions 结构;或者请求体里messages格式不对。
检查 Model ID 是否和你在 Coding Plan 或模型对话页面看到的一致。请求体里messages必须是数组,每条有role和content。如果返回里没有choices,先看返回的完整 JSON,通常里面有error字段说明原因。
5.4 OAuth 与 Key 混用
如果你之前配过 OAuth 登录,后来又加了 API Key,两者可能打架。表现是时好时坏,或者报一些看不懂的认证错误。解决办法是明确只走一种:既然我们用 TaoToken 统一 Key,就把 OAuth 相关配置清掉,只保留base_url+api_key+model_id三件套。
5.5 记忆没写入
不是报错,但比报错更隐蔽。表现是你纠正了,但下次会话它还是老样子。排查顺序:先看memory/今天日期.md有没有新内容;没有的话,看AGENTS.md的 Memory Rules 有没有写“用户纠正时写入”;再没有的话,看你的纠正语句是不是太模糊,智能体没识别成“需要记住的纠正”。
一个实用技巧:纠正时明确说“记住这个:以后……”。这句话是触发写入的信号。
5.6 文件路径大小写与日期格式
memory/YYYY-MM-DD.md这种路径,日期格式必须一致。如果你今天写2026-03-01.md,明天写成2026-3-2.md,智能体按规则去找2026-03-02.md就找不到。统一用零填充的两位月份和日期。
大小写也要注意,Linux 环境下Memory/和memory/是两个不同目录。统一用小写。
6. 把通道和文件栈一起用起来
到这里,你已经有了完整的一套:TaoToken 统一 Key/API 通道负责模型调用稳定,Markdown 文件栈负责记忆和复利。两者配合的方式很简单——通道是基础设施,文件栈是资产。
如果你还在排障阶段,先去 https://taotoken.net/console/api-keys?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 确认 Key 状态,再对照 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 检查接入配置。如果只是想先验证模型能不能正常对话,用 https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 试一句最快。
如果你打算长期跑编码和 Agent 任务,Coding Plan 的入口在 https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,适合把多个智能体的调用统一到一个计划里。
最后说一个我踩过的坑:不要一上来就把文件栈写满。第一天只写SOUL.md、IDENTITY.md、USER.md,选一个最重复的任务跑起来。三天后开始给具体反馈,确保反馈落入记忆文件。一周后再补AGENTS.md的启动流程。两周后开始蒸馏MEMORY.md。三周后加第二个智能体。四周后经历一次故障,再加HEARTBEAT.md。
文件会自己长出来。你要做的是持续出现、持续反馈。模型不变,但你的文件栈会变得更丰富、更锐利、更贴合真实需求。别人可以用同一个模型,但复制不了你持续沉淀的这套文件。