AI Agent 是怎么跑起来的:从 Agent Loop 到 MCP 的架构拆解

AI Agent 是怎么跑起来的:从 Agent Loop 到 MCP 的架构拆解

聊天模型干不了的活

先看一个任务:

帮我排查今天早上 user-service 接口变慢的原因,并把结果发给负责人。

这类请求没有固定答案。先查监控、日志还是 Heap Dump,要看前一步拿到了什么证据;即使已经发现了慢 SQL,还得判断要不要继续查执行计划、怎样组织结论、是否可以发出通知。

把这句话丢给聊天模型,会得到一份很漂亮的排查清单------先看监控,再看慢 SQL,必要时查 Heap Dump。然后呢?没有然后了。清单躺在聊天窗口里,监控要自己打开 Grafana,日志要自己 grep,邮件要自己写。

这就是聊天模型和 Agent 的分界线:前者生成关于任务的描述,后者把任务本身做完。要完成任务,模型需要选择工具、读取工具结果,再据此决定下一步或结束。AI Agent 处理的正是这段连续的决策与执行过程。

Agent = LLM + Planning + Memory + Tools

先给一个不绕弯的定义:AI Agent 是能感知环境、决策并执行动作的软件系统。LLM 负责意图理解和决策,工具负责外部操作,记忆负责保存当前任务和历史信息。与只生成回复的聊天机器人相比,它会在任务过程中持续观察和调整,直到结束条件满足。

业内常用的拆分方式是四件套:

text 复制代码
Agent = LLM + Planning + Memory + Tools

对应的架构关系如下:
#mermaid-svg-MZxejf0pU0lI36eX{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-MZxejf0pU0lI36eX .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-MZxejf0pU0lI36eX .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-MZxejf0pU0lI36eX .error-icon{fill:#552222;}#mermaid-svg-MZxejf0pU0lI36eX .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-MZxejf0pU0lI36eX .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-MZxejf0pU0lI36eX .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-MZxejf0pU0lI36eX .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-MZxejf0pU0lI36eX .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-MZxejf0pU0lI36eX .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-MZxejf0pU0lI36eX .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-MZxejf0pU0lI36eX .marker{fill:#333333;stroke:#333333;}#mermaid-svg-MZxejf0pU0lI36eX .marker.cross{stroke:#333333;}#mermaid-svg-MZxejf0pU0lI36eX svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-MZxejf0pU0lI36eX p{margin:0;}#mermaid-svg-MZxejf0pU0lI36eX .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-MZxejf0pU0lI36eX .cluster-label text{fill:#333;}#mermaid-svg-MZxejf0pU0lI36eX .cluster-label span{color:#333;}#mermaid-svg-MZxejf0pU0lI36eX .cluster-label span p{background-color:transparent;}#mermaid-svg-MZxejf0pU0lI36eX .label text,#mermaid-svg-MZxejf0pU0lI36eX span{fill:#333;color:#333;}#mermaid-svg-MZxejf0pU0lI36eX .node rect,#mermaid-svg-MZxejf0pU0lI36eX .node circle,#mermaid-svg-MZxejf0pU0lI36eX .node ellipse,#mermaid-svg-MZxejf0pU0lI36eX .node polygon,#mermaid-svg-MZxejf0pU0lI36eX .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-MZxejf0pU0lI36eX .rough-node .label text,#mermaid-svg-MZxejf0pU0lI36eX .node .label text,#mermaid-svg-MZxejf0pU0lI36eX .image-shape .label,#mermaid-svg-MZxejf0pU0lI36eX .icon-shape .label{text-anchor:middle;}#mermaid-svg-MZxejf0pU0lI36eX .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-MZxejf0pU0lI36eX .rough-node .label,#mermaid-svg-MZxejf0pU0lI36eX .node .label,#mermaid-svg-MZxejf0pU0lI36eX .image-shape .label,#mermaid-svg-MZxejf0pU0lI36eX .icon-shape .label{text-align:center;}#mermaid-svg-MZxejf0pU0lI36eX .node.clickable{cursor:pointer;}#mermaid-svg-MZxejf0pU0lI36eX .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-MZxejf0pU0lI36eX .arrowheadPath{fill:#333333;}#mermaid-svg-MZxejf0pU0lI36eX .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-MZxejf0pU0lI36eX .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-MZxejf0pU0lI36eX .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-MZxejf0pU0lI36eX .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-MZxejf0pU0lI36eX .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-MZxejf0pU0lI36eX .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-MZxejf0pU0lI36eX .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-MZxejf0pU0lI36eX .cluster text{fill:#333;}#mermaid-svg-MZxejf0pU0lI36eX .cluster span{color:#333;}#mermaid-svg-MZxejf0pU0lI36eX div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-MZxejf0pU0lI36eX .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-MZxejf0pU0lI36eX rect.text{fill:none;stroke-width:0;}#mermaid-svg-MZxejf0pU0lI36eX .icon-shape,#mermaid-svg-MZxejf0pU0lI36eX .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-MZxejf0pU0lI36eX .icon-shape p,#mermaid-svg-MZxejf0pU0lI36eX .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-MZxejf0pU0lI36eX .icon-shape .label rect,#mermaid-svg-MZxejf0pU0lI36eX .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-MZxejf0pU0lI36eX .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-MZxejf0pU0lI36eX .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-MZxejf0pU0lI36eX :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 选择动作
Observation
用户意图
Planning

