Dan Luu:让AI自动执行代码毫无意义,人类必须持续监督
There's no point at which turning your brain off will work
深度工程实践反思,直击AI辅助开发的核心痛点,适合所有使用Agent编码的工程师参考。
In early 2025, I started seeing people turn off their brain as they use LLMs1. They would have an LLM take an action (summarize text, write some code, etc.), and just assume that it worked2. This generally didn't work in early 2025 and the result was often quite silly.
2025年初,我开始看到人们在使用大语言模型(LLM)时关闭大脑思考。他们会让大语言模型执行某项操作(总结文本、编写代码等),然后想当然地认为它起作用了。这在2025年初通常行不通,结果往往相当荒谬。
As LLMs have gotten better, I've seen more of this. Sometimes, people will try to get the LLM to write some code for them and basically just assume that it works3. Sometimes there's a human in the loop and, if the thing doesn't work, they'll ask the LLM to figure out the problem and solve it. Niklas Gruhn calls some variants of doing this being a meat proxy.4
随着大语言模型变得越来越好,我目睹了更多此类现象。有时,人们会尝试让大语言模型为他们编写代码,并基本上想当然地认为它能正常工作。有时会有人类介入循环中,如果事情没起作用,他们会要求大语言模型找出问题并解决它。Niklas Gruhn 将这种操作的某些变体称为“肉代理”(meat proxy)。
Being a for loop meat proxy works better than it did in early 2025 and the software I've tried that's developed like this sometimes actually sort of works. Not well enough that I'd want to use it or that it's successful, but I'm impressed at how effective being a meat proxy is in September 2026. You could imagine LLMs improving enough that brain-off meat-proxy development produces average quality software in the foreseeable future, or even that LLMs improve enough that they produce great software without a human in the loop.
作为“for循环肉代理”的效果比2025年初要好,而且我尝试过以这种方式开发的软件有时确实能勉强运行。虽然还没好到让我愿意使用或认为它成功的地步,但到了2026年9月,我对作为肉代理的有效性印象深刻。你可以想象,在大语言模型足够进步的未来可预见时期内,“关闭大脑的肉代理开发”能产出平均质量的软件;甚至可以想象,大语言模型进步到足以在没有人类介入的情况下产出优秀的软件。
Let's say that happens. What reason is there for the company to employ the meat proxy? The company can just run the LLM in a loop and lay off the employee. There's no point at which this methodology will work for the employee5.
假设这种情况发生了。公司雇佣肉代理的理由是什么?公司只需让大语言模型在循环中运行,然后解雇员工即可。这种方法对员工来说没有任何可行的时机。
Thanks to Max Bittker, Yossi Kreinin, Luke Burton, Thomas Dullien, Dennis Snell, Peter Geoghegan, and Jamie Brandon for comments/corrections/discussion.
感谢 Max Bittker、Yossi Kreinin、Luke Burton、Thomas Dullien、Dennis Snell、Peter Geoghegan 和 Jamie Brandon 提供的评论/纠正/讨论。
- I've been having this thought for about a year and a half now. I have it more frequently now as LLMs get better and I see people spend more time turning their brain off when interacting with LLMs. [return]
- Luke Burton had this comment:
- I think being able to do this says more about the type of work being done than people think. I will only walk away from work like this if the task is quite low value, if it can afford to fail.
- For high value tasks, the probability of an LLM one-shotting them is much lower. I have to assume the role of QA, engineering manager, and architect. The while loop often feels like a crunch time. I feel the nagging suspicion I've missed something and that a badly specified prompt could result in an architectural choice that needs to be undone.
- Another observation is that the high throughput causes me to raise my own bar for what I ship. Whereas before I might have shipped an MVP and iterated, now I have agents polish and explore edge cases well beyond my norm, which they invariably fail to do unless prompted.
- Maybe it raises some uncomfortable thoughts for people, but my question for the meat proxies out there if the agents are nailing it so easily: 1) is it possible you've been coasting a bit already? 2) why aren't you pushing agents well beyond tasks they can tackle so easily?
- We've been doing something you'd think is extremely amenable to "hands off" automation, which is converting [redacted] to build with Bazel. It has taken us months even with agents. There's a lot of intangible, hard-to-specify requirements buried inside this task and having agents walk that line means constant supervision. Giving them a prompt like "convert this to Bazel" and walking away is at minimum many months in the future, maybe years, and maybe not ever? There are too many decision points, and too many unknown unknowns involved.
- Like how often does this scenario come up: you encounter some code and it's not clear why it functions this way, but knowing that materially changes what course of action you should take. Maybe it changes the dev experience, maybe you don't know if some customer has started using it, so on and so forth. How exactly do you meat proxy your way through that?
- Conversely you review what you've done with some stakeholder and they say "oh that? that part of it wasn't needed, we aren't even using that any more". What kind of decisions got made around the false assumption that a certain element needed to be preserved?
- [End of Luke's comment, comment from me]. A place where it's more obvious you need to make decisions is when the agent runs into something that's out of distribution. A minor version of this was when we compared how well agents use different programming languages and agents were much worse at obscure languages, which they're trained on, just not as much as with mainstream languages. A more out of distirbution example is if you try to play a board game (especially a modern game and not one of the classical games like chess or go). In general, for a game like Lost Cities or Dominion, a SOTA model and harness is worse than a human who's reasonable at board games but has never played the game before. If you ask the agent about the game, it knows a lot about the game and can say things that sound like they make sense to someone who doesn't understand the game, but are obviously wrong to anyone who does understand the game. I recently played some Dominion with a new player who thought that using ChatGPT to help them understand the game would help them learn and play the game. I was quite skeptical of this and suggested that it will probably make them worse (which, AFAICT, it did). After playing a few games, I looked at what ChatGPT was telling them, and it was maybe half right and half wrong, but the half wrong parts were steering them to a worse place than someone who generally plays games well and uses general game playing heurisitics would do. BTW, there's enough public information out there that I think that someone who'd never played before, but decided to spend, say, five hours reading about the game and seeing what information is out there, could easily be 99%-ile or above at the game if they did some pre-reading (maybe 30 minutes if using references while playing is allowed). I think that would be un-fun and I wouldn't recommend that anyone do it, but given that agents can do searches, query APIs, etc., it shows you the gap between a human and an agent today when approaching an out of distribution problem. For all I know, the next big model release will flip this around, but the gap is still fairly large today.
- Anyway, my point here is that, even when doing coding tasks, you often run into out of distribution questions where the agent behaves very poorly compared to a reasonable human being. If you want a good overall result today, you need to notice these cases and deal with them.
- [return]
- Some examples of what goes wrong when someone just assumes things will work are this case, where agents (sometimes) heavily overfit to tests or this case where agents heavily overfit to a metric. I've heard a theory that agents do more cheating on eval-shaped problems. I'm not sure that's true, but even assuming it's true and that, in my work and personal projects, I tend to create more eval-shaped instructions than most people even when not running evals, I've seen other people who don't create very eval-shaped things run into the same problem (I think actually more severely) when they write some instructions and let agents go wild without supervision (I've had luck doing that with minimal supervision, but only by fencing the agents in quite a bit, which makes the thing more eval-shaped than what most people seem to do).
- When I try software from people who've outsourced thinking to the LLM, the software has serious issues. I've had people tell me this kind of thing works, but the software is often at a level where I would say that it doesn't work according to the standard discussed here.
- 这个想法我已经有了大约一年半的时间。随着大语言模型越来越好,我看到人们在与大语言模型互动时花更多时间关闭大脑思考,我现在更频繁地产生这个想法。[返回]
- Luke Burton 有如下评论:
- 我认为能够这样做,更多地说明了所从事工作的类型,而非人们所想的。只有当任务价值很低,或者可以承受失败时,我才会放弃这类工作。
- 对于高价值任务,大语言模型一次性成功的概率要低得多。我必须扮演质量保证(QA)、工程经理和架构师的角色。while 循环往往让人感觉像是在赶工期。我总有一种挥之不去的疑虑,觉得自己漏掉了什么,而一个定义不当的提示词可能导致需要撤销的架构选择。
- 另一个观察是,高吞吐量促使我提高了自己交付成果的标准。以前我可能会先发布一个最小可行产品(MVP)然后进行迭代,而现在我有代理在远超我常规水平的情况下进行打磨和探索边缘情况,除非受到提示,否则它们 invariably(总是/不可避免地)无法做到这一点。
- 这可能会让一些人产生不舒服的想法,但我想问那些作为“人类代理”(meat proxies)的人一个问题:如果代理如此轻松地就做到了这一点,那么:1) 你是否已经在某种程度上处于懈怠状态?2) 为什么你没有推动代理去处理那些它们能轻松应对的任务之外的更复杂任务?
- 我们一直在做一件你认为极适合“放手式”自动化的事情,即将 [已编辑] 转换为使用 Bazel 构建。即使有代理的帮助,这也花费了我们几个月的时间。这项任务内部隐藏着许多无形且难以明确说明的需求,让代理在这条线上行走意味着需要持续的监督。给出一个像“将其转换为 Bazel”这样的提示然后走开,至少在未来几个月内是不可能的,也许是几年,甚至可能永远无法实现?这里涉及太多的决策点和太多未知的未知因素。
- 这种场景出现的频率有多高:你遇到一些代码,不清楚它为何以这种方式运行,但知道这一点会实质性地改变你应该采取的行动路线。也许它会改变开发体验,也许你不知道某些客户是否已经开始使用它,等等。你作为人类代理究竟如何通过这些情况做出判断?
- 相反,当你与某个利益相关者回顾你所做的事情时,他们说:“哦,那个?那部分不需要了,我们甚至都不再使用了。”围绕“某个元素必须保留”这一错误假设,做出了哪些决策?
- [Luke 评论的结束,我的评论]。当代理遇到分布外(out of distribution)的情况时,你需要做出决策这一点会更加明显。这种情况的一个轻微例子是我们比较代理使用不同编程语言的熟练程度时,发现代理在那些虽然训练过但不如主流语言训练充分的晦涩语言上表现要差得多。一个更典型的分布外例子是如果你尝试玩一款棋盘游戏(尤其是现代游戏,而不是像国际象棋或围棋这样的经典游戏)。一般来说,对于《失落之城》或《 Dominion 》这类游戏而言,最先进的模型和工具链的表现还不如一个擅长桌游但从未玩过该游戏的玩家。如果你向智能体询问游戏规则,它会表现出对游戏非常了解的样子,并能说出一些听起来合乎逻辑、但对熟悉该游戏的人来说明显错误的话。我最近和一个新手一起玩《Dominion》,他认为使用 ChatGPT 来帮助他理解规则会让他学得更快、玩得更好。我对这种做法持相当怀疑的态度,并建议这可能会让他的表现更差(据我所知,事实确实如此)。在玩了几个回合后,我查看了 ChatGPT 给他的建议,大概一半正确、一半错误,但那些错误的部分引导他走向了比一个通常擅长玩游戏并使用通用游戏启发式策略的玩家更差的境地。顺便说一句,网上有足够多的公开信息,我认为一个从未玩过该游戏的人,如果决定花比如五个小时阅读相关资料并查看现有信息,在进行一些预读后(如果允许在游戏过程中查阅参考资料,可能只需30分钟),其水平可以轻松达到前百分之一甚至更高。我觉得那样做会很无聊,我也不推荐任何人这么做,但鉴于智能体可以进行搜索、调用 API 等操作,这展示了当前人类与智能体在面对分布外问题时的差距。就我所知,下一个大型模型发布可能会扭转这一局面,但目前的差距仍然相当大。
- 总之,我的观点是,即使在处理编码任务时,你也经常会遇到分布外的问题,此时智能体的表现远不如一个合理的普通人。如果你想要今天获得良好的整体结果,你需要识别这些情况并加以处理。
- [返回]
- 当人们仅仅假设一切都会顺利时,会出现各种问题的例子,比如智能体(有时)在测试上过度拟合,或者智能体在某个指标上严重过拟合。我听过一种理论,认为智能体会在类似评估的问题上作弊更多。我不确定这是否属实,但即使假设它是真的,并且在我自己的工作和个人项目中,我倾向于比大多数人创建更多类似评估的指令(即使在不运行评估的情况下),我也见过其他没有创建太多类似评估内容的人,在编写一些指令并让智能体在没有监督的情况下自由发挥时遇到了同样的问题(我认为他们遇到的情况甚至更严重)。虽然我在最小化监督的情况下曾有过成功的经验,但这通常是因为我对智能体进行了较多的限制,这使得任务更像是一个评估场景,而这种情况与大多数人的做法有所不同。)
- 当我尝试那些将思考外包给大语言模型的人开发的软件时,这些软件存在严重的问题。有人告诉我这类方法有效,但这些软件往往达不到这里讨论的标准,我会说它们根本无法正常工作。
更进一步:量化金融体系
看懂新闻只是起点——沿量化金融路径,把它变成能交付的工程能力