很多人第一次做 AI 功能时都会卡在同一个问题上:我到底是在调一个大模型,还是在做一个 Agent?把两者当成一回事,后面选型、算成本、写代码都会跑偏。这篇不堆概念,只讲能力边界、协作关系,以及你可以照着做的判断清单和上手顺序。
很多人第一次做 AI 功能时都会卡在同一个问题上:我到底是在调一个大模型,还是在做一个 Agent?把两者当成一回事,后面选型、算成本、写代码都会跑偏。这篇不堆概念,只讲能力边界、协作关系,以及你可以照着做的判断清单和上手顺序。
先记住一句话:大模型负责「想」,Agent 负责把「想」串成「做」。大模型给你一段输出就结束;Agent 会拿着这段输出去看结果、再决定下一步,反复几轮直到任务完成。想弄清具体有哪些官方模型可选、各自擅长什么,可以先到 模型资料库(/models) 翻一遍再往下读。
先把两个词说清楚:谁负责想,谁负责做
- 大模型
- 一个函数:给输入、出输出,单次调用结束就结束,不记得你,也不会自己再干下一步
- Agent
- 一套流程:由模型、工具、循环、状态、结束条件拼起来的东西,模型只是里面负责决策的那一环
- 判断口诀:一次问答能搞定的是大模型;需要模型看结果、再决定下一步、反复几轮才能完成的,才是 Agent
- 大模型不会主动发起动作,它只会「说话」,所有真实动作都得由你的代码去执行
- Agent 的智能其实被拆成两半:模型负责决策,工程负责执行和刹车,缺一半都跑不起来
- 不适用的情况:如果你的任务只要求「生成一段文字或一段代码」,加 Agent 框架只会让延迟和成本上升,没有收益
能力边界对照:这几件事大模型天生做不到
很多新手踩的坑,是把「模型说它能做」当成「它真能做」。模型输出的只是文字,文字描述的动作不等于动作本身。下面这张对照表可以帮你快速定位:一件事到底是模型本身能干,还是必须由外部补上。
| 能力 | 大模型自己 | 必须由外部补上 |
|---|---|---|
| 访问外部数据 | 做不到,它只能读写上下文里的内容 | 查数据库、读文件、发 HTTP 请求,都要你的代码去执行并把结果喂回来 |
| 跨会话记忆 | 没有,这次对话结束就忘 | 用户偏好、历史记录存在外部存储里,调用时再拼进上下文 |
| 结果正确性 | 只会给「像那么回事」的答案 | 靠工具返回值、规则校验或人工复核来确认,模型自己不会验证 |
| 多步任务 | 单次调用只能走一步 | 由循环控制,把上一步结果塞回去,驱动模型继续决策 |
- 碰不到外部世界:查数据库、读文件、发请求,模型自己都做不了,必须由外面把结果喂进去
- 没有持久记忆:跨会话记得住用户偏好,是外部存储在做,不是模型本身的能力
- 不会自我验证:模型给的答案是「像那么回事」,对不对要靠工具返回值或人工复核来确认
- 不适用的情况:纯文本的摘要、翻译、改写这类任务,本来就不需要外部世界,硬套 Agent 反而更难调试
两者怎么配合:一次 Agent 调用的完整链路
- 给模型一份工具清单告诉它有哪些动作可选、每个动作要什么参数,用结构化格式描述,别写在闲聊里
- 模型输出调用意图它会说「想调用哪个工具、参数是什么」,注意这只是意图,真正执行的是你的代码,别把两者混为一谈
- 把结果塞回上下文工具返回的真实结果要作为新一轮消息发回去,让模型基于事实决定是继续调还是给最终答复
- 加刹车再上线步数上限、超时、成本上限三件套必须先设好,否则一个循环写错就会一直跑下去
# 伪代码:Agent 主循环骨架
for step in range(MAX_STEPS):
resp = model(messages, tools=tool_specs) # 模型只负责决策
if not resp.tool_call: # 没有工具意图就收尾
return resp.text
result = run_tool(resp.tool_call) # 执行永远在你这侧
messages.append(result) # 真实结果回灌上下文
raise TimeoutError("超出步数上限,需要人工介入")怎么选:一张按任务形态判断的对照表
| 任务形态 | 建议做法 | 不适用的情况 |
|---|---|---|
| 输入输出结构固定、可枚举 | 大模型单次调用 + 结构化输出,先别上 Agent | 需要灵活编排多来源数据时,单次调用会写成一坨判断 |
| 步骤随中间结果变化 | 做成 Agent,用循环驱动 | 延迟敏感、用户等不起多轮往返,要优先收敛步骤 |
| 对延迟敏感 | 把确定性步骤写成代码,模型只管不确定的那部分 | 任务本身就必须反复查资料,硬压成一次会丢准确度 |
| 团队还没有调试和监控 | 先上线单次调用版本,观察真实请求长什么样 | 业务要求马上支持多步自动化时,这套会拖慢进度 |
| 涉及安全、合规、资金 | 任何方案都留人工审核环节 | 指望自动化全兜住,出问题时无法追溯 |
选型之外还有一层成本感受:多轮循环意味着多次调用和更多 token,延迟与花费都会变。具体到各家官方 API 的当前报价,别凭记忆估算,直接到 价格与模型资料库(/pricing) 核对当时的数字,再按你实际的调用轮数做估算。
- 任务可枚举、每次输入输出结构固定:用大模型加结构化输出就够了,先别上 Agent
- 任务步骤会因中间结果而变、需要反复查资料或调接口:值得做成 Agent
- 对延迟敏感、用户等不起多轮往返:优先把步骤收敛成一次调用,或把确定性步骤写成代码
- 团队没有调试和监控能力时:先做单次调用版本上线,观察真实请求长什么样,再决定要不要扩成 Agent
- 不适用的情况:安全、合规、资金相关的决策,无论哪条路都要留人工审核环节
模型决定「下一步做什么」,你的代码决定「这一步能不能真做」——把这两件事分开,Agent 就不神秘了。下一步挑一个你手上真实的小需求,先按「单次调用能不能解决」判断一遍,再决定要不要扩成 Agent;想看具体模型和价格,从模型资料库和价格页开始查最省时间。→
常见问题
是不是用了工具调用,就等于做了个 Agent?
不一定。单次「模型决定调一个函数、拿到结果就结束」通常叫工具调用,流程是线性的。Agent 的关键在于有循环和状态:模型看到结果后能自己决定再走一步还是收尾。区别不在有没有工具,而在有没有「回头看结果再决定」这个环节。
入门阶段该先学哪个?
先学大模型调用。把请求参数、返回结构、报错处理、成本口径摸熟,这些是后面所有东西的地基。等你能稳定拿到想要的输出,再去看循环、工具注册、状态管理,理解会快很多,也不容易把问题归错地方。
做大模型应用一定要引入 Agent 框架吗?
不是。很多线上功能就是一次调用加一段业务代码,稳定又好维护。只有当步骤分支多、需要动态决定下一步时,框架带来的编排能力才值回票价。可以先不加框架手写一版循环,搞清链路后再决定要不要换。