推理与规划
Memory

短期上下文 / 长期记忆
Tools

工具执行
外部环境

API / 数据库 / 文件系统

四个组件各自的职责边界值得展开说清楚。

**Planning(推理与规划)**决定下一步的目标与动作。LLM 根据当前任务状态拆解目标,Chain-of-Thought 这类提示技术把推理过程拆成步骤,减少模型直接给出未经展开的结论。

**Memory(记忆)**分两层。短期记忆通常就是上下文历史,维持任务连续性;长期记忆一般由向量数据库或知识图谱等外部存储承担,负责检索过去积累的信息。长任务跑久了上下文被截断,模型"失忆",本质就是短期记忆超出了窗口预算,而没有把关键状态沉淀到长期记忆里。

**Tools(工具)**负责查询数据、调用 API、读写文件或执行代码。这里有一个新手最容易忽略的点:工具的执行结果必须追加进上下文,成为下一轮的 Observation。否则模型看不到外部操作的反馈,后续动作也就无从判断------很多自己撸 Agent Demo 的人卡在"工具明明执行成功了,模型却像没看见一样",问题就出在这里。

Agent Loop:一切框架的底层

Agent 的执行核心是一个循环:每轮先由 LLM 根据上下文选择动作,再执行工具并写回结果;任务完成或命中停止条件时退出。

LangChain、LlamaIndex、Spring AI 这些框架的封装各不相同,但底层都绕不开这条 Loop:
#mermaid-svg-Jdnr7D9Ir3P8ZLOA{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-Jdnr7D9Ir3P8ZLOA .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-Jdnr7D9Ir3P8ZLOA .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-Jdnr7D9Ir3P8ZLOA .error-icon{fill:#552222;}#mermaid-svg-Jdnr7D9Ir3P8ZLOA .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-Jdnr7D9Ir3P8ZLOA .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-Jdnr7D9Ir3P8ZLOA .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-Jdnr7D9Ir3P8ZLOA .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-Jdnr7D9Ir3P8ZLOA .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-Jdnr7D9Ir3P8ZLOA .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-Jdnr7D9Ir3P8ZLOA .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-Jdnr7D9Ir3P8ZLOA .marker{fill:#333333;stroke:#333333;}#mermaid-svg-Jdnr7D9Ir3P8ZLOA .marker.cross{stroke:#333333;}#mermaid-svg-Jdnr7D9Ir3P8ZLOA svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-Jdnr7D9Ir3P8ZLOA p{margin:0;}#mermaid-svg-Jdnr7D9Ir3P8ZLOA .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-Jdnr7D9Ir3P8ZLOA .cluster-label text{fill:#333;}#mermaid-svg-Jdnr7D9Ir3P8ZLOA .cluster-label span{color:#333;}#mermaid-svg-Jdnr7D9Ir3P8ZLOA .cluster-label span p{background-color:transparent;}#mermaid-svg-Jdnr7D9Ir3P8ZLOA .label text,#mermaid-svg-Jdnr7D9Ir3P8ZLOA span{fill:#333;color:#333;}#mermaid-svg-Jdnr7D9Ir3P8ZLOA .node rect,#mermaid-svg-Jdnr7D9Ir3P8ZLOA .node circle,#mermaid-svg-Jdnr7D9Ir3P8ZLOA .node ellipse,#mermaid-svg-Jdnr7D9Ir3P8ZLOA .node polygon,#mermaid-svg-Jdnr7D9Ir3P8ZLOA .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-Jdnr7D9Ir3P8ZLOA .rough-node .label text,#mermaid-svg-Jdnr7D9Ir3P8ZLOA .node .label text,#mermaid-svg-Jdnr7D9Ir3P8ZLOA .image-shape .label,#mermaid-svg-Jdnr7D9Ir3P8ZLOA .icon-shape .label{text-anchor:middle;}#mermaid-svg-Jdnr7D9Ir3P8ZLOA .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-Jdnr7D9Ir3P8ZLOA .rough-node .label,#mermaid-svg-Jdnr7D9Ir3P8ZLOA .node .label,#mermaid-svg-Jdnr7D9Ir3P8ZLOA .image-shape .label,#mermaid-svg-Jdnr7D9Ir3P8ZLOA .icon-shape .label{text-align:center;}#mermaid-svg-Jdnr7D9Ir3P8ZLOA .node.clickable{cursor:pointer;}#mermaid-svg-Jdnr7D9Ir3P8ZLOA .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-Jdnr7D9Ir3P8ZLOA .arrowheadPath{fill:#333333;}#mermaid-svg-Jdnr7D9Ir3P8ZLOA .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-Jdnr7D9Ir3P8ZLOA .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-Jdnr7D9Ir3P8ZLOA .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-Jdnr7D9Ir3P8ZLOA .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-Jdnr7D9Ir3P8ZLOA .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-Jdnr7D9Ir3P8ZLOA .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-Jdnr7D9Ir3P8ZLOA .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-Jdnr7D9Ir3P8ZLOA .cluster text{fill:#333;}#mermaid-svg-Jdnr7D9Ir3P8ZLOA .cluster span{color:#333;}#mermaid-svg-Jdnr7D9Ir3P8ZLOA div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-Jdnr7D9Ir3P8ZLOA .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-Jdnr7D9Ir3P8ZLOA rect.text{fill:none;stroke-width:0;}#mermaid-svg-Jdnr7D9Ir3P8ZLOA .icon-shape,#mermaid-svg-Jdnr7D9Ir3P8ZLOA .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-Jdnr7D9Ir3P8ZLOA .icon-shape p,#mermaid-svg-Jdnr7D9Ir3P8ZLOA .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-Jdnr7D9Ir3P8ZLOA .icon-shape .label rect,#mermaid-svg-Jdnr7D9Ir3P8ZLOA .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-Jdnr7D9Ir3P8ZLOA .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-Jdnr7D9Ir3P8ZLOA .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-Jdnr7D9Ir3P8ZLOA :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 直接回复
调用工具


