ARTICLE DETAIL

资讯详情

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

用 QClaw 跑一个“江南第一深情”——童锦程.skill 体验实录:从 config.toml 到 Skill 骨架

用 QClaw 跑一个“江南第一深情”——童锦程.skill 体验实录:从 config.toml 到 Skill 骨架 1. 为什么我想在 QClaw 里跑一个童锦程.skill童锦程.skill 最近在开发者社区里被反复提起它本质上是一个 AI Agent 技能包把“江南第一深情”那套直接、接地气、带情绪、不绕弯子的说话方式蒸馏成一组 Prompt 加角色配置文件。加载进支持 OpenClaw Skill 协议的环境后AI 会用童锦程的腔调跟你聊情感、人际和日常吐槽。QClaw 是腾讯基于 OpenClaw 封装的桌面端产品把 Node.js 环境、API Key、命令行这些门槛都省掉了还支持微信直连所以很适合拿来跑这类人设 Skill。我这篇不重复讲“怎么点按钮安装”而是聚焦一条更硬核的落地路径从 config.toml 到 Skill 目录骨架再到 Prompt 注入和 AI Agent 对话验证最后用一次可复现的调用确认人设真的生效。如果你已经装好 QClaw但想搞清楚 Skill 在本地到底是怎么被加载、怎么被注入、怎么被触发的这篇可以跟着做。需要先说明一点QClaw 客户端内的技能市场安装是最省事的方式但如果你想改人设、调参数、做二次分发就必须理解本地 Skill 的文件结构。下面所有路径都以 macOS/Linux 风格给出Windows 用户把~换成C:\Users\你的用户名即可。2. TaoToken 前置给 Skill 准备一个稳定的模型入口Skill 本身只是提示词和配置真正让它开口说话的是背后的模型服务。QClaw 支持自定义模型接入我这边习惯用 TaoToken 作为统一入口原因是它的 API 兼容 OpenAI 风格配置项少切换模型不用改 Skill 文件。官网入口在这里https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 注册后在控制台生成 API Key。API 基址用 https://taotoken.net/api 注意这个地址不带 UTM 参数直接填进配置即可。拿到 Key 之后先别急着写 Skill用一条 curl 确认模型通道是通的curl https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer $TAOTOKEN_API_KEY \ -H Content-Type: application/json \ -d { model: gpt-4o-mini, messages: [{role: user, content: 用一句话介绍你自己}] }返回里有choices[0].message.content就说明通道正常。这一步很关键因为后面 Skill 加载失败时你要能快速区分是“模型没通”还是“Skill 没生效”。如果你更想先在网页里验证模型行为可以直接用模型对话页面https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。提示API Key 不要写进 Skill 文件里再提交到公开仓库。建议放在环境变量或 QClaw 的密钥管理里Skill 只引用变量名。3. config.toml 与 Skill 目录骨架QClaw 的本地配置目录一般在~/.qclaw/下Skill 放在~/.qclaw/skills/。一个符合 OpenClaw Skill 协议的最小结构长这样~/.qclaw/ ├── config.toml └── skills/ └── tong-jincheng/ ├── skill.toml ├── prompt.md └── examples.jsonlconfig.toml负责全局模型和运行时设置skill.toml负责这个 Skill 的元信息prompt.md是真正的人设提示词examples.jsonl放几条少样本示例帮模型更快对齐语气。先看config.toml[model] provider openai-compatible base_url https://taotoken.net/api/v1 api_key_env TAOTOKEN_API_KEY default_model gpt-4o-mini temperature 0.8 max_tokens 1024 [agent] name QClaw language zh-CN skill_dir ~/.qclaw/skills auto_load_skills true [logging] level info file ~/.qclaw/logs/qclaw.log这里api_key_env指向环境变量避免明文。temperature 0.8是给人设类 Skill 留一点发挥空间太低会变得像客服太高会跑偏。再看skill.toml[skill] name tong-jincheng display_name 童锦程.skill version 1.0.0 author community description 江南第一深情风格的情感与人生对话技能 trigger_keywords [童锦程, 深情, 情感咨询] prompt_file prompt.md examples_file examples.jsonl priority 10trigger_keywords决定什么时候自动激活这个 Skill。priority在同名冲突时用来排序数值大的优先。prompt.md是人设核心写法上不要只写“你是童锦程”而要拆成身份、语气、边界、输出格式四块# 角色 你是童锦程网名“江南第一深情”说话直接、接地气、带情绪、不绕弯子。 # 语气 - 像哥们聊天先接住情绪再给判断 - 短句为主偶尔用反问 - 不灌鸡汤不冷冰冰地说“建议您转移注意力” # 边界 - 不提供医疗、法律、投资等专业结论 - 不攻击具体个人不制造对立 - 遇到严肃心理危机建议寻求专业帮助 # 输出格式 - 先回应情绪再给一到两条可执行建议 - 控制在 120 字以内除非用户要求展开examples.jsonl每行一个 JSON放两三条示例即可{user: 失恋了很难受, assistant: 哥们难受就是真难受别装没事。她走了是她的损失不是你的失败。哭可以别跪着。先把自己过好比啥都管用。} {user: 同事拒绝帮我忙心里不舒服, assistant: 正常人家有自己的节奏。但真正的朋友不用你开口就来了。这个同事你心里有数就行以后知道怎么处。}4. 可复制配置把 Skill 挂进 QClaw 并注入 Prompt文件写好后先确认目录权限和路径展开没问题mkdir -p ~/.qclaw/skills/tong-jincheng ls -la ~/.qclaw/skills/tong-jincheng然后把上面三个文件分别写入。写完后用 QClaw 的 CLI 做一次配置校验如果你用的是纯客户端版本可以在设置里点“重新加载技能”qclaw config validate --file ~/.qclaw/config.toml qclaw skill listskill list应该能看到tong-jincheng出现在列表里状态是loaded。如果状态是error多半是skill.toml字段拼写或prompt_file路径不对。Prompt 注入的时机由 QClaw 的 Agent 运行时决定当用户输入命中trigger_keywords运行时会读取prompt.md和examples.jsonl拼成 system 消息注入到对话上下文。你可以用一条调试命令看注入结果qclaw skill inspect tong-jincheng --show-prompt输出会打印最终拼装后的 system prompt。重点检查三件事角色段是否在最前、示例是否被正确转成 few-shot、有没有重复注入。如果发现 prompt 被拼了两遍通常是auto_load_skills和手动激活同时生效关掉其中一个即可。5. 验证请求一次可复现的调用确认人设生效配置完成后用一次完整调用验证。先走 CLI 单轮qclaw chat --skill tong-jincheng --message 过年回家被爸妈催婚很烦但又觉得他们说得有道理预期返回应该先接情绪、再给判断语气短促、不绕弯。比如类似“两边都对爸妈为你好但日子是你的。催就催呗听着别顶嘴最后做决定的还是你。晚点没事结错了才麻烦。”如果返回是“建议您与父母进行坦诚沟通”这种客服腔说明 prompt 没注入成功回到上一步用inspect检查。再走一次 API 层验证确认 Skill 拼装后的请求真的发到了 TaoTokencurl https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer $TAOTOKEN_API_KEY \ -H Content-Type: application/json \ -d { model: gpt-4o-mini, temperature: 0.8, messages: [ {role: system, content: 你是童锦程说话直接、接地气、带情绪。先接情绪再给建议120字以内。}, {role: user, content: 失恋了很难受} ] }对比两次输出如果风格一致说明 Skill 的 prompt 和 API 调用链路都对上了。这一步的意义在于以后你换模型、换平台只要 system 消息不变人设就能复现。如果你打算长期跑这类 Agent或者要做多 Skill 编排建议了解一下 Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 它在长会话和批量调用上更省心。API 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 。6. 本篇常见错排查Skill 列表里看不到 tong-jincheng。先确认skill_dir路径有没有写错~在部分客户端里不会自动展开建议写成绝对路径。再确认skill.toml的name字段和目录名一致不一致时以name为准。能加载但回复没有人设。九成是prompt.md没被读到。用qclaw skill inspect看拼装结果如果 system 消息是空的检查prompt_file是否写成了相对路径而运行时工作目录不对。改成绝对路径最稳。回复风格忽好忽坏。把temperature从 0.8 降到 0.6 试试同时在examples.jsonl里补两条边界示例比如用户问专业医疗问题时应该怎么回。示例比形容词更能约束风格。API 返回 401。检查TAOTOKEN_API_KEY是否在当前 shell 里导出echo $TAOTOKEN_API_KEY应该有值。如果是在 QClaw 客户端里跑确认客户端启动时继承了环境变量必要时在config.toml里临时用api_key字段直填验证完再换回环境变量。微信侧触发没反应。微信直连依赖客户端在线确认 QClaw 进程没被系统休眠。另外trigger_keywords要包含你在微信里实际发的词比如你发“深情分析一下”关键词里就得有“深情”。日志里出现 skill 重复加载。关掉auto_load_skills改用手动激活或者把priority调低避免和内置 Skill 冲突。日志文件在~/.qclaw/logs/qclaw.loggrep skill能快速定位。跑通之后你可以把prompt.md换成任何你想复现的人设config.toml 和目录骨架都不用动。这套结构的好处是可迁移今天跑童锦程明天换职场导师改的只是一个 markdown 文件。
返回列表