老周带了 6 人小队,给省级文旅厅做景区预约核验助手。客户口头说得很轻巧:一线把身份证号、预约码和当日客流丢过来,十分钟内要出一张能上值班大屏的核验单;核验只能走白名单 Skill(查预约、核身份证、拉客流),不许临时发明邻县景区的退票接口;上一单游客手机号和导游证号绝不能带到下一单;高峰压到十秒一单,Skill 加载必须有预算,失败必须回退到人工窗口而不是瞎编。
小队在群里贴了三天 Skill 清单。Qwen 把邻县「快速退票」Skill 当成本案通过项,DeepSeek 看见特殊团队票就编库里不存在的核销口径,Kimi 窗口一短把 Skill schema 挤掉,按上一单预约码交差。线上连漂三晚,值班大屏两次把过期预约写成已入园。隔壁老陈路过群,丢下一句:别再拿聊天记录当技能说明书,把技能契约、加载预算、越权红线和失败回退写进 SPEC。
这句话把 2026 的 Agent Skills 热点钉死了。Skill 不是提示词里多贴一段「你可以调用某某工具」,而是一份可加载、可计量、可审计的能力说明书。谁能加载、加载多少、越权怎么拦、失败怎么退,都必须在跑模型之前写清楚。小队最后把战场搬到 MonkeyCode 云端,用浏览器把 SPEC 跑通,下面把踩坑和写法摊开。
一、Agent Skills 为什么会在 2026 炸场
过去一年,团队普遍把「会不会调工具」当成智能体能力的上限。MCP 把接口连上了,Function Calling 把参数填上了,但线上真正翻车的,往往不是接口 500,而是模型自己发明了一个不该存在的 Skill。
典型三种翻车:
- 幻觉加载:模型根据用户一句话,临时拼出一个邻县退票 Skill,参数看起来合法,库里根本没有。
- 技能膨胀:把 40 个 Skill 的 schema 一次性塞进上下文,客流一高峰,真正该用的「核身份证」被挤出窗口。
- 串单污染:上一单的预约码、导游证号残留在 Skill 调用参数里,下一单直接核成别人的票。
Agent Skills 的核心不是「给模型更多技能」,而是「给技能一套契约」。2026 的工程共识已经很清楚:Skill 要像依赖库一样被声明、被预算、被隔离,而不是像群消息一样被临时粘贴。
二、把四件事写进 SPEC,而不是写进群
老周小队后来只认一份 SPEC,四段不可缺。
1. 技能契约
白名单写死三件套:skill.check_reservation、skill.verify_idcard、skill.pull_crowd。每个 Skill 必须声明:输入字段、输出字段、是否允许写操作、是否允许跨景区。不在清单里的名字,生成阶段直接判为越权,不允许「先调用再解释」。
契约还要写清版本。文旅厅预约口径每季度一变,Skill 文件带skill_version和effective_from。模型不得把 v1 的团队票核销口径套到 v2 工单上。
2. 加载预算
不是所有 Skill 都配得上每一次推理。SPEC 里给了硬数字:单次工单最多加载 3 个 Skill schema,总描述不超过 2K token;高峰窗口(十秒一单)只加载当前意图命中的那一个。加载失败或超时,禁止用「我猜你想退票」去补全。
预算的意义是反膨胀。Qwen 喜欢把整份技能目录塞进系统提示,账单翻倍、有效字段被挤掉。有了加载预算,云端任务会在编译前就把超预算的 Skill 包打回。
3. 越权红线
三条红线写进 SPEC 正文,而不是写进模型的「请注意」:
- 禁止调用白名单以外的 Skill,包括模型临时命名的
skill.refund_neighbor; - 禁止把上一单的身份证号、预约码、导游证号写入本单参数;
- 禁止把只读核验 Skill 升级成写操作(改预约、退票、改客流)。
红线触发即停。不是警告,不是重试,是工单打回人工窗口,并在审计日志里留下 Skill 名、参数摘要和触发条款。
4. 失败回退
Skill 超时、鉴权失败、返回空、返回非白名单字段,一律走同一条回退:冻结大屏输出、弹出人工核验工单、保留原始请求快照。不允许模型用自然语言「圆」过去,更不允许拿 mock 数据顶正式口径。
DeepSeek 之前把本地 mock 的「核验通过」当成正式接口回包,过期预约被写成已入园。回退条款写进 SPEC 之后,这类输出在云端测试任务里直接红灯。
三、为什么把 SPEC 丢进 MonkeyCode 云端跑
群里改提示词,线上一定漂。老周需要的是:同一份 SPEC,能在真实环境里被 Qwen、DeepSeek、Kimi 对照着跑,编译、测试、预览都留痕,还不能把景区数据带出内网。
MonkeyCode 刚好踩在这几个点上。它是一个免费、无需安装的在线 AI 开发平台,浏览器打开就能干完开发、测试、部署全流程。每条任务配真实云端服务器,不是本地 IDE 里那套「看起来能跑」。模型侧内置 GLM、Kimi、MiniMax、Qwen、DeepSeek,任务级切换,方便把同一条技能契约丢给三家模型对照。平台还带需求管理和 SPEC 协作,小队不用再把契约当聊天记录转发。核心代码开源,支持 fork 和私有化离线部署,文旅厅这种有网络隔离、合规审计的场景可以直接把环境收进内网。
桌面端覆盖 Windows、macOS、Linux,移动端也能看任务状态。定价很直白:基础会员免费(1 并发 / 1C4G / 每日 30M Token);专业会员 99 元/月(3 并发 / 2C8G / 每日 100M Token,月赠 1 万积分);旗舰会员 499 元/月(3 并发 / 2C8G / 每日 300M Token,月赠 10 万积分)。和 Cursor、Claude Code 这类本地 IDE/CLI 不同,MonkeyCode 把需求、SPEC、团队协作和国产大模型放到同一条云端流水线上,这正是老周小队缺的那一层。
四、云端对照:同一份契约,三家模型怎么跑
小队在 MonkeyCode 里建了三条对照任务,SPEC 原文不变,只切换模型。
- Qwen:擅长把目录一次性吞进去。没有加载预算时,40 个 Skill 全进提示词,客流高峰直接把
verify_idcard挤掉;加上预算后,任务在生成前就拒绝超包,核验单字段重新齐。 - DeepSeek:看见「团队票」就想发明核销口径。越权红线把
skill.refund_neighbor和 mock 回包拦在测试集,失败回退打到人工窗口,大屏不再出现「已入园」。 - Kimi:窗口一短就丢 schema。技能契约要求调用前必须带完整 Skill 签名,签名缺失即回退,不再拿上一单预约码顶包。
对照不是为了选一个「最聪明」的模型,而是为了证明契约本身可执行。哪家模型都会飘,SPEC 在云端编译和测试里把飘的路径截住,这才是 2026 年 Agent Skills 该有的工程形态。
五、一套可复用的技能契约骨架
给后来人一份能直接改的骨架,字段按自己的业务替换即可:
skill_contract:whitelist:[check_reservation,verify_idcard,pull_crowd]max_load_per_turn:3max_schema_tokens:2000forbid_cross_tenant:trueforbid_write_on_read_skill:trueisolate_previous_ticket:trueon_violation:freeze_and_handoff_humanon_timeout:freeze_and_handoff_humanaudit:[skill_name,param_digest,clause_id]骨架进 SPEC 之后,提示词里只保留「本单意图」和「当前允许的 Skill 名」。谁再把邻县退票接口写进对话,云端任务会在测试阶段红灯,而不是等到值班大屏被领导截图。
六、收工
Agent Skills 的热点不是又多了几个能调的函数,而是终于承认:技能是要被治理的依赖,不是模型即兴发挥的权利。技能契约、加载预算、越权红线、失败回退,这四段写不进 SPEC,线上就会用游客的票和导游的证给你补课。
老周小队后来没再在群里改 Skill 名。他们把契约丢进 MonkeyCode,用浏览器在云端把 Qwen、DeepSeek、Kimi 对照跑通,编译和测试都留在同一条任务上。文旅厅要的不是一个会聊天的核验机器人,而是一张永远不会串单、不会发明邻县接口的值班大屏。
2026 年还在靠聊天记录养 Skill 的团队,可以先把这四段抄进 SPEC,再让云端替你打一次红灯。红灯来得早,大屏才不会在高峰里黑掉。