法律是个会变的文件,可它从来只管存最后一版。
干外包最怕客户一句「按合同来」。合同本身倒没啥,麻烦在于你手里这份,跟签的时候那份,早不是同一份了。
法律比合同还多一层麻烦:它一版一版地改,旧版还得留着,万一要证明「当时按那个办是对的」,全靠旧版。但绝大多数国家官网只给你看今天生效的那一版。想问「2022 年 5 月 1 日那天这一条写的是什么」,只能自己去翻立法公报,一段一段往回扒。
有人把这事儿干了,干得还挺狠:全世界的法律,做成一个 git 仓库。

01 说白了是个什么
这个项目叫 global-law,作者是 lexifina,10 月 28 号发布,当天在 Hacker News 顶到第一,现在 1447 星。
它的结构一眼就认得:一个国家的法律,就是一个仓库。德国是一个子模块,法国是一个子模块,捷克、西班牙、瑞士、格鲁吉亚、马耳他各是一个。整个主仓库不存法律条文本身,存的是「把这些国家的法律历史,按生效时间交错排在一起」的时间线。
于是这个仓库的 git 历史,就变成了一部世界立法编年史。每一次提交,对应一部法开始生效;提交的作者不是人,而是那部法自己。提交信息里写着三个关键信息:哪个国家、哪部法、什么时候生效。
主仓库根目录下有个 manifest.json,登记了每一份语料的位置、来源仓库、覆盖范围,以及「哪条 trailers 里装着生效日期」。这个文件很重要,后面会细说。
02 提交停在 1970 年
这里有个特别别扭的技术债:git 存不了 1970 年以前的日期。时间戳是 Unix 纪元,1970 年 1 月 1 日零点是 0,再往前就是负数,git 直接不要。
可法律不可能从 1970 年开始。德国《基本法》是 1949 年的,瑞典的法规汇编能追到 1723 年,法国那份最夸张,manifest.json 里标的是 881 年 10 月 9 日。
作者的处理办法挺土,但管用:所有 1970 年以前的改动,提交日期统统写成 1970 年,一秒一个往后排,顺序保证对。真实的生效日期不放在提交时间里,而是塞进一个叫 In-force 的 trailer。
坑就在这儿,作者自己在 README 里点了名:在这个仓库里跑 git log --before=1960-01-01,它会给你一个错的答案,而且不吭声。因为它看到所有提交都在 1970 年以后。想查真实日期,得读 In-force 那条 trailer,或者直接用作者写好的 law.py。工具认 trailer,不认提交时间。
这一点我挺喜欢:它把「我知道自己不完美、坑在哪儿」明明白白写在 README 里,还专门列了一节叫「它不显示什么」。那一节里还有几条自我揭短:
- 某个日期查不到某个文件,可能是这条还没生效,也可能是这份语料压根没覆盖到那么早,两种情况它分不清。
- 有的法会往前追溯生效,但追溯只记在提交信息里,不会改变那些更早日期上显示的文本。
git blame 是按行算的,一行改了一半,功劳全给最后一个碰过它的法。所以作者另写了个 law.py words,按词比,一个字一个字认领。
肯把「我做不到什么」单开一章的,一般是自己天天在用,才写得出来。
03 八十年的修法节奏
数据规模先说个数:211 个国家/地区在树里,107 份语料已经挂上了真法律,还有 55 份只放了目录和来源说明、等着填。
各家的覆盖度差得离谱。捷克、西班牙、瑞士、格鲁吉亚、马耳他这几家是整部法规全集;美国的语料只有《美国法典》的九个编;英国的语料只收了一部特殊教育需求法。
作者把这些差异全摊在 manifest.json 的 coverage 字段里,还标了历史的获取方式:in-force 是官方带日期的版本,replayed 是从修正案一条条重新放一遍推出来的,current-only 就只有今天的文本。
这张图是已收录的 20 个法域、1945 到 2026 年的修法节奏,按生效年份堆叠:

柱子上那几道灰带挺有意思,作者标出了三次立法高峰:1989 年以后的一波新宪法(爱沙尼亚 1992、斯洛伐克 1992、斯洛文尼亚 1991、克罗地亚 1990),2004 年欧盟东扩,还有 COVID-19。
最忙的一年是 2021 年,34 部。52% 的修法发生在 2010 年之后。作者也老实交代了,这里面有一部分原因,是大多数语料的历史本来就只能追到近几年。
04 拿德国验一验
总量看不出真假,得看细节。作者拿德国《基本法》做了一组图,德国那份语料最完整。
第一条结论就挺冲击:《基本法》七十多年,长度翻了一倍,而这一倍里有一半是在六个下午加进去的。