初始化

System Prompt + 工具列表 + 用户请求
LLM 决策
输出结果,退出
执行工具调用
结果作为 Observation 写回上下文
达到最大轮次

或 Token 上限?
强制终止

几个工程细节:

  • 最大迭代轮次通常设在 10 到 20 轮,也可以按 Token 消耗终止。这个边界的作用是阻止错误判断把任务带进无限循环------2023 年 AutoGPT 那批早期尝试,翻车翻得最惨的就是这个。
  • 上下文会随每轮结果持续变长。关键信息被稀释后,模型更容易跑偏。Context Engineering 处理的正是筛选和组织这些信息的问题,后面单独讲。

落地一个 Agent,最少要搞定三层

抛开框架的抽象,自己搭一套 Agent 系统,代码组织上跑不掉三层:

第一层:LLM Call 。处理 OpenAI、Anthropic、Hugging Face 等接口差异,以及流式输出、Token 截断和重试。这层没什么技术含量,但接口版本变更和限流策略会持续消耗维护精力。

第二层:Tools Call 。把 Function Calling、MCP、Skills,以及文件读写、网页搜索、代码沙箱和第三方 API 接给模型。外部能力是否可用、返回什么格式,都会直接影响下一轮决策------工具超时返回空值和返回结构化错误,模型的后续行为完全不同。

第三层:Context Engineering 。组织传给模型的 Prompt、动态记忆、会话状态和工具描述。上下文缺少任务所需信息,或混入太多无关内容时,即使模型本身能力足够,任务也可能无法推进。

第三层最容易被轻视。很多人把精力全砸在选模型和调 Prompt 上,结果 Agent 跑偏的原因是上下文里堆了三轮前的过期观察结果。

工具接入的三级台阶

Agent 想准确调用外部工具,绕不开两个东西:OpenAI Schema 和 MCP。一句话概括分工:OpenAI Schema 解决数据格式问题,MCP 解决通信接入问题。

第一级:Function Calling Schema------描述工具

外部工具可以很复杂,但 LLM 推理时只认结构化描述。现在主流的数据格式基本都在向 OpenAI Function Calling Schema 靠拢,Anthropic、Google 这些厂商也都支持类似形式。它用 JSON Schema 描述工具名称、用途、参数类型和必填字段。

以一个后端排障场景常见的工具为例:

json 复制代码
{
  "type": "function",
  "function": {
    "name": "query_slow_sql",
    "description": "查指定微服务在特定时间段的慢 SQL 日志。服务响应慢、数据库超时、CPU 飙升的时候用这个。如果用户问的是网络或内存问题,别调这个。",
    "parameters": {
      "type": "object",
      "properties": {
        "service_name": {
          "type": "string",
          "description": "服务名,比如 user-service、order-service"
        },
        "time_range": {
          "type": "string",
          "description": "时间范围,格式 HH:MM-HH:MM,比如 09:00-09:30"
        },
        "threshold_ms": {
          "type": "integer",
          "description": "慢 SQL 判定阈值(毫秒),默认 1000"
        }
      },
      "required": ["service_name", "time_range"]
    }
  }
}

注意 description 的写法:同时给出适用和不适用的条件。慢 SQL 查询工具明确排除了网络和内存问题,模型就不会在方向不符时调用它。模型是否调用工具、怎样填写参数,主要依据就是这段描述------这块省了力气,后面会双倍还回来。

第二级:MCP------统一接入协议

Schema 描述了工具长什么样,但工具怎么接进宿主程序是另一个问题。在 MCP 出现之前,开发者要在代码里手动维护一堆映射:

text 复制代码
工具名称 → 实际执行函数 + JSON Schema 描述

接一个新工具,就写一堆胶水代码。工具越多,维护越难。

