公地悲剧:每个人都理性,公共资源却被榨干

公地悲剧 / Tragedy of the Commons
中文:一群各自理性的人共用一份有限资源,最后往往会一起把它榨干。
EN: When many rational people share one finite resource, they tend to drain it together.

我们来聊一件做多智能体、做基础设施的人特别熟的事:只要一样东西是大家共用的、又没人管,一群绝顶聪明、每个都很理性的人,几乎一定会把它一起用垮——不是因为谁使坏,恰恰因为每个人都在为自己精打细算。

为什么要问这个问题

先说一个你大概率天天在经历的场景。

你想跑个实验,去抢 GPU。调度器告诉你:集群 100% 占满,排队。可你心里门儿清,那些卡至少有一半在空转——每个组都比自己真正需要的多占了一截配额,”以防万一””留点 buffer””别到时候被别人抢走”。于是集群从来没真的忙过,它只是被所有人一起占死了。

换个场景,一模一样的剧本。你的服务跑在一个共享的 API 网关后面,平时好好的。某天 p99 突然爆了,你查了半天自己的代码,最后发现是隔壁一个组上了新功能,把这个共享端点打满了——经典的”吵闹邻居”(noisy neighbor)。你没做错任何事,但你和他共用一条管道,他多占的,就是你被挤掉的。

这两件事是同一件事:一份有限的、大家共用的资源,每个人都有动力去多占一点,因为多占的好处全归自己,而多占的代价,是所有人一起摊。

这事一点都不新鲜。一个生态学家在 1968 年就把它讲透了,讲的还不是芯片,是牛。

它从哪来

这个结构最早被人画出来,是 1833 年,一个叫劳埃德(William Forster Lloyd)的英国经济学家,讲的是村里共用的一片牧场。真正让它出名的,是 1968 年,生态学家加勒特·哈丁(Garrett Hardin)在《Science》上发的一篇文章,标题就叫《公地悲剧》。

哈丁画的这幅画,简单到你一听就忘不掉:

一片公共牧场,村里每个牧民都能来放牛。对每个牧民来说,多放一头牛的账特别好算——这头牛的收益全归我自己;而多一头牛带来的过度放牧、草场退化,是全村所有牛一起承担,摊到我头上微乎其微。于是每个理性的牧民都会得出同一个结论:再多放一头。所有人都这么想,草场就被啃秃了,最后谁的牛都吃不上草。

哈丁真正戳人的地方在于:这里没有坏人。 没有哪个牧民是贪婪的恶棍,他们每个人都只是在做对自己最划算的选择。悲剧不是因为有人使坏,而是因为这个结构本身——好处私有、代价公摊——逼着每个理性人都往同一个方向走。

哈丁自己给的药方有点悲观:要么把公地私有化(分给个人),要么交给政府自上而下强管。很长时间里大家以为只有这两条路。

直到 1990 年,埃莉诺·奥斯特罗姆(Elinor Ostrom)用一本《Governing the Commons》把这个二选一打破了——她后来因此拿了诺贝尔经济学奖。她跑遍全世界,去看真实的渔村、林场、灌溉系统怎么管公共资源,发现了第三条路:社区自己定规则、自己互相盯着、对越界的人有分级的惩罚,既不用私有化,也不用一个中央独裁者。 这条路,恰恰是我们做系统的人最该抄的作业。后面细说。

核心直觉

公地悲剧的核心,一句话:你真正在乎的(资源别被用垮)是集体的事,可你面对的每一个具体选择,账都是你自己一个人算的。而这两本账,算出来的方向正好相反。

拆开看,要凑齐几个条件,这出戏才会上演:

  1. 资源是有限的、会被用掉的。 我多用一分,你就少一分(经济学叫”竞争性”)。一片草场、一段带宽、一个限流额度,都是。
  2. 谁都能来用,拦不住。 没有门票、没有围栏(叫”非排他性”)。开放,正是”公地”两个字的意思。
  3. 多占的好处私有,多占的代价公摊。 这是整台发动机。你多占那一下的甜头全进你口袋,苦头却均摊给了所有人,摊到你自己头上几乎无感。

记住这把钥匙,后面反复要用:多占的好处全归你,多占的代价大家分。只要这个不对称还在,理性人就会一直多占,直到没得占。

最阴的地方在第三条引出的一个推论:克制会被惩罚。 假设你良心发现,主动少占一点。结果呢?你省下的那份,立刻被别人占走了,资源该垮还是垮,而你白白少拿了自己那份。于是在这个结构里,克制的人不是英雄,是先吃亏的那个傻子。这就是为什么光靠”大家自觉点”永远没用——它在结构上就是个亏本买卖。



