Claude Code 源码拆解(一):为什么说"模型即Agent"?
这是「Claude Code 源码拆解」系列的第一篇。在这个系列中,我们将从零开始理解AI Agent的本质——不是通过框架,不是通过工作流,而是通过一个简单的事实:模型本身就是Agent。
阅读前你需要知道
这个系列假设你具备以下基础知识:
|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
如果你的基础不够扎实:建议先跑一遍第2篇的代码(60行),亲手体验一下Agent是怎么工作的,再回来读第1篇。
一、一个令人困惑的现象
你有没有发现,市面上的”Agent框架”越来越多了?
LangChain、AutoGPT、CrewAI、Dify、FastGPT……每个都声称能帮你”构建AI Agent”。它们提供了节点编辑器、工作流编排、提示链管理、记忆系统、工具调用封装……
但当你真正用它们去解决一个复杂问题时,往往发现:
-
工作流一复杂就失控 -
提示链一长就脆弱 -
Agent的行为难以预测 -
调试起来痛苦万分
问题出在哪?
出在对”Agent”这个概念的误解。
二、Agent不是框架造出来的
让我们回到AI领域对”Agent”的经典定义:
Agent是一个能够感知环境、做出决策、采取行动以达成目标的系统。
注意,这里说的是”系统”,不是”框架”。
2.1 历史上的Agent都是模型
看看AI历史上真正的Agent里程碑:
|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
它们的共同点是什么?
Agent本身就是一个训练好的模型。 不是if-else规则堆出来的,不是工作流节点连出来的,是模型通过训练学会了如何行动。
2.2 框架不能创造智能
那些号称”低代码构建Agent”的平台,本质上在做什么?
它们在用程序员的逻辑去硬编码智能行为:
如果用户问A,走这条路径如果用户问B,走那条路径如果需要搜索,调用这个工具如果需要写代码,调用那个工具……
这不是Agent。这是披着AI外衣的传统软件。
真正的Agent应该是:
模型看到上下文 → 模型自己决定做什么 → 执行 → 循环
决策权在模型手里,不在你的代码里。
三、Claude Code告诉我们的真相
Claude Code是Anthropic官方推出的编程Agent。它是目前我们能看到的、设计最优雅的Agent实现之一。
当你剥开它的外壳,核心架构惊人地简单:
Claude Code = 一个循环 + 工具集(bash, read, write, edit, glob, grep...) + 按需加载的知识(Skills) + 上下文压缩 + 子Agent隔离 + 任务系统 + 团队协作 + 权限边界
就这么简单。
没有复杂的工作流引擎,没有节点图编排,没有提示链瀑布。只有一个循环,和一堆让这个循环更有效的”配套机制”。
3.1 核心循环只有80行
Claude Code的核心循环,用Python写出来,大概是这样:
defagent_loop(messages):whileTrue: response = client.messages.create( model=MODEL, messages=messages, tools=TOOLS, ) messages.append({"role": "assistant", "content": response.content})if response.stop_reason != "tool_use":return# 模型说"我完成了"# 执行工具 results = []for block in response.content:if block.type == "tool_use": output = execute_tool(block.name, block.input) results.append({"type": "tool_result","tool_use_id": block.id,"content": output, }) messages.append({"role": "user", "content": results})
这就是全部。
-
模型调用工具 → 你执行工具 → 把结果喂回去 → 继续循环 -
模型说”我不需要工具了” → 结束
模型决定一切。你的代码只是执行者。
四、所以,你的工作是什么?
如果模型才是Agent,那我们这些写代码的人在干什么?
答案是:我们在造” Harness”(工具化环境)。
Harness = 工具 + 知识 + 观察 + 行动接口 + 权限边界 工具: 文件读写、Shell执行、网络请求、数据库操作 知识: 产品文档、API规范、代码风格指南 观察: Git diff、错误日志、浏览器状态 行动: CLI命令、API调用、UI交互 权限: 沙箱隔离、审批流程、信任边界
模型是司机,Harness是车。
-
一个编程Agent的Harness = IDE + 终端 + 文件系统 -
一个农场Agent的Harness = 传感器 + 灌溉控制 + 天气数据 -
一个酒店Agent的Harness = 预订系统 + 客户沟通 + 设施管理API
Agent的智能来自模型,Agent的能力来自Harness。
五、这个系列要学什么
在这个系列中,我们将逐层拆解Claude Code的Harness机制:
|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
每一篇都是一个机制 + 一段代码 + 一个核心原则。
我们不学框架,我们学如何给模型造一辆好车。
六、一个思维转换
读完这个系列,你会经历一个认知转变:
从:”我怎么用代码实现这个工作流?”到:”我给模型什么工具,让它自己决定怎么做?”
从:”我要控制Agent的每一步”到:”我要信任模型,同时给它边界”
从:”框架越强大越好”到:”循环越简单越好,Harness越扎实越好”
写在最后
Claude Code不是完美的,但它是我们能看到的、设计哲学最正确的Agent实现之一。
它告诉我们一个简单的道理:
最好的Agent代码,往往是无聊的代码。简单的循环,清晰的工具,干净的上下文。复杂度在模型里,不在你的代码里。
下一期,我们将亲手写出那个80行的Agent循环。
模型是Agent。代码是Harness。造好Harness,Agent自会飞翔。
本系列基于 learn-claude-code 开源项目
🔔 关注获取更新
这个系列会持续更新,下一期我们将亲手写出那个80行的Agent循环。
如果你想知道:
-
Agent的”手”(工具)是怎么接上去的? -
为什么一个 while循环就够了? -
模型怎么知道什么时候该停?
关注公众号,第一时间获取更新。
夜雨聆风