解析 Agent 系统架构:从 ReAct 循环到核心组件调用
很多人把 AI Agent 理解成“更强的大模型”。其实,大模型负责推理,Agent 负责把目标变成一连串可执行、可验证的动作。
当用户说“做一份竞品分析”时,普通 LLM 主要生成文字;Agent 会组织上下文、读取记忆、加载 Skill、调用搜索或数据库,并根据工具结果继续下一轮决策。
这篇文章将沿着 ReAct Loop,拆开 Message、Context、Model、Memory、Skills、Tools、MCP、CLI 和 Sandbox Runtime 的调用关系,再说明这条链路如何观测和排障。
本文根据 2026 年 7 月可查的 ReAct 论文、Anthropic 工程文章、Google Cloud 架构文档、MCP 规范、OpenTelemetry GenAI 语义规范和 OpenAI Agents SDK 文档整理。
一、先分清:LLM、Workflow 和 Agent
“AI Agent = LLM + Memory + Skills + Tools”是一个很好的入门公式,但用它解释生产系统,还缺了几块。
在工程上,更完整的表达是:
Agentic System = LLM 推理引擎 + Message / State 消息与运行状态 + Context 上下文管理 + Memory 记忆系统 + Skills 任务 SOP + Tools / MCP / CLI 外部能力 + Sandbox Runtime 隔离执行环境 + Orchestrator 调度与状态机 + Guardrails 权限与风险控制 + Observability 追踪、评测与告警
还要再分清 Workflow 和 Agent。Anthropic 在《Building Effective Agents》中给了一个很实用的边界:Workflow 按预先编好的路径组织模型和工具;Agent 则由模型动态决定下一步做什么。
| 形态 | 决策方式 | 适合场景 | 主要代价 |
|---|---|---|---|
| 单次 LLM | 一次生成 | 摘要、改写、分类 | 无法主动获取外部状态 |
| Workflow | 代码预设流程 | 审批、稳定报表、固定客服流程 | 灵活性有限 |
| Agent | 模型动态规划和选择工具 | 开放式调研、复杂编程、动态排障 | 延迟、成本和错误传播风险更高 |
所以,不是所有 AI 功能都要做成 Agent。如果任务路径固定、步骤可以预先写死,Workflow 往往更便宜、更稳定,也更容易审计。
只有当任务同时具备下面几个特征时,Agent 才真正值得:
- 步骤无法在开始时完全确定。
- 执行中需要根据外部结果调整计划。
- 有明确的完成条件,或者有人可以在关键节点做判断。
二、一个完整的 Agent 系统长什么样
如果只看一次模型调用,Agent 确实像是“一个会调工具的 LLM”。但把它放到线上环境里,你会很快碰到会话状态、重试、鉴权、并发、成本上限、人工审批和审计等问题。
这时,它的全景架构更接近下图:
各组件的职责可以先用一张表对齐:
| 组件 | 主要职责 | 常见实现 | 出问题时的表现 |
|---|---|---|---|
| LLM / Planner | 理解目标、生成计划、决定下一个动作 | 模型 API、结构化输出、模型路由 | 工具选错、计划漂移、输出不稳定 |
| Message / State | 持久化用户消息、模型动作、工具结果和任务状态 | 事件流、会话库、检查点 | Tool Message 丢失、顺序错乱、任务无法恢复 |
| Context Manager | 在每轮前选择并组装模型需要的信息 | 系统指令、摘要、检索、上下文压缩 | Token 暴涨、重要信息被挤出、旧信息干扰 |
| Memory | 保存会话状态、历史经验和可检索知识 | 缓存、关系库、向量索引、对象存储 | 记错用户偏好、召回过期数据、不同用户串记忆 |
| Skills | 提供可复用的任务方法、步骤和验收标准 | 版本化指令、参考资料、脚本、模板 | 同类任务每次做法不同,质量波动 |
| Tools / MCP / CLI | 读取外部事实,调用 API,或执行命令和脚本 | Function Tool、MCP Server、CLI / Shell | 超时、鉴权失败、重复写入、命令异常 |
| Sandbox Runtime | 在有限文件、网络、进程和资源权限内运行工具 | 本地隔离进程、容器、托管 Sandbox | 越界读写、命令逃逸、资源耗尽、工作区污染 |
| Orchestrator | 管理 ReAct 循环、状态、并发、重试、中断和恢复 | Agent SDK、状态机、工作流引擎、任务队列 | 死循环、任务丢失、状态不一致 |
| Guardrails | 约束输入、工具调用和输出,把高风险操作交给人 | 策略引擎、权限模型、审批流、内容检查 | 越权访问、错误写入、敏感信息泄露 |
| Observability | 还原任务路径,统计性能、成本、质量和风险 | OpenTelemetry、Trace 后端、日志、评测集 | 只知道“失败了”,不知道失败在哪一轮 |
三、ReAct Loop:Agent 是怎么一步步做事的
ReAct 来自 Reasoning + Acting。原始论文的要点是:让模型交替进行推理和行动,再用环境返回的观察结果更新后续计划。
这个思路很像人解决真实问题的方式:先判断下一步,去做,看到结果,再决定是继续还是改道。
3.1 把 ReAct 映射到真实组件调用
ReAct 是逻辑循环,不是完整的运行时。在工程实现中,一次“Reason → Act → Observation”会穿过多个组件:
这里有一个经常被混在一起的概念:Message 是事件,Context 是视图。
Message: 持久化的原始事件 例如 User Message、Assistant Message、Tool Call、Tool MessageContext: 每次调用 Model 前动态组装的输入 它可以包含部分 Message、会话摘要、Memory、Skill、Tool Schema 和环境状态
工具返回的 Observation 不会凭空进入模型。Runtime 需要先把它写成 Tool Message,再由 Context Manager 选入下一轮模型输入。如果这条链断了,Agent 就会忘记工具刚刚返回了什么,然后重复调用同一个工具。
用“竞品分析报告”举例,一次循环可以这样展开:
目标: 完成 A、B、C 三家产品的最新竞品分析第 1 轮: Reason: 需要先确定对比维度和时间范围 Act: 加载“竞品调研 Skill” Observation: 得到产品、价格、客户、渠道、增长五个维度第 2 轮: Reason: 现有记忆只有历史分析,需要补最新信息 Act: 调用网页搜索和官网抓取工具 Observation: 收集到新版发布、官方价格和客户案例第 3 轮: Reason: 外部宣传数据需要和内部数据交叉验证 Act: 调用数仓查询工具 Observation: 获得我方客户流失原因和成交对比第 4 轮: Reason: 证据已覆盖五个维度,但 B 的增长数据来源冲突 Act: 补充检索,并对冲突来源标注可信度 Observation: 冲突无法完全消除,保留两组数据及出处结束: 通过验收标准,生成报告、引用和不确定项清单
3.2 Loop 不能无限跑
生产系统不能只写一个 while not done。每次 Agent 运行都应该有边界:
建议的运行边界: max_turns: 最大循环轮数 max_duration: 整体超时 token_budget: Token 上限 cost_budget: 单任务成本上限 max_tool_retries: 工具重试上限 repeated_action_limit: 相同动作重复次数 approval_policy: 哪些动作必须人工确认 success_criteria: 什么情况才算完成
| 循环故障 | 表面现象 | 系统控制 |
|---|---|---|
| 无限规划 | 每轮都说还要再分析 | 最大轮数 + 明确验收条件 |
| 重复调工具 | 相同工具和参数连续出现 | 动作指纹去重 + 断路器 |
| 上下文膨胀 | 后几轮越来越慢、判断漂移 | 摘要、裁剪、只保留有效 Observation |
| 虚假完成 | 文字已输出,但关键数据没查 | 结构化验收器 + 证据覆盖检查 |
| 重复副作用 | 同一邮件发两次、同一工单建两个 | 幂等键 + 写操作审批 + 结果回读 |
ReAct 的可观测不等于保存模型的全部隐藏思维链。生产中更应该记录结构化决策摘要:当前目标、选了哪个 Skill、为什么调某个工具、工具返回了什么状态、下一步是继续还是停止。
四、核心组件怎么搭建
4.1 LLM 与 Planner:负责决策,不负责一切
LLM 是 Agent 的推理引擎,主要做四件事:理解目标、拆分任务、选择工具、根据 Observation 更新计划。
它不应该直接承担状态持久化、重试、权限校验和成本控制。这些都应该由外部 Runtime 保底。否则,你是在用 Prompt 模拟一个操作系统,稳定性不会太好。
搭建时建议加上这几层:
- 结构化输出:让“下一步动作”符合明确 Schema,不靠解析自然语言猜意图。
- 模型路由:普通分类用轻量模型,复杂规划再切到更强模型。
- 工具白名单:每个 Agent 只看到当前任务需要的工具。
- 结束判定:把“是否完成”和验收标准绑定,不能只相信模型说自己完成了。
4.2 Message 与 Context:一个记录事实,一个组装本轮输入
Message 是 Agent 运行过程中的基本事件单元。一条可追溯的 Message 至少应该带上这些信息:
message_id: 消息唯一 IDconversation_id: 所属会话task_id / trace_id: 所属任务与追踪链路role: user / assistant / tool / systemcontent_type: text / image / tool_call / tool_result / fileparent_id: 上游消息或动作tool_call_id: 将 Tool Call 与 Tool Message 关联起来status: pending / completed / failed / interruptedcreated_at: 事件时间
Context 则是一个短暂存在的“当前工作区”。它不应该等于全部历史消息,而是根据当前目标筛选出来的最小有效信息集。
一次 Model Context 可能包含: 系统指令和安全政策 最近几轮 Message 较早对话的结构化摘要 Memory 召回结果及来源 当前激活的 Skill 指令 本轮允许使用的 Tool Schema Sandbox 中的工作目录、文件摘要和执行状态 剩余轮数、Token、成本和时间预算
Context Manager 的责任是去重、排序、裁剪和标注来源。一个常见错误是“为了不丢信息,把什么都塞进 Context”。最终往往是真正重要的信息被淹没,模型调用还更慢、更贵。
4.3 Memory:不是记得越多越好
Memory 最容易被做成“把历史对话全部向量化”。这种做法上手快,但很快会积累冲突、过期和敏感信息。
更实用的设计是把记忆分层:
| 记忆类型 | 保存内容 | 存储方式 | 生命周期 |
|---|---|---|---|
| Working Memory | 当前任务、已完成步骤、工具结果 | 会话状态、缓存、检查点 | 一次任务或会话 |
| Episodic Memory | 过去的任务经历、用户反馈、成败结果 | 关系库 + 向量索引 | 跨会话,需过期策略 |
| Semantic Memory | 企业知识、文档、产品事实 | 文档库、检索索引、知识图谱 | 跟随数据版本 |
| Procedural Memory | 做事的方法和规范 | Skills、政策、模板 | 版本化发布 |
Google Cloud 的 Agent 架构指南建议,生产系统将会话状态外置,让 Agent Runtime 保持无状态。这样任意实例都能处理用户的下一轮请求,也更容易水平扩容。
真正难的不是“怎么存”,而是两个策略:
写入策略: - 这条信息值得跨会话保留吗? - 是事实、偏好,还是未验证推断? - 来源、时间、置信度和过期时间是什么? - 是否包含敏感信息?召回策略: - 当前任务需要哪一类记忆? - 相关性、时效性和权限是否同时满足? - 新事实和旧记忆冲突时,谁优先?
4.4 Skills:把“会做”变成“稳定地做”
Skill 可以理解为 Agent 的 SOP。它不是一个 API,也不是模型参数,而是一组可被发现和按需加载的任务说明。
| 对比项 | Skill | Tool |
|---|---|---|
| 解决的问题 | 告诉 Agent 怎么做 | 让 Agent 真正执行一个动作 |
| 主要内容 | 步骤、规则、参考资料、模板、脚本 | 名称、描述、输入 Schema、输出 Schema |
| 稳定性来源 | 固定方法和验收标准 | 参数校验和可预期的执行合约 |
| 例子 | 竞品分析流程、故障排查手册 | 网页搜索、数据库查询、发邮件 |
一个可用的 Skill 通常包含:
Skill 结构: metadata: 名称、用途、触发条件、版本 instructions: 执行步骤和决策规则 references: 专业知识、范例、输出标准 scripts: 可重复执行的确定性逻辑 assets: 模板、样式、配置和输出素材 acceptance: 完成条件和验收清单 evals: 回归样例和质量指标
它的生命周期可以设计为:发现 Skill → 按需加载 → 按 SOP 规划 → 调工具执行 → 按验收标准检查 → 将失败样例进入评测集。
Skill 不应默认在每次执行后自动修改自己的 Prompt。更稳妥的做法是:收集失败 Trace,构建回归评测,修改 Skill,通过评测和人工审核后再发布新版本。否则 SOP 会在无人知道的情况下漂移。
4.5 Tools、MCP 与 CLI:三者不在同一个层级
工具是 Agent 和外部世界交互的边界。一个工具的质量,不只取决于 API 能不能调通,还取决于模型能否理解它。
MCP 和 CLI 都可以把能力交给 Agent,但它们解决的问题不同:
| 类型 | 它是什么 | 适合的能力 | 主要风险 |
|---|---|---|---|
| Function / API Tool | 应用内部定义的函数或 API 合约 | 查订单、算价格、创建工单 | Schema 变更、鉴权和重复写入 |
| MCP Tool | 通过标准协议发现和调用的远程或本地工具 | SaaS、数据库、设计稿、监控系统 | 能力协商、远程授权、服务信任 |
| CLI / Shell Tool | 把命令行程序包装成可调用能力 | Git、构建、测试、数据处理、运维脚本 | 命令注入、文件越界、网络外连、资源耗尽 |
| Computer Tool | 鼠标、键盘、浏览器或桌面操作 | 无 API 的旧系统和图形界面 | 界面漂移、误点、敏感信息暴露 |
CLI 本身不是 Sandbox。它只提供“运行哪条命令”的入口。命令可以跑在宿主机、容器或托管环境中,真正决定能读哪些文件、能否访问网络、用哪个系统身份的,是后面的 Sandbox Runtime。
实用的工具合约至少应该有:
Tool Contract: name: 简短、唯一、可理解 description: 什么时候用,什么时候不要用 input_schema: 参数类型、枚举、必填项、范围 output_schema: 状态、结果、错误码、数据来源 timeout: 单次超时 retry_policy: 哪些错误可重试 idempotency: 写操作如何防止重复执行 auth_scope: 使用哪个身份,允许访问什么 side_effect: 是否会写数据、发消息或改变系统状态
MCP 不负责让 Agent 变聪明。它解决的是连接标准化问题。
按 MCP 官方架构,它由 Host、Client 和 Server 组成。Host 负责管理权限、用户授权和上下文;每个 Client 与一个 Server 保持独立会话;Server 向外暴露 Prompts、Resources 和 Tools。
| MCP 原语 | 控制方 | 作用 |
|---|---|---|
| Prompts | 用户选择 | 可复用的交互模板和指令 |
| Resources | 应用管理 | 文件、Git 历史、数据库内容等上下文 |
| Tools | 模型选择 | 查询、写入、调 API 等可执行动作 |
这里的安全边界很重要:MCP Server 暴露了一个工具,不等于 Agent 就应该在任何场景下使用它。真正的授权、审批和审计仍然要由 Host 和业务系统负责。
4.6 Sandbox Runtime:给 Agent 一个可操作、但不能乱跑的工作区
当 Agent 只是查 API 时,工具鉴权已经能解决大部分风险。但当它可以读文件、改代码、运行测试和安装依赖时,就需要一个明确的 Sandbox Runtime。
一个完整的 Sandbox 至少要管住下面这些边界:
Filesystem: 可读目录、可写目录、禁止路径、挂载方式Process: 运行用户、允许命令、子进程数量、系统调用Network: 默认禁用、域名白名单、端口、出站审计Resources: CPU、内存、磁盘、执行时间、输出大小Secrets: 短时凭证、域名绑定注入、禁止输出到日志Lifecycle: 创建、快照、恢复、销毁、产物导出
对代码 Agent,一个很实用的权限梯度是:
| 模式 | 允许能力 | 适合场景 |
|---|---|---|
| Read Only | 读项目、搜索、运行无副作用分析 | 理解代码、审查、排障 |
| Workspace Write | 只修改任务工作区,外部路径不可写 | 开发功能、生成文档、运行测试 |
| Elevated / Approved | 在明确审批后扩大网络、文件或系统权限 | 安装依赖、访问受限服务、发布操作 |
OpenAI Agents SDK 的 Sandbox Agents 也采用类似分层:用 Manifest 定义工作区,用 Capabilities 挂载 Shell、Filesystem、Skills 等能力,再用运行配置选择本地、容器或托管 Sandbox。具体框架会变,但“工作区声明、能力绑定、运行时选择”这个分层很值得保留。
4.7 Orchestrator:Agent 系统里的“交通指挥”
Orchestrator 把一次模型调用变成一个可恢复、可中断、可审计的任务。
它应该负责:
- 创建任务 ID,维护状态机和当前轮次。
- 在每次工具调用前做参数校验、权限检查和预算检查。
- 管理超时、重试、并发上限、断路器和降级策略。
- 保存检查点,让长任务在进程重启后继续。
- 在付款、删除、发送和生产变更前暂停,等待人工确认。
- 将每一轮写入同一条 Trace,并在结束时记录完成原因。
当一个 Agent 的上下文太大,或者子任务可以独立验收时,可以引入 Orchestrator-Workers。中心 Agent 负责拆解和汇总,Worker 只处理一个有边界的子任务。
不过,多 Agent 不应该成为默认选项。只有当单 Agent 已经因为上下文、专业边界或并行处理出现明确瓶颈时,增加 Worker 才有意义。
4.8 Guardrails:不要把安全写成一句 Prompt
“请勿执行危险操作”不是完整的安全设计。生产系统至少需要三层 Guardrails:
| 阶段 | 检查内容 | 处理方式 |
|---|---|---|
| Input Guardrail | 意图、数据分类、提示注入、用户权限 | 拒绝、脱敏、缩小工具集 |
| Tool Guardrail | 参数、资源范围、副作用、幂等性 | 校验、审批、改写或阻断调用 |
| Output Guardrail | 事实依据、敏感数据、格式、合规和完成条件 | 重新生成、降级、交给人工 |
对有副作用的工具,最小权限、短时凭证、显式审批、幂等键和审计日志应该同时存在。这些都是确定性系统的工作,不应交给模型“自觉遵守”。
五、Agentic 架构怎么做全链路可观测
传统应用的一次请求,常常是 API 进来,查库,返回。Agent 的一次请求可能包含十几轮模型调用、多个工具、数次记忆检索、一次人工审批和两次降级重试。
只记一行“Agent 执行失败”,几乎没有用。
可观测的最小单位应该是:一个用户目标对应一条 Trace,其中每个 Agent 轮次、LLM 生成、记忆读写、Skill 加载、工具调用、Guardrail 和 Handoff 都是一个 Span。
trace: competitor-analysis / task-8f3a span: agent.invoke span: message.append / user span: context.assemble span: message.select span: memory.retrieve span: skill.load / competitor-research@2.3.0 span: llm.generate / turn-1 span: tool.execute / mcp-web-search span: message.append / tool-result span: llm.generate / turn-2 span: tool.execute / cli-analyze-data span: guardrail.check / sandbox-policy span: sandbox.command / python analyze.py span: human.approval / export-customer-data span: output.validate / evidence-coverage span: memory.write / task-summary
OpenAI Agents SDK 的内置 Tracing 会记录 LLM Generation、Tool Call、Handoff、Guardrail 和自定义事件。OpenTelemetry 的 GenAI 语义规范则提供了更通用的字段,例如 invoke_agent、chat、execute_tool、retrieval、模型名称、Token 用量和对话 ID。
这套 GenAI 语义规范仍在演进。生产系统应锁定 Schema 版本,在采集端做兼容处理,避免同一看板混用不同版本的 Span 名和字段。
5.1 每个组件应该监控什么
| 组件 | 必看指标 | 需要回答的问题 |
|---|---|---|
| 端到端任务 | 完成率、P50/P95 延迟、单次成本、人工介入率 | 用户的目标最终达成了吗? |
| LLM | 首 Token 延迟、总延迟、输入/输出 Token、结构化输出合法率、模型错误 | 慢在模型,还是慢在前后处理? |
| Message / State | 写入延迟、顺序冲突、Tool Call 与 Tool Message 未配对数、中断状态恢复率 | 消息是否完整、有序、可恢复? |
| Context | 上下文总 Token、各来源占比、裁剪量、压缩次数 | 哪块信息正在吃掉上下文? |
| Memory | 召回数、相关性、时效性、空召回率、冲突率、写入拒绝率 | Agent 是没记住,还是记错了? |
| Skills | 触发准确率、版本、步骤跳过率、验收通过率、版本回归 | 选对 SOP 了吗?是否按步骤做完? |
| Tools / CLI | 选择准确率、成功率、P95 延迟、超时、退出码、重试率、幂等命中率 | 是工具选错,命令失败,还是外部服务异常? |
| MCP | 连接成功率、初始化延迟、能力协商失败、工具发现数量、传输错误 | 工具没出现,是协议、连接还是权限问题? |
| Sandbox | 启动延迟、执行时间、CPU/内存/磁盘峰值、文件变更数、越权拒绝、网络拦截 | 命令被限制是正常保护,还是 Sandbox 配置错了? |
| Orchestrator | 循环轮数、重复动作率、中断/恢复率、队列等待、Handoff 数量 | Agent 是在推进任务,还是原地打转? |
| Guardrails | 阻断率、人工审批率、审批等待、误报/漏报率 | 安全策略是在保护系统,还是阻塞正常任务? |
| Evaluation | 事实性、引用覆盖、任务成功、用户反馈、人工抽检分 | 系统运行成功,不等于结果真的有用 |
5.2 不要只建一块“Token 看板”
一套能支持排障的看板,至少应该有四层:
第 1 层:业务结果 任务完成率、成功单次成本、用户采纳率、人工接管率第 2 层:Agent Workflow 端到端延迟、循环轮数、结束原因、重试、Handoff、预算耗尽第 3 层:组件运行 Model、Message、Context、Memory、Skill、Tool、MCP、Sandbox、Guardrail 的成功率和延迟第 4 层:基础设施 CPU、内存、队列积压、连接池、缓存、数据库、网络错误
一个很有用的成本指标是:
Cost per Successful Task = Agent 总成本 / 真正完成的任务数
只看“平均 Token”很容易被误导。一个便宜但经常失败的 Agent,可能比一个单次稍贵但完成率高的 Agent 更烧钱。
5.3 哪些情况应该立即告警
| 告警条件 | 可能原因 | 第一步处理 |
|---|---|---|
| 同一工具和参数连续调用 | 死循环或 Observation 没有进入上下文 | 中断任务,保存 Trace 和当前状态 |
| 单任务 Token 或成本突增 | 上下文膨胀、重试过多、模型路由异常 | 触发预算上限,检查 Context Span |
| Tool 成功率突降 | 上游服务、鉴权或 Schema 变更 | 断路,切降级工具或人工流程 |
| Memory 空召回率异常 | 索引延迟、权限过滤过度、检索查询漂移 | 比较检索 Query 和数据源版本 |
| Guardrail 阻断率猛增 | 攻击流量、策略变更或误报 | 按策略版本和用户群分析 |
| Trace 突然缺少某类 Span | 埋点丢失或某组件被绕过 | 把“可观测完整性”本身做成监控指标 |
| Tool Call 长时间没有对应 Tool Message | 执行结果丢失、回调失败或任务中断 | 标记当前轮次异常,从检查点恢复 |
| Sandbox 越权拒绝突增 | 任务边界改变、工具命令漂移或攻击 | 保持拒绝,检查工作区与权限配置 |
5.4 数据越详细,隐私风险越大
Agent Trace 可能包含用户原始输入、系统指令、记忆片段、工具参数、数据库结果和模型输出。这些数据对排障很有用,也可能直接包含个人信息、商业数据和访问凭证。
因此要明确:
- 哪些环境允许记录原始内容,哪些只记元数据。
- 敏感字段在采集前脱敏,不要等进了日志库再处理。
- Trace 和业务数据使用不同的保留周期和访问权限。
- 采用抽样策略:失败、高风险和高延迟任务保留完整 Trace,普通成功任务可降低采样率。
- 密钥、Token 和完整凭证永远不进入 Prompt、Span 或普通日志。
OpenAI Agents SDK 的 Tracing 文档也特别提醒,Generation 和 Function Tool Span 可能包含敏感输入输出,应根据数据策略决定是否采集这些内容。
5.5 可观测还要连上评测
Trace 可以回答“发生了什么”,但不能单独回答“结果好不好”。
一套完整机制需要把线下评测和线上观测接起来:
线下: 固定评测集 工具选择准确率 Skill 版本回归 Memory 检索相关性 输出事实性与格式检查线上: 真实任务完成率 用户修改率和采纳率 异常 Trace 抽样 人工质检 告警和事故回放闭环: 失败 Trace → 归因到 Model / Memory / Skill / Tool / Runtime → 加入评测集 → 修改组件 → 回归通过 → 灰度发布
六、一套可落地的 Agentic 参考技术栈
技术栈可以换,边界最好不要混。下面这套分层,可以映射到不同云厂商和 Agent 框架:
| 层级 | 职责 | 可选实现 |
|---|---|---|
| 接入层 | API、会话、鉴权、流式输出、限流 | Web / App / IM + API Gateway |
| Agent Runtime | ReAct Loop、工具调度、Handoff、Guardrail | OpenAI Agents SDK、Google ADK、状态机或自研 Runtime |
| Durable Workflow | 长任务、定时、重试、检查点、人工审批 | 工作流引擎 + 任务队列 |
| Model Gateway | 模型路由、配额、缓存、降级、成本分摊 | 统一模型 API 封装 |
| Message / State | 会话消息、Tool Call 关联、任务状态和检查点 | 事件库 / 关系库 / 消息队列 |
| Context / Memory | 上下文组装、摘要、知识检索、历史经验 | Redis / 关系库 / 向量索引 / 对象存储 |
| Skills Registry | Skill 发现、版本、依赖、回归样例 | Git 仓库 + 元数据索引 + 发布流程 |
| Tool Gateway | 工具注册、Schema、鉴权、审批、限流、幂等 | Function Tools / MCP Host / CLI Adapter / API Management |
| Sandbox Runtime | 工作区、Shell、文件、网络、资源和快照管理 | 本地隔离 / 容器 / 托管 Sandbox |
| Observability | Trace、Metric、Log、成本、评测、告警 | OpenTelemetry + Trace/Metric/Log 后端 |
| Security | 最小权限、秘密管理、沙箱、审计 | IAM / Policy Engine / Secrets / Sandbox |
对一个新项目,我更推荐的是“单 Agent + 少量工具 + 外置状态 + 全链路 Trace”。这套组合已经能覆盖大多数办公自动化、数据分析和企业知识库场景。
如果一开始就加入十几个 Agent、几十个工具和自动记忆写入,很多时候你还没看到业务价值,先得到了一套难以定位的分布式系统。
七、从 0 到 1,建议分四个阶段
7.1 第一阶段:先跑通单 Agent 闭环
只选一个高价值任务,限制在 1 到 3 个只读工具内,定义清晰的成功条件。先不做长期记忆,不做多 Agent,也不让它直接改生产数据。
必须同时接入 Trace。可观测不是上线前才补的运维工作,而是调试 Agent 行为的开发工具。
7.2 第二阶段:把稳定做法沉淀为 Skills
当你从 Trace 中发现一类任务总在重复同样的步骤,再把它写成 Skill。
为 Skill 增加版本、验收标准和回归样例。每次修改前后,都用同一批任务比较完成率、工具选择和成本。
7.3 第三阶段:再加长期记忆和写操作
先把记忆写入政策、过期机制、用户隔离和删除机制定义好,再让 Agent 跨会话保留信息。
对写操作加上幂等、预览、审批和回读验证。它可以先生成一封邮件草稿,但在发送之前应该让人看到收件人、主题和正文。
7.4 第四阶段:有明确瓶颈时再做多 Agent
多 Agent 适合专业边界清晰、可以并行、子任务能独立验收的场景。例如调研 Agent 收集资料,数据 Agent 跑查询,报告 Agent 负责写作,最后由 Orchestrator 检查引用和冲突。
每个 Worker 都要有独立 Span、输入输出 Schema、预算和超时。否则多 Agent 只是把一个难排的故障分成了几个更难排的故障。
八、上线前的 Agentic 架构检查清单
任务设计: - [ ] 为什么这个场景需要 Agent,而不是普通 Workflow? - [ ] 完成条件和失败条件是否可判定? - [ ] 是否设置轮数、时间、Token 和成本上限?组件设计: - [ ] User / Assistant / Tool Message 是否能按 ID 完整关联? - [ ] Context 是否只加载当前任务必需信息? - [ ] Memory 是否有写入、过期、隔离和删除策略? - [ ] Skill 是否有版本、验收标准和回归样例? - [ ] MCP / CLI Tool 是否有 Schema、超时、错误码、幂等和权限边界? - [ ] CLI 是否运行在明确的 Sandbox 和工作区中? - [ ] Sandbox 是否限制文件、网络、进程、资源和凭证? - [ ] 高风险动作是否需要人工审批?可观测: - [ ] 一个用户目标是否能用同一 Trace ID 串起来? - [ ] Model、Message、Context、Memory、Skill、Tool、MCP、Sandbox、Guardrail 是否都有 Span? - [ ] 是否能从业务失败一直下钻到具体组件? - [ ] 是否监控成功单次成本,而不只是 Token? - [ ] Trace 内容是否脱敏,并设置保留周期和访问权限?评测与发布: - [ ] 失败 Trace 是否会进入回归评测集? - [ ] Model、Prompt、Skill、Tool Schema 变更后是否重跑评测? - [ ] 新版本是否支持灰度、对比和回滚?
九、真正的 Agent 能力,长在系统里
Agent 最吸引人的瞬间往往是模型自己打开网页、调工具、改代码。但一套 Agentic 架构能不能长期跑,看的是更朴素的事:状态能不能恢复,工具有没有幂等,记忆会不会串用户,危险动作是否会暂停,失败后能不能回放。
大模型决定了 Agent 的能力上限,而 Message、Context、Memory、Skills、Tools、Sandbox、Runtime、Guardrails 和 Observability 决定了这个上限能否稳定地变成结果。
所以,Agent 的本质不是一个“更会聊天的模型”。它是一套以模型为决策引擎、以工具为行动边界、以反馈循环推进任务,并且可以被限制、观测、评估和审计的软件系统。
当我们开始用系统工程的方式设计 Agent,才算真正从“让 AI 回答问题”走到“让 AI 负责一段可验证的工作”。
学AI大模型的正确顺序,千万不要搞错了
🤔2026年AI风口已来!各行各业的AI渗透肉眼可见,超多公司要么转型做AI相关产品,要么高薪挖AI技术人才,机遇直接摆在眼前!
有往AI方向发展,或者本身有后端编程基础的朋友,直接冲AI大模型应用开发转岗超合适!
就算暂时不打算转岗,了解大模型、RAG、Prompt、Agent这些热门概念,能上手做简单项目,也绝对是求职加分王🔋

📝给大家整理了超全最新的AI大模型应用开发学习清单和资料,手把手帮你快速入门!👇👇
学习路线:
✅大模型基础认知—大模型核心原理、发展历程、主流模型(GPT、文心一言等)特点解析
✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑
✅开发基础能力—Python进阶、API接口调用、大模型开发框架(LangChain等)实操
✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用
✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代
✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经
以上6大模块,看似清晰好上手,实则每个部分都有扎实的核心内容需要吃透!
我把大模型的学习全流程已经整理📚好了!抓住AI时代风口,轻松解锁职业新可能,希望大家都能把握机遇,实现薪资/职业跃迁~
这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

更多推荐




所有评论(0)