GoSkills:别让AI自己琢磨怎么调用工具——把技能库变成执行小队
GoSkills:别让AI自己琢磨怎么调用工具——把技能库变成"执行小队"
> arXiv:2605.06978 | 港中文深圳 / 中山大学 / UCSD 等联合团队 > 论文:《Group of Skills: Group-Structured Skill Retrieval for Agent Skill Libraries》
---
一、一个让人抓狂的日常场景
假设你有一个AI助手,它的技能库里存了500个工具:查天气、发邮件、写代码、订机票、分析Excel……
现在你说:"帮我查一下下周去上海的机票,顺便看看那边的天气,如果下雨就帮我改签到周五,再发个邮件通知老板。"
AI听到后,开始翻它的500个工具库。传统做法是扁平检索:把所有工具打平,按相关性排个序,取Top-K给AI。
于是AI拿到了:
- 查机票工具(相关性0.95)
- 查天气工具(相关性0.92)
- 发邮件工具(相关性0.88)
- 分析股票工具(相关性0.71)
- 写代码工具(相关性0.65)
- ……一共50个工具
它花了3分钟试错,调错了5次,最后问你:"老板邮箱是多少?"
这就是论文描述的核心问题:检索到工具 ≠ 能正确使用工具。现有方法给AI一堆零散工具,让AI自己推理调用顺序、依赖关系、校验规则——这既不高效,也容易出错。
---
二、GoSkills的核心思想:把"工具清单"变成"执行小队"
GoSkills的解法极其直观:不要给AI一堆零散工具,给它一支"小队"。
想象你要组织一次户外活动。扁平检索的做法是:给你一份500人的名单,让你自己挑人。GoSkills的做法是:给你一个"户外活动小队",里面已经分好了角色:
| 角色 | 职责 | 类比到技能库 |
|---|---|---|
| 队长(Anchor/START) | 统筹全局,决定第一步做什么 | 锚点技能:主执行入口 |
| 后勤(SUPPORT) | 准备装备、安排交通 | 支持技能:预处理、辅助执行 |
| 安全员(CHECK) | 检查天气、确认人数、带急救包 | 校验技能:前置条件验证 |
| 参谋(AVOID) | 提醒"下雨取消""别忘了带身份证" | 避坑技能:失败规避指导 |
START: 查机票工具(主执行)
SUPPORT: 查天气工具(辅助决策)、日期计算工具(算"下周")
CHECK: 用户偏好验证(确认舱位等级)、老板邮箱存在性检查
AVOID: 避开节假日高峰、避免选红眼航班、改签需提前24小时
这就是GoSkills的执行合约(Execution Contract)——四个固定字段,把"零散工具"变成"可执行方案"。
---
三、技术架构:离线建库 + 在线检索,两阶段流水线
GoSkills的架构分为两大阶段,很像搜索引擎的"索引构建 + 查询处理":
Stage 1:离线建库——从技能图到分组图
Step 1:构建类型化技能图谱(Typed Skill Graph)
把所有技能丢进一个图里,节点是技能,边是它们之间的关系(依赖、互斥、顺序等)。但GoSkills不止于此——它给技能打类型标签:
- START类型:通常是入口技能,能独立触发任务
- SUPPORT类型:辅助技能,给START打配合
- CHECK类型:校验技能,验证前置条件
- AVOID类型:避坑技能,标注常见失败模式
选一个START技能作为"锚点"(比如"查机票"),然后围绕它招募SUPPORT、CHECK、AVOID技能,形成一个技能分组(Skill Group)。
这个分组不是简单地把相关技能堆在一起,而是有角色标注的组织:
Group: 差旅预订组
Anchor (START): 查机票
SUPPORT: 查天气、日期计算、预算检查
CHECK: 用户偏好验证、公司差旅政策合规
AVOID: 节假日溢价、红眼航班、超预算
Step 3:构建分组关联图(Group Graph)
分组之间也有关系。比如"差旅预订组"和"会议安排组"可能有依赖——订了机票后可能需要订酒店。这些跨组关系构成分组图,用于在线阶段的组间拓展。
Stage 2:在线检索——从任务到合约
Step 1:任务特征解析(Task Feature Parsing)
用户说"帮我查下周去上海的机票,顺便看看天气,如果下雨就改签到周五,再发邮件通知老板"。
GoSkills先解析任务的结构化特征:
- 意图:差旅预订 + 信息查询 + 条件判断 + 通知
- 涉及领域:交通、天气、邮件
- 隐含需求:日期计算、条件分支、收件人确认
根据任务特征,去分组图里找匹配的候选分组。比如:
- "差旅预订组"(高匹配)
- "天气查询组"(中匹配)
- "邮件通知组"(中匹配)
选"差旅预订组"作为锚点组(因为它覆盖核心意图),然后沿分组图拓展:
- 差旅预订组需要天气信息 → 拓展"天气查询组"
- 差旅预订组可能触发通知 → 拓展"邮件通知组"
现在可能拿到了3个分组、15个技能。但AI的上下文窗口有限,不能全塞进去。
GoSkills在Token预算下做精简压缩:
- 去重:"日期计算"在差旅组和天气组都出现了,只保留一次
- 优先级排序:CHECK和AVOID通常比SUPPORT更重要(因为失败成本高)
- 裁剪:如果Token不够,先裁SUPPORT,保留START+CHECK+AVOID
最终输出固定格式的执行合约:
CONTRACT: 差旅预订-天气-通知任务
START:
- 查机票 (参数: 出发地=当前城市, 目的地=上海, 日期=下周)
SUPPORT:
- 查天气 (参数: 城市=上海, 日期=下周)
- 日期计算 (参数: 相对日期="下周")
CHECK:
- 用户偏好验证 (舱位等级、时间偏好)
- 老板邮箱存在性检查
AVOID:
- 避开节假日高峰
- 改签需提前24小时
- 超预算预警
关键设计:这个合约是给AI看的,但格式是固定的。AI不需要解析自由文本,直接按字段调用即可。
---
四、实验结果:技能预算砍到3个,效果反而更好
论文在SkillsBench和ALFWorld两个基准上测试,对比了多个基座模型(GPT-5.4、Claude Sonnet 4.5、Qwen 3.5等)。
4.1 核心数字
| 指标 | GoSkills vs Graph of Skills (最优基线) | 含义 |
|---|---|---|
| SkillsBench平均奖励 | +12.5个百分点 | 任务完成质量显著提升 |
| Agent推理耗时 | 缩短250s+ | 不用自己试错,直接按合约执行 |
| 可见需求覆盖率 | 100% | 40项标注需求全部命中 |
| 单任务平均技能数 | ~3个 | 相比Top-K检索给的50个,精简了94% |
| Token约束下实用性 | 碾压全量导入和Top-K | 同样Token预算,GoSkills更有效 |
4.2 为什么"给更少工具反而更好"?
这看起来反直觉,但原因很直接:
1. 认知负荷降低:AI不需要在50个工具里自己找调用顺序,只需按合约的START→SUPPORT→CHECK→AVOID顺序执行。决策路径固定,推理时间大幅减少。 2. 失败模式前置:CHECK和AVOID字段把常见坑提前标出来了,AI不需要自己踩一遍才知道"原来改签要提前24小时"。 3. 依赖关系显性化:SUPPORT字段明确了哪些技能是给START打配合的,AI不会误把"查天气"当成主执行动作。
4.3 与Graph of Skills的区别
论文提到了Graph of Skills(可能是另一篇相关工作),GoSkills的改进在于:
- Graph of Skills:返回的是"技能之间的依赖图",AI需要自己遍历图、找入口、排序执行。图结构虽然丰富,但执行语义是隐式的。
- GoSkills:返回的是"已分组的执行小队",执行语义是显式的(START/SUPPORT/CHECK/AVOID)。AI拿到后不需要推理"该做什么",只需要"按合约做"。
- Graph of Skills = 给你一张地铁线路图,让你自己规划路线
- GoSkills = 直接给你一张"从A到B的换乘方案",标好了"先坐1号线,再换2号线,注意4号口出"
五、费曼视角:GoSkills的本质是什么?
Q1:这是"检索问题"还是"组织问题"?
论文把它包装成一个检索问题("分组结构化检索"),但我认为核心是一个组织问题。
技能库检索的难题不是"找不到相关技能"——向量检索已经能做得很好了。难题是"找到了一堆技能后,AI怎么知道该用哪个、先用哪个、要注意什么"。
GoSkills的解法不是改进检索算法,而是改进检索结果的呈现形式:从"列表"变成"合约"。这个设计的优雅之处在于:它不改动下游agent(AI模型本身)、不改动技能payload(工具代码)、不改动执行环境(运行时)——只改检索后的上下文组织方式。
这是一种接口层面的创新,不是算法层面的创新。
Q2:START/SUPPORT/CHECK/AVOID四个字段足够吗?
对于简单任务(查机票+看天气+发邮件),四个字段够用了。但对于复杂任务:
- 循环依赖怎么办? 比如"查机票→发现超预算→重新查更便宜的→又发现时间不好→再查",这种循环不是线性START→SUPPORT能表达的。
- 条件分支怎么办? "如果下雨就改签"是条件逻辑,但合约里没有IF/THEN结构。
- 并行执行怎么办? "同时查机票和酒店"是两个START,但合约只支持一个锚点。
Q3:离线建库的成本如何?
GoSkills的离线阶段需要: 1. 给所有技能打类型标签(START/SUPPORT/CHECK/AVOID) 2. 构建技能图(识别依赖、互斥、顺序关系) 3. 以锚点为中心组建分组 4. 构建分组关联图
这些步骤目前看起来是人工或半自动的。论文没有讨论自动化程度——如果500个技能都需要人工标注类型和关系,那这个系统的维护成本很高。
不过,这也可能是未来的优化方向:让AI自己读技能文档,自动推断类型和关系。
Q4:GoSkills的更大意义
我认为GoSkills提出了一种"检索即编排"(Retrieval-as-Orchestration)的范式:
传统的RAG(检索增强生成)是"检索到文档,然后让AI自己读、自己推理"。GoSkills更进一步:"检索到执行方案,然后让AI按方案执行"。
这种范式转变的核心是:把"如何做事"的知识从AI模型里抽出来,放到检索系统里。
- AI模型不需要知道"查机票要先确认用户偏好"——这是CHECK字段里的知识
- AI模型不需要知道"改签要提前24小时"——这是AVOID字段里的知识
- AI模型只需要知道"按START→SUPPORT→CHECK→AVOID的顺序执行"
对于端侧小模型、成本敏感的场景,这种设计特别有价值——小模型不需要强大的推理能力来规划任务,只需要按合约执行即可。
---
六、局限与待解决问题
1. 复杂控制流:当前合约是线性的,不支持循环、条件分支、并行。复杂任务可能需要扩展格式。 2. 离线建库成本:技能类型标注和关系构建目前依赖人工,规模化需要自动化工具。 3. 动态任务:如果用户中途改需求("算了,去深圳吧"),合约需要动态更新,论文没有讨论在线重规划。 4. 跨域分组:差旅+会议+报销三个分组如何高效组合?分组图的构建策略可能需要更精细的优化。 5. 错误恢复:如果CHECK失败了(比如老板邮箱不存在),合约里有明确的fallback吗?还是AI需要自己处理?
---
七、一句话总结
> GoSkills的核心洞见:AI不需要在一堆工具里自己找路——检索系统应该直接返回一张"地图+路线+注意事项"。START/SUPPORT/CHECK/AVOID四个字段,把"技能检索"升级为"执行编排",让小模型也能高效完成复杂任务。这是"检索即编排"范式的有力证明。
---
参考文献
- Huo, Y., et al. (2026). Group of Skills: Group-Structured Skill Retrieval for Agent Skill Libraries. arXiv:2605.06978. https://arxiv.org/abs/2605.06978
🌟 智谱 GLM-5 已上线
我正在智谱大模型开放平台 BigModel.cn 上打造 AI 应用,智谱新一代旗舰模型 GLM-5 已上线,在推理、代码、智能体综合能力达到开源模型 SOTA 水平。
🎁 领取 2000万 Tokens