在 AI 编程时代,代码的"出处"变得越来越重要。us-vs-them 这个开源工具能帮你追踪每一行代码到底是人类写的还是 AI 生成的,基于 Git 版本历史自动溯源。
引言
你有没有遇到过这种情况:一个项目经过多轮 AI 编程后,你已经分不清哪些代码是自己精心打磨的,哪些是 AI 随手生成的"流水线产品"?
随着 Copilot、Cursor、Claude 等 AI 编程工具的普及,代码溯源问题正在变得越来越现实。人类写的代码承载着设计意图和经验判断,而 AI 生成的代码可能只是"看起来能跑"。如何区分两者,成了开发者面临的新挑战。
us-vs-them 就是为解决这个问题而生的。

什么是 us-vs-them?
us-vs-them 是一个开源的代码归属追踪工具,用于分析文本文件中每一行的"出处"——到底是人类(us)还是 AI(them)写的。它基于 Git 版本历史进行溯源分析,不需要对文本做任何特殊标记。
核心思路很简单:Git 仓库的每一次提交都带有作者信息。通过追踪每一行代码最后一次被谁修改,就能判断它的"血统"。
但实际算法比这复杂得多。它不是简单地逐行标记,而是识别有意义的文本段落——处理合并、拆分、稀释等复杂情况,避免出现"全是人类"或"全是 AI"的极端结果。
为什么代码溯源很重要?

场景一:保护你的核心代码
假设你有一个"氛围编程"(vibecoded)出来的应用,大部分代码是 AI 生成的,但有几个关键模块是你精心设计的。你肯定不希望下一次 AI 编程会话把这些核心模块给覆盖了。
us-vs-them 可以帮你标记出这些"人类领地",让 AI 工具在编辑时更加谨慎。
场景二:README 的进化
一个典型的例子:README.md 最初由 AI 生成,但你重写了开头几段来准确描述项目。此时你希望 AI 可以自由修改后面的内容,但对开头部分保持敬畏。
us-vs-them 的输出会清楚地告诉你:哪些段落是 100% 人类写的(神圣不可侵犯),哪些是 AI 写的(随意改造),哪些是混合的(需要谨慎对待)。
怎么用?

us-vs-them 既可以作为库使用,也可以作为 CLI 工具。安装需要 bbin:
make install
在 Git 仓库中运行:
us-vs-them --ours dan@eighttrigrams.net README.md
输出结果类似这样:
1-3 0.00 ← 完全由 AI 生成
4 1.00 ← 完全由人类编写
5-7 0.00 ← 完全由 AI 生成
8-20 0.46 ← 人类原创,但被 AI 修改过
21-164 0.00 ← 完全由 AI 生成
- 1.0 = 纯人类编写
- 0.46 = 人类原创但被 AI 修改
- 0.0 = 纯 AI 生成
你可以通过 --ours 指定人类作者,或用 --theirs 指定 AI 作者。只需指定较短的那一方。
技术亮点
us-vs-them 的设计遵循几个关键原则:
- 零侵入:不需要对文本做任何特殊标记,纯文本(Markdown)直接支持
- 段落级别分析:不是逐行标记,而是识别有意义的文本块
- 稀释检测:能处理人类文本被 AI 部分修改的情况
- 基于 Git:利用现有的版本历史,无需额外基础设施
总结

在 AI 编程日益普及的今天,代码溯源不再是学术问题,而是实际的工程需求。us-vs-them 提供了一个优雅的方案:利用 Git 的天然版本追踪能力,帮助我们在人机协作的代码世界中保持清醒。
它不只是一个工具,更是一种理念:人类写的代码应该被尊重,AI 写的代码可以随意改造。
这个项目目前还在早期阶段,但方向非常有价值。如果你也在思考 AI 编程时代的代码治理问题,值得一试。
原文链接:us-vs-them - GitHub
觉得这篇文章有价值?点个赞和在看,让更多开发者看到!
欢迎在评论区分享你的想法。
欢迎转发给身边的朋友。
#AI编程 #代码溯源 #开发者工具 #Git #人机协作 #代码归属 #AI生成代码
夜雨聆风