AI Agent 入门笔记:从会聊天,到真正把事情办完
本文是对第一章《AI Agent 入门》的学习整理。重点不是记住所有框架,而是建立一套分析 Agent 的坐标系。
写在前面:Agent 和聊天机器人差在哪里?
聊天机器人最擅长的是“回答”;Agent 真正要解决的是“完成”。
Cursor 会搜索代码、修改文件、运行测试;Deep Research 会搜索、阅读、比较并整理报告;电脑操控 Agent 会观察界面、点击按钮,再检查操作是否生效。这些产品形态不同,却都跨过了一条边界:模型不再只生成文本,而是进入一个持续的“观察—行动—反馈”闭环。
所以,判断一个系统是不是 Agent,我不会只看它是否用了 LLM,而会看三个问题:
- 它能看到哪些真实环境信息?
- 它能对环境执行哪些动作?
- 它能否根据动作结果继续调整策略?
第一张认知卡片:Agent 的核心公式
第一章最重要的公式仍然是:
Agent = LLM + 上下文 + 工具
| 组件 | 直觉 | 负责什么 | 常见失败 |
|---|---|---|---|
| LLM | 大脑 | 理解意图、规划、决策 | 推理错误、幻觉、策略不稳 |
| 上下文 | 眼睛 | 提供任务、历史、状态与观察 | 信息缺失、污染、窗口溢出 |
| 工具 | 手脚 | 读取或改变外部世界 | 接口误用、权限过大、执行失败 |
这里还有一条必须守住的边界:Environment 不是 Agent 的组成部分。 文件、数据库、网页、用户和物理世界属于环境;Agent 通过观察与行动接口和它们交互。
从生产架构看,Agent 内部还可以再拆成:
Agent = Model + Harness
Model 负责做决策;Harness 则是包围模型的运行与治理层,负责组织上下文、暴露工具、维护循环、控制权限、验证结果并处理错误。
这两个公式并不冲突。前者是全书的概念骨架,后者是把“上下文 + 工具”展开为生产工程职责。
能力提升的杠杆:扩展观察与动作空间
一个很容易忽视的结论是:模型固定时,最有效的改进往往不是继续优化 Prompt,而是让 Agent 看见更多必要信息,或获得更合适的行动接口。
例如:
- 看不到仓库文件,Coding Agent 就无法理解项目;
- 没有终端工具,它只能建议你运行测试;
- 没有浏览器观察,它无法知道按钮是否真的被点击;
- 没有支付权限,它最多生成一份付款说明。
但空间并非越大越好。开放文件系统、命令执行和网络访问会同步扩大攻击面。因此更准确的原则是:按任务需要扩展能力,用最小权限、沙盒和验证约束风险。
工具不是 API 清单,而是 Agent 的“动作语言”
第一章把工具分为五类:
| 工具类型 | 信息/动作方向 | 例子 |
|---|---|---|
| 感知工具 | 环境 → Agent | 搜索、读取文件、查询数据库 |
| 执行工具 | Agent → 环境 | 写文件、运行代码、调用业务 API |
| 协作工具 | Agent ↔ 其他角色 | 委托子 Agent、请求人工确认 |
| 事件触发工具 | 环境主动唤醒 Agent | 新邮件、定时器、Webhook |
| 用户沟通工具 | Agent → 用户 | 消息、邮件、语音通话 |
工具设计有一个很实用的取舍:
- 通用工具适合探索与组合,例如受限的代码解释器;
- 专用工具适合高风险操作,例如付款、删除数据和生产部署。
我把它概括成一句话:低风险任务给自由度,高风险任务给窄接口。
ReAct:Agent 是怎样一步步工作的
ReAct 是 Reasoning + Acting 的缩写,但实际包含三个动作:
思考 → 行动 → 观察 → 思考 → 行动 → 观察 → …… → 完成
每一轮都会把新信息追加进轨迹(trajectory)。模型下一次决策时,看到的是:
上下文 = 静态前缀 + 动态轨迹
- 静态前缀:系统提示词 + 工具定义;
- 动态轨迹:用户消息 + 模型回复 + 工具执行结果。
一个最小循环可以写成:
trajectory = [user_request]
while not done:
context = stable_prefix + trajectory
decision = Model(context)
trajectory.append(decision)
if decision.has_no_tool_call():
return decision.answer
observation = Environment.execute(
Harness.validate(decision.tool_call)
)
trajectory.append(observation)
这段伪代码里最关键的不是 while,而是 observation。没有真实结果回流,循环就不是闭环,模型只能假设动作已经成功。
上下文消融实验给我的警告
实验 1-1 逐一移除上下文组件,最值得记住的不是“所有内容都同样重要”,而是它们的作用并不等价:
- 缺少工具定义:Agent 无法行动,却仍可能生成一份看似可信的答案;
- 缺少工具执行结果:Agent 不知道动作是否成功,容易盲目重试;
- 缺少历史消息:Agent 更可能重复操作和再次犯错;
- 缺少 reasoning:如果理由能从结果重建,影响可能并不明显。
这带来两个工程结论。
第一,“有答案”不是成功条件。最危险的失败往往不是报错,而是输出一份格式漂亮、事实却未经观察验证的结果。
第二,不能凭直觉宣称某个上下文组件“不可或缺”。模型会变化,信息也可能从别处重建,正确方法是做消融评估。
实验代码与当前验收状态可从第一章实验导航和实验验收台账进入。
从 Demo 到产品:Harness 五要素
一个 Demo 只要能跑起来;生产系统还要能约束、验证和恢复。第一章把 Harness 拆成五项职责:
| 要素 | 关键问题 |
|---|---|
| Context | 模型是否看到了做决策所需的信息? |
| Tools | 接口是否清晰、可组合、难以误用? |
| Constrain | 哪些动作允许执行,哪些必须拒绝或确认? |
| Verify | 如何通过外部证据判断结果正确? |
| Correct | 失败后如何重试、回退、熔断或转交人工? |
它们组成两个层次:上下文和工具让 Agent 能做事;约束、验证与纠正让它 可靠地做事。
我认为这也是第一章最现实的判断:当模型能力逐渐商品化,产品差异越来越多地来自模型之外的工程。用户最终感知的不是基准测试分数,而是任务能否完成、错误能否恢复、风险是否可控。
工程范式为何越来越“向外扩”
第一章梳理了一条很有启发性的演进路径:
Prompt Engineering
↓ 管理全部输入信息
Context Engineering
↓ 管理模型运行与环境交互
Harness Engineering
↓ 管理跨轮次持续运行
Loop Engineering
↓ 组织循环、程序与人工审批
Graph Engineering
它们不是互相替代,而是关注范围逐层扩大。Prompt 仍然重要,只是它现在被放进了更完整的系统问题中。
这也提醒我:如果任务失败,不要习惯性地只改提示词。问题可能出在上下文选择、工具接口、状态流转、停止条件、权限或验证机制上。
工作流还是自主 Agent?
两者的根本区别不是“有没有 LLM”,而是执行路径由谁决定。
| 对比项 | 工作流 | 自主 Agent |
|---|---|---|
| 路径 | 开发者预先定义 | 模型根据反馈动态决定 |
| 优势 | 可预测、易审计、流程约束强 | 灵活,能处理未知步骤和例外 |
| 代价 | 难以覆盖预料外情况 | 成本更高,错误可能复合传播 |
| 适合 | 支付、审批、固定业务流程 | 编程、研究、Computer Use |
实用的选择顺序是:
- 单次 LLM 调用能解决,就先不做 Agent;
- 步骤固定且业务规则明确,就用工作流;
- 必须根据环境反馈动态调整,才用自主 Agent;
- 高风险主干用工作流,开放式局部用自主模式。
还可以让自主 Agent 先生成工作流,再用确定性代码执行。这种混合方案同时保留了规划的灵活性和执行的稳定性。
安全不是过滤器,而是三层架构
第一章按照“被绕过的难度”把护栏分成三层:
- 上下文层:控制模型能看到什么,识别越狱、提示注入和不相关内容;
- 执行层:控制模型能做什么,通过权限、沙盒、风险评级与人工确认拦截危险动作;
- 数据层:控制世界最终允许发生什么,用数据库约束、行级安全等机制守住底线。
越往下,越少依赖模型自己的判断,也越难被一次提示注入穿透。同一上下文中的 Agent 很难可靠判断自己是否已被注入,因此只做输入过滤永远不够。
护栏还要同时评估两种错误:危险请求被放行,以及合法请求被误拒绝。只盯着前者,会得到一个“很安全但什么也做不了”的系统。
五个值得反复复用的设计模式
第一章最后给出了贯穿全书的五种模式,我把它们记成了一张速查表:
| 模式 | 我的理解 |
|---|---|
| 提议者—审核者 | 生成与评判分离,审核者只看产物和证据,不共享生成者的盲区 |
| 渐进式披露 | 先提供目录,细节按需加载,节省上下文并提高选择精度 |
| 只增不改 | 状态追加演进,换取可缓存、可重放、可审计 |
| 边界集 + 保留集 | 既验证应该改变的样本,也验证不该受影响的样本 |
| 最小 diff + 可回滚 | 缩小改动范围,保留来源,使错误可归因、可撤销 |
这五条表面上分散,其实都指向同一个目标:降低不确定性,让系统变化可以被观察、验证和撤销。
我的 Agent 开发检查清单
读完第一章后,如果要启动一个 Agent 项目,我会先回答下面这些问题:
- 任务的“完成”由什么外部证据证明?
- Agent 必须看到哪些信息?哪些信息不该进入上下文?
- 它需要哪些最小工具与权限?
- 路径可以预定义吗,还是必须动态决策?
- 每次行动后,环境结果如何回流?
- 最大轮数、超时和熔断条件是什么?
- 哪些操作不可逆,必须人工确认?
- 验证机制是否独立于被检查的 Agent?
- 失败后能否重试、回滚或安全移交?
- 模型、Prompt 或 Harness 改动后,如何做回归评估?
写在最后
第一章给我的最大收获,不是学会了 ReAct 这个名词,而是换了一种看待 Agent 的方式:
不要只问“模型聪不聪明”,还要问它看见了什么、能够做什么、如何知道做对了,以及做错后谁来兜底。
一个真正可靠的 Agent,不是一个永不犯错的模型,而是一套让错误可发现、可限制、可纠正的系统。模型决定能力上限,Harness 决定这些能力能否安全地落到现实世界。
第一章配套实验记录
实验1-1:chapter1-1 上下文感知 Agent 与消融实验
验证上下文组件对 Agent 行为的影响,并提供消融结果可视化。
实验1-2:chapter1-2 Kimi 网络搜索 Agent
Kimi K3 通过多轮搜索完成来源核验,实验验收通过。
实验1-3:GPT-5.6 Sol 深度研究(这里用qwen3.7-plus代替)
托管搜索与代码执行形成闭环,三轮交互验收通过。
实验1-4: 文生图工作流与原生图像生成的对照
工作流与 GPT-Image 2 完成全部生成任务,Gemini 路线因环境依赖失败。