跳到主要内容

Agent 真正难的不是模型多聪明

· 阅读需 8 分钟
DingZhiyu
Southwest Petroleum University

事情是这样的。

4 月 7 日,我花了一点时间读 LangChain 的这篇文章,The Anatomy of an Agent Harness

一开始我是冲着 harness 这个词去的。

因为这个词最近在 Agent 圈子里出现得越来越频繁,但它又有点尴尬。你要是直接翻译成「马具」或者「束具」,听着很奇怪。翻译成「框架」又太轻了,好像只是写几层代码封装一下。翻译成「外骨骼」可能更接近一点,但也不完全准确。

反正就是这么一个词。

它说的是,模型外面那一整套让 Agent 真正能做事的系统。

我读完之后最大的感受是,过去我们可能太喜欢盯着模型本身了。

哪个模型更聪明。

哪个模型推理更强。

哪个模型写代码更猛。

这些当然重要。你不能拿一个很弱的模型,硬说靠工程就能补回来。这个不现实。

但如果你真的用过 Claude Code、Codex、Cursor,或者自己用 LangGraph、OpenAI Agents SDK、CrewAI 这些东西搭过 Agent,你会很快发现一个很烦人的问题。

模型聪明,不等于系统可靠。

它能想到下一步,不等于它知道什么时候该停。

它能调用工具,不等于它知道哪些工具不能乱用。

它能写文件,不等于它知道怎么回滚一个坏改动。

它能读上下文,不等于它不会在十几轮之后把自己绕晕。

这就很像一个特别聪明的人坐进一辆没有方向盘、没有刹车、没有仪表盘的车里。

脑子很好。

车不行。

LangChain 这篇文章最打动我的地方,是它把这个问题讲得非常具体。它不是在抽象地说 Agent 需要工程化,而是把 harness 拆开给你看,planning、filesystem、subagents、stateful middleware、context engineering、tool permission、evaluation loop。

每个词看起来都不性感。

但每个都很要命。

比如 planning。

很多人会觉得,计划不就是让模型写个 todo 吗。听起来很普通对吧。

但你想想看,一个 Agent 做复杂任务的时候,最常见的问题是什么。不是它完全不会做,而是它做着做着就跑偏了。刚开始说要修一个 bug,修到一半突然开始重构整个项目。刚开始说要写一篇文章,写到一半开始补一堆和主题关系不大的背景。

这个时候,计划不是装饰。

计划是绳子。

不是为了限制模型,而是为了让它隔一段时间能回头看一眼,自己到底在干嘛。

filesystem 也一样。

以前我们总觉得上下文窗口越长越好。窗口越长,模型记得越多,Agent 就越强。

这话只对一半。

长上下文确实有用,但你不能把所有东西都塞进上下文里。代码仓库、日志、草稿、资料、历史尝试、中间结果,全塞进去之后,模型看起来什么都知道,实际上注意力会变得很散。

文件系统就是另一个脑子。

该记的先写下来,该看的时候再读回来。你不用把整个世界都塞进 prompt,你只需要让模型知道,东西放在哪,什么时候取。

这也是我这两天越来越强烈的一个感受。

Agent 不是一个更会聊天的模型。

Agent 是一个会被放进环境里的模型。

环境一复杂,问题就变了。

早期 ReAct 那套东西其实已经把这个问题露出来了。模型先想一步,再行动,再观察,再继续想。那时候还是很朴素的 ThoughtActionObservation,有点像在提示词里手搓一个小型操作循环。

后来 AutoGPT 火了一阵,大家第一次看到模型可以自己拆任务、搜索、写文件、继续迭代,感觉很震撼。

然后很快也看到了另一面。

它会迷路。

它会陷入循环。

它会非常努力地忙一大圈,最后交出来一个让人不知道该怎么评价的东西。

那一刻其实就已经说明,模型自己会想还不够。你还得给它状态,给它权限,给它工具边界,给它错误恢复,给它人类插手的位置。

