三件事讲透大模型、Agent 和 Harness
一、大语言模型 = 一个函数
大语言模型是一个函数。你给它输入,它给你输出。
1 | 输出 = 函数(输入) |
背后有多复杂,不需要知道。把它当一个黑盒子,进去什么、出来什么,够了。
不管你用的是 GPT、Claude、Gemini 还是 DeepSeek,对调用者来说,它们都是同一个东西:一个接收字符串、返回字符串的函数。
二、Agent = 一个 while true 循环
Agent 是什么?是一个 while true 循环,而且是永不退出的那种——除非你按 Ctrl+C。
1 | context = [] |
它拿到你的输入,送给大语言模型,模型输出了什么,就把输入和输出一起塞进一个数组,然后继续等你的下一个输入,把它也塞进数组,再次整个发给模型。如此往复,直到永远。
有一个小小的岔路口:如果模型的输出是一个工具调用——比如「帮我看看当前目录有哪些文件」——它不会立刻问你要下一个输入,而是先在本地执行这个工具,把结果塞进数组,再继续。
三、上下文 = 那个数组
这个数组,我们叫它上下文(Context)。
大语言模型没有记忆。每次你以为它「记得」,其实是它把从第一次循环开始到现在的所有内容——你说的每一句话、它的每一个回答、每一次工具调用的结果——全部打包成一个越来越长的数组,整个发给模型。
1 | 第 1 轮: [用户消息1, 模型回复1] |
这也是为什么对话久了会变慢——不是模型变笨了,是这个数组太长了。
四、Harness = 循环里的壳
那 Harness 是什么?
Harness 是这个死循环里除了用户输入之外的所有定义:
- 有什么工具可以用?
- 有什么 Skill?
- 连了哪些 MCP?
- 上下文里默认带了什么记忆(比如 CLAUDE.md)?
- 权限规则是什么?哪些操作自动批准,哪些需要确认?
这些东西放在大语言模型和用户之间,给循环套上一层壳,这层壳就叫 Harness。
1 | ┌─────────────────────────────────────┐ |
同一个 while true 循环,不同的 harness,就是不同的 Agent。
- Claude Code 是一个 harness(终端开发场景)
- Cursor 是一个 harness(IDE 编辑场景)
- 你公司的客服机器人 也是一个 harness(问答场景)
区别不在循环,在循环里装了什么。
五、一个公式总结
1 | Agent = while true 循环 + 上下文数组 + Harness |
六、这有什么用?
理解了这三件事——函数、循环、上下文——基本上就能读懂现在大多数 Agent 框架的文档了:
- 看到 「调用模型」 → 那是函数
- 看到 「循环执行」 → 那是 Agent
- 看到 「上下文管理」 → 那是数组操作(截断、压缩、检索)
- 看到 「插件/工具/Skills」 → 那是 Harness 的组成部分
不用被各种框架的术语吓到。底层都是同一套东西:一个循环,一个数组,一层壳。
本文基于 X/Twitter 上关于 AI Agent 架构的讨论整理。核心观点:把复杂系统拆成三个简单概念,比记住十个框架的 API 有用得多。