Anthropic 在 2024 年 11 月推出 MCP(Model Context Protocol),提供了一套基于 JSON-RPC 2.0 的统一通信协议,经常被叫作 AI 领域的"USB-C 接口"。外部系统通过 MCP Server 暴露能力,宿主程序连接 Server 后自动发现并注册工具,AI 应用和底层外部代码就此解耦。

MCP 定义了三类标准原语:

原语类型 作用 例子
Tools LLM 主动调用的函数 查询数据库、发送邮件、执行代码
Resources Agent 按需读取的只读数据 本地文件、数据库记录、日志流
Prompts 可复用的提示词模板 代码审查模板、故障报告模板
一个容易混淆的点:MCP Server 对外暴露工具时,内部仍然用 JSON Schema 描述参数规范。JSON Schema 是数据格式,MCP 是通信协议层,两者是互补关系,不是替代关系。

第三级:Skills------封装经验

Schema 和 MCP 解决的是单个工具的接入,但一次真实的慢查询排查往往需要依次读日志、运行分析脚本、再按团队规范组织建议。如果每次都让 Agent 临时规划这条链路,步骤和输出都难以稳定复用。

Skill 用可按需加载的指令文件保存这条执行链的顺序、约束条件和踩坑记录。宿主判断任务匹配后,才把相关内容放入上下文。常见的封装方式有两种:

传统 Toolkits(黑盒) :在代码中把多个原子工具组合成高阶工具,对外只暴露 JSON Schema,LLM 看不到内部路径。适合逻辑固定、需要减少推理步骤和 Token 消耗的场景。

Agent Skills(白盒):以 SKILL.md 作为入口,用自然语言表达任务指令。一个 Skill 通常是独立文件夹:

text 复制代码
.claude/skills/code-reviewer/
├── SKILL.md          ← YAML front-matter + 详细指令
├── scripts/xxx.py    ← 可选:配套脚本
└── reference.md      ← 可选:参考资料

SKILL.md 前面的轻量元数据用于发现,说明 Skill 的用途和触发条件;正文记录流程、约束和示例。宿主先读取元数据,模型判断需要后才加载完整正文------这种延迟加载是 Agent Skills 与传统 Toolkits 的关键差异 。Claude Code、Cursor 等工具会扫描项目中的 .claude/skills/ 目录,由模型决定是否激活某个 Skill。

选择标准很直接:调用路径完全固定时用 Toolkits;需要沉淀团队经验、又保留任务流程弹性时,用 Agent Skills。

顺带说清:Prompt Engineering 与 Context Engineering

这两个词经常被混用,但关注层面不同。

Prompt 是给大语言模型的指令与上下文。Prompt Engineering 处理的是提示词怎么写 :任务边界、输出格式和约束条件。缺少这些信息时,模型只能自行猜测;条件明确后,输出才有稳定的依据。

Context Engineering 管得更宽 :规则、记忆、工具描述、会话状态、外部观察结果、Token 预算,全在它的管辖范围内。它要解决的核心问题是------上下文混入过多无关信息时,模型即使具备相应能力,任务效果也会下降。

换句话说,Prompt Engineering 是 Context Engineering 的一个子问题。在有限 Token 窗口里,把最有用的信息喂给模型,把噪声挡在外面,这是后者每天要面对的取舍。

回头看:Agent 的能力是怎么一步步长出来的

