Agent Skills:从召回到编排,如何用对技能

选择、依赖与信息交接,决定技能能否成为可靠结果

Eric.Y · 归档 2026-06-01 · 发布 2026-10-07

用户上传一份销售表,要求清洗重复记录、保留公式,再生成汇报用的演示文稿。Agent 找到了表格技能和演示文稿技能,也按顺序调用了它们。最后交付的文件却丢了公式,幻灯片中的数字还是清洗前的版本。

这里没有明显的“没找到工具”。问题出在几个很小的交界处:清洗要求没有进入技能选择条件,表格输出没有成为下游的唯一输入,执行器也没有确认收到的是哪个版本。技能选对了名字,任务仍然可能在交接中失败。

本文把 Skill 理解为可复用的过程知识包:它可以包含适用条件、操作步骤、脚本、参考材料和验证方法。Harness 是承载模型、工具、状态与执行循环的宿主。对 C 端 Agent,我更关心的是一次请求中,哪些知识在什么时候进入模型,以及这些知识怎样转化为可检查的动作。

沿着这个问题,SkillRouter、Graph-of-Skills、AgentSkillOS 和 GraSP 分别提供选择、依赖补全、节点交接与局部修复的思路。下文以同一个表格到演示文稿的教学案例串联它们。案例与组合架构由本文构造;研究事实与工程建议分别说明,实验不声称独立复现。

1. 先把“用到了 Skill”拆开

日志里出现一次 Skill 调用,信息量很有限。它可能只是发起了读取,工具随后报错;也可能读到了正文,却没有执行其中的关键检查。要定位开头的失败,需要把整个过程拆成可以关联的事件。

阶段 在案例中要回答的问题 应留下的证据
召回 候选是否覆盖清洗、公式保护、图表和演示文稿? 查询、候选集合与版本
选择 为什么采用这套能力组合? 选中项、适用条件、依赖关系
披露 哪份正文和哪些资源真正进入了执行上下文? 成功读取结果、内容指纹
执行 是否按要求处理公式与数据版本? 动作、输入输出与状态变化
验收 最终文件是否满足用户要求? 文件级检查和任务验收结果

这些事件有先后关联,但不一定由五个独立服务实现。小系统可以在一个循环里完成,关键是每个事件的含义清楚。例如“请求读取成功”与“材料内容到达模型”应能关联到同一次调用,不能只对终端文本搜索一个技能名称。

图 1:机制与执行流程

图 1:本文的执行事件图。反馈返回计划,不意味着每次失败都要重写技能正文。

对“保留公式”这样的条件,也要区分未知与失败。若系统没有保存文件差异,无法判断公式是否改变,就应记录证据不足。把未知直接当作成功,会让后续的技能学习建立在错误标签上。

2. 选择技能时,需要比名字更多的信息

大库中最容易混淆的往往不是毫不相关的技能,而是相邻能力。例如同为表格清洗,一份技能适合把所有内容导出成静态值,另一份会保留公式、格式与工作表关系。只按“清洗 Excel”检索,两者都可能排在前面。

SkillRouter 使用检索与重排两阶段,并将技能正文中的能力细节引入路由判断。1 它的启发是:路由模型需要理解的材料,可以比最终执行模型首轮携带的材料多。 离线索引与在线重排负责辨别能力,执行器只读取此次真正采用的部分。全文参与路由并不等于将全库全文塞进用户会话。

这种方法仍有输入限制。字段截断会影响尾部条件,训练中的相似负例也可能其实是有效替代方案。因此,“保留公式”“只能本地处理”“支持哪个工具版本”不能长期藏在正文的偶然位置。我的工程建议是把这些约束同步到可检查的元数据,同时保留正文作为判断依据。

可以把候选筛选分成两层:先排除权限、环境和输出格式明确不满足要求的项,再比较剩余方案的相关性与成本。硬条件不能被一个很高的语义相似度抵消。没有足够证据证明候选适用时,回退到直接工具执行或向用户澄清,也是一种合理结果。

依赖召回解决的是另一个缺口

