大家好,我是小扬。今天为大家分享的是一篇关于智能体技能检索的论文。
智能体靠检索技能库扩展能力,但训练检索器需要大量"查询-技能"配对数据,人工标注成本极高。复旦大学联合上海交通大学提出Skill2Query:把技能文档解析成技能知识图谱,再自动生成 70 万条"假查询"当训练信号,让智能体找技能的准头大幅提升。
假查询假在哪
老办法是 doc2query 一类的文档级生成:把整篇技能文档塞给大模型,直接编几句用户可能问的话。但技能文档不是散文,它带参数声明、约束条件和示例,是份有结构的接口说明。压成纯文本,就丢了两个关键信息:
- 能力锚定缺口:生成的查询跟技能"主题相关",但没落到任何一项具体能力上;
- 参数一致性缺口:查询里的参数值是模型随手编的,可能根本不符合接口约束,拿去训练等于教错。
Skill2Query 怎么做
第一步:把技能文档解析成技能知识图谱(SKG)。每个技能建一张图,结构如下:
- 4 类节点:Skill(含 skill_id/名称/描述/完整文档)、Capability(独立能力,每个能力单独成节点)、Parameter(含 name/type/required/default/min/max/enum/examples 八项属性)、Example(官方示例的查询句和对应参数值);
- 5 种有向边:has_capability(技能有哪些能力)、has_parameter(技能有哪些参数)、has_example(技能有哪些示例)、fill_param(参数填进哪个能力)、demonstrates(示例演示哪项能力);
- 关键设计:把能力显式拆成独立节点,后续生成才能"围绕每个能力出题",而不是围着整篇文档打转。
第二步:三阶段渐进生成伪查询。论文的出发点是:风格一致、能力覆盖、参数可实例化这三个目标互相独立,单次大模型生成很难同时满足,所以要拆成三步解耦——
- 风格模仿器(F1):从示例里提取 4 类风格信息——句法模式(含出现频次)、按词性归类的领域词汇、每个参数在示例里的自然语言表达方式、原始示例查询,保证生成的查询"长得像人话";
- 查询模板生成器(F2):围绕每项具体能力生成查询模板,每个模板是(文本,绑定能力,参数槽位)三元组;施加覆盖率约束——在模板数量预算内让覆盖的能力数最大化;模板句式覆盖祈使句、是非问、wh-问句、间接请求等多种形态;
- 参数填充器(F3):按examples→enum→default→type的优先级给槽位填值;多参数模板先做笛卡尔积组合,再用基于优先级的采样截断防止组合爆炸;最后过 5 道静态校验——参数名匹配、必填参数覆盖、类型兼容、取值范围、枚举合法性。
第三步:一份数据,三种用法:
- 离线索引增强:每条伪查询挂在源技能名下单独进索引,检索到伪查询就等于检索到技能;
- 在线查询扩展:用原查询先召回一个种子技能,再基于它生成查询变体,把原查询和变体的两份排名用倒数排名融合(RRF)合并;
- 检索器训练:伪查询配源技能直接构成(查询,技能)监督对,无需任何人工标注。
实验结果
- 检索全范式提升:4 基准、近 3 万技能池,三种范式平均 Recall@1+6.70pp,ToolQA 上 BM25 name R@15.52%→32.03%
- 训练数据质量第一:4 个数据集全部最佳 R@1 和nDCG@1;
- 端到端也灵:DeepSeek-V4-Flash 任务成功率73.76%→82.33%(+8.57pp),GPT-5.4 达 83.53%,距 Oracle 上限仅 0.54pp。
热门跟贴