news 2026/9/30 20:17:09

第08篇-Workspace与上下文文件:AGENTS.md、SOUL.md、SKILL.md 的配置骨架与验证

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
第08篇-Workspace与上下文文件:AGENTS.md、SOUL.md、SKILL.md 的配置骨架与验证

1. 为什么你的 Agent 总是“答非所问”:从 Workspace 上下文缺失说起

很多人第一次用 OpenClaw 搭 Agent,都会遇到一个很迷惑的现象:明明项目里写了 TypeScript 严格模式,Agent 却给你生成any满天飞的代码;明明团队约定 API 统一返回{ success, data, error },它偏要返回裸数组。你以为是模型不行,其实大概率是Workspace 上下文文件没被正确加载。

OpenClaw 的 Workspace 可以理解成 Agent 的“办公桌”。桌面上放什么资料,它就按什么资料干活。默认路径是~/.openclaw/workspace/,里面最关键的三个文件是AGENTS.md、SOUL.md和skills/*/SKILL.md。它们分别回答三个问题:这个项目是什么(AGENTS.md)、你该用什么风格说话(SOUL.md)、遇到具体任务该怎么做(SKILL.md)。三者协作,才能让 Agent 从“通用聊天机器人”变成“懂你项目的助手”。

这篇我会给你一套可直接复制的目录结构和文件骨架,然后通过 TaoToken 统一 Key/API 通道接入,用一次真实对话验证上下文到底有没有被加载。适合正在用 OpenClaw 做项目级 AI 约束的开发者,也适合想把 ClawHub 技能接进自己工作流的运维同学。核心检索词就是 Workspace、AGENTS.md、SOUL.md、SKILL.md 和 ClawHub,下面全部围绕它们展开。

2. TaoToken 前置准备:统一 Key 与 API 通道

在验证上下文之前,得先让 OpenClaw 能稳定调用模型。这里我用 TaoToken 作为统一入口,好处是 Key 和 Base URL 一套走通,不用在多个模型供应商之间来回切换配置。官网入口是 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。登录后进入控制台,在 API Keys 页面创建一个新 Key,复制出来备用。这个 Key 后面会写进 OpenClaw 的模型配置里。注意,Key 只显示一次,丢了就重新建一个,别硬找。

TaoToken 的接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,里面有各语言的调用示例。如果你只是想先验证模型通不通,可以直接用模型对话页面 https://taotoken.net/chat?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= 会更合适,额度模型和按量计费不一样。

这里要强调一点:TaoToken 是合规的 API 聚合通道,不是所谓“中转”。你填的 Base URL 就是官方给的https://taotoken.net/api,模型 ID 按文档里列出的写。OpenClaw 侧只需要改openclaw.json里的 provider 配置,Workspace 文件完全不用动。这样上下文文件和模型通道解耦,换模型不影响你的 AGENTS.md 和 SOUL.md。

配置前先确认 OpenClaw 版本,终端执行openclaw --version。如果命令不存在,说明还没装,先按官方安装步骤走一遍。装好后openclaw init会生成默认 Workspace,路径就是~/.openclaw/workspace/。接下来我们在这个基础上改。

3. 可复制配置:目录结构、AGENTS.md、SOUL.md、SKILL.md 骨架

先看完整目录结构,你可以直接照着建:

~/.openclaw/workspace/ ├── AGENTS.md ├── SOUL.md ├── skills/ │ ├── bundled/ │ ├── managed/ │ └── my-custom-skill/ │ └── SKILL.md └── projects/

AGENTS.md是项目级上下文,每次对话自动注入 System Prompt。它写的是“这个项目是什么”。下面是我实测可用的骨架,你按自己项目改:

# 项目说明 ## 项目概况 这是一个 TypeScript + Express 的 REST API 服务,对外提供订单和用户接口。 ## 技术栈 - Node.js 24 + TypeScript 5.7 - Express 4 + Prisma ORM - PostgreSQL 16 + Redis 7 - Vitest 测试框架 ## 代码规范 - 使用 ESM 模块(import/export) - 严格模式:strict: true - 变量命名用 camelCase - API 路径用 kebab-case ## 重要约定 - 所有 API 返回 { success, data, error } 格式 - 数据库迁移用 Prisma Migrate - 敏感配置从环境变量读取,禁止硬编码

SOUL.md定义 Agent 的人格和行为风格,作用范围是全局的,不随项目变。骨架如下:

# Agent 人格 你是我的个人助手,风格特点: - 回答简洁直接,不啰嗦 - 代码注释用中文 - 遇到不确定时先问,不要猜测 - 给出可操作的方案,而不是泛泛的理论 - 我说“继续审查”时换一个新维度深入分析

SKILL.md放在skills/my-custom-skill/下,描述一个具体技能怎么执行。比如一个“生成 Prisma 迁移检查清单”的技能:

# 技能:Prisma 迁移检查 ## 触发条件 当用户提到“迁移”“migrate”“schema 变更”时启用。 ## 执行步骤 1. 检查 prisma/schema.prisma 是否有未提交变更 2. 确认迁移名称使用 kebab-case 3. 提醒用户先跑 npx prisma migrate dev --name <name> 4. 检查是否更新了对应的 seed 脚本 ## 输出格式 用有序列表返回检查结果,每项标注 通过/待办。

然后是 OpenClaw 的模型配置,写进~/.openclaw/openclaw.json。这里把 provider 指向 TaoToken:

{ "agents": { "defaults": { "workspace": "/home/user/.openclaw/workspace", "model": { "provider": "taotoken", "baseUrl": "https://taotoken.net/api", "apiKey": "sk-你的TaoToken密钥", "modelId": "按文档填写的模型ID" } } } }

如果你有多个 Agent,可以给不同 Agent 配不同 Workspace:

{ "agents": { "work": { "workspace": "/home/user/work-workspace" }, "personal": { "workspace": "/home/user/personal-workspace" } } }

三件套记牢:Base URL 填https://taotoken.net/api,Key 填你创建的sk-开头密钥,Model ID 按 TaoToken 文档里列出的写。这三个缺一个,请求就会失败。配置改完保存,重启 OpenClaw 让配置生效。

4. 验证请求:一次对话确认上下文被正确加载

配置写好了不代表生效,必须验证。我试过最直接的办法是让 Agent 复述项目约定,看它能不能说出 AGENTS.md 里的内容。

先启动 OpenClaw 交互模式:

openclaw chat

然后发一条测试消息:

请说出当前项目的技术栈和 API 返回格式约定,不要猜测。

如果 AGENTS.md 被正确加载,Agent 应该回答出 Node.js 24、TypeScript 5.7、Express 4、Prisma、PostgreSQL 16、Redis 7、Vitest,以及{ success, data, error }格式。如果它答得含糊或者编造,说明上下文没注入。

再验证 SOUL.md。发:

用一句话介绍你自己,并说明你的回答风格。

正确加载时,它会提到“简洁直接”“代码注释用中文”“不确定先问”这些点。如果它说“我是一个AI助手,乐于助人”,那就是 SOUL.md 没生效。

最后验证 SKILL.md。发:

我要改 schema,帮我做迁移检查。

如果技能被识别,它会按 SKILL.md 里的步骤返回检查清单,而不是泛泛地说“请先备份数据库”。

为了确认请求真的走了 TaoToken,可以看 OpenClaw 的日志。启动时加--verbose:

openclaw chat --verbose

日志里会打印实际请求的 Base URL 和 model ID。确认是https://taotoken.net/api和你在配置里写的模型 ID。如果日志里出现别的地址,说明配置没被读取,检查openclaw.json路径对不对。

还有一种验证方式是用 curl 直接打 TaoToken 的接口,排除 OpenClaw 的干扰:

curl https://taotoken.net/api/v1/chat/completions \ -H "Authorization: Bearer sk-你的密钥" \ -H "Content-Type: application/json" \ -d '{ "model": "你的模型ID", "messages": [{"role": "user", "content": "回复 OK"}] }'

返回里有choices字段且内容正常,说明 Key 和通道没问题。这一步过了,再回去查 OpenClaw 的 Workspace 加载逻辑。

5. 本篇常见错排查:401、local proxy failed、reading choices、OAuth

配置过程中最容易撞的几个报错,我按真实遇到的整理一下。

401 Unauthorized。这个基本是 Key 问题。先确认openclaw.json里apiKey填的是sk-开头的完整密钥,没有多余空格。然后确认 Key 没被删除或过期。如果 Key 没问题,检查 Base URL 是不是写成了https://taotoken.net/api/带尾斜杠,有些客户端对尾斜杠敏感,去掉试试。401 也可能是模型 ID 写错,某些 provider 对模型名大小写敏感,按文档原样复制。

local proxy failed。这个报错通常出现在你本地配了代理,但代理没起来或者端口不对。OpenClaw 会读取环境变量里的HTTP_PROXY/HTTPS_PROXY。如果你不需要代理,直接unset HTTP_PROXY HTTPS_PROXY再启动。如果确实需要走本地代理,确认代理进程在监听,端口和配置一致。注意,这里说的是本地开发环境的网络配置,不是让你去搞什么特殊通道,正常公司网络或家庭网络直连即可。

reading choices 报错。典型信息是Cannot read properties of undefined (reading 'choices')。这说明请求发出去了,但返回结构里没有choices字段。常见原因有三个:一是 Base URL 写错,请求打到了非兼容接口;二是模型 ID 不存在,服务端返回了错误对象;三是请求体格式不对,比如messages写成了字符串。排查时先用上面那条 curl 命令单独测,确认接口返回结构正常,再回来看 OpenClaw 的请求构造。

OAuth 相关报错。如果你在配置里误开了 OAuth 模式,但 TaoToken 用的是 API Key 鉴权,就会冲突。检查openclaw.json里有没有authType: "oauth"之类的字段,有就删掉,改成apiKey方式。另外,某些客户端会缓存旧的 OAuth token,清一下~/.openclaw/cache/再重启。

还有一个隐蔽的坑:Workspace 路径写错。openclaw.json里workspace指向的目录如果不存在,OpenClaw 会静默用默认路径,你的 AGENTS.md 就白写了。启动时加--verbose看它实际加载的 Workspace 路径,和你的预期对比。路径建议用绝对路径,别用~,有些版本不展开。

如果 SKILL.md 没生效,检查技能目录层级。skills/my-custom-skill/SKILL.md是对的,skills/my-custom-skill/skill.md小写可能不被识别。文件名严格用SKILL.md。ClawHub 安装的技能在skills/managed/下,不要手动改,用openclaw skills update更新。

6. 把上下文文件纳入版本管理,让 Agent 行为可复现

最后说一个实用习惯:把AGENTS.md和SOUL.md提交进 Git。AGENTS.md 是项目级的,团队共享,谁改了约定大家都能看到。SOUL.md 是个人风格,可以放全局 Workspace 或者单独仓库。SKILL.md 如果是团队通用技能,也一起提交;如果是个人实验性的,放本地就行。

这样做的价值是:Agent 的行为不再依赖某个人的本地配置,而是跟着代码仓库走。新人 clone 下来,配好 TaoToken 的 Key 和 Base URL,启动 OpenClaw 就能得到一致的上下文。换模型、换机器,行为不变。

如果你还没拿到 Key,去 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 创建一个。接入细节看 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 。想先试模型效果,用 https://taotoken.net/chat?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= 。

配置改完记得重启,验证时先 curl 再 chat,两步都过,上下文加载就没问题了。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/30 20:15:57

@Autowired 和 @Qualifier 详解

Autowired 和 Qualifier 详解 一、Autowired 是什么 Autowired 是 Spring 提供的依赖注入注解&#xff0c;默认按类型&#xff08;byType&#xff09;自动装配。它告诉 Spring 容器&#xff1a;这个字段、构造方法或 Setter 方法需要一个依赖&#xff0c;请从容器中找一个匹配的…

作者头像 李华
网站建设 2026/9/30 20:13:43

Kiro vs Cursor:AI IDE 终极对比指南,TaoToken 统一 Key 接入实测

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/30 20:02:28

UE高级运动系统拆解:动画蓝图、距离匹配与运动匹配

UE高级运动系统这个话题&#xff0c;我前后拆过三个版本的工程&#xff1a;最早是把社区里流传的那套 ALS 工程直接拖进项目里改数值&#xff0c;中间踩过一次"动画看着对、手感全是错的"的坑&#xff0c;后来在 UE5 上又用运动匹配&#xff08;Motion Matching&…

作者头像 李华
网站建设 2026/9/30 20:00:21

面向Agent的全模态数据平台:从数据湖到Agent记忆的落地指南

我这两年帮不少团队调试过Agent项目&#xff0c;有一个感受越来越强烈&#xff1a;Demo阶段的Agent大家好感度拉满&#xff0c;一上生产环境就各种翻车&#xff0c;而翻车点十有八九不在模型本身&#xff0c;在数据。模型是个好厨子&#xff0c;但你得先想清楚食材从哪来、怎么…

作者头像 李华