graph TD
  A[共享资源 有限但对所有人开放] --> B[每个人各自理性算账]
  B --> C[多占一点 好处全归自己]
  C --> D[代价被所有人摊薄 几乎无感]
  D --> E[理性结论都是尽量多占]
  E --> F[所有人都多占 资源被榨干]
  F -.克制的人只会先吃亏.-> B

注意最后那条虚线:资源越紧张,克制越吃亏,于是大家占得越凶。 这是个会自己越滚越快的循环,不是踩一脚刹车就停得下来的。悲剧最狠的地方是,越到后期、资源越稀缺,每个人抢的动机反而越强——正是在最该收手的时候,所有人一起踩了油门。

现实中的例子

最惨烈的一个真实版本,是鱼。

纽芬兰外海的大浅滩(Grand Banks),曾经是地球上最富饶的渔场之一,鳕鱼多到传说能踩着鱼背走过去。几百年里,这片海养活了一代代渔民。然后到了 20 世纪下半叶,声呐、大型拖网、工厂化加工船一起上,捕捞效率翻着跟头往上涨。

对每一条船来说,账都好算:我今天多捞一网,钱全是我的;至于会不会捞过头、鱼群还能不能繁衍得过来,那是”大家”的事,跟我这一网关系不大。每条船都这么想,于是所有船一起,把鳕鱼捞得比它们繁殖的速度快得多。

1992 年,鳕鱼群直接崩了——种群量掉到历史水平的百分之一。加拿大政府紧急下了禁渔令,一夜之间三万多渔民和工人失业,是加拿大历史上最大的一次裁员。三十多年过去,那片海的鳕鱼到今天都没真正恢复。

没有哪条船想毁掉这片渔场——那是他们自己和子孙的饭碗。可他们每个人都很理性,而正是这一船一船的理性,一起把海掏空了。你把”渔船”换成”团队”、”鳕鱼”换成”GPU 配额”或者”开放网络上的数据”,剧本一个字都不用改。

映射到 AI:共享的东西,正在被一起用垮

AI 这行,简直是公地悲剧的主题公园,因为我们到处都在共用有限的东西——集群、限流、上下文预算,还有一整个开放的互联网。

共享算力集群。 就是开头那一幕。每个组都多占配额、留下大量”占着但空转”的卡,集群利用率显示 100%,真正在跑活的吞吐却被饿着。多占那份”永远不会被抢走”的安全感归你自己,排队的代价却是全公司一起扛。谁先松手,谁先吃亏——于是没人松手。

共享服务与限流:吵闹邻居和重试风暴。 一个吵闹邻居能拖垮整条共享管道,这还只是开始。更狠的是重试:共享服务一变慢,每个客户端都会更用力地重试——每一次重试单看都很理性(我这个请求得成功啊),合起来却是一次自己人打自己人的 DDoS,把一次小抖动直接放大成一场雪崩(thundering herd)。

开放网络这个数据公地(最典型的一个)。 开放的互联网,曾是所有人免费取水的那口井,几乎每个大模型都从这里训出来。现在两件事同时在发生:一是被抽得太狠,网站开始把自己围起来(Cloudflare 拦爬虫、robots.txt、付费墙,Reddit、Stack Overflow、Twitter 纷纷关掉 API)——井正因为被抽干而被封上;二是 AI 生成的垃圾内容正往同一片网络里灌,拿它训出来的模型越来越差,这就是”模型崩溃”(model collapse),一代拿上一代的输出来训,多样性和质量一路衰减。每家实验室去爬、每一次把生成内容倒回网上,单看都很理性;合起来,却是在抽干、同时污染下一代模型必须来喝的那口井。最扎心的是:AI 同时扮演了过度取水者、污染者,和未来的受害者。

多智能体里的共享预算。 多个 Agent 共用一个有限的上下文窗口、token 预算、工具调用额度。每个子 Agent 为了把自己那一小块任务做好,都想往共享上下文里多塞点东西(”把这份文档也带上,以防万一”)。共享上下文被噪声填满,每个 Agent 的质量都往下掉(context rot)。每一次塞都是局部理性,合起来却把共享预算耗光了。共享的限流池也一样——一个贪心的 Agent 就能把其他所有 Agent 饿死。