回到 harness 这块。

我觉得 LangChain 这篇文章真正想说的,不是「我们又发明了一个新概念」。

它更像是在提醒大家,Agent 能力有一大块藏在模型外面。

文章里有个例子挺有意思,他们说在模型不变的情况下,通过改 harness,把编程 Agent 在 Terminal Bench 2.0 上的排名从 Top 30 提到了 Top 5。

这个结果不能被神化,benchmark 这个东西永远只是一块切片。

但它足够说明问题。

同一个模型,放进不同的系统里,表现会差很多。

这其实跟人很像。

一个聪明人,如果每天没有日程,没有文档,没有协作工具,没有复盘机制,没有人提醒他优先级,他也会乱。反过来,一个能力没那么夸张的人,如果有很好的流程、笔记、工具和反馈系统,也能稳定产出很不错的东西。

Agent 也是这样。

模型是脑子。

harness 是工作习惯。

说到这里,我突然理解为什么 Claude Code 这种产品会让人上头了。

它不是只给你一个更会写代码的模型。它给了模型一个很具体的工作场景。它能读 repo,能改文件,能跑测试,能看报错,能跟你确认危险操作,能在一个任务里持续推进。

这些体验背后,都是 harness。

OpenAI Agents SDK 也是这个方向。它把 agent、handoff、guardrail、session、tracing 这些概念往 SDK 里收。Anthropic 推 MCP,其实是在试图把模型连接外部工具这件事标准化。LangGraph 则更像给开发者一个可控的 Agent 运行时,让状态、分支、人类介入、持久执行这些东西不要全靠你自己手搓。

你看,大家嘴上都在讲 Agent。

但真正竞争的地方,越来越像是在讲谁的外壳更好。

这件事对普通开发者也挺重要。

如果你只是玩玩,随便找个产品就行。Claude Code 好用就用 Claude Code,Cursor 顺手就用 Cursor,OpenAI Agents SDK 方便就用 OpenAI Agents SDK。

但如果你真的要把 Agent 放进自己的业务里,就不能只问模型强不强。

你还得问,它的记忆放在哪。

工具权限谁管。

失败了怎么恢复。

日志能不能回放。

人能不能在关键节点插手。

以后换模型的时候,这套工作流能不能带走。

这个问题越往后越重要。

因为 Agent 用久了之后,最值钱的东西可能不是某一次回答,而是它积累下来的工作方式。它知道你怎么写代码,知道你怎么整理资料,知道你团队的流程,知道哪些命令危险,知道哪些文件不能碰。

这些东西如果全沉在某个闭源产品里,你短期会很舒服。

长期就会有点慌。

不是说闭源产品不好。

我自己也用,而且很多时候确实好用。

只是我们得知道,自己交出去的到底是什么。

以前我们说模型供应商卖的是智能。现在看,未来它们可能卖的是一整套工作环境。你在里面工作得越久,它越懂你,你也越离不开它。

大时代啊,朋友们。

所以我现在看 Agent,心态跟以前不太一样了。

以前看到一个新 Agent demo,我会先问,它用了什么模型。

现在我会先问,它的 harness 是什么。

它有没有计划系统。

有没有外部记忆。

有没有工具权限。

有没有可观察性。

有没有回滚和评估。

它到底是一个会聊天的聪明脑袋,还是一个真的能稳定做事的小型系统。

差别就在这里。

4 月 7 日读完这篇文章之后,我脑子里一直有一个画面。

一个模型站在舞台中央,大家都在看它有多聪明。

但灯光、音响、提词器、后台调度、舞台机械、紧急刹车,全都藏在暗处。

观众看到的是演员。

真正决定演出能不能顺利完成的,是整套剧场。

Agent 也是这样。

我们当然还会继续追更强的模型。

但可能从现在开始,也得认真看看模型脚下那套剧场了。