把架构讲清楚之后,回头看演进史就能明白每一步在解决什么问题。Agent 的能力不是一次性出现的:模型先获得外部调用能力,随后才有编排、长任务和长期在线这些需求。
#mermaid-svg-lLzGqknrKVkKgNgr{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-lLzGqknrKVkKgNgr .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-lLzGqknrKVkKgNgr .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-lLzGqknrKVkKgNgr .error-icon{fill:#552222;}#mermaid-svg-lLzGqknrKVkKgNgr .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-lLzGqknrKVkKgNgr .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-lLzGqknrKVkKgNgr .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-lLzGqknrKVkKgNgr .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-lLzGqknrKVkKgNgr .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-lLzGqknrKVkKgNgr .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-lLzGqknrKVkKgNgr .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-lLzGqknrKVkKgNgr .marker{fill:#333333;stroke:#333333;}#mermaid-svg-lLzGqknrKVkKgNgr .marker.cross{stroke:#333333;}#mermaid-svg-lLzGqknrKVkKgNgr svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-lLzGqknrKVkKgNgr p{margin:0;}#mermaid-svg-lLzGqknrKVkKgNgr .edge{stroke-width:3;}#mermaid-svg-lLzGqknrKVkKgNgr .section--1 rect,#mermaid-svg-lLzGqknrKVkKgNgr .section--1 path,#mermaid-svg-lLzGqknrKVkKgNgr .section--1 circle,#mermaid-svg-lLzGqknrKVkKgNgr .section--1 path{fill:hsl(240, 100%, 76.2745098039%);}#mermaid-svg-lLzGqknrKVkKgNgr .section--1 text{fill:#ffffff;}#mermaid-svg-lLzGqknrKVkKgNgr .node-icon--1{font-size:40px;color:#ffffff;}#mermaid-svg-lLzGqknrKVkKgNgr .section-edge--1{stroke:hsl(240, 100%, 76.2745098039%);}#mermaid-svg-lLzGqknrKVkKgNgr .edge-depth--1{stroke-width:17;}#mermaid-svg-lLzGqknrKVkKgNgr .section--1 line{stroke:hsl(60, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-lLzGqknrKVkKgNgr .lineWrapper line{stroke:#ffffff;}#mermaid-svg-lLzGqknrKVkKgNgr .disabled,#mermaid-svg-lLzGqknrKVkKgNgr .disabled circle,#mermaid-svg-lLzGqknrKVkKgNgr .disabled text{fill:lightgray;}#mermaid-svg-lLzGqknrKVkKgNgr .disabled text{fill:#efefef;}#mermaid-svg-lLzGqknrKVkKgNgr .section-0 rect,#mermaid-svg-lLzGqknrKVkKgNgr .section-0 path,#mermaid-svg-lLzGqknrKVkKgNgr .section-0 circle,#mermaid-svg-lLzGqknrKVkKgNgr .section-0 path{fill:hsl(60, 100%, 73.5294117647%);}#mermaid-svg-lLzGqknrKVkKgNgr .section-0 text{fill:black;}#mermaid-svg-lLzGqknrKVkKgNgr .node-icon-0{font-size:40px;color:black;}#mermaid-svg-lLzGqknrKVkKgNgr .section-edge-0{stroke:hsl(60, 100%, 73.5294117647%);}#mermaid-svg-lLzGqknrKVkKgNgr .edge-depth-0{stroke-width:14;}#mermaid-svg-lLzGqknrKVkKgNgr .section-0 line{stroke:hsl(240, 100%, 83.5294117647%);stroke-width:3;}#mermaid-svg-lLzGqknrKVkKgNgr .lineWrapper line{stroke:black;}#mermaid-svg-lLzGqknrKVkKgNgr .disabled,#mermaid-svg-lLzGqknrKVkKgNgr .disabled circle,#mermaid-svg-lLzGqknrKVkKgNgr .disabled text{fill:lightgray;}#mermaid-svg-lLzGqknrKVkKgNgr .disabled text{fill:#efefef;}#mermaid-svg-lLzGqknrKVkKgNgr .section-1 rect,#mermaid-svg-lLzGqknrKVkKgNgr .section-1 path,#mermaid-svg-lLzGqknrKVkKgNgr .section-1 circle,#mermaid-svg-lLzGqknrKVkKgNgr .section-1 path{fill:hsl(80, 100%, 76.2745098039%);}#mermaid-svg-lLzGqknrKVkKgNgr .section-1 text{fill:black;}#mermaid-svg-lLzGqknrKVkKgNgr .node-icon-1{font-size:40px;color:black;}#mermaid-svg-lLzGqknrKVkKgNgr .section-edge-1{stroke:hsl(80, 100%, 76.2745098039%);}#mermaid-svg-lLzGqknrKVkKgNgr .edge-depth-1{stroke-width:11;}#mermaid-svg-lLzGqknrKVkKgNgr .section-1 line{stroke:hsl(260, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-lLzGqknrKVkKgNgr .lineWrapper line{stroke:black;}#mermaid-svg-lLzGqknrKVkKgNgr .disabled,#mermaid-svg-lLzGqknrKVkKgNgr .disabled circle,#mermaid-svg-lLzGqknrKVkKgNgr .disabled text{fill:lightgray;}#mermaid-svg-lLzGqknrKVkKgNgr .disabled text{fill:#efefef;}#mermaid-svg-lLzGqknrKVkKgNgr .section-2 rect,#mermaid-svg-lLzGqknrKVkKgNgr .section-2 path,#mermaid-svg-lLzGqknrKVkKgNgr .section-2 circle,#mermaid-svg-lLzGqknrKVkKgNgr .section-2 path{fill:hsl(270, 100%, 76.2745098039%);}#mermaid-svg-lLzGqknrKVkKgNgr .section-2 text{fill:#ffffff;}#mermaid-svg-lLzGqknrKVkKgNgr .node-icon-2{font-size:40px;color:#ffffff;}#mermaid-svg-lLzGqknrKVkKgNgr .section-edge-2{stroke:hsl(270, 100%, 76.2745098039%);}#mermaid-svg-lLzGqknrKVkKgNgr .edge-depth-2{stroke-width:8;}#mermaid-svg-lLzGqknrKVkKgNgr .section-2 line{stroke:hsl(90, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-lLzGqknrKVkKgNgr .lineWrapper line{stroke:#ffffff;}#mermaid-svg-lLzGqknrKVkKgNgr .disabled,#mermaid-svg-lLzGqknrKVkKgNgr .disabled circle,#mermaid-svg-lLzGqknrKVkKgNgr .disabled text{fill:lightgray;}#mermaid-svg-lLzGqknrKVkKgNgr .disabled text{fill:#efefef;}#mermaid-svg-lLzGqknrKVkKgNgr .section-3 rect,#mermaid-svg-lLzGqknrKVkKgNgr .section-3 path,#mermaid-svg-lLzGqknrKVkKgNgr .section-3 circle,#mermaid-svg-lLzGqknrKVkKgNgr .section-3 path{fill:hsl(300, 100%, 76.2745098039%);}#mermaid-svg-lLzGqknrKVkKgNgr .section-3 text{fill:black;}#mermaid-svg-lLzGqknrKVkKgNgr .node-icon-3{font-size:40px;color:black;}#mermaid-svg-lLzGqknrKVkKgNgr .section-edge-3{stroke:hsl(300, 100%, 76.2745098039%);}#mermaid-svg-lLzGqknrKVkKgNgr .edge-depth-3{stroke-width:5;}#mermaid-svg-lLzGqknrKVkKgNgr .section-3 line{stroke:hsl(120, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-lLzGqknrKVkKgNgr .lineWrapper line{stroke:black;}#mermaid-svg-lLzGqknrKVkKgNgr .disabled,#mermaid-svg-lLzGqknrKVkKgNgr .disabled circle,#mermaid-svg-lLzGqknrKVkKgNgr .disabled text{fill:lightgray;}#mermaid-svg-lLzGqknrKVkKgNgr .disabled text{fill:#efefef;}#mermaid-svg-lLzGqknrKVkKgNgr .section-4 rect,#mermaid-svg-lLzGqknrKVkKgNgr .section-4 path,#mermaid-svg-lLzGqknrKVkKgNgr .section-4 circle,#mermaid-svg-lLzGqknrKVkKgNgr .section-4 path{fill:hsl(330, 100%, 76.2745098039%);}#mermaid-svg-lLzGqknrKVkKgNgr .section-4 text{fill:black;}#mermaid-svg-lLzGqknrKVkKgNgr .node-icon-4{font-size:40px;color:black;}#mermaid-svg-lLzGqknrKVkKgNgr .section-edge-4{stroke:hsl(330, 100%, 76.2745098039%);}#mermaid-svg-lLzGqknrKVkKgNgr .edge-depth-4{stroke-width:2;}#mermaid-svg-lLzGqknrKVkKgNgr .section-4 line{stroke:hsl(150, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-lLzGqknrKVkKgNgr .lineWrapper line{stroke:black;}#mermaid-svg-lLzGqknrKVkKgNgr .disabled,#mermaid-svg-lLzGqknrKVkKgNgr .disabled circle,#mermaid-svg-lLzGqknrKVkKgNgr .disabled text{fill:lightgray;}#mermaid-svg-lLzGqknrKVkKgNgr .disabled text{fill:#efefef;}#mermaid-svg-lLzGqknrKVkKgNgr .section-5 rect,#mermaid-svg-lLzGqknrKVkKgNgr .section-5 path,#mermaid-svg-lLzGqknrKVkKgNgr .section-5 circle,#mermaid-svg-lLzGqknrKVkKgNgr .section-5 path{fill:hsl(0, 100%, 76.2745098039%);}#mermaid-svg-lLzGqknrKVkKgNgr .section-5 text{fill:black;}#mermaid-svg-lLzGqknrKVkKgNgr .node-icon-5{font-size:40px;color:black;}#mermaid-svg-lLzGqknrKVkKgNgr .section-edge-5{stroke:hsl(0, 100%, 76.2745098039%);}#mermaid-svg-lLzGqknrKVkKgNgr .edge-depth-5{stroke-width:-1;}#mermaid-svg-lLzGqknrKVkKgNgr .section-5 line{stroke:hsl(180, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-lLzGqknrKVkKgNgr .lineWrapper line{stroke:black;}#mermaid-svg-lLzGqknrKVkKgNgr .disabled,#mermaid-svg-lLzGqknrKVkKgNgr .disabled circle,#mermaid-svg-lLzGqknrKVkKgNgr .disabled text{fill:lightgray;}#mermaid-svg-lLzGqknrKVkKgNgr .disabled text{fill:#efefef;}#mermaid-svg-lLzGqknrKVkKgNgr .section-6 rect,#mermaid-svg-lLzGqknrKVkKgNgr .section-6 path,#mermaid-svg-lLzGqknrKVkKgNgr .section-6 circle,#mermaid-svg-lLzGqknrKVkKgNgr .section-6 path{fill:hsl(30, 100%, 76.2745098039%);}#mermaid-svg-lLzGqknrKVkKgNgr .section-6 text{fill:black;}#mermaid-svg-lLzGqknrKVkKgNgr .node-icon-6{font-size:40px;color:black;}#mermaid-svg-lLzGqknrKVkKgNgr .section-edge-6{stroke:hsl(30, 100%, 76.2745098039%);}#mermaid-svg-lLzGqknrKVkKgNgr .edge-depth-6{stroke-width:-4;}#mermaid-svg-lLzGqknrKVkKgNgr .section-6 line{stroke:hsl(210, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-lLzGqknrKVkKgNgr .lineWrapper line{stroke:black;}#mermaid-svg-lLzGqknrKVkKgNgr .disabled,#mermaid-svg-lLzGqknrKVkKgNgr .disabled circle,#mermaid-svg-lLzGqknrKVkKgNgr .disabled text{fill:lightgray;}#mermaid-svg-lLzGqknrKVkKgNgr .disabled text{fill:#efefef;}#mermaid-svg-lLzGqknrKVkKgNgr .section-7 rect,#mermaid-svg-lLzGqknrKVkKgNgr .section-7 path,#mermaid-svg-lLzGqknrKVkKgNgr .section-7 circle,#mermaid-svg-lLzGqknrKVkKgNgr .section-7 path{fill:hsl(90, 100%, 76.2745098039%);}#mermaid-svg-lLzGqknrKVkKgNgr .section-7 text{fill:black;}#mermaid-svg-lLzGqknrKVkKgNgr .node-icon-7{font-size:40px;color:black;}#mermaid-svg-lLzGqknrKVkKgNgr .section-edge-7{stroke:hsl(90, 100%, 76.2745098039%);}#mermaid-svg-lLzGqknrKVkKgNgr .edge-depth-7{stroke-width:-7;}#mermaid-svg-lLzGqknrKVkKgNgr .section-7 line{stroke:hsl(270, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-lLzGqknrKVkKgNgr .lineWrapper line{stroke:black;}#mermaid-svg-lLzGqknrKVkKgNgr .disabled,#mermaid-svg-lLzGqknrKVkKgNgr .disabled circle,#mermaid-svg-lLzGqknrKVkKgNgr .disabled text{fill:lightgray;}#mermaid-svg-lLzGqknrKVkKgNgr .disabled text{fill:#efefef;}#mermaid-svg-lLzGqknrKVkKgNgr .section-8 rect,#mermaid-svg-lLzGqknrKVkKgNgr .section-8 path,#mermaid-svg-lLzGqknrKVkKgNgr .section-8 circle,#mermaid-svg-lLzGqknrKVkKgNgr .section-8 path{fill:hsl(150, 100%, 76.2745098039%);}#mermaid-svg-lLzGqknrKVkKgNgr .section-8 text{fill:black;}#mermaid-svg-lLzGqknrKVkKgNgr .node-icon-8{font-size:40px;color:black;}#mermaid-svg-lLzGqknrKVkKgNgr .section-edge-8{stroke:hsl(150, 100%, 76.2745098039%);}#mermaid-svg-lLzGqknrKVkKgNgr .edge-depth-8{stroke-width:-10;}#mermaid-svg-lLzGqknrKVkKgNgr .section-8 line{stroke:hsl(330, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-lLzGqknrKVkKgNgr .lineWrapper line{stroke:black;}#mermaid-svg-lLzGqknrKVkKgNgr .disabled,#mermaid-svg-lLzGqknrKVkKgNgr .disabled circle,#mermaid-svg-lLzGqknrKVkKgNgr .disabled text{fill:lightgray;}#mermaid-svg-lLzGqknrKVkKgNgr .disabled text{fill:#efefef;}#mermaid-svg-lLzGqknrKVkKgNgr .section-9 rect,#mermaid-svg-lLzGqknrKVkKgNgr .section-9 path,#mermaid-svg-lLzGqknrKVkKgNgr .section-9 circle,#mermaid-svg-lLzGqknrKVkKgNgr .section-9 path{fill:hsl(180, 100%, 76.2745098039%);}#mermaid-svg-lLzGqknrKVkKgNgr .section-9 text{fill:black;}#mermaid-svg-lLzGqknrKVkKgNgr .node-icon-9{font-size:40px;color:black;}#mermaid-svg-lLzGqknrKVkKgNgr .section-edge-9{stroke:hsl(180, 100%, 76.2745098039%);}#mermaid-svg-lLzGqknrKVkKgNgr .edge-depth-9{stroke-width:-13;}#mermaid-svg-lLzGqknrKVkKgNgr .section-9 line{stroke:hsl(0, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-lLzGqknrKVkKgNgr .lineWrapper line{stroke:black;}#mermaid-svg-lLzGqknrKVkKgNgr .disabled,#mermaid-svg-lLzGqknrKVkKgNgr .disabled circle,#mermaid-svg-lLzGqknrKVkKgNgr .disabled text{fill:lightgray;}#mermaid-svg-lLzGqknrKVkKgNgr .disabled text{fill:#efefef;}#mermaid-svg-lLzGqknrKVkKgNgr .section-10 rect,#mermaid-svg-lLzGqknrKVkKgNgr .section-10 path,#mermaid-svg-lLzGqknrKVkKgNgr .section-10 circle,#mermaid-svg-lLzGqknrKVkKgNgr .section-10 path{fill:hsl(210, 100%, 76.2745098039%);}#mermaid-svg-lLzGqknrKVkKgNgr .section-10 text{fill:black;}#mermaid-svg-lLzGqknrKVkKgNgr .node-icon-10{font-size:40px;color:black;}#mermaid-svg-lLzGqknrKVkKgNgr .section-edge-10{stroke:hsl(210, 100%, 76.2745098039%);}#mermaid-svg-lLzGqknrKVkKgNgr .edge-depth-10{stroke-width:-16;}#mermaid-svg-lLzGqknrKVkKgNgr .section-10 line{stroke:hsl(30, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-lLzGqknrKVkKgNgr .lineWrapper line{stroke:black;}#mermaid-svg-lLzGqknrKVkKgNgr .disabled,#mermaid-svg-lLzGqknrKVkKgNgr .disabled circle,#mermaid-svg-lLzGqknrKVkKgNgr .disabled text{fill:lightgray;}#mermaid-svg-lLzGqknrKVkKgNgr .disabled text{fill:#efefef;}#mermaid-svg-lLzGqknrKVkKgNgr .section-root rect,#mermaid-svg-lLzGqknrKVkKgNgr .section-root path,#mermaid-svg-lLzGqknrKVkKgNgr .section-root circle{fill:hsl(240, 100%, 46.2745098039%);}#mermaid-svg-lLzGqknrKVkKgNgr .section-root text{fill:#ffffff;}#mermaid-svg-lLzGqknrKVkKgNgr .icon-container{height:100%;display:flex;justify-content:center;align-items:center;}#mermaid-svg-lLzGqknrKVkKgNgr .edge{fill:none;}#mermaid-svg-lLzGqknrKVkKgNgr .eventWrapper{filter:brightness(120%);}#mermaid-svg-lLzGqknrKVkKgNgr :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 2022 纯对话时代 Prompt Engineering是主要手段 2023 中 Function Calling +RAG AutoGPT等早期自治尝试 2023 底 编排时代 ReAct 广泛采用 /DAG 约束流程 2024 底 标准化与多模态 MCP / Computer Use/ 编程 Agent 2025 长任务执行 Skills 封装 2026 长期在线 Heartbeat / HarnessEngineering Agent 能力演进