把这四个场景叠在一起看,你会发现它们是同一把钥匙:每一个多占的人都是理性的、都不是坏人,可他们多占的好处归自己、代价摊给整个系统——于是共享的那样东西,在没人使坏的情况下,被一起用垮了。

工程师视角:别靠自觉,靠规则

道理讲完,落到能做的动作上。而这里最重要的一句话,就是奥斯特罗姆那句:公地不需要私有化,也不需要一个独裁者,它需要治理。

把公共的代价,让它被个人感受到。 悲剧的燃料是”代价我几乎无感”。所以第一刀,就是把代价明码标价地还回去:内部计费 / showback、给每个任务标上它烧掉的卡时和 token。当多占真的会让某个组的账单变难看,理性的方向立刻就掉头了。(这其实就是把”外部性”内部化。)

配额和公平调度,别靠信任。 给每个租户设硬配额、上公平调度器(DRF、fair-share、K8s 的 ResourceQuota)。为什么必须是硬的?因为我们前面说了,克制在结构上是亏本的——所以”克制”不能靠自觉,得由系统强制均摊。

隔离,别让一个吵闹邻居拖垮整池。 每租户限流、令牌桶、熔断、背压(backpressure)。共享池最怕的就是一个用户能把整池吸干;隔离就是给公地修围栏,但修的是”你只能用你那份”的围栏,不是私有化。

给重试上预算。 指数退避 + 抖动(jitter)+ 重试预算(retry budget,Google SRE 那套)。一个客户端拼命重试是理性的,一万个一起重试就是雪崩。重试预算,就是从结构上不许”理性重试”累加成自杀。

对着数据公地,别只顾着捞。 训练别拿没过滤的网络垃圾直接喂;给合成数据打标、留来源(provenance,C2PA 这类),别把污染倒回大家共用的井里。用了开源,就回馈开源——顺手提一句:AI 生成的低质 PR 和”安全报告”正在淹没开源维护者(curl 的作者 Daniel Stenberg 公开吐槽过 AI 编的假漏洞报告),维护者的时间精力,也是一块正在被榨干的公地。

奥斯特罗姆的洞见对我们太受用了:你既不用把集群拆成一人一块(碎片化、利用率惨不忍睹),也不用让一个中央审批卡住每一个任务(那是瓶颈)。中间那条路——配额 + 监控 + 越界有后果——才是对的。

投资视角:整个行业正在榨干它赖以为生的那口井

把镜头拉到行业层面,最大的一块公地,是开放互联网上那些人类原创的数据。过去十几年,几乎所有大模型都免费从这口井里打水。现在的问题是,所有人一起打水、还一起往里倒 AI 生成的水,这口井正在同时被抽干和污染。

这对”该怎么押注 AI”有很直接的含义:当公共数据这块公地退化,护城河会往两个地方挪——一是谁手里有别人拿不到的私有数据(自己的、围起来的、还没被污染的那口井),二是谁能建起治理(数据来源可溯、质量可控)。裸奔在公共网络数据上的玩家,脚下的地基正在被大家一起掏空。

绕回到我们写代码这件事,启示很朴素:别把公共网络数据当成一口永远打不完、水永远干净的井。 把它当成一块正在退化的公地来对待——该验证来源就验证来源,该自建数据就自建数据,该给合成数据留标记就留标记。你今天怎么对待这块公地,决定了你两年后训得出什么。

生活视角:你早就在公地里博弈过了

这套机制根本不待在机房里。

办公室那台公用冰箱,最后总是塞满了没人认领、长毛的剩饭——每个人放进去都很方便,清理却是”大家”的事,于是谁也不清。合租的厨房、共享的会议室、小组作业里那个什么都不干还署名的人(搭便车),是同一出戏。最大的一块公地叫地球气候:每个国家、每家公司多排一点的好处归自己,代价全人类一起扛。

把这个想透,对做 AI 产品很要命:只要你的产品让一群人共用一个池子——共享的限流额度、社区一起贡献的内容、一套共享的信誉分——它就一定会被”公地化”。 会有人薅额度、灌垃圾内容、刷信誉分,而且他们个个理性、不觉得自己在使坏。所以做这类功能时,正确的心态不是”用户会不会滥用”,而是”一定会有人多占,那我的规则、配额、代价分摊,从第一天就设进去了吗?”。想清楚这个,往往就决定了你这个共享功能,是长成一片草场,还是长成那台长毛的冰箱。

常见误解

