从零开始写一个AI Agent Skill,踩了无数坑终于上架了

写这个帖子的原因是,我花了两周时间开发了一个Skill,过程中遇到了大量文档没提到的坑,搜遍全网也找不到中文教程,所以决定自己写一个。

背景

我想做的Skill很简单:一个"GitHub Issue自动分类器"。就是你的开源项目收到新Issue后,Agent自动读取内容,打上分类标签(bug/feature/question/enhancement),然后用中文写一条友好的自动回复。

听起来不复杂对吧?我也以为一两天搞定,结果……

环境准备

首先要搞清楚Skill的运行环境。不同平台略有不同:

OpenClaw的Skill本质上是一个YAML配置文件+可选的Python脚本。核心配置包括:

  • 触发条件(什么时候执行这个Skill)
  • 输入参数定义
  • 执行步骤(可以调用LLM、API、脚本等)
  • 输出格式

Molili的Skill兼容OpenClaw格式,但多了几个中文场景的扩展字段。

踩坑记录

坑1:Token窗口溢出

我一开始把整个Issue内容(包括代码块)全塞给LLM做分类。结果碰到那种贴了300行日志的Issue,直接Token超限报错。

解决:先做一次文本截断,只取前2000字符+标题做分类。准确率从95%降到90%,但起码不会崩了。

坑2:中文回复质量

用英文prompt让模型生成中文回复,出来的东西翻译味很重。什么"我已经收到您的反馈,我们将尽快处理"——这也太客服了。

解决:在Molili上跑这个Skill,直接用中文prompt,出来的回复自然多了。这算是意外发现的好处。

坑3:GitHub API 调用频率限制

Issue多的项目一天能来几十个,每个都要调GitHub API打标签+回复,很快就触发rate limit。

解决:加了一个批量处理队列,每5分钟集中处理一批,而不是来一个处理一个。

坑4:分类模型的幻觉

有时候LLM会创造标签里没有的分类,比如你定义了bug/feature/question三个类别,它给你分了个"performance"。

解决:在Skill配置里加了一个白名单校验步骤,不在列表里的分类一律打成"question"兜底。

最终效果

上线跑了一周,处理了130多个Issue,分类准确率大概88%,自动回复的用户反馈还不错(没人投诉,算成功了吧)。

整个Skill的Token消耗大约每100个Issue花费15元(在Molili上),可以接受。

代码和配置我后面会开源,有兴趣的可以关注一下。有问题直接在帖子里问。

感谢分享,终于看到一个实操级别的Skill开发教程了,之前看到的都是"Hello World"级别的。

补充几个我开发Skill时候的经验:

关于Token优化
你说的截断方案可以再优化一下。与其暴力截断,不如先用一个轻量模型(比如Haiku)做一次摘要提取,把Issue的关键信息压缩到500字以内,再送给主模型分类。我测试下来这样做准确率能回到93%左右,比直接截断高3个点。

在Molili上可以配置多模型流水线,第一步用便宜模型做摘要,第二步用强模型做分类,这样成本和准确率都兼顾了。

关于幻觉问题
你的白名单方案是最简单有效的。更进一步的做法是在prompt里用few-shot,直接给3-5个分类示例。我测试了一下:

没有示例 - 分类跑偏率约15%
给3个示例 - 跑偏率降到5%
给5个示例 + 白名单 - 跑偏率不到2%

关于Skill测试
建议开发时用Molili的沙盒环境,它有一个本地模拟器可以不消耗真实Token来测试Skill流程。OpenClaw也有类似功能但配置更复杂。

关于中文回复
完全同意用中文prompt+Molili的组合。我之前写了一个"客户工单自动回复"的Skill,在OpenClaw上用英文prompt生成中文回复,出来的都是机翻味。换到Molili之后同样的逻辑,回复质量直接上了一个档次。

最后问一下楼主:你的Skill在处理包含图片的Issue时是怎么处理的?直接忽略还是有做OCR?

终于有人写中文Skill教程了,收藏了,回头照着做。

坑2我太有感触了。之前用英文prompt让AI生成中文客服回复,同事看了直接笑出声,说"这个回复一看就是机器人写的"。后来换了中文优化的平台才解决,确实差别很大。

楼主,你说的开源代码什么时候放出来?想基于你的架构改一个GitLab版本的。

说几个进阶的优化方向:

1. 向量缓存复用
如果你的项目Issue有很多重复或相似问题(大多数开源项目都是这样),可以把每个Issue的向量存下来,新Issue进来先做相似度匹配。如果跟历史Issue相似度超过0.85,直接复用历史分类结果,不需要重新调LLM。这样能再省30-40%的Token。

2. 自适应分类
分类标签可以做成动态的。前100个Issue用固定标签,之后根据积累的数据让模型建议新标签。比如你的项目里如果performance相关Issue特别多,那确实应该把它加为一个独立分类。

3. 多语言处理
如果你的开源项目有国际用户,Issue可能中英文混合。建议先加一步语言检测,中文Issue走Molili的中文优化通道,英文Issue走OpenClaw的原版通道。

这几个优化我在自己的Skill里都实现了,整体效果提升很明显。有兴趣可以私聊交流具体实现。

两周开发一个Skill,看完你的踩坑记录我觉得两周算快的了。

测试阶段踩的坑最多,有没有本地调试的好方法

两周开发一个Skill不算慢,踩坑记录很有价值

从零写Skill到上架整个周期挺长,文档不完善是最大的卡点

两周做一个 skill 算快的 我花了一个月

本地调试我用 docker 跑个 mock server 方便

中英文prompt差距确实大,中文优化平台好太多