
本文深入浅出地介绍了 Agent 系统的概念、运行机制以及如何将其转化为可靠的系统。通过实际案例分析详细阐述了 Agent Loop 的运行过程以及模型、Runtime 和工具在其中的角色和职责。文章还探讨了如何避免 Agent 原地打转的问题并简要介绍了 ReAct 与 Tool Calling 的关系为后续深入学习 Agent 工程打下坚实基础。对于想要学习大模型并付诸实践的程序员来说本文是不可或缺的入门指南。导语上一篇我们用一个问题区分了 Chatbot、Workflow 和 Agent任务执行到一半时谁根据最新结果决定下一步如果答案是模型会根据中间结果继续选择动作那么接下来的问题就是这个过程在代码里怎么发生假设用户交给开发助手这样一个任务帮我查清登录按钮点击后没有反应的原因先不要修改代码。它可能先读取登录页组件发现点击事件确实触发了然后查看浏览器请求发现接口返回 401再读取服务端日志最终定位到测试环境的签名密钥配置错误。第二步之所以发生是因为第一步排除了“按钮没有绑定事件”第三步之所以发生是因为第二步取得了 401 这个新线索。Agent 就这样一边行动一边获得新信息再用新信息决定下一步。这个不断重复的过程就是 Agent Loop。这一篇只做一件事建立整套课程后续章节都会复用的运行心智模型。读完后你应该能看懂一次 Agent 运行中模型、Runtime 和工具究竟怎样接力。一、先看它实际跑一遍把刚才的排障过程写成运行记录大致是这样用户 查清登录按钮点击后没有反应的原因先不要修改代码。 第 1 轮 模型 → read_file({ path: src/pages/Login.tsx }) 工具 → 点击事件已绑定提交时会调用 login() 第 2 轮 模型 → inspect_network({ urlPattern: /api/login }) 工具 → POST /api/login 返回 401错误码为 INVALID_SIGNATURE 第 3 轮 模型 → search_logs({ query: INVALID_SIGNATURE }) 工具 → 测试环境 JWT_SECRET 与签发服务不一致 第 4 轮 模型 → 返回排查结论、证据和建议不修改代码如果这是固定 Workflow开发者需要提前写死“先读组件再看网络再查日志”。但真实排障并不总走这条路径第一步也可能发现按钮被遮挡接下来应该检查页面样式接口也可能返回 500下一步要看的就是错误堆栈。Agent 的价值正是让后续动作随着观察结果变化。不过模型并没有直接读取文件、打开浏览器或查询日志。它只是提出了结构化的工具调用真正的动作由承载 Agent 的程序执行。这个程序通常被称为 Agent Runtime也就是驱动模型和工具反复交互的运行时。二、一轮循环里三方分别做了什么下面这张图只表达最小执行关系。先抓住主干暂时不用考虑重试、并行工具和断点恢复。在这个最小模型里三方各有自己的主要职责模型负责做语义判断模型理解用户目标和已有结果然后选择直接回答询问用户或提出一个 Tool Call。例如它看到POST /api/login返回 401判断接下来值得查询相关错误日志。这是语义决策适合由模型完成。Runtime 负责驱动和约束执行Runtime 保存当前消息调用模型接收 Tool Call检查工具与参数再把允许的动作交给工具。它还应负责最大轮数、超时、取消、权限拦截等确定性规则。模型可以建议调用工具但不能绕过这些规则。工具负责接触外部环境工具才是真正读取文件、请求 API、查询日志或操作浏览器的代码。执行结束后它返回成功结果或错误信息。可以把它们的关系记成一句话模型选择下一步Runtime 管住执行过程工具读取或改变环境。这张分工图是整篇文章的核心。后面的 Tool Calling、权限、状态和可观测性都是在这三个位置上继续增加工程能力。三、Input、Decision、Action、Observation 到底是什么现在再回头看标题里的四个阶段它们就不再抽象了。Input这一轮模型能看到的信息Input 不只是用户刚输入的一句话。它通常包含用户当前的任务需要保留的历史消息前几轮取得的工具结果本轮允许使用的工具说明应用提供的项目、账号或页面等运行上下文Agent 的稳定行为原则。Runtime 负责组装这些信息再提交给模型。至于哪些历史信息应该保留、怎样压缩是后面 Context Engineering 和状态管理要解决的问题。Decision模型对外给出的下一步很多资料沿用 ReAct 中的Thought把这一阶段叫“思考”。这个词可以帮助入门但工程实现真正需要处理的是模型对外给出的结果回答、提问或 Tool Call。因此本文用Decision表示可被程序消费的决定不要求模型暴露完整内部推理。一个 Tool Call 可能长这样{ id: call_02, name: inspect_network, arguments: { urlPattern: /api/login } }它表达的是“模型请求调用这个工具”不代表动作已经成功。Action通过检查后真正发生的动作Runtime 找到inspect_network工具校验参数和权限通过后才执行它。同一个 Tool Call 可能有三种结果工具获准执行并成功参数不合法被 Runtime 拒绝动作需要用户确认运行暂停。因此模型决定调用工具和系统真正执行工具是两个不同事件。Observation动作带回来的结果工具执行后返回 Tool Result{ toolCallId: call_02, isError: false, output: { method: POST, path: /api/login, status: 401, errorCode: INVALID_SIGNATURE } }这就是 Observation。Runtime 把它追加到消息中下一次调用模型时一并提交。toolCallId很重要。它让系统和模型知道这份结果对应哪一次调用。如果一轮里有多个工具调用这种对应关系更不能丢。Observation 也可能是错误超时、权限不足、参数错误和空结果都应该被明确表示。模型只有看到真实结果才能判断是重试、换方法、询问用户还是停止。四、通用 Agent 不应被一个场景绑住理解 Input 后就能回答一个常见的设计问题system prompt 到底应该放什么对于通用开发 Agent下面这些属于相对稳定的行为原则- 根据用户目标和工具结果选择下一步。 - 需要外部事实时使用工具验证不要猜测。 - 没有验证的工作不要声称已经完成。 - 缺少关键信息或授权时明确告诉用户。它们对前端排障、后端排障、代码解释和文档维护都适用。但本次任务要求应该随任务进入目标定位登录失败的原因。 边界只读排查不修改代码。 交付给出已验证的原因、对应证据和修复建议。换成另一个任务这部分自然会变化。还有一些限制不能只写在 prompt 里只允许访问当前工作区 最多运行 10 轮 写文件前必须获得确认Runtime 应该用路径检查、计数器和权限状态真正执行这些限制。于是输入相关的信息可以分成三层信息生命周期典型承载位置通用行为原则跨多类任务保持稳定system prompt当前目标与交付要求随每次任务变化用户消息或任务上下文可确定执行的硬限制由系统强制保证Runtime、权限系统或 Sandbox这不是某个 API 强制规定的唯一架构而是一条避免过拟合的工程原则不要把短期任务写成长期身份也不要把安全边界只写成自然语言愿望。专用 Agent 当然可以拥有领域提示和固定工具集。例如客服 Agent 可以长期了解工单规则。但即便如此账号权限、写操作确认和资源范围仍应由系统强制执行。五、最小 Agent Loop 的代码骨架下面用一段与模型服务商无关的 TypeScript把前面的接力写成代码。type ToolCall { id: string name: string arguments: unknown } type AssistantMessage { role: assistant text: string toolCalls: ToolCall[] } type ToolResultMessage { role: tool toolCallId: string name: string output: unknown isError: boolean } type AgentMessage | { role: user; content: string } | AssistantMessage | ToolResultMessage type Tool { name: string schema: unknown execute: (args: unknown) Promiseunknown } async function runAgent( userTask: string, tools: Tool[] ) { const messages: AgentMessage[] [ { role: user, content: userTask } ] for (let turn 0; turn 10; turn) { const assistant await callModel({ systemPrompt: GENERAL_AGENT_PROMPT, messages, tools: tools.map(toToolDefinition) }) messages.push(assistant) if (assistant.toolCalls.length 0) { return { status: stopped, text: assistant.text, messages } } for (const toolCall of assistant.toolCalls) { const toolResult await executeChecked( toolCall, tools ) messages.push(toolResult) } } return { status: limit_reached, messages } }先顺着正常路径读Runtime 把用户任务放进消息列表Runtime 把消息和工具定义交给模型模型返回一条 assistant 消息如果消息中没有 Tool Call本轮运行停止如果有 Tool CallRuntime 校验并执行Tool Result 被放回消息列表下一轮模型看到新结果后继续决定。这一骨架与 pi-agent 的核心循环一致模型产生 assistant 消息其中有工具调用就执行工具并追加结果没有工具调用时循环结束。pi-agent 还处理了流式事件、并行或串行工具、用户中途追加消息、参数校验和中止等生产能力。OpenAI 的 Function Calling 文档描述的也是同一类往返把工具提供给模型接收函数调用在应用侧执行再把带有关联 ID 的函数结果交回模型。不同 SDK 的字段名会变化循环本身没有变。executeChecked为什么不能省模型输出的参数不是可信输入。执行前至少要确认工具存在并按 schema 校验参数async function executeChecked( call: ToolCall, tools: Tool[] ): PromiseToolResultMessage { const tool tools.find(item item.name call.name) if (!tool) { return { role: tool, toolCallId: call.id, name: call.name, output: { code: TOOL_NOT_ALLOWED }, isError: true } } try { const args validate(tool.schema, call.arguments) await enforcePolicy(call.name, args) const output await tool.execute(args) return { role: tool, toolCallId: call.id, name: call.name, output, isError: false } } catch (error) { return { role: tool, toolCallId: call.id, name: call.name, output: normalizeError(error), isError: true } } }这里先展示职责不展开 schema 怎么写、错误结果怎样设计。它们正是第三、四、五篇要继续回答的问题。六、循环停止了不等于任务完成了代码里模型没有返回 Tool Call 时循环就停止。但产品不能因此直接显示“任务已完成”。模型的文字可能是我需要知道问题出现在哪个环境。这时状态应该是waiting_for_user。也可能是目前只能确认接口返回 401尚未取得服务端日志。这更接近incomplete。只有当当前任务要求已经满足产品才应标记completed。因此可以把“循环为何停下”和“任务是否成功”分开运行状态含义completed已交付当前任务要求的结果waiting_for_user缺少信息、授权或确认incomplete已有部分结果但无法继续完成limit_reached达到 Runtime 的时间、轮数或成本限制谁来判断completed没有唯一答案。简单任务可以由模型输出结构化状态再由程序校验必填结果关键任务还可以增加专门验证步骤。这里要记住的是“不再调用工具”只是一条停止信号不是一张完成证明。七、Agent 为什么容易原地打转Agent Loop 给了模型多次尝试的机会也带来了循环风险。最典型的情况是模型重复调用同一个搜索工具工具每次都返回相同空结果模型却没有得到足够信息改变策略。只写一句“不要重复调用”不够。Runtime 至少要提供确定性的保护最大轮数和最长运行时间工具调用次数或成本预算相同工具与参数的重复检测用户取消信号。工具结果也要明确区分“没有找到数据”和“查询失败”。如果所有异常都只返回failed模型很难知道下一步应该换关键词、稍后重试还是请求权限。任务本身则需要可判断的交付要求。“尽可能深入排查”没有自然终点“输出已验证原因、证据和待验证项不修改代码”更容易收口。任务要求帮助模型判断何时可以交付Runtime 限制负责在异常路径上强制止损。两者缺一不可。八、ReAct 与今天的 Tool Calling 是什么关系ReAct 是 Reasoning and Acting 的缩写。论文讨论的关键思想是让推理与面向环境的行动交错发生一次行动取得的新信息会改变后续判断。这正是 Agent Loop 的思想来源之一。但生产系统不必要求模型公开输出下面这种自由文本Thought: 我需要查询登录请求 Action: inspect_network Observation: 请求返回 401现代工具调用通常把 Action 表示为结构化 Tool Call把 Observation 表示为 Tool Result。这样更容易校验参数、关联调用、控制权限和记录运行轨迹。所以ReAct 帮助我们理解“判断与行动为什么要交替”Function Calling 和 Agent Runtime 则给出了更适合工程实现的消息与执行方式。九、这个最小循环会怎样长成完整 Agent现在回看整套课程后面的主题都可以挂到这个循环上后续主题它在解决循环里的什么问题Tool Calling模型怎样表达一次行动请求Tool Schema怎样让模型选对工具、传对参数Tool Result怎样把真实结果清楚地送回下一轮状态管理长任务中哪些消息、步骤和状态需要保存Memory 与 Context哪些历史信息应该在这一轮被模型看到Planning什么时候先规划什么时候根据结果即时行动权限与 Human-in-the-loop哪些动作能自动执行哪些必须停下来确认可观测性与 Eval怎样复盘循环为什么成功或跑偏Sandbox 与安全工具真正执行时怎样限制影响范围前端工程师也能从这条循环找到自己的位置模型和工具产生的事件需要被转成“正在读取文件”“等待确认”“已完成”等可理解状态取消、重试和接管也需要明确交互。后端工程师面对的则是一个带模型决策的任务执行器消息要持久化工具要受控错误要分类运行要能停止和恢复。这一篇不提前解决所有问题。它的作用是给后面每一个工程模块找到准确位置。十、用一个新任务检验是否真的理解不要回看前文试着用自己的话解释下面的过程用户找出首页首屏变慢的原因先不要改代码。然后回答四个问题模型想读取构建产物时谁真正执行动作bundle 分析结果怎样影响下一步“先不要改代码”应该只靠 system prompt 保证吗模型停止调用工具时任务一定完成了吗如果你能回答出下面的意思就已经抓住了最小闭环模型提出 Tool CallRuntime 校验后由工具执行Tool Result 回到消息成为下一轮 Input 的一部分只读限制应随任务传入Runtime 还要真正拦截写工具停止调用只是循环结束产品仍要判断是完成、等待用户还是未完成。这也是一次费曼式检验不仅记得四个名词还能用一个全新的例子重新搭出整个过程。如何学习大模型 AI 由于新岗位的生产效率要优于被取代岗位的生产效率所以实际上整个社会的生产效率是提升的。但是具体到个人只能说是“最先掌握AI的人将会比较晚掌握AI的人有竞争优势”。这句话放在计算机、互联网、移动互联网的开局时期都是一样的道理。我在一线互联网企业工作十余年里指导过不少同行后辈。帮助很多人得到了学习和成长。我意识到有很多经验和知识值得分享给大家也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限很多互联网行业朋友无法获得正确的资料得到学习提升故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】为什么要学习大模型我国在A大模型领域面临人才短缺,数量与质量均落后于发达国家。2023年人才缺口已超百万凸显培养不足。随着AI技术飞速发展预计到2025年,这一缺口将急剧扩大至400万,严重制约我国AI产业的创新步伐。加强人才培养,优化教育体系,国际合作并进是破解困局、推动AI发展的关键。大模型入门到实战全套学习大礼包1、大模型系统化学习路线作为学习AI大模型技术的新手方向至关重要。 正确的学习路线可以为你节省时间少走弯路方向不对努力白费。这里我给大家准备了一份最科学最系统的学习成长路线图和学习规划带你从零基础入门到精通2、大模型学习书籍文档学习AI大模型离不开书籍文档我精选了一系列大模型技术的书籍和学习文档电子版它们由领域内的顶尖专家撰写内容全面、深入、详尽为你学习大模型提供坚实的理论基础。3、AI大模型最新行业报告2025最新行业报告针对不同行业的现状、趋势、问题、机会等进行系统地调研和评估以了解哪些行业更适合引入大模型的技术和应用以及在哪些方面可以发挥大模型的优势。4、大模型项目实战配套源码学以致用在项目实战中检验和巩固你所学到的知识同时为你找工作就业和职业发展打下坚实的基础。5、大模型大厂面试真题面试不仅是技术的较量更需要充分的准备。在你已经掌握了大模型技术之后就需要开始准备面试我精心整理了一份大模型面试题库涵盖当前面试中可能遇到的各种技术问题让你在面试中游刃有余。适用人群第一阶段10天初阶应用该阶段让大家对大模型 AI有一个最前沿的认识对大模型 AI 的理解超过 95% 的人可以在相关讨论时发表高级、不跟风、又接地气的见解别人只会和 AI 聊天而你能调教 AI并能用代码将大模型和业务衔接。大模型 AI 能干什么大模型是怎样获得「智能」的用好 AI 的核心心法大模型应用业务架构大模型应用技术架构代码示例向 GPT-3.5 灌入新知识提示工程的意义和核心思想Prompt 典型构成指令调优方法论思维链和思维树Prompt 攻击和防范…第二阶段30天高阶应用该阶段我们正式进入大模型 AI 进阶实战学习学会构造私有知识库扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架抓住最新的技术进展适合 Python 和 JavaScript 程序员。为什么要做 RAG搭建一个简单的 ChatPDF检索的基础概念什么是向量表示Embeddings向量数据库与向量检索基于向量检索的 RAG搭建 RAG 系统的扩展知识混合检索与 RAG-Fusion 简介向量模型本地部署…第三阶段30天模型训练恭喜你如果学到这里你基本可以找到一份大模型 AI相关的工作自己也能训练 GPT 了通过微调训练自己的垂直大模型能独立训练开源多模态大模型掌握更多技术方案。到此为止大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗为什么要做 RAG什么是模型什么是模型训练求解器 损失函数简介小实验2手写一个简单的神经网络并训练它什么是训练/预训练/微调/轻量化微调Transformer结构简介轻量化微调实验数据集的构建…第四阶段20天商业闭环对全球大模型从性能、吞吐量、成本等方面有一定的认知可以在云端和本地等多种环境下部署大模型找到适合自己的项目/创业方向做一名被 AI 武装的产品经理。硬件选型带你了解全球大模型使用国产大模型服务搭建 OpenAI 代理热身基于阿里云 PAI 部署 Stable Diffusion在本地计算机运行大模型大模型的私有化部署基于 vLLM 部署大模型案例如何优雅地在阿里云私有部署开源大模型部署一套开源 LLM 项目内容安全互联网信息服务算法备案…学习是一个过程只要学习就会有挑战。天道酬勤你越努力就会成为越优秀的自己。如果你能在15天内完成所有的任务那你堪称天才。然而如果你能完成 60-70% 的内容你就已经开始具备成为一名大模型 AI 的正确特征了。这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】