误解一:这是人性贪婪的问题,教育一下、呼吁大家自觉就好了。 不是。它和古德哈特一样,是结构问题,不是人品问题。一屋子全是善良体贴的人,只要”好处私有、代价公摊”这个结构还在,公地照样被榨干——因为克制的人先吃亏。所以那种”请大家合理使用集群”的全员邮件,基本等于没发。想反了这一点,你会去抓”坏人”,而不是去改那个有毛病的结构。

误解二:要么私有化,要么中央强管,只能二选一。 正好相反,这恰恰是哈丁留下的思维定式,也是奥斯特罗姆拿诺奖打破的东西。把集群拆成一人一块,利用率惨不忍睹;让一个中央调度独裁者审批每个任务,它自己变成瓶颈。真正好用的几乎总是第三条路:治理——共享的池子 + 明确的配额 + 互相能看见的用量 + 越界有后果。别一遇到公地问题就往”私有化 vs 大政府”那个假两难里跳。

误解三:只要是共享资源,就注定完蛋。 也不对。公地悲剧是有条件的,不是所有共享都会崩。它要资源有竞争性、开放不设防、代价能外摊、而且没有治理。这几条只要破掉一条,悲剧就不一定发生——这正好引出下一节。

什么时候不成立

知道一个模型什么时候失效,比记住它本身更值钱。把前面那几个条件反过来,就是公地悲剧不成立的地方:

资源是非竞争性的——你用不减少我用。 纯信息类的东西,复制一份几乎不花钱:一份只读的模型权重、一个 CDN 上的静态文件,你读你的、我读我的,谁也没少。这种东西不存在”被用垮”。(当心:托管它、分发它要烧的带宽和算力,仍然是竞争性的——公地常常藏在你以为免费的那一层背后。)

已经被围起来、被计量了。 你独占的那块 GPU 配额不是公地,它不会有悲剧(当然也没了共享的效率)。计量和配额本身,就是解药——这也是为什么”治理”能治它。

人少、反复打交道、彼此看得见。 三个人共用一台开发机,基本能自己商量着来;一万个匿名 API 客户端就不行。当参与者少、长期共事、还能看见彼此的用量,声誉和默契就能压住多占的冲动(这正是奥斯特罗姆的条件,也是重复博弈里合作能长出来的原因)。

再生速度远快于消耗。 如果抽取远低于恢复,池子近似无限,就不崩。但小心杰文斯:一旦你把打水变便宜了,抽取速度自己会涨上来,”近似无限”很快就不成立。

判断方法还是那把钥匙,反过来问一句:**”如果我多占一份这个共享的东西,好处是不是全归我、代价是不是摊给别人,而且我还不会被看见、被惩罚?”** 三个都”是” → 公地悲剧风险很高,赶紧上治理;只要有一个”否”(代价落回自己头上、会被逮到挨罚、或者池子近似无限)→ 这个共享还算结实。AI 里绝大多数共享资源,三个答案都是响亮的”是”——这正是为什么这条 1968 年的老定律,在我们这行格外扎眼。

相关模型

公地悲剧不是孤岛,它挂在一张网里。下面这些是同一张网上的邻居(这些文章我会陆续补上):

  • 囚徒困境 / Prisoner’s Dilemma:公地悲剧本质就是它的多人版——对每个人来说,”多占”都严格优于”克制”,可所有人一起多占,结局比一起克制惨得多。
  • 纳什均衡 / Nash Equilibrium:”所有人都往死里占”恰恰是一个纳什均衡——在别人都占的前提下,你单方面克制只会更惨。这就是为什么悲剧这么稳、这么难自己走出来。
  • 机制设计 / Mechanism Design:治理这块公地,就是一道机制设计题——把规则设计成”个人理性的选择”恰好等于”集体最优”,也就是把外部性内部化。奥斯特罗姆那套,是它的实证版。
  • 外部性 / Externality:”代价公摊”说白了就是负外部性——你多占的成本,转嫁给了没参与决策的其他人。公地悲剧是外部性堆到极致的样子。
  • 杰文斯悖论 / Jevons Paradox:把公地里打水变便宜,抽取速度会自己涨上来。效率不但没省下共享资源,反而让它耗得更快。

一句话记住

中文:公地不是因为有人使坏才崩,而是因为每个人都太理性——好处归你,代价归大家。所以别等谁自觉,把公共的代价,明码标价地还给花它的那个人。
EN: A commons doesn’t die because someone turns evil—it dies because everyone stays rational: the gain is yours, the cost is everyone’s. So stop waiting for restraint; hand the shared cost back, with a price tag, to whoever spends it.