找到演示文稿技能,不代表找到了它所依赖的图表生成能力。Graph-of-Skills 将技能关系用于结构检索,让查询能够沿依赖扩展到单纯语义相似度可能遗漏的前置能力。2

这与“再多取几个 Top K”不同。增加 K 只是扩大邻近候选,依赖扩展试图回答:已经选中 B,为了让 B 的前置条件成立,还需要哪个 A?在表格案例中,这条边应该具体到“图表生成消费已验证的数据表,演示文稿消费图表与解释”,而非只有两个技能的名称相邻。

关系图也可能放大错误。一个过期依赖会稳定召回错误版本;把常见共现当作必要前置,会给所有任务增加多余步骤。关系至少需要记录适用条件、来源与版本。某条边来自人工规则、文本推断还是执行验证,应当能被区分。

3. 有了执行图,还需要定义信息交接

AgentSkillOS 将技能组织、选择与 DAG 执行结合起来。最值得看的一处实现,是规划器与节点执行器接收的材料不同:规划阶段可以看到选中技能的名称、描述和正文;执行阶段按节点构造任务,携带目标、产物路径、使用提示与输出要求。34

规划器读过的信息,不会自动成为下游执行器的历史。 在新的会话里,产物路径、使用方法和预期输出都需要显式传递。反过来,如果执行器继承了全部旧会话,它还可能同时看到过期文件、失败尝试与已经撤销的计划。

下面比较的是同一个时刻:表格清洗完成,准备生成演示文稿。它是依据节点交接思路构造的教学示例,不是一次真实 API 请求记录。

共享长历史:
用户需求、两份技能全文、所有清洗尝试、旧图表路径、
工具错误、修正说明、当前要求“继续生成演示文稿”。

按节点交接:
目标:生成销售复盘演示文稿,保留数据口径。
权威输入:cleaned.xlsx,版本与内容指纹已记录。
补充材料:validation.json、charts/、口径说明。
使用要求:从 cleaned.xlsx 取数,不使用旧草稿。
预期输出:report.pptx,并给出逐页数据来源。
下一步:执行器按需读取材料,再执行生成与验收。

路径本身不是上下文。只有实际读取之后,文件内容才进入模型可用材料。交接字段也不是越多越好:可以直接检查的机器状态留在运行状态里,模型需要解释和决策的部分再进入上下文。把完整审计日志复制给每个节点,既增加成本,也让过时信息重新参与判断。

图 2:机制与执行流程

图 2:本文建议的产物交接。箭头表达依赖,访问权限仍由宿主独立控制。

AgentSkillOS 的作者实验包含 30 个产物型任务,即使提供相同的理想技能集合,结构化编排也表现出优势。3 但其成对偏好与排序指标不能改写成任务准确率;整套系统的改善也不能全部归给“新建会话”。规划质量、交接方式、重试与材料组织共同变化,需要另外做消融。

还有一个容易忽略的边界:会话隔离不等于文件隔离。源码中的节点可以共享工作目录,交接材料也不必只来自直接父节点。4 如果要实现最小权限,还需要限制节点可访问的路径与工具,不能从 DAG 图形直接推出安全保证。

4. 执行中应修复哪一部分

执行图适合表达已知依赖,但真实工具调用会产生新信息。清洗结果可能提示表中存在不可自动合并的重复记录;图表生成可能发现缺少时间字段。此时继续照原计划走,或直接重跑全部流程,都可能浪费成本。

GraSP 将技能组合表达为可检查的图,并把失败映射到局部修复。5 对框架的启发是:先保留已经可靠完成的状态,定位哪个节点、哪条依赖或哪个条件失效,再决定补节点、换方法、修参数或停止。验证对象包括计划结构与执行结果,图在结构上合法并不保证任务能完成。

以表格案例为例,若清洗已经正确完成,只是图表缺少单位,应修复图表或补充口径,没必要再次删除重复行。如果原因是上游误删数据,则必须使受影响的下游产物失效,再从可靠版本重算。这里需要的是数据依赖和失效传播,不只是让模型写一句“我将重新检查”。

