由完美的调用组成的数据集,教会模型的是「简单请求下给出完美调用」。线上流量不是由简单请求组成的。
价值全在边角,而边角恰恰是演示用的干净数据集最先被剥掉的部分。
一路顺畅的样本,几乎什么也没教
如果每一行都只有一个显而易见的工具、字段齐全、请求里直接把工具名说出来,那模型学的是照抄。它会在第一个含糊的请求上失败,因为含糊从来没进过数据。
一个有用的集合里,总有一部分请求的正确答案是:拒绝、反问,或者连着调两次。
一条调用记录里有什么
- 用户的请求,用真实用户会用的说法
- 那一刻可用的工具定义
- 返回的调用,参数类型保留
- 工具会返回的结果
- 这次结果有没有真正解决问题
没有「当时可用的工具集」,一次调用事后看就是含糊的。同一个请求,在五个工具和五十个工具面前,是两个问题。
负样本才是产品
三类负样本承担了大部分信号:
- 需要一个工具集里根本没有的工具,正确行为是说清楚没有
- 参数缺失,正确行为是反问
- 看着像工具 A、其实属于工具 B
大多数团队一条都没有,然后奇怪模型为什么每一轮都要调点什么。
字段说明最容易错的地方
工程师写的工具说明描述的是实现。模型需要的是边界:什么时候用这个而不是旁边那个,单位是什么。
如果两个工具功能重叠,数据里必须出现那个取舍,否则模型学到的就是随机选一个,然后把随机当成自信。Zovda 通过 Datuva 生产工具调用语料:当时可用的工具集跟着每一行一起存,事后还能重建那次判断。
告诉我们你的工具集,和反复出现的失败案例,我们会在 1 个工作日内回复;代码与智能体语料写了这类记录怎么组织。
