开始学习 Agent:先看懂模型、程序与工具如何配合
正在读取学习记录…
外部资料访问提示:课程引用的部分官方文档、论文和开源项目位于境外网站。遇到链接打不开,可以先检查网络或稍后重试;仍无法访问时,可配置网络代理,也就是常说的“科学上网”。相关工具的安装与配置方法可以在 GitHub 上查阅,优先参考项目 README 和官方文档。文章中的代码、公式与运行结果会直接展示,外部链接用于进一步阅读。
Agent 可以先理解为一个围绕目标反复工作的程序:它接收任务,决定下一步,必要时调用模型或工具,读回结果,再判断是否完成。模型可以帮助理解文字和提出建议;读文件、发请求及确认结果,仍要由程序按规则控制。
比如用户问“退货要满足什么条件”,资料助手先读取允许访问的规则,整理出条件与出处,再把答案交给用户。这是一条正常路径。等你能画出这条路径,我们再讨论资料版本冲突、访问权限和何时停止。这篇会用同一个任务讲清分工,最后让你写出一页自己的任务设计。
1. 先有任务,再讨论 Agent

假设我们要做一个资料助手。用户问:“根据这三份测试资料,告诉我退货需要满足什么条件,并标出依据。”
先别考虑模型,想一想你自己会怎样完成:找到三份资料,确认版本,阅读退货部分,把适用条件整理出来,再把每个结论和出处对应起来。如果资料互相矛盾,你需要说明差异;如果根本没有相关内容,就应当说证据不足。
这段人工过程已经给出了软件需求。输入是问题和允许访问的资料,输出是带出处的结论,成功条件是结论与资料一致。限制条件同样重要:不能读其他人的文件,不能把资料里没有的信息写成事实,也不能无限查找下去。
“做一个智能助手”很难验收,“回答这组问题,每条结论给出可检查的出处,证据不足时说明原因”就具体得多。学习 Agent 的第一项能力,是把愿望改写为可观察的任务,而不是先记住框架名称。
2. 四种实现方式,差别在控制过程
第一种:普通程序
如果三份资料本来就是统一格式的表格,退货条件放在固定字段,程序可以直接读取字段、组合模板,不必调用模型。
普通程序并不只能处理简单任务。它也可以搜索、循环、重试、执行复杂算法。不能看到一个 while 循环就说它是 Agent。给固定表格的三列求和硬塞一位“会思考的同事”,多少像请项目经理帮计算器按等号:多了成本,也多了可能出错的地方。关键是下一步的选择依据和控制方式,而不是代码里有没有循环。
第二种:一次模型调用
本课程说的模型,主要指能处理和生成语言的大语言模型(LLM)。聊天窗口是使用它的一种产品形式,不等于模型本身。应用把输入通过接口交给模型、取得生成结果,称为一次模型调用;界面里的文件上传、搜索和执行代码则需要应用另外提供这些能力。
当资料变成自然语言,写死字段规则可能不方便。程序可以把问题和资料传给模型,让它生成摘要。模型在这里承担语言理解与表达的工作。
但模型生成了一段文字,不代表它读取了你没有提供的文件,也不代表引用真实存在。文件读取、资料筛选、传输和结果展示仍由应用处理。对于资料量小、步骤固定的任务,一次调用可能已经够用。
第三种:固定工作流
如果资料较多,可以设计固定步骤:检索资料→生成回答→检查引用→展示结果。模型可以参与其中某些步骤,但调用顺序由程序规定。这种预先规定步骤的做法叫工作流。
检查失败时返回上一阶段,也不必然变成 Agent。程序可以事先规定“引用缺失则重新生成一次”。路径仍由开发者定义,只是带有分支。
第四种:模型参与决定后续动作
另一类任务无法预先确定要查哪份资料、查几次。系统把已有发现交给模型,模型提出下一步动作,例如继续搜索另一组关键词、读取某个片段,或者在证据足够时结束。程序检查这个动作是否合法,执行后把结果交回去,继续下一轮。
模型参与选择动作,并根据执行反馈继续推进时,我们称这个系统为 Agent。不同团队可能使用略有差异的定义,判断时重点看谁控制下一步。工作流与 Agent 的控制方式可参考 Anthropic 的工程文章。
| 实现 | 谁决定下一步 | 资料助手中的例子 | 主要代价 |
|---|---|---|---|
| 普通程序 | 确定的程序规则 | 读取固定字段并填模板 | 新格式可能需要改规则 |
| 一次模型调用 | 程序只安排这一次调用 | 把三份短资料一次交给模型 | 输入容量、输出准确性需要检查 |
| 固定工作流 | 预先设计的步骤与分支 | 检索后回答,再检查引用 | 流程变化要修改编排 |
| Agent循环 | 模型提出后续动作,程序约束执行 | 根据已有结果决定继续找什么 | 路径不固定,成本与失败分析更复杂 |
这不是从低级到高级的排行榜。任务相同时,能稳定完成且便于维护的简单方案通常更值得先验证。Agent 的灵活性有价值,但需要用结果证明,而不是用调用次数证明。
新闻里也能看到这道分工题。2026 年 9 月 10 日,OpenAI 发布 Agents API,把长时间运行、工具使用、上下文管理和保存中间结果作为基础设施能力介绍。这是厂商对产品能力的说明,不是本站对某个任务效果的测评。平台能帮你把“持续工作”搭起来,却不知道你的退货规则是哪一版、谁有权看订单;这些仍要由任务设计和程序约束回答。新闻会过期,这个判断不会因为换一家平台而消失。
3. 模型、程序、工具各自做什么
工具可以先理解为一个有明确输入和输出的能力,比如 search(query) 或 read_document(id)。它可能只是一个 Python 函数,也可能连接远程系统。工具名称不是权限凭证,函数能被调用也不等于当前用户能读取任何文档。
图中的程序还负责停止条件、访问范围和错误记录;把它画成一个框不意味着这些工作可以省略。
用一段不执行的流程描述看完整顺序:
收到任务和允许访问的资料范围
重复有限轮次:
把任务和已有结果提供给模型
读取模型提出的动作
如果提出结束:检查结果能否交付
否则:检查工具名称、参数和权限
执行允许的工具,记录真实结果
把结果交回下一轮
到达限制仍未完成:返回未完成状态和原因模型给出候选动作,程序决定是否执行,工具返回实际观察结果。沿着这三种职责读后面的流程。
4. 跟踪一次具体过程
假设资料 A 描述普通商品,B 描述定制商品,C 是较旧版本。程序读到它们时会留下怎样的轨迹?
| 步骤 | 当前观察 | 下一步候选动作 | 程序需要检查 |
|---|---|---|---|
| 1 | 用户问退货条件 | 搜索“退货” | 关键词类型、长度、允许检索范围 |
| 2 | 搜索找到A、B和标为旧版的C | 读取三份资料的相关片段及版本说明 | 文档ID有效、用户可访问;只有返回的内容才进入后续观察 |
| 3 | 普通与定制商品条件不同 | 分别整理条件 | 不把两类条件错误合并 |
| 4 | C与A存在版本差异 | 核对版本或提示冲突 | 是否有足够证据判定哪个生效 |
| 5 | 得到带出处的结论 | 提交回答 | 引用存在、结论受资料支持 |
注意第3步:工具返回成功,只说明拿到了资料;模型可能仍然把条件理解错。第4步也不能靠“新日期看起来更大”随意判断生效关系,测试资料要明确版本含义。每一层检查解决不同问题,不能用一次成功回执概括整个任务。
如果模型一本正经地说“我已经读过文档 A”,却找不到对应的读取记录,那就是技术版的“已读乱回”。检查读取记录、文档版本和回答引用,就能沿着这条线找到问题。
当你阅读框架教程时,可以把示例中的对象放回这张表:消息里存了什么观察,哪个函数提出动作,哪个函数真正读资料,最终在哪判断结束。这样即使换框架,基本问题也不会变。
5. 失败要落在具体环节上
把前面五步的表格放进这张图:第二格要求真实读取记录,第三格核对版本和商品类型,第四格才允许回答。下方分支也提醒我们,“暂时不能确认”是一种有效结果,不是系统必须掩盖的错误。
“回答不好”不足以指导改进。至少要分清:资料没找到、资料找到了但理解错、动作参数不合法、工具执行失败、结果正确但引用缺失。不同原因需要不同处理:改善检索不一定能解决参数错误,换更大模型也不能替你修复访问权限。
停止同样不是只有“成功”一种。任务完成、资料不足、需要用户确认、超过时间预算,都可能使程序退出。对学习项目而言,先把这些状态写清楚,比让系统看起来永远在思考更有帮助。
不要把次数限制当正确性保证。最多查三次能限制工作量,但无法证明第三次拿到的是正确证据。这里有两个独立问题:什么时候不能再继续,什么时候已经可以交付。
拿到一个失败案例,可以沿下表倒查。先找证据,再决定修改哪一部分:
| 你看到的现象 | 要找的证据 | 下一步检查 | 暂时不该下的结论 |
|---|---|---|---|
| 回答说找不到退货说明 | 搜索实际返回了哪些文档 | 关键词、资料范围、文档是否存在 | 模型一定太小 |
| 引用了不存在的文档编号 | 工具返回的真实编号列表 | 回答是否编造引用 | 增加重试次数就会好 |
| 工具拒绝了动作 | 被拒绝的字段与错误类别 | 参数格式与当前用户权限 | 放开所有权限 |
| 查了很多次仍不结束 | 每次动作、观察与停止原因 | 是否重复同一请求、是否有轮数限制 | 只要继续等待就会成功 |
| 同时出现两种退货条件 | 两段原文及适用对象 | 是否分别属于普通商品和定制商品 | 随意选一句更像答案的 |
例如第二行,应该先修“答案必须使用真实返回的文档编号”,而不是先换搜索引擎。这就是工程排错:把模糊评价转换成一个能检查的环节。
6. 怎样验证它比简单方案更值得用
先准备一组你能判断答案的测试问题,包括能回答、资料缺失、资料冲突三类。分别让固定流程和候选 Agent 完成同一任务,记录证据是否正确、是否越权、耗时、调用量和未完成原因。没有运行就保留空表,不写“提升多少”。
对第一次学习而言,你可以先人工分析五个问题:哪一个必须动态决定下一步,哪一个固定流程就能完成?这个练习不测模型能力,却能检查你有没有把需求想清楚。后续 L7 再系统学习如何做评测,避免从少数成功例子推出整体可靠。
下面给你五个可以直接写进任务设计的测试情形。它们是测试要求,不是已经跑出的成绩:
| 测试情形 | 期望行为 | 怎样人工检查 |
|---|---|---|
| 普通商品规则明确 | 回答条件并附资料出处 | 逐句对照原文 |
| 只提供定制商品资料,却问普通商品 | 说明资料不足 | 不把定制规则套给普通商品 |
| 两份资料互相冲突,未说明替代关系 | 呈现冲突或请求确认 | 不擅自选“较新日期” |
| 资料读取失败 | 报告未完成与原因 | 不声称已经看过资料 |
| 用户要求读取范围外的资料 | 拒绝越界动作 | 没有对应的实际读取操作 |
等程序完成后,为每种方案各保存一份记录:问题 → 实际回答 → 引用 → 动作次数 → 耗时 → 通过/失败及原因。不要只保存最好的一次。若固定流程已经全部满足,就没有必要为了叫 Agent 而额外引入动态决策。
7. 十层课程怎样接起来
L0先建立运行环境、请求与错误的基础;L1研究模型输入输出;L2约束工具;L3组合循环。这四层让你能解释一个小系统为什么工作。
L4处理状态与恢复,L5处理知识和记忆,L6研究协作。它们解决的是系统变复杂后出现的问题,不是每个初学项目都必须马上引入的组件。
L7让结果可评估,L8把安全治理带入生产,L9再研究更复杂的代码、浏览器与多模态系统。十层是依赖地图,不是“学完某框架就升一级”。评测和安全意识从第一篇就开始,深入方法放在后面。
| 学习阶段 | 你会新增的能力 | 用资料助手检查自己 |
|---|---|---|
| L0–L1:程序能运行,数据能检查 | 运行代码、收发请求、检查模型输入输出 | 能否指出一次失败在环境、网络还是数据? |
| L2–L3:动作可执行,循环能结束 | 定义工具、处理观察、设置停止条件 | 能否限制它只读允许的资料,证据不足时停止? |
| L4–L6:处理长任务和复杂资料 | 保存状态、组织知识、按需分工 | 中断后如何继续?为什么需要更多角色? |
| L7–L9:衡量效果并扩展系统 | 评估、安全和更复杂的执行环境 | 用什么证据证明改善,而不是只展示一次成功? |
不必先背下所有缩写。现在先回答第一行的问题,后面的需求出现时再补相应能力。
8. 实践:解释、判断,再设计
课后练习展开习题收起习题
先写自己的答案,再展开参考。不要只背“Agent等于模型加工具”。
题1:一个程序按固定顺序检索、总结、重试一次,它是由模型决定下一步的 Agent 吗?
不一定。固定的重试分支仍可以是工作流。应检查下一步由预定规则还是模型结合观察动态提出,不能只按是否循环判断。
题2:模型说“已经读取文档A”,你需要什么证据?
需要程序实际执行读取的记录及相应返回结果,还要检查该记录对应当前任务和文档。模型的文字不是执行回执。读取成功后,回答是否正确仍需另查。
题3:每天把固定CSV的三列加总,是否应该先引入Agent?
通常先用确定程序解决。计算规则明确时,引入模型增加不可预测性。若输入格式变化或有自然语言解释需求,可以把那一部分单独评估,而不是把整条流程替换成Agent。
动手:写一页任务卡,不用写代码
先沿用前面的“退货资料助手”,用 15 分钟写一份一页任务卡。它是给未来开发者看的需求说明,不是让你现在做出一个会聊天的网站。你可以在本地新建 task.md,按下面六项填写;填完后再换成自己的非敏感资料任务。
- 输入资料:用户问题,以及当前用户有权访问的三份退货规则和版本。自查:有没有写清资料范围,而不是“全网都能读”?
- 成功标准:分开回答普通与定制商品条件;每条结论标出原文出处。自查:别人能否拿着资料逐条核对?
- 允许动作:在限定资料内搜索、读取片段、整理答案;不修改订单。自查:模型建议动作后,谁检查权限?
- 失败处理:查不到资料、两份规则冲突、读取工具报错时分别说明原因。自查:有没有把“没找到”伪装成确定答案?
- 停止条件:证据足够则交付;资料不足则说明;最多查三轮后停止并报告未完成。自查:有没有“无限重试”这种无法收尾的规则?
- 实现方式:先试固定工作流:检索→整理→核对引用;只有确实需要动态决定下一步时再评估 Agent 循环。自查:为什么不直接用更简单的方式?
任务卡写完后,交给一个没参与设计的人:他能否指出“什么算成功”“哪里必须拒绝”“哪一步真的需要模型决定”?如果答不出来,先改任务卡。尤其不能用“可以读取任意文件”或“无限重试”换取表面上的完整。
前面三道小题可以展开核对思路;任务卡没有唯一的标准句子,关键是你写的边界能被别人检查。
正在读取本地记录…
不调用模型,不执行代码。简答、代码和场景题仅保存答案并展示自查标准,不生成评分、徽章或认证。输入内容不会自动保存,请点击提交;不要填写个人信息或密钥。
选择题 · 什么才需要 Agent?
每天把固定 CSV 的三列求和,最合适的第一步是什么?
对应知识点:L0-problem
简答题 · 模型、程序、工具分别负责什么?
以资料查询为例,分别写出模型、程序和外部工具的一项职责,并写出一条完成证据。
对应知识点:L0-problem
代码题 · 把人工步骤写成流程
为一个非敏感资料整理任务写出输入、步骤、允许动作、成功标准和三类失败,不要求调用模型。
对应知识点:L0-problem
场景题 · 演示很顺不等于系统可靠
演示中模型说“已经读取文档并完成分析”,但没有工具记录。你会如何判断这次任务是否完成?
对应知识点:L0-problem
9. 把第一张地图留下来
第8节收起的习题可以检验判断、职责划分、流程设计和证据意识;完成后把要点整理到下面的六句话中。
复制下面六行到你的知识库,尽量用自己的话填:我的任务是……;模型负责……;程序负责……;工具返回……;完成证据是……;证据不足时……。如果“模型负责一切”,回到第3节重新划分。
阅读开源项目时,可以先看 Hello-Agents 怎样组织不同 Agent 范式;理解状态与流程后,再看 LangGraph 的实现。先能解释系统,再读框架,会少记很多没有上下文的 API。
下一篇:L0 工程基础总览。
描述会发送给本站维护者,用于修订文章,保存90天。请只填写文章问题,省略个人信息、密钥和内部资料。