观察到的失败 优先检查 合理动作
找到了同名能力,但不支持公式 候选适用条件 换技能或直接执行,记录路由缺口
下游使用旧文件 交接与版本绑定 更新交接,撤销受影响产物
环境暂时不可用 工具状态与重试安全性 有限重试或暂停
规则明确但反复未执行 披露方式、执行步骤与验证 补局部检查,必要时提出技能候选修订
用户要求本身不明确 缺失约束 澄清,不自行扩大任务

这张表是诊断顺序,不是自动判因器。同一个表象可能有多个原因。框架应把观察、假设和后续验证分开记录,保留“证据不足”,避免一次失败立即触发全库文本优化。

5. A 调用 B,怎样判断组合值得存在

很多关系图来自日志共现:A 后面经常出现 B,于是建立 A→B。这个证据太弱。两者可能只是都在困难任务中频繁出现,也可能重复完成同一件事。是否存在组合增益,需要在具体任务分布与预算下验证。

我的建议是为重要组合至少保留三个参照:只用 B;在同样约束下使用 A 再用 B;不给 A 额外知识、只增加相近计算预算的直接执行方案。若 A 的贡献是生成中间文件,还应检查 B 实际使用了该文件,以及换成过期或错误产物时结果如何变化。

对开头的例子,“清洗→图表→演示文稿”可能合理;但“所有表格任务都先跑一次清洗”就不合理。用户只要求调整字体时,清洗会引入不必要的数据风险。边的适用域应该随任务条件收窄,而不是随着成功次数增加而无限泛化。

关系也要区分必要依赖与可选帮助:前者不满足就无法执行,后者只是可能提升质量。二者放在同一无标签图里,会让规划器把所有有帮助的步骤都当作必做步骤,技能数量和成本随之膨胀。

6. 一个可以逐步落地的编排器

对已有 C 端框架,我会先增加可追溯性,再增加自动规划自由度。最初只支持少数稳定组合,把一次请求的选择、材料和产物说清楚,通常比先建设庞大的关系学习系统更有价值。

一个节点任务至少应记录以下内容。它是本文的参考契约,字段名称不代表上述项目的统一标准。

node: make_slides
skill: pptx@固定版本
goal: 生成销售复盘演示文稿
inputs:
  - artifact: cleaned.xlsx
    producer: clean_sheet
    digest: 已记录的内容指纹
constraints:
  - 只采用已验证数据
  - 不对外发送文件
outputs:
  - report.pptx
checks:
  - 页面数据与输入一致
  - 关键口径有来源
budget:
  retries: 预先设定的有限次数

在这个基础上,先测试四类故障:候选不适用、读取失败、交接错版本、下游验收失败。每一种都应能从日志找到最早出现问题的位置。再比较直接执行、扁平技能选择与结构化编排的质量和全部成本,详细协议见收益评测篇。

当这些边界清楚之后,再引入关系检索、更多动态节点与自动修复。它们解决的是规模和适应性问题;若基本事件还无法追踪,更多自治只会增加解释失败的难度。

我判断一个编排系统是否成熟,会看它能否回答三句话:这一步为什么需要这个技能,它实际看到了什么,下一步凭什么信任它的产物。 这三件事能解释清楚,才有条件讨论更复杂的能力组合。

参考资料

  1. SkillRouter,arXiv:2603.22455v5:技能检索与重排;作者实现。
  2. Graph-of-Skills,arXiv:2604.05333v4:依赖感知的结构检索。
  3. AgentSkillOS,arXiv:2603.02176v1:组织、编排与产物型任务评测。
  4. AgentSkillOS 固定源码:src/orchestrator/dag/engine.py、prompts.py 与 runtime/client.py;源码静态观察不代表独立运行结果。
  5. GraSP,arXiv:2604.17870v1:图结构技能组合与修复。

资料以所列固定版本及 2026 年 9 月研究底稿为界,2026-10-07 合并修订。后续版本变化不自动适用于文中结论。