大多数代码语料是按仓库数的。真正该数的是「能被判分的样本」:一个请求、一个期望行为、一种能验证它的方法。仓库是输入格式,样本才是交付物。
这中间的落差,就是大部分工作藏身的地方。
跑不起来的样本,教的是「像不像」
一个跑不起来的样本,教的是风格。风格有价值,但你打算让模型改线上代码时,风格不够。
能不能跑,跟用什么语言关系不大,关系大的是上下文:能解析的依赖、一个最小输入、一条在修改前失败、修改后通过的断言。
一条可用的代码记录长什么样
- 任务是请求,不是答案的说明书
- 相关文件的起始状态
- 补丁写成 diff,而不是重写整个文件
- 判断对错的那条检查
- 这条检查跑在什么运行时上
最后一项最常被跳过。在一个解释器上通过、在另一个上失败的测试,是另一个样本。
「写新函数」和「改老代码」是两件事
从空白页写函数,和在大型仓库里改一个模块,是两种能力,需要两个分布。混在一起的结果是:模型见得多的是从零开始,被考的却是在一堆既有约定里做局部修改。
diff 要小到评审能跟上,文件上下文要大到这个 diff 才有可能写对。
没人跑的那一遍去重
只差一行 import 的两个文件,是同一个样本。同一个工具函数被复制进四个仓库,也是。精确匹配几乎抓不到这些。
能抓到的是:把代码归一化之后取签名,再对周边上下文做相似度。很便宜,而它对这些集合的有效规模的影响,比大多数团队以为的大。
从哪里开始
代码与智能体语料写了这类记录的结构,语料总目录则按训练阶段说明每一类怎么用。
这些语料由 Zovda 出品,Datuva 平台把任务、起始状态和检查放在同一行里,一年后重跑,它还是同一个意思。
告诉我们语言、任务形态和需要的量,我们会在 1 个工作日内回复。
