写了5个Skill,agent一个都不用:OpenClaw + 国产模型的Skill调度踩坑实录
上午发了架构篇,下午实测发现agent完全绕过了精心设计的5-agent协作流程,自己写脚本调API。本文记录问题现场、根因分析和解决思路。
背景
上午刚发了一篇《不会写prompt也能出大片》,讲了用OpenClaw搭5-Agent协作的ComfyUI出图系统。架构很漂亮------Prompt Agent理解需求、Workflow Agent选模型、Render Agent调API、Critic Agent评分、Memory Agent记忆偏好。
下午实测,打脸了。
翻车现场
在Tg给agent发了一条:"作图 昭和风格的东京街头少女 穿着性感衣服 80年代风格 动漫风格"
预期行为:agent读取prompt-agent的SKILL.md → 结构化拆解需求 → 匹配风格模板 → 生成带权重的英文prompt → 选Animagine XL → 调comfyui-client.py → 出图 → 评分
实际行为:
需要安装requests模块。让我先安装它
让我检查可用的Python包管理器
让我使用系统包管理器安装requests
权限问题。让我回到使用现有的comfyui-client工具,但尝试不同的方法
让我创建一个直接调用ComfyUI API的Python脚本,确保控制输出质量
它自己写了一个Python脚本,从头开始调ComfyUI API。
5个Skill一个都没读。comfyui-client.py没调。prompt-templates.json没查。workflow模板没用。风格匹配没做。评分没跑。
出图倒是出了------但前3张是全黑的(5KB),第4张才正常(2MB)。因为它自己写的脚本没处理VAE精度问题,而我们在workflow模板里早就配好了fp16fix VAE。
这不是个例。我观察了一下午的agent行为,它几乎从不主动读SKILL.md。
问题分析
1. Skill系统的运作原理
先搞清楚OpenClaw的Skill到底怎么工作的。它不是一个运行时插件,而是一份给AI的操作说明书。
流程是这样的:
启动时,OpenClaw扫描skills目录,把所有Skill的name和description注入到系统提示词里。当用户发消息时,AI看到可用Skill列表,判断是否有匹配的Skill。如果匹配了,AI读取对应的SKILL.md完整内容,按里面的步骤执行。
关键词:AI自己判断。
这意味着Skill能不能被执行,完全取决于AI模型的能力------它得先"想到"去读Skill,然后"愿意"按Skill里的步骤走,而不是自己另起炉灶。
2. 国产模型的工具调用短板
我的agent跑的是DeepSeek,这是个性价比很高的模型,日常对话、写内容都不错。但在agent任务上有明显短板。
社区的共识是:Claude在工具调用可靠性上明显领先其他模型。DeepSeek在复杂的多步骤工具调用任务上稳定性和准确性明显较低,适合80-90%的简单日常任务,但复杂的需要切换到更强的模型。
而事实证明,我个人感觉,恰好是DeepSeek在日常工作与接地气方面太过于"聪明"了,他太想要帮助用户完成工作了,以至于发生"我以为我在帮你,其实我在帮倒忙"的有趣情况。
具体到我的场景:
DeepSeek收到"画一张昭和风少女"这个请求后,它的思维链是这样的:用户要画图 → 我知道ComfyUI的API → 我直接写个脚本调API就行了。
它不会去想:等等,我应该先看看有没有专门的Skill来处理这件事。
这是模型层面的"工具意识"问题。Claude Sonnet/Opus在这方面做了专门的训练------遇到任务先扫描可用工具,优先用工具而不是自己写代码。DeepSeek没有这个倾向。
3. SKILL.md的description不够精准
翻回去看我的Skill定义:
vbnet
name: render-agent
description: "调用ComfyUI API执行图像生成任务"
这个description太模糊了。AI看到"调用ComfyUI API执行图像生成",心想:这不就是发个HTTP请求吗?我自己写也行。
对比社区里写得好的Skill:
vbnet
name: trend-scout
description: >
定期扫描V2EX、Hacker News、GitHub Trending,找出热门话题。
Use when: 用户说"给我今天的热点""有什么值得写的话题"。
NOT for: 详细新闻分析或完整文章撰写。
差距很明显。好的description要告诉AI三件事:什么时候用、怎么触发、什么时候不用。
4. 黑图问题:绕过Skill的直接后果
agent自己写脚本的后果是灾难性的。
我们的workflow模板(sdxl_basic.json)里配了独立的VAELoader节点,指向修复版的sdxl_vae_fp16fix.safetensors。这是SDXL在MPS/fp16环境下防止黑图的标准做法。
但agent自己写的脚本直接用checkpoint内置的VAE------这个VAE在fp16下有已知的黑图bug。
结果:前3张全黑(5KB),它自己折腾了10分钟才发现问题,又花了10分钟重写脚本。如果它直接用我们的Skill,从头到尾就不会有这个问题。
最终我们通过在ComfyUI启动参数里加--fp32-vae强制fp32精度才彻底解决。但这本来是不需要的------workflow模板里的VAELoader节点已经处理好了。
5. 记忆系统的连锁故障
这还不是全部。翻gateway日志发现另一个问题:
arduino
memory-lancedb: recall failed: Error: Cannot find module '@lancedb/lancedb'
OpenClaw的记忆系统用的是LanceDB------一个基于Rust编译的向量数据库。问题是它的原生二进制文件跟ARM Docker容器不兼容。每次容器重建或镜像更新,之前装的模块就丢了。
这意味着Memory Agent永远无法工作。agent不记得你之前喜欢什么风格、什么参数效果好------每次都是从零开始。
解决思路
短期:让Skill更"霸道"
加强SKILL.md里的约束,让AI更难绕过。在render-agent的SKILL.md里加:
markdown
## 强制规则
- 禁止自己写Python脚本调用ComfyUI API
- 必须使用 tools/comfyui-client.py
- 必须使用 workflows/ 目录下的模板
- 如果comfyui-client.py执行失败,报告错误,不要自己造轮子
同时改善description的触发精度:
bash
description: >
用户说"画""作图""生成图片"时使用。
必须调用 tools/comfyui-client.py,禁止自己写脚本。
NOT for: 文字创作、代码编写、数据分析。
中期:分层模型路由
日常聊天继续用DeepSeek(便宜),出图任务路由到Claude Sonnet(工具调用可靠)。
OpenClaw支持在配置里设置不同任务用不同模型。检测到"画""图""生成"这类关键词时自动切到Claude。DeepSeek每月 <math xmlns="http://www.w3.org/1998/Math/MathML"> 3 − 5 , C l a u d e 出图任务每月大概多花 3-5,Claude出图任务每月大概多花 </math>3−5,Claude出图任务每月大概多花15-30,但省下的是你盯着agent调试的时间。
长期:记忆系统替换
放弃LanceDB,切到文件记忆方案(MEMORY.md)。不依赖任何原生模块,不怕容器重建,不怕架构不兼容。虽然没有向量检索那么高级,但至少能用。
反思
这件事让我重新理解了一句话:Skill的质量上限取决于SKILL.md的写法,但Skill的执行下限取决于模型的工具调用能力。
OpenClaw的Skill系统设计得很优雅------声明式、热重载、渐进式加载。但它有一个根本假设:AI模型会优先选择使用已有的Skill,而不是自己另起炉灶。
这个假设在Claude上基本成立,在DeepSeek/Qwen上经常不成立。
社区里很多人用Claude跑agent觉得Skill系统很好用,然后推荐给用国产模型的人,结果对方发现agent根本不按Skill走。这不是Skill写得不好,也不是OpenClaw的bug------是模型能力的差距。
所以如果你也在用国产模型跑OpenClaw,遇到agent不按Skill执行的问题,先别急着改Skill,先考虑是不是模型的锅。当然Skill的description也要写好,但那是必要条件不是充分条件。
数据对比
最后放一下今天的实际数据:
| 指标 | agent自己写脚本 | 用我们的workflow模板 |
|---|---|---|
| 黑图率 | 约75%(4张黑3张) | 0%(修复后) |
| 单张耗时 | 35-45秒(含折腾时间) | 16-17秒 |
| 是否自动选checkpoint | 否(永远SDXL Base) | 是(根据风格切换) |
| 是否有评分 | 否 | 是(5维度评分) |
| VAE精度处理 | 无(导致黑图) | 有(fp16fix VAE) |
| 负向prompt | 无或随便写 | 模板库自动匹配 |
差距一目了然。
开源
以上所有代码、Skill、workflow模板、踩坑记录都在这里:
GitHub:github.com/baobaodawan...
ClawHub:clawhub install visual-muse(当前v1.2.1)
如果你也在折腾OpenClaw + ComfyUI,或者遇到了类似的Skill调度问题,欢迎交流。
这是Visual Muse系列的第二篇。第一篇讲架构搭建,这篇讲实战踩坑。下一篇计划写模型路由方案------怎么让DeepSeek和Claude各干各的活。