冷静一点:Agent 的真实挑战

聊 Agent 不能只讲愿景,也得说点真实问题。实际做下来,这几条感受最深:

  • 长任务失忆。历史信息被截断后模型会"失忆";更麻烦的是,上下文变长后推理质量不一定更好,很多模型对中间位置信息的利用效率并不高。
  • 幻觉无法彻底消灭。工具调用能降低幻觉,但 LLM 在推理步骤里仍然可能生成错误判断,工具返回结果也不一定能把它拉回来。
  • Token 成本。多轮迭代、工具调用、日志回传、上下文压缩,每一项都在烧 Token。复杂任务跑一轮,账单可能真会让人清醒。
  • 安全风险。Agent 能执行代码、调 API、读写文件,也就一定会面对 Prompt Injection 和越权操作。更现实的做法是权限最小化、沙箱隔离、高危操作人工确认。
  • 局部最优。深度多步推理任务里,LLM 容易看起来一直在推进,其实已经偏题了。
  • 可解释性 。Agent 为什么做了某个决策、为什么调用了某个工具、是哪一步把上下文带偏了,排查起来很头疼。
    后面比较确定的方向包括更长上下文、分层记忆、多模态 GUI 操作、沙箱和权限体系、推理效率优化。

写在最后

回到开头那个问题:为什么聊天模型干不了排障的活?因为它没有 Loop、没有 Observation 闭环、没有工具执行环境。把这三样补齐,任务才从"生成建议"变成"执行任务"。

