GitHub项目"us-vs-them"提供基于diff的行级代码溯源,区分AI生成与人类编写的代码片段,帮助团队审计AI辅助编程的边界。
在 agentic coding 和 editing 的场景下,provenance 成了一个迫切需要回答的问题:人类编写或修改的文本应被视为近乎神圣不可侵犯,agent 动手之前必须三思再三思,而且要有充分的理由才行。另一方面,另一个 agent 生成的 slop 则完全开放,可以随意取用。
一个应用场景:一款主要靠 vibecoding 构建的应用,你想在代码中某些角落确立自己的主张和所有权。你肯定不希望下一个 session 里另一个 agent 把这段代码推土机式地覆盖掉。
另一个应用场景:README.md,最初由 agent 生成,你重写了开篇几段。agent 可以自由地重写或追加后续内容,但修改开篇时必须三思。
主要的设计约束是:无需对文本进行特殊标记。随处可见的纯文本(markdown)应该能被直接支持。
唯一可利用的信息是:文本的每个新版本都带有可识别的作者信息——非人即 agent。
对给定文本的评估输出是一组区间——机器生成文本的"海洋"中人类编写代码的"岛屿"。技术基于简单的 diff,这一隐喻指导了算法的开发。我们不想仅追踪单行的作者身份,而是追踪有意义连贯的文本块。因此,连接的拆分、分离,以及作者身份的稀释都是需要纳入考虑的行为,同时要确保算法不会收敛到全海或全岛。
将 us-vs-them 作为 CLI 工具使用需要 bbin 来进行本地安装。
make install
Git 仓库本身就是一份版本历史记录,每份版本都带有 provenance 标记——按顺序排列的文件每次修订,以及做出该变更的作者。
在 git 仓库内任意位置使用:
us-vs-them --ours dan@eighttragrams.net README.md
这会生成如下列表:
1-3 0.00
4 1.00
5-7 0.00
8-20 0.46
21-164 0.00
其中 1.0 表示完全由人类编写的范围。0.46 表示最初由人类编写、但被 agent 修改到一定程度的范围。0.00 表示完全由 agent 编写。
--ours:这些是人类,其他所有人都是 agent
--theirs:这些是 agent,其他所有人都是人类
填写数量较少的那一方。同时传入两个参数会被拒绝。
make test
理解其行为的最佳方式是查看 caution_test.clj。