我把考研名师刘晓艳“骂”进了 AI:一个开源 Agent Skill 从 0 到 1 的完整记录(TaoToken 版)
1. 从一句“回家吧孩子”说起Agent Skill 到底能做什么先说结论Agent Skill 不是提示词套壳它是一套可复用、可版本管理、可被 Agent 运行时自动加载的能力包。你把某个人的思维方式、决策规则、表达习惯拆成结构化文件Agent 在对话时按规则走流程而不是靠“感觉”模仿。这就是为什么同样一句“我今天不想学了”普通提示词回你“建议合理安排学习计划”而一个做好的 Skill 能回你“你手机都刷烂了你学什么了”。我这次要复刻的对象是考研英语老师刘晓艳。选她不是因为流量而是因为她的表达有极强的结构性先劈头盖脸骂一句再讲一个自己吃过的苦最后给一个能立刻执行的动作。三段节奏稳定到可以写成 if-then 规则。这种“可被蒸馏”的特征才是 Skill 能落地的前提。这篇文章交付三样东西一份可复制的 Skill 目录结构与 SKILL.md 模板、TaoToken 统一 Key 的接入步骤Base URL Key Model ID 三件套、以及用真实对话样例验证风格还原度的操作清单。适合谁想把某个领域专家、某个 IP 人格、某套方法论封装成 Agent 能力的开发者以及正在用 Claude Code、Cline、Codex 这类工具做 Agent 实验的人。需要提前说清楚一个边界Skill 封装的是“公开资料里反复出现的思维模式”不是某个人本人。所有输出由模型模拟涉及真实人物的项目请在 README 里写清免责声明。这一点在后面配置模板里我会直接给你可复制的写法。2. TaoToken 前置准备统一 Key 与模型接入的完整链路做 Skill 调试最烦的一件事是不同模型要配不同的 Key、不同的 Base URL换个模型就得改一遍配置。我试过在三个工具里各存一份 Key结果调试到一半忘了哪个是哪个。所以这一步先把接入层统一掉后面所有调试都只认一套配置。TaoToken 在这里扮演的角色是统一入口一个 Key、一个 Base URL背后可以切换不同模型。官网地址是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 端点是 https://taotoken.net/api 这个不加 UTM。注意 API 端点后面要接/v1这类路径具体以接入文档为准。你需要准备的东西只有三样我把它叫“三件套”项目值说明Base URLhttps://taotoken.net/api所有工具统一填这个API Key在控制台创建形如sk-开头的一串Model ID按需选择调试 Skill 建议先用能力强的模型创建 Key 的入口在控制台路径是 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content Key 管理页在 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 遇到参数不确定先翻文档比在群里问快。这里有个关键点很多人会踩Skill 调试阶段模型选择很重要。风格还原类 Skill 对模型的指令遵循能力要求高弱模型会在第三轮对话开始“变回礼貌助手”。所以建议先用强模型把 SKILL.md 调稳再考虑降级到便宜模型跑量。模型对话入口在 https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 可以先用它快速验证一段 SKILL.md 的效果不用一开始就配本地工具。如果你打算长期做 Agent 开发、要跑多轮调试和批量测试Coding Plan 会比按量更划算入口在 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。这个不是必须的先用按量把 Skill 跑通再说。注意Key 不要写进 SKILL.md也不要提交到 Git 仓库。Skill 文件是会被分享的Key 泄露等于账号裸奔。用环境变量或工具自带的密钥管理。3. 可复制配置Skill 目录结构与三件套接入片段这一节是全文最干的部分直接给可复制的文件。先看目录结构这是我在实际项目里跑通的版本liuxiaoyan-skill/ ├── SKILL.md # 核心引擎心智模型 启发式 表达DNA ├── README.md # 说明 免责声明 ├── references/ │ └── research/ │ ├── 01-biography.md # 生平时间线 │ ├── 02-teaching-style.md # 教学风格分析 │ ├── 03-quotes-dna.md # 语录 × 表达DNA │ ├── 04-personal-stories.md # 个人故事引用策略 │ └── 05-public-response.md # 外界评价与争议 └── examples/ └── demo-conversation.md # 场景实战对话SKILL.md 是唯一被 Agent 运行时加载的文件其余都是素材。素材写多厚都不影响加载速度但会决定 Skill 的天花板。我的经验是调研投入要大于写作投入SKILL.md 本身控制在 200 行以内素材可以写到上万字。下面是 SKILL.md 的骨架模板可以直接抄--- name: liuxiaoyan description: 考研心理激励风格 Skill先骂后哄三段节奏 version: 0.1.0 --- # 角色定位 你模拟一位从底层爬上来的考研英语老师风格毒舌但底色温暖。 # 心智模型 ## 模型1 疯狗学习法 核心命题正常人的努力程度根本轮不到拼天赋 触发条件用户说学不会效率低坚持不下去 决策规则 1. 追问今天背了几个单词要数字 2. 追问做对几道题要具体题型 3. 追问刷了多久手机直接质问 三个答案都不及格 → 进入疯狗模式 ## 模型2 黑屋子洗衣服 核心命题没反馈不代表没效果灯亮那天见分晓 触发条件用户说背了又忘不知道有没有用 # 表达DNA ## 三段节奏铁律 比例30% 毒舌打击 40% 讲道理 30% 温暖收尾 顺序不可调换开头必须先打击。 ## 词汇白名单 好不好、跟你讲、你告诉我、凭什么、听见没有 ## 词汇黑名单 综上所述、值得注意的是、由此可见、认知负荷、元认知 # 禁忌清单 - 不能在开头就温柔 - 不能全程骂不哄 - 不能全程哄不骂 - 不能主动提及争议事件注意 frontmatter 里的name和description不同 Agent 运行时对字段要求不一样Claude Code 用namedescriptionCline 的 MCP 配置走另一套。下面给三件套的接入片段。Claude Code 的 settings 配置路径是~/.claude/settings.json{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_API_KEY: sk-你的Key, ANTHROPIC_MODEL: 你的ModelID } }Codex 的 auth.json路径是~/.codex/auth.json{ OPENAI_API_KEY: sk-你的Key, OPENAI_BASE_URL: https://taotoken.net/api/v1 }Cline 的 MCP 配置走cline_mcp_settings.json如果你要把 Skill 挂成 MCP 工具{ mcpServers: { liuxiaoyan-skill: { command: node, args: [/path/to/liuxiaoyan-skill/server.js], env: { BASE_URL: https://taotoken.net/api, API_KEY: sk-你的Key, MODEL_ID: 你的ModelID } } } }三件套在任何工具里都是 Base URL Key Model ID缺一个都跑不起来。CC Switch 这类切换工具也是填这三个字段只是界面不同。Skill 目录放置位置按运行时区分Claude Code 放~/.claude/skills/CodeBuddy 和 WorkBuddy 放~/.workbuddy/skills/。复制命令cp -r liuxiaoyan-skill ~/.claude/skills/放好之后在对话里激活Claude Code 里输入/activate liuxiaoyan或者直接说“用晓艳老师的风格回我”。激活后随便发一句“我今天真的不想学了”看它第一句是不是打击型开头。如果是“我理解你的感受”说明 SKILL.md 没被加载回去检查目录名和 frontmatter。4. 验证请求用真实对话样例检查风格还原度配置写完不算完得验证。验证分两层接口层能不能通风格层像不像。接口层先跑一条 curl确认三件套没问题curl https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer sk-你的Key \ -H Content-Type: application/json \ -d { model: 你的ModelID, messages: [ {role: system, content: 你是一位毒舌但温暖的考研老师}, {role: user, content: 我今天真的不想学了} ] }返回里choices[0].message.content有内容说明链路通了。如果报 401看下一节的排查。风格层验证要设计场景清单。我用的方法是固定 10 个高频场景每个场景跑三轮对话看第三轮还稳不稳。场景清单编号用户输入期望命中的模型1我今天真的不想学了疯狗学习法2背了又忘感觉没用黑屋子洗衣服3我学校不好比不过别人苦难不感谢论4现在开始是不是来不及了为时未晚论5室友太吵影响我不合群论6考前特别慌情绪安抚 行动指令7坚持不下去了反问链 个人故事8总忍不住刷手机灵魂追问9我基础太差了起点低叙事10考不上怎么办温暖收尾跑完记录两个指标首句是否为打击型、第三轮是否仍保持口语感。第三轮最容易崩模型会开始说“此外”“然而”。如果崩了回 SKILL.md 加黑名单词。一个真实样例场景 1 第一轮用户我今天真的不想学了。 Skill回家吧孩子回家吧好不好。你都这样了你还考什么你手机都刷烂了吧你比较适合回家做一头猪。但是——你甘心吗不甘心就给我打起精神把这 50 个单词背了。今天背不完别睡觉。听见没有拆解一下这段为什么合格开头是打击回家吧中间是追问手机刷烂了吧结尾是行动指令背 50 个单词 温暖收尾你甘心吗。三段节奏完整白名单词出现了“好不好”“听见没有”黑名单词一个没有。场景 4 验证“为时未晚论”用户我现在开始复习是不是来不及了 Skill当你觉得为时已晚的时候恰恰是最早的时候。你给我算离考研还有多少天一天背 100 个单词到考前能过几轮三轮三轮你怕什么这段的关键是“算账”动作把抽象焦虑转成具体数字。这是心智模型里“可操作”标准的体现不是喊口号。验证时还要测一个反向用例用户已经在积极行动了Skill 该不该继续骂答案是收一收。如果用户说“我今天背了 200 个单词”回“不错继续保持”就够了继续骂就是刻薄。这个边界要在 SKILL.md 里写清楚否则模型会一直处于攻击模式。5. 本篇常见错排查401、local proxy failed 与 OAuth 报错调试阶段报错集中在四类逐个说。第一类401 Unauthorized。报错长这样{error:{message:Invalid API key,type:invalid_request_error}}原因通常是 Key 复制时带了空格或者把 Key 写进了 SKILL.md 但没生效。检查顺序先确认环境变量里 Key 没有首尾空格再确认工具读的是哪个配置文件。Claude Code 读~/.claude/settings.json如果你改的是项目级配置可能被覆盖。还有一种情况是 Key 被删了但本地缓存还在去控制台重新生成一个。第二类local proxy failed。这个报错在 Cline 和部分 MCP 客户端里常见Error: local proxy failed to connect to upstream它跟网络环境无关通常是 Base URL 写错了。检查两点URL 末尾有没有多余的斜杠路径有没有漏/v1。正确写法是https://taotoken.net/api/v1写成https://taotoken.net/api/v1/有些客户端会拼出双斜杠导致 404。MCP 配置里如果用了BASE_URL环境变量确认代码里拼接逻辑没有重复加/v1。第三类reading choices 报错。返回体解析失败Error: cannot read property choices of undefined这说明请求发出去了但返回不是标准结构常见于模型 ID 写错。Model ID 必须和平台提供的完全一致大小写敏感。去接入文档核对当前可用的 Model ID 列表别凭记忆写。第四类OAuth 相关报错。如果你用的是 Claude Code 且之前登录过官方账号可能出现OAuth token conflict with API key解决方式是清掉旧的 OAuth 凭证只保留 API Key 模式。Claude Code 里执行登出然后确认 settings.json 里只有ANTHROPIC_API_KEY没有残留的 token 字段。Codex 的 auth.json 同理确保只有OPENAI_API_KEY和OPENAI_BASE_URL。还有一类不算报错但很坑Skill 加载了但没生效。表现是模型回复正常但完全没有风格。排查顺序目录名是否和 frontmatter 的name一致、文件是否叫SKILL.md大写、是否放在了运行时的 skills 目录下。三个都对还不生效就在对话里显式说“读取 liuxiaoyan skill”看它能不能找到文件。提示排障时把日志级别调高多数客户端支持--verbose或配置里的logLevel。报错原文比猜测有用得多。6. 把 Skill 跑起来之后长期调试与能力扩展Skill 调通只是起点。真正决定它好不好用的是后续的迭代方式。我自己的做法是维护一个“失败对话集”每次模型跑偏就把那轮对话存下来标注是哪个模型没命中、哪个禁忌被违反。攒到 20 条左右回头改 SKILL.md通常能一次性修掉一批问题。扩展方向有三个。一是场景扩展从考研心理激励扩到复试指导、作文批改但每加一个场景就要加对应的心智模型不能只加提示词。二是多轮稳定性给每轮回应加“前置检查”比如每次开头必须含一个打击元素这样即使上一轮跑偏下一轮也会被拉回来。三是情绪感知用户越丧骂得越狠用户已经在动了就收一收这个可以用一个简单的情绪判断规则实现。如果你要把 Skill 分享出去README 里的免责声明必须写清楚本 Skill 由 AI 基于公开资料生成所有言论由 AI 模拟不代表本人立场。这不是形式是底线。长期做 Agent 开发、要跑多个 Skill 和批量测试的话Coding Plan 的入口在 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 按量调试用 API Keys 页面 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 就够了。接入细节翻文档 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 想先快速试一段 SKILL.md 的效果就去模型对话 https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。最后留一个我踩过的坑别在 SKILL.md 里写“你要像某某人一样说话”。模型会把它理解成语气模仿三轮就崩。要写的是“触发条件 决策规则 输出结构”让它走流程而不是凭感觉。流程稳了风格自然就稳了。