但补齐这三样的过程中,真正的分水岭不在模型,而在工程:Loop 的停止条件怎么设,上下文怎么筛,工具描述怎么写。这些问题的答案决定了 Agent 是稳定交付,还是在深夜给你跑出一份没人看得懂的决策日志。

相关推荐
liulilittle1 小时前
Linux AI 开发环境搭建实录
linux·ai·llm·agent·hyper-v·dev·opencode
itCatface2 小时前
Linux离线部署Dify+Vllm(Qwen2.5-7b)
docker·ai·dify
七牛云行业应用2 小时前
最新!MiniMax Code CLI 开源:一条命令安装,支持自带模型
ai·agent·ai编程
云烟成雨TD4 小时前
LlamaIndex 系列【29】检索增强策略:路由(Routing)机制
ai·agent·rag·llamaindex
蒲公英eric4 小时前
从旧接口泄露到 OAuth 保护:DVWA API 模块完整漏洞分析教程
web安全·ai·ctf·dvwa·ai安全·api模块
fenglovemu4 小时前
2026深圳制造工厂AI转型实战指南:从试点验证到产线规模落地
ai·ai技术·ai培训
一叶飘零_sweeeet4 小时前
ZCode 把整个 Git 仓库加密上传到了阿里云 OSS:一次客户端逆向的完整复盘
ai·zcode·智普
wangjialelele4 小时前
LLM Agent 全景图:MCP、ReAct、Planner、Skill 与 ANN 检索核心原理
ai·agent·hnsw·skill·ivf·mcp
七夜zippoe4 小时前
Agent 输出质量保障:格式控制、校验机制与自动重试策略
ai·agent·自动重试·质量保障·格式控制·校验机制