从 1949 年的 11000 词左右,涨到今天的 23000 多词。71 次修法里,有六次合计贡献了一半以上的新增内容。其中 1968 年那次《紧急状态法》一部法就加了 2051 个词、28 条,比排在它后面的两部加起来还多。
图里那些标注点,都是这条曲线上突然往上一跳的地方:1956 年国防宪法、1994 年两德统一后的修法、2017 年联邦-州财政改革、2006 年联邦制改革、2009 年债务刹车。
第二条更好玩:修宪的票数从来没接近过「险胜」。
- 1956 · 国防宪法 334 票对 144 票。反对票最多的一次,也才到这个程度。
- 1968 · 紧急状态法 384 票对 100 票。那部一法顶三部的修宪,反对票反而是第二多。
- 2006 · 联邦制改革 428 票对 161 票。改革越大,反对越多,但离三分之二的门槛还远。
《基本法》第 79 条第 2 款规定,修宪得联邦议院三分之二的议员同意,不是出席人数的三分之二。作者在那张散点图上画了一条 66.7% 的红线,然后说:这条线只是参考,因为分母算的是全体议员,不是投票的人。
还有个细节挺好玩:立法也扎堆在年底。把各国的采纳月份摊成一张热力图,19 个法域里有 10 个的高峰在 12 月。美国 45% 的法是 12 月通过的,丹麦 38%,加拿大安大略 28%。最少的是 8 月,19 个里有 12 个。

十二个国家的议会都在年底赶工,这事儿放哪儿都一样。
05 接进 AI 才是重点
这个项目最实用的一块,是 tools/mcp_server.py。
它是一个标准 MCP 服务,跑在你本机,走 stdio,只读、不联网、不改任何东西。依赖只有 Python 3.10+ 和 git,没有别的。
安装很简单,先用 git clone --recurse-submodules 把主仓库和所有国家的法律子模块一起拉下来,然后在 Claude Code 里注册:
git clone --recurse-submodules https://github.com/lexifina/global-law && cd global-law
claude mcp add global-law -- python tools/mcp_server.py
接上以后,你可以用大白话问它这些:
- 2022 年 5 月 1 日那天,美国法典第 11 编第 1182 条第 1 款写的是什么,最后是哪部法改的?
- 有个案子 2022 年 5 月 1 号立案,适用第 1182 条,那按期间算该用哪一版?
- 上诉法院 2020 年用的那版特殊教育需求法第 42 条,现在还有效吗?
- 把这份辩护状里的每一个引注,对着今天生效的法挨个核一遍。
工具一共 18 个,全是只读的:找条文、按日期读条文、查每个字是谁写的、比两个日期之间的差异、列一段时间里通过了哪些法、搜正文和修改说明、查某个词哪年进的法律哪年删的、看一次修改还连带影响了什么、核先例、解析引注、判断哪个案子该用哪一版。
还有 3 个 prompt 和一个 resource 模板。项目里附了 48 个测试,跑 python -m unittest discover -s tests -v,校验的是「这个仓库给的答案,跟每个语料用自己工具读出来的答案一致」。
这句我看了两遍。它说的其实是交叉验证:仓库的结论不能自己说自己对,得跟原始语料对一遍。
06 几个得留心的点
说三个我觉得得心里有数的点。
第一,覆盖度参差不齐,别拿它当「全世界法律大全」。 211 个法域里只有 107 份挂了真法律,还有 55 份是空的。就算挂上的,美国的只有九个编,英国的只有一部法。作者自己在 README 里就写了这一点,态度是诚实的,但你真要用,得先查 manifest.json 里那份语料的 coverage。
第二,它适合「查历史」,不适合「查现行」。 主分支 main 上只放构建日期之前已经生效的法;已经通过还没生效的,在各语料的 future 分支上。分得挺清楚,可也意味着你不能拿它当官方法规库用。真要办事,还是得回官方公报。
第三,AI 参与的边界摆得明明白白。 项目里有个 REPRODUCE.md,记录了构建用的命令、软件版本、钉住的提交、哪些决定是人手工做的,以及「AI 模型做了什么、没做什么」。构建过程是确定性的,语料重建以后整个仓库从零重来,然后强推。至少别人能复现,也能质疑。
许可证是 CC0。作者的原话是:随便 fork,随便拿来建产品,不用问也不用署名。但法律条文本身,还是归各个语料仓库自己的条款管。代码是代码,法律是法律,分开的。
收个尾
我喜欢这个项目,跟工程规模没关系。它把一个几乎没人愿意碰的脏活当成正经事做了,就冲这个。
法律文本的版本管理,是所有做法律科技的人都知道要做、但谁做谁头大的事。官方数据源格式千奇百怪,有的给结构化数据,有的只给 PDF,有的连历史版本都不留。作者的做法朴素到有点笨:一个国家一个仓库,一部法一次提交,生效日期写进 trailer。然后 git 这个本来用来管代码的东西,就变成了管法律的东西。
顺手说个我自己的体会:我们做外包的时候,客户改需求改到第七版,最常听见的一句话就是「上次不是这样的吗」。真到那一步,能拿出来一条时间线说清「什么时候改的、谁改的、改前什么样」,这活儿就赢了一半。
法律比需求较真得多。这工具的价值,也就比看着大。
项目地址在 github.com/lexifina/global-law,浏览器里直接打开,不用装东西。想上手的话,先看 manifest.json 里你最关心的那个国家覆盖到哪一年,再看 README.md 里那节「它不显示什么」。