你有没有遇到过这种情况:需求评审时,工程师说这个功能实现不了,你却完全不知道为什么?
问题往往出在这里——你设计的是一个 AI Agent,但你并不知道它背后到底在做什么。
一、Agent 其实是个永动机
打个比方,Agent 就像一个实习生:你给他布置任务,他不会一次性完成,而是会不断来找你确认、要资源、汇报进度。
这个循环叫做Agent Loop,它是所有 AI Agent 的核心。
理解了这个循环,你就能明白为什么有些需求根本做不了,为什么 Agent 有时会卡死,为什么成本会突然暴涨。
二、一个任务是怎么被执行的
让我用 OpenAI Codex 的真实案例给你拆解一遍。
假设用户说:在 README 里加个架构图。
第一步:组装一份完整的指令清单
Agent 不是简单地把用户的话扔给模型,而是要准备一个结构化的数据包。
这个数据包是 JSON 格式,包含三个核心部分:
instructions - 系统级指令
告诉模型它是谁、该遵守什么规则。
比如 Codex 会在这里写明:你是一个代码助手,要遵守沙箱权限,不能随便执行危险命令。
这部分内容来自配置文件,或者是针对特定模型预设的指令文档。
tools - 工具清单
列出模型可以调用的所有工具,每个工具都有详细定义:名称、参数、返回值。
工具来源有三类:
- Agent 自带的基础工具,比如执行 shell 命令、编辑文件
- API 服务商提供的工具,比如网页搜索
- 你自己配置的工具,比如接入天气 API 或内部数据库
就像给实习生一份工具手册,他只能用手册里列出的工具干活。
input - 输入列表
这才是真正的对话内容,但它不是一段话,而是一个列表,每条内容都标注了角色。
在用户消息之前,Codex 会先插入几条消息:
- role=developer 的权限说明:哪些文件夹可以写、哪些命令需要先问用户、网络访问规则是什么
- role=developer 的开发者指令(可选):你在配置文件里自定义的额外规则
- role=user 的用户指令(可选):项目文档里的说明、技能库的使用指南,按优先级从高到低排列
- role=user 的环境信息:当前在哪个文件夹、用的什么 shell
最后才是用户的真实请求:在 README 里加个架构图。
为什么要分这么细?
因为 API 服务器收到这个 JSON 后,会按照优先级重新排列,生成最终的提示词:
system 消息 → 工具定义 → developer 消息 → user 消息 → assistant 消息
优先级高的内容对模型的影响更大。
第二步:发起推理请求
Agent 通过 HTTP 请求把这个 JSON 发给 Responses API。
不同场景用不同的 API 端点:
- 在 ChatGPT 里用:chatgpt.com 的端点
- 用 API key 调用:api.openai.com 的端点
- 本地运行开源模型:localhost 的端点
模型不会一次性返回完整结果
API 用流式传输,一点点推送事件给你。
你会收到各种类型的事件:
response.reasoning_summary_text.delta- 模型的思考过程片段response.output_text.delta- 给用户看的回复片段response.output_item.added- 新增了一个输出项
模型最终会做两件事之一:
- 返回
type=message的助手消息:好的,我加好了 - 返回
type=function_call:我需要先执行cat README.md看看文件内容
大部分情况下是第二种。
第三步:执行工具调用
模型说要调用shell工具执行cat README.md,Agent 就去执行。
执行完成后,Agent 要把三样东西追加到原来的 input 列表里:
- type=reasoning:模型的推理总结(这段内容是加密的,只有服务器能解密)
- type=function_call:工具调用的详细信息,包括调用哪个工具、传了什么参数
- type=function_call_output:工具返回的结果
注意,原来的 input 内容都还在,只是在末尾追加了新内容。
第四步:再次推理
Agent 拿着更新后的 input,再次发送 HTTP 请求给 Responses API。
这次模型看到了 README 的内容,可能又说:我要调用edit_file工具修改文件。
然后 Agent 再执行,input 再变长,再发请求……
这个循环会一直持续,直到模型说:搞定了,我给用户回个消息吧。
这时模型返回的是type=message的助手消息,比如:我已经在 README 里加了架构图。
这就是一个完整的Turn(轮次)——从用户输入到 Agent 回复的完整流程。
第五步:对话继续
如果用户继续说:图里少了个模块,加上。
Agent 要把之前所有的对话历史、工具调用记录都带上,再加上新消息,组成新的 input 发给模型。
每一轮对话,input 都会变得更长,就像滚雪球一样。
三、这里藏着三个致命的坑
坑一:上下文窗口会爆炸
模型有个硬性限制,叫上下文窗口——它一次最多能处理多少 token(可以理解为字数)。
这个窗口包括输入和输出的所有 token。
如果你的对话太长,或者 Agent 在一轮里调用了几百次工具,窗口就会被耗尽,模型直接跑不动。
Codex 的解决方案:自动压缩
当 token 数超过阈值,Codex 会调用一个专门的/responses/compact接口。
这个接口会把对话历史压缩成一个精简版本,保留核心信息,丢掉细节。
压缩后的内容里有个特殊的type=compaction项,里面是加密的,服务器能用它还原模型对对话的理解,但具体内容你看不到。
你设计产品时要想清楚:
- 什么信息必须保留?
- 什么时候触发压缩?
- 压缩后会丢失哪些能力?
坑二:缓存失效会让成本暴涨
每次推理都要钱、都要时间。
但如果 input 的前半部分跟上次一模一样,模型可以复用之前的计算结果,这叫Prompt Caching(提示缓存)。
缓存能把采样成本从二次方降到线性。
缓存的条件非常苛刻:
input 必须是上一次请求的精确前缀。
也就是说,只能在末尾追加新内容,不能修改前面的任何东西。
什么操作会让缓存失效?
- 在对话中途修改可用工具列表
- 切换模型
- 改变沙箱配置、审批模式、当前工作目录
一旦缓存失效,模型要从头计算,成本直线上升。
特别要小心 MCP 工具
MCP 服务器可以动态修改工具列表。
如果它在对话中途发送notifications/tools/list_changed通知,Agent 就得更新工具定义,这会导致缓存失效。
Codex 团队为了保证性能,会尽量把配置变更转化成在 input 末尾追加消息,而不是修改前面的内容。
比如工作目录变了,不是修改之前的环境信息,而是在后面追加一条新的环境信息消息。
你设计产品时要想清楚:
- 哪些配置应该在对话开始时固定?
- 如何减少中途修改导致的缓存失效?
- 用户切换设置时,要不要提示他会影响性能?
坑三:无限循环没人管
模型可能陷入死循环。
比如它一直觉得需要调用工具,但工具返回的结果又让它想调用更多工具。
或者它反复调用同一个工具,每次都得到相同的结果,但就是不停止。
你的产品设计必须考虑:
- 单轮对话最多允许几次工具调用?
- 什么情况下强制停止循环?
- 用户能否中途打断?
- 超限时给用户什么提示?
四、为什么请求是无状态的
你可能注意到了,每次发请求都要把完整的对话历史带上,这不是很浪费吗?
Responses API 其实提供了一个previous_response_id参数,可以让服务器记住上次的状态,不用重复发送。
但 Codex 没用这个参数。
原因有两个:
1. 支持零数据保留(ZDR)客户
有些企业客户要求不在云端存储任何数据。
如果用了previous_response_id,服务器就必须存储之前的对话,这跟 ZDR 矛盾。
保持无状态,每次发完整请求,就能完全符合 ZDR 要求。
2. 简化服务器实现
无状态意味着每个请求都是独立的,服务器不需要维护会话状态,更容易做负载均衡和容错。
虽然网络传输的数据量增加了,但模型采样的成本远远高于网络传输成本,所以这个权衡是值得的。
而且有了 Prompt Caching,重复发送的内容不会重复计算,实际成本并不高。
五、你该关注什么
现在你知道了 Agent 的运作逻辑,设计产品时应该重点考虑:
工具设计
- 提供哪些工具?工具太少完成不了任务,太多容易让模型选错
- 工具的定义是否清晰?参数说明是否明确?
- 工具会不会动态变化?变化时如何保证缓存不失效?
循环控制
- 单轮对话最多允许多少次工具调用?
- 什么情况下强制结束循环?
- 用户能否中途打断?如何优雅地停止?
上下文管理
- 对话历史保留多久?
- 什么时候触发压缩?压缩阈值设多少?
- 压缩后哪些信息不能丢?如何测试压缩效果?
性能优化
- 哪些配置应该在对话开始时固定?
- 如何减少中途修改导致的缓存失效?
- 是否需要向用户展示模型的思考过程?这会增加多少 token?
角色优先级
- system 和 developer 消息里该放什么内容?
- user 消息里的不同来源如何排序?
- 什么时候该用 developer 而不是 user?
六、最后说两句
Agent 不是魔法,它就是一个不断循环的机器:
接收指令 → 发起推理 → 调用工具 → 追加结果 → 再次推理 → 再调用工具……
直到模型觉得可以给用户一个答复了。
但这个简单的循环里,藏着上下文窗口、缓存策略、无限循环、无状态请求等一系列复杂问题。
每个问题都可能让你的产品卡死、变慢、成本失控。
下次评审时工程师说做不了,你至少知道该问哪些问题了:
- 是工具调用次数超限了吗?
- 是上下文窗口不够了吗?
- 还是这个改动会让缓存失效?
学AI大模型的正确顺序,千万不要搞错了
🤔2026年AI风口已来!各行各业的AI渗透肉眼可见,超多公司要么转型做AI相关产品,要么高薪挖AI技术人才,机遇直接摆在眼前!
有往AI方向发展,或者本身有后端编程基础的朋友,直接冲AI大模型应用开发转岗超合适!
就算暂时不打算转岗,了解大模型、RAG、Prompt、Agent这些热门概念,能上手做简单项目,也绝对是求职加分王🔋
📝给大家整理了超全最新的AI大模型应用开发学习清单和资料,手把手帮你快速入门!👇👇
学习路线:
✅大模型基础认知—大模型核心原理、发展历程、主流模型(GPT、文心一言等)特点解析
✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑
✅开发基础能力—Python进阶、API接口调用、大模型开发框架(LangChain等)实操
✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用
✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代
✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经
以上6大模块,看似清晰好上手,实则每个部分都有扎实的核心内容需要吃透!
我把大模型的学习全流程已经整理📚好了!抓住AI时代风口,轻松解锁职业新可能,希望大家都能把握机遇,实现薪资/职业跃迁~