Agentic AI 架构完整学习手册(课程精华全收录)

Agentic AI 架构完整学习手册(课程精华全收录)

来源:Mehmet Ozkaya《Agentic AI Architectures with Patterns, Frameworks and MCP》课程笔记

共 12 篇笔记合并而成(内容完整保留)


第 1 篇


课程导论(Course Introduction)

封面

课程全称:Agentic AI Architectures with Patterns, Frameworks and MCP (智能体式 AI 架构:模式、框架与 MCP)。

副标题承诺三个核心交付:

  • 用 AI Agents、Agentic 工作流、设计模式、MCP、Agentic 框架为企业应用设计多智能体系统
  • 设计真实世界 E-Shop 微服务的 Agentic RAG 应用
课程内容地图

将要学习:

  1. What are AI Agents?(Agent vs. Agentic AI)
  2. Agent 的组件组成
  3. Agentic Loop(感知 Perception、推理 Reasoning、行动 Action、学习 Learning)
  4. Agentic 架构在系统层面如何工作
  5. 多智能体协作
  6. Agentic 工作流:Orchestration(编排)vs. Choreography(编舞)
  7. 框架:LangChain、LlamaIndex、Microsoft Agent Framework
  8. 设计模式:Agent 界的"四人帮(Gang of Four)"
核心模式与主题预览

#mermaid-svg-YydANdsyTzvhEMb0{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-YydANdsyTzvhEMb0 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-YydANdsyTzvhEMb0 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-YydANdsyTzvhEMb0 .error-icon{fill:#552222;}#mermaid-svg-YydANdsyTzvhEMb0 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-YydANdsyTzvhEMb0 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-YydANdsyTzvhEMb0 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-YydANdsyTzvhEMb0 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-YydANdsyTzvhEMb0 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-YydANdsyTzvhEMb0 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-YydANdsyTzvhEMb0 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-YydANdsyTzvhEMb0 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-YydANdsyTzvhEMb0 .marker.cross{stroke:#333333;}#mermaid-svg-YydANdsyTzvhEMb0 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-YydANdsyTzvhEMb0 p{margin:0;}#mermaid-svg-YydANdsyTzvhEMb0 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-YydANdsyTzvhEMb0 .cluster-label text{fill:#333;}#mermaid-svg-YydANdsyTzvhEMb0 .cluster-label span{color:#333;}#mermaid-svg-YydANdsyTzvhEMb0 .cluster-label span p{background-color:transparent;}#mermaid-svg-YydANdsyTzvhEMb0 .label text,#mermaid-svg-YydANdsyTzvhEMb0 span{fill:#333;color:#333;}#mermaid-svg-YydANdsyTzvhEMb0 .node rect,#mermaid-svg-YydANdsyTzvhEMb0 .node circle,#mermaid-svg-YydANdsyTzvhEMb0 .node ellipse,#mermaid-svg-YydANdsyTzvhEMb0 .node polygon,#mermaid-svg-YydANdsyTzvhEMb0 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-YydANdsyTzvhEMb0 .rough-node .label text,#mermaid-svg-YydANdsyTzvhEMb0 .node .label text,#mermaid-svg-YydANdsyTzvhEMb0 .image-shape .label,#mermaid-svg-YydANdsyTzvhEMb0 .icon-shape .label{text-anchor:middle;}#mermaid-svg-YydANdsyTzvhEMb0 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-YydANdsyTzvhEMb0 .rough-node .label,#mermaid-svg-YydANdsyTzvhEMb0 .node .label,#mermaid-svg-YydANdsyTzvhEMb0 .image-shape .label,#mermaid-svg-YydANdsyTzvhEMb0 .icon-shape .label{text-align:center;}#mermaid-svg-YydANdsyTzvhEMb0 .node.clickable{cursor:pointer;}#mermaid-svg-YydANdsyTzvhEMb0 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-YydANdsyTzvhEMb0 .arrowheadPath{fill:#333333;}#mermaid-svg-YydANdsyTzvhEMb0 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-YydANdsyTzvhEMb0 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-YydANdsyTzvhEMb0 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-YydANdsyTzvhEMb0 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-YydANdsyTzvhEMb0 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-YydANdsyTzvhEMb0 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-YydANdsyTzvhEMb0 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-YydANdsyTzvhEMb0 .cluster text{fill:#333;}#mermaid-svg-YydANdsyTzvhEMb0 .cluster span{color:#333;}#mermaid-svg-YydANdsyTzvhEMb0 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-YydANdsyTzvhEMb0 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-YydANdsyTzvhEMb0 rect.text{fill:none;stroke-width:0;}#mermaid-svg-YydANdsyTzvhEMb0 .icon-shape,#mermaid-svg-YydANdsyTzvhEMb0 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-YydANdsyTzvhEMb0 .icon-shape p,#mermaid-svg-YydANdsyTzvhEMb0 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-YydANdsyTzvhEMb0 .icon-shape .label rect,#mermaid-svg-YydANdsyTzvhEMb0 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-YydANdsyTzvhEMb0 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-YydANdsyTzvhEMb0 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-YydANdsyTzvhEMb0 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} ① Router & Specialist

路由 + 专家分工
② Tool Use + MCP + HITL

工具调用 + 协议 + 人工确认
③ ReAct + Reflection + Handoff

推理行动循环 + 反思 + 交接

  • Planning(规划)模式
  • Reflection(反思)模式(元认知)
  • ReAct 复合模式
  • :Agentic RAG;协议 ACP、A2A、MCP;MCP 实战;Context Engineering(上下文工程)
  • ADLC(Agent 开发生命周期);企业级安全/治理/评估/运维;终极实战:设计 E-Shop Agentic 层
学习前提与说明
  • 前提:基本编程(Python/.NET/Node.js)、懂 API(API key、HTTP 请求)、基本软件架构知识
  • :请求学员给课程好评(无关内容)

课程主线项目:企业 E-Shop 的 Agentic 层(贯穿全课程的案例)

现状问题:"Before" 状态 = 被动微服务

#mermaid-svg-TRefxFOgM3SGkXn6{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-TRefxFOgM3SGkXn6 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-TRefxFOgM3SGkXn6 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-TRefxFOgM3SGkXn6 .error-icon{fill:#552222;}#mermaid-svg-TRefxFOgM3SGkXn6 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-TRefxFOgM3SGkXn6 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-TRefxFOgM3SGkXn6 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-TRefxFOgM3SGkXn6 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-TRefxFOgM3SGkXn6 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-TRefxFOgM3SGkXn6 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-TRefxFOgM3SGkXn6 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-TRefxFOgM3SGkXn6 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-TRefxFOgM3SGkXn6 .marker.cross{stroke:#333333;}#mermaid-svg-TRefxFOgM3SGkXn6 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-TRefxFOgM3SGkXn6 p{margin:0;}#mermaid-svg-TRefxFOgM3SGkXn6 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-TRefxFOgM3SGkXn6 .cluster-label text{fill:#333;}#mermaid-svg-TRefxFOgM3SGkXn6 .cluster-label span{color:#333;}#mermaid-svg-TRefxFOgM3SGkXn6 .cluster-label span p{background-color:transparent;}#mermaid-svg-TRefxFOgM3SGkXn6 .label text,#mermaid-svg-TRefxFOgM3SGkXn6 span{fill:#333;color:#333;}#mermaid-svg-TRefxFOgM3SGkXn6 .node rect,#mermaid-svg-TRefxFOgM3SGkXn6 .node circle,#mermaid-svg-TRefxFOgM3SGkXn6 .node ellipse,#mermaid-svg-TRefxFOgM3SGkXn6 .node polygon,#mermaid-svg-TRefxFOgM3SGkXn6 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-TRefxFOgM3SGkXn6 .rough-node .label text,#mermaid-svg-TRefxFOgM3SGkXn6 .node .label text,#mermaid-svg-TRefxFOgM3SGkXn6 .image-shape .label,#mermaid-svg-TRefxFOgM3SGkXn6 .icon-shape .label{text-anchor:middle;}#mermaid-svg-TRefxFOgM3SGkXn6 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-TRefxFOgM3SGkXn6 .rough-node .label,#mermaid-svg-TRefxFOgM3SGkXn6 .node .label,#mermaid-svg-TRefxFOgM3SGkXn6 .image-shape .label,#mermaid-svg-TRefxFOgM3SGkXn6 .icon-shape .label{text-align:center;}#mermaid-svg-TRefxFOgM3SGkXn6 .node.clickable{cursor:pointer;}#mermaid-svg-TRefxFOgM3SGkXn6 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-TRefxFOgM3SGkXn6 .arrowheadPath{fill:#333333;}#mermaid-svg-TRefxFOgM3SGkXn6 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-TRefxFOgM3SGkXn6 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-TRefxFOgM3SGkXn6 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-TRefxFOgM3SGkXn6 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-TRefxFOgM3SGkXn6 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-TRefxFOgM3SGkXn6 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-TRefxFOgM3SGkXn6 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-TRefxFOgM3SGkXn6 .cluster text{fill:#333;}#mermaid-svg-TRefxFOgM3SGkXn6 .cluster span{color:#333;}#mermaid-svg-TRefxFOgM3SGkXn6 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-TRefxFOgM3SGkXn6 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-TRefxFOgM3SGkXn6 rect.text{fill:none;stroke-width:0;}#mermaid-svg-TRefxFOgM3SGkXn6 .icon-shape,#mermaid-svg-TRefxFOgM3SGkXn6 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-TRefxFOgM3SGkXn6 .icon-shape p,#mermaid-svg-TRefxFOgM3SGkXn6 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-TRefxFOgM3SGkXn6 .icon-shape .label rect,#mermaid-svg-TRefxFOgM3SGkXn6 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-TRefxFOgM3SGkXn6 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-TRefxFOgM3SGkXn6 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-TRefxFOgM3SGkXn6 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} After:Agentic 层
用户请求
Agentic Layer 智能体层
库存服务
订单服务
用户服务
智能响应
Before:被动微服务
用户请求
微服务各自处理

(库存/订单/用户独立)
固定响应

传统电商架构:WebApp/Client Apps 直接对接 EShop 微服务(Identity 身份、Catalog 目录、Basket 购物车、Ordering 订单),微服务间用 RabbitMQ 消息队列通信、SQL 存储数据。

核心痛点 :"The burden of reasoning is on the human"------推理的负担全在用户身上。搜索、点击、筛选、结账,全部要用户手动完成。用户发出的指令是死的(被动系统)。

目标:"After" 状态 = Agentic 层

在 UI 和微服务后端之间新增一个 Agentic Layer(含 LLM、AI Agents、State 状态),由三大力量驱动:

  • MCP:安全地把 Agent 连接到微服务
  • Context:用用户历史个性化行动
  • Collaboration :多个 Agent 协作
    用户请求示例(图中气泡):"I need a pair of running shoes for my marathon next month, under $150. If you find good ones, buy them." (下个月马拉松要一双跑鞋,预算 150 美元以内,找到好的就买)------注意:这是一个目标,不是一条指令,正是 Agentic 的标志。
三个用例(提前预告课程核心模式)
用例 用到的模式
17 用例 1:购物体验 Router & Specialist + Agentic RAG + Context Engineering
18 用例 2:自主结账 Tool Use + MCP + HITL 人类介入
19 用例 3:客户支持 ReAct + Reflection 反思 + Handoff 交接

流程图:左侧 UI 显示用户查询 → 中间三个模式环节:Router Agent (分类用户意图,按任务类型分发给 Specialist:支持/库存/发货)→ Catalog Agent (用高级 RAG 主动研究商品)→ Context Engineering(从 Identity 服务自动注入用户鞋码、品牌偏好)。

流程图:UI → Agentic Workflow(Select Tools 选工具 → Tool Use 用工具 → Get Results 取结果 → Generate Response 生成回复,Results OK 校验)→ EShop 微服务 → RabbitMQ;安全机制:购买金额 > $100 时 Agent 必须暂停,等用户确认(HITL)。

两个流程:左图 Think&Plan(思考计划)→ LLM Execute Tasks(执行)→ Get Results → Tools(工具)→ Generate Response;右图 Make Plan → Run Task Steps → Task Complete → Get Results → Response → Reflect(反思)→ Reflected Response(反思后的回复);失败时无缝 Handoff 转人工。

你的目标:交付架构蓝图

一份设计文档,包含:系统交互图、MCP 集成图、Agentic 工作流图,以及 ADLC 计划(如何评估、用 AgentOps 监控、如何保障安全)。


进化主线:从 Generative AI 到 Agentic AI(本段重点)

三阶段进化总览

#mermaid-svg-60mEhlmY9Fy1pn7F{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-60mEhlmY9Fy1pn7F .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-60mEhlmY9Fy1pn7F .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-60mEhlmY9Fy1pn7F .error-icon{fill:#552222;}#mermaid-svg-60mEhlmY9Fy1pn7F .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-60mEhlmY9Fy1pn7F .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-60mEhlmY9Fy1pn7F .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-60mEhlmY9Fy1pn7F .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-60mEhlmY9Fy1pn7F .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-60mEhlmY9Fy1pn7F .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-60mEhlmY9Fy1pn7F .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-60mEhlmY9Fy1pn7F .marker{fill:#333333;stroke:#333333;}#mermaid-svg-60mEhlmY9Fy1pn7F .marker.cross{stroke:#333333;}#mermaid-svg-60mEhlmY9Fy1pn7F svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-60mEhlmY9Fy1pn7F p{margin:0;}#mermaid-svg-60mEhlmY9Fy1pn7F .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-60mEhlmY9Fy1pn7F .cluster-label text{fill:#333;}#mermaid-svg-60mEhlmY9Fy1pn7F .cluster-label span{color:#333;}#mermaid-svg-60mEhlmY9Fy1pn7F .cluster-label span p{background-color:transparent;}#mermaid-svg-60mEhlmY9Fy1pn7F .label text,#mermaid-svg-60mEhlmY9Fy1pn7F span{fill:#333;color:#333;}#mermaid-svg-60mEhlmY9Fy1pn7F .node rect,#mermaid-svg-60mEhlmY9Fy1pn7F .node circle,#mermaid-svg-60mEhlmY9Fy1pn7F .node ellipse,#mermaid-svg-60mEhlmY9Fy1pn7F .node polygon,#mermaid-svg-60mEhlmY9Fy1pn7F .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-60mEhlmY9Fy1pn7F .rough-node .label text,#mermaid-svg-60mEhlmY9Fy1pn7F .node .label text,#mermaid-svg-60mEhlmY9Fy1pn7F .image-shape .label,#mermaid-svg-60mEhlmY9Fy1pn7F .icon-shape .label{text-anchor:middle;}#mermaid-svg-60mEhlmY9Fy1pn7F .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-60mEhlmY9Fy1pn7F .rough-node .label,#mermaid-svg-60mEhlmY9Fy1pn7F .node .label,#mermaid-svg-60mEhlmY9Fy1pn7F .image-shape .label,#mermaid-svg-60mEhlmY9Fy1pn7F .icon-shape .label{text-align:center;}#mermaid-svg-60mEhlmY9Fy1pn7F .node.clickable{cursor:pointer;}#mermaid-svg-60mEhlmY9Fy1pn7F .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-60mEhlmY9Fy1pn7F .arrowheadPath{fill:#333333;}#mermaid-svg-60mEhlmY9Fy1pn7F .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-60mEhlmY9Fy1pn7F .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-60mEhlmY9Fy1pn7F .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-60mEhlmY9Fy1pn7F .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-60mEhlmY9Fy1pn7F .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-60mEhlmY9Fy1pn7F .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-60mEhlmY9Fy1pn7F .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-60mEhlmY9Fy1pn7F .cluster text{fill:#333;}#mermaid-svg-60mEhlmY9Fy1pn7F .cluster span{color:#333;}#mermaid-svg-60mEhlmY9Fy1pn7F 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-60mEhlmY9Fy1pn7F .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-60mEhlmY9Fy1pn7F rect.text{fill:none;stroke-width:0;}#mermaid-svg-60mEhlmY9Fy1pn7F .icon-shape,#mermaid-svg-60mEhlmY9Fy1pn7F .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-60mEhlmY9Fy1pn7F .icon-shape p,#mermaid-svg-60mEhlmY9Fy1pn7F .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-60mEhlmY9Fy1pn7F .icon-shape .label rect,#mermaid-svg-60mEhlmY9Fy1pn7F .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-60mEhlmY9Fy1pn7F .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-60mEhlmY9Fy1pn7F .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-60mEhlmY9Fy1pn7F :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 人工干预递减
系统化协作
① 生成式 AI

「专家顾问」

给建议,人来执行
② AI Agent

「工人」

独立干一件活
③ Agentic AI

「工厂」

多智能体协作系统

横向三个色块,从左到右:

  • GenAI(笔图标):More Human Intervention(更多人工干预)------Set of Rules 规则集、Passive 被动、One-shot 单次、Stateless 无状态
  • AI Agents(耳机图标):Singular Goal 单一目标、Active 主动、Multi-step 多步、Stateful 有状态
  • Agentic AI(人群图标):Multi-agent 多智能体、Systemic 系统性、Collaborative 协作、Specialized 专业化
  • 最右侧(大脑图标):Less Human Intervention(更少人工干预)------进化方向 = 人工干预越来越少

是同一张图的大图版(各带图标:持笔的人 / 戴耳机的人 / 一群人 / 大脑),视觉化"人越来越少、系统越来越自主"。

Phase 1:Generative AI ------ "专家顾问(Expert Consultant)"
  • 一次性(One-shot):整个生命周期 = 单次 请求 → 响应 循环
  • 被动(Passive):响应式系统,只应答、从不主动发起
  • 无状态(Stateless):不记得过去的交互
  • 类比:你问它要方案,它写一份报告给你------然后就完了

示意图:用户 → 网页(提问 "Why is the Sky Blue?")→ LLM → 答案返回给用户。一问一答,仅此而已。

Phase 2:AI Agent ------ "工人(Worker)"

在"专家顾问"基础上,给它加了两样东西:

  • 工具 Tools('hands' 手) + 记忆 Memory('notebook' 笔记本)
  • 主动(Active):能主动发起行动
  • 多步(Multi-step):运行 感知 → 推理 → 行动 循环
  • 有状态(Stateful):记住自己的计划和历史

示意图:用户带着**目标(Goal)**→ 界面 → AI Agent(齿轮=内部逻辑,圆圈=记忆/笔记本)→ 产出结果。关键差异:输入从"问题"变成了"目标"。

Phase 3:Agentic AI ------ "工厂(Factory)"
  • 系统性(Systemic):多个协作 Agent 组成的系统
  • 协作(Collaborative):用编排(orchestration)和工作流协同,解决单个 Agent 解决不了的目标
  • 专业化(Specialized):每个 Agent 有独特、明确的角色
  • 例:E-Shop = Router Agent + Shopping Agent + Support Agent

示意图:Agent1 / Agent2 / Agent3 三个角色(购物、路由等)通过箭头协作,共同把复杂目标加工成结果------不是一个大而全的 Agent,而是分工的团队。

三阶段完整对比表(课程原表)
特征 Phase 1:Generative AI Phase 2:AI Agent Phase 3:Agentic AI
类比 "专家顾问" "工人" "工厂/团队"
范围 单个"大脑"(LLM) 单个组件 整个系统
输入 Prompt(提示词) Goal(目标) 复杂目标
行动 被动(只回答) 主动(执行工具) 协作(编排调度)
状态 无状态 有状态(内部记忆) 有状态(共享)

表底部还有一条进化流:GenAI(需更多人工干预)→ AI Agent(单一目标/多步/有状态)→ Agentic AI(多智能体/系统化/协作/专业化),人工干预从左到右递减。

章节小结(大图版)

三阶段并列示意图:

  • GenAI:用户 → LLM → 直接回答问题
  • AI Agents:用户 → 单个 Agent → 完成任务
  • Agentic AI :多个 Agent 协同处理复杂任务 → 输出结果
    人类介入从"全程参与"变为"只给目标"。

📌 本段核心收获(一句话版)

  1. 整门课在讲一件事:怎么把"你问它答"的 AI,升级成"能自己干活、多角色协作"的智能体系统。
  2. 主线案例:E-Shop 电商微服务 → 加一层 Agentic Layer,让用户"说目标"而不是"点按钮"。
  3. 三个阶段的记忆钩子:顾问(被动问答)→ 工人(有了手和笔记本)→ 工厂(多员工协作)。
  4. 进化方向:人工干预越来越少(More → Less Human Intervention),系统自主性越来越强。
  5. 预告了全部核心模式:Router & Specialist、Tool Use、HITL、ReAct、Reflection、Handoff、Agentic RAG、Context Engineering、MCP------后面 500 多页逐一展开。
  6. 后续预告:进入正题------"什么是 AI Agent"的正式定义(Agentic Loop:感知→推理→行动)。

第 2 篇


什么是 AI Agent(What are AI Agents?)

章节地图

本模块将覆盖:Agent 如何工作、核心组件(LLM、工具、记忆)、何时该用/不该用、用例、挑战。

简单直觉:它是"数字员工"

插图:蓝色机器人手持"大脑"设备,箭头指向 GOAL 标志,下方是工具和 API 图标。

  • 不是工具,是"数字员工(Digital Employee)"
  • 你给它一个目标(Goal) ,它有技能(工具/API) ,它自主工作达成目标
正式定义:Agentic Loop(智能体循环)

#mermaid-svg-mpo5w7NAXu7SPH5e{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-mpo5w7NAXu7SPH5e .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-mpo5w7NAXu7SPH5e .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-mpo5w7NAXu7SPH5e .error-icon{fill:#552222;}#mermaid-svg-mpo5w7NAXu7SPH5e .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-mpo5w7NAXu7SPH5e .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-mpo5w7NAXu7SPH5e .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-mpo5w7NAXu7SPH5e .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-mpo5w7NAXu7SPH5e .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-mpo5w7NAXu7SPH5e .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-mpo5w7NAXu7SPH5e .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-mpo5w7NAXu7SPH5e .marker{fill:#333333;stroke:#333333;}#mermaid-svg-mpo5w7NAXu7SPH5e .marker.cross{stroke:#333333;}#mermaid-svg-mpo5w7NAXu7SPH5e svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-mpo5w7NAXu7SPH5e p{margin:0;}#mermaid-svg-mpo5w7NAXu7SPH5e .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-mpo5w7NAXu7SPH5e .cluster-label text{fill:#333;}#mermaid-svg-mpo5w7NAXu7SPH5e .cluster-label span{color:#333;}#mermaid-svg-mpo5w7NAXu7SPH5e .cluster-label span p{background-color:transparent;}#mermaid-svg-mpo5w7NAXu7SPH5e .label text,#mermaid-svg-mpo5w7NAXu7SPH5e span{fill:#333;color:#333;}#mermaid-svg-mpo5w7NAXu7SPH5e .node rect,#mermaid-svg-mpo5w7NAXu7SPH5e .node circle,#mermaid-svg-mpo5w7NAXu7SPH5e .node ellipse,#mermaid-svg-mpo5w7NAXu7SPH5e .node polygon,#mermaid-svg-mpo5w7NAXu7SPH5e .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-mpo5w7NAXu7SPH5e .rough-node .label text,#mermaid-svg-mpo5w7NAXu7SPH5e .node .label text,#mermaid-svg-mpo5w7NAXu7SPH5e .image-shape .label,#mermaid-svg-mpo5w7NAXu7SPH5e .icon-shape .label{text-anchor:middle;}#mermaid-svg-mpo5w7NAXu7SPH5e .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-mpo5w7NAXu7SPH5e .rough-node .label,#mermaid-svg-mpo5w7NAXu7SPH5e .node .label,#mermaid-svg-mpo5w7NAXu7SPH5e .image-shape .label,#mermaid-svg-mpo5w7NAXu7SPH5e .icon-shape .label{text-align:center;}#mermaid-svg-mpo5w7NAXu7SPH5e .node.clickable{cursor:pointer;}#mermaid-svg-mpo5w7NAXu7SPH5e .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-mpo5w7NAXu7SPH5e .arrowheadPath{fill:#333333;}#mermaid-svg-mpo5w7NAXu7SPH5e .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-mpo5w7NAXu7SPH5e .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-mpo5w7NAXu7SPH5e .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-mpo5w7NAXu7SPH5e .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-mpo5w7NAXu7SPH5e .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-mpo5w7NAXu7SPH5e .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-mpo5w7NAXu7SPH5e .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-mpo5w7NAXu7SPH5e .cluster text{fill:#333;}#mermaid-svg-mpo5w7NAXu7SPH5e .cluster span{color:#333;}#mermaid-svg-mpo5w7NAXu7SPH5e 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-mpo5w7NAXu7SPH5e .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-mpo5w7NAXu7SPH5e rect.text{fill:none;stroke-width:0;}#mermaid-svg-mpo5w7NAXu7SPH5e .icon-shape,#mermaid-svg-mpo5w7NAXu7SPH5e .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-mpo5w7NAXu7SPH5e .icon-shape p,#mermaid-svg-mpo5w7NAXu7SPH5e .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-mpo5w7NAXu7SPH5e .icon-shape .label rect,#mermaid-svg-mpo5w7NAXu7SPH5e .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-mpo5w7NAXu7SPH5e .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-mpo5w7NAXu7SPH5e .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-mpo5w7NAXu7SPH5e :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 循环
感知

接收输入/环境
推理

LLM 思考决策
行动

调用工具/输出
观察

获取结果反馈

循环图:三个小人分别代表 PERCEPTION(感知)→ REASONING(推理)→ ACTION(行动),箭头首尾相连成环。

Agent = 不断重复三步循环:

  1. **感知(Perceive)**其环境
  2. **推理(Reason)**做决策
  3. 行动(Act)(自主地)达成目标
Agent 的 4 大原则
原则 中文 核心含义 关键对比
1. Goal-Driven 目标驱动 Agent 由目标定义,而非指令 脚本:"下午 5 点跑这个报表" vs Agent:"确保高管团队每天早晨拿到最新销售数据"
2. Autonomy 自主性 无需逐步人工干预,自己决定怎么做 你告诉开发者做什么功能 ,而不是敲哪几行代码------告诉它 WHAT,不是 HOW
3. Reactivity 反应性 能响应环境变化(世界是动态不可预测的) 脚本调 API 遇 500 错误→崩溃;Agent:感知错误→推理→应对
4. Pro-activeness 主动性 不只被动反应,还能主动预见 反应式:"磁盘满了!" vs 主动式:"磁盘 90% 了,我正在主动归档旧日志防止崩溃"
汇总公式

AI Agent = 目标驱动 + 自主性 + 反应性 + 主动性

  • 它不是脚本,也不只是 LLM
  • 它是一种新型软件组件:能代表我们行动

Agent 如何使用生成式 AI(How AI Agents Uses Generative AI?)

生成式 AI vs Agentic AI:核心区别
维度 Generative AI Agentic AI
角色 反应式系统(Reactive) 主动式系统(Proactive)
触发 等待用户 Prompt 一个目标(常来自初始提示)
功能 生成内容 通过一系列行动追求目标
机制 复杂的模式匹配 持续的"生命周期"/循环
输出 文本、图片、代码、音频 行动结果
关键局限 它的工作在"生成"那一刻就结束了 以最少人工干预持续运转

右侧示例:用户输入"写一篇关于火星的故事"→ 模型生成一堆文本(示例文字是占位符 Lorem ipsum)------输出即终点,工作到此结束。插图:机器人坐在电脑前,用户 → 目标 → AI Agent → 结果 → 反馈回用户,形成闭环。

共同基础:LLM
  • 生成式 AI 里,LLM 是主干(backbone)
  • Agentic AI 里,LLM 是推理引擎(Reasoning Engine)------Agent 决策的大脑
应用对比:策展人 vs 经理

:YouTuber 场景(相机/平板 + YouTube 标志、桌前的用户、右下 AI 模型+大脑插画)。:机器人推着超市购物车(自主购物 Agent 的视觉隐喻)。

  • 生成式 AI = "策展人(Curator)" :YouTuber 创作视频------写脚本→AI 建议修改→人类优化提示→AI 建议缩略图→人类选择。每一步都有人类在场
  • Agentic AI = "经理(Manager)" :自主购物 Agent------主动跨平台找货→实时监控价格波动→用工具完成结账→协调配送。全程无需人类插手
深层连接:LLM 是 Agent 的"思考"

左上:思考中的机器人;右下:坐在电脑前思考的机器人;中间流程图:用户给目标 → AI Agent 对话框交互 → 返回结果。

  • Agent 怎么"决定"做什么?→ 用 LLM 的推理能力
  • 关键机制:思维链 Chain of Thought (CoT) ------把复杂任务拆成小步骤逐步思考

何时该用 Agent(When to Use AI Agents?)

核心架构抉择:工具 vs 工人

左侧:锤子 插图;右侧:穿蓝色工装、戴黄色安全帽的木匠照片。

脚本/函数 = 锤子 AI Agent = 木匠
用途 特定、明确的任务("敲这颗钉子") 通用、开放式目标("给我做个书架")
特性 确定性、快、便宜、100% 可预测 非确定性、慢、昂贵、能适应
自问 我是在敲钉子,还是在造书架?
不该用 Agent(红灯)
  • 黄金法则:能写函数就别用 Agent
  • 简单、确定、高度结构化的任务
  • 要求 100% 可预测和严格守规
  • 简单信息检索(基础 RAG 就够)
  • 没有清晰目标或无法行动
该用 Agent(绿灯)
  1. 开放式、定义不明确的问题
  2. 多步骤、多工具流程
  3. 动态环境
  4. 需要随时间改进
  5. 对话式、协作式界面
深潜:两类典型问题
  • 开放式问题:步骤序列事先未知,传统代码无法硬编码工作流;Agent 的 LLM 能在运行时决定步骤。
  • 坏例子(定义明确):CSV 转 JSON → 用脚本
  • 好例子(开放式):分析这个 CSV,给市场团队找出三条最重要的洞察
  • 多步多工具流程:单次调用解决不了;必须串联多个工具(搜索→查数据库→发邮件);需要跨多轮保持状态和记忆。

示意图:研究助手角色,右侧方框内三个子框从上到下:LLM(黄)→ Tools 工具(黄)→ Memory 记忆(黄) ------Agent 的三件套首次同框亮相。

例:研究助手 = 搜网页 + 总结文档 + 综合成报告。

决策框架(重要!)

#mermaid-svg-kes58qKUWQntvJbJ{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-kes58qKUWQntvJbJ .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-kes58qKUWQntvJbJ .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-kes58qKUWQntvJbJ .error-icon{fill:#552222;}#mermaid-svg-kes58qKUWQntvJbJ .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-kes58qKUWQntvJbJ .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-kes58qKUWQntvJbJ .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-kes58qKUWQntvJbJ .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-kes58qKUWQntvJbJ .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-kes58qKUWQntvJbJ .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-kes58qKUWQntvJbJ .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-kes58qKUWQntvJbJ .marker{fill:#333333;stroke:#333333;}#mermaid-svg-kes58qKUWQntvJbJ .marker.cross{stroke:#333333;}#mermaid-svg-kes58qKUWQntvJbJ svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-kes58qKUWQntvJbJ p{margin:0;}#mermaid-svg-kes58qKUWQntvJbJ .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-kes58qKUWQntvJbJ .cluster-label text{fill:#333;}#mermaid-svg-kes58qKUWQntvJbJ .cluster-label span{color:#333;}#mermaid-svg-kes58qKUWQntvJbJ .cluster-label span p{background-color:transparent;}#mermaid-svg-kes58qKUWQntvJbJ .label text,#mermaid-svg-kes58qKUWQntvJbJ span{fill:#333;color:#333;}#mermaid-svg-kes58qKUWQntvJbJ .node rect,#mermaid-svg-kes58qKUWQntvJbJ .node circle,#mermaid-svg-kes58qKUWQntvJbJ .node ellipse,#mermaid-svg-kes58qKUWQntvJbJ .node polygon,#mermaid-svg-kes58qKUWQntvJbJ .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-kes58qKUWQntvJbJ .rough-node .label text,#mermaid-svg-kes58qKUWQntvJbJ .node .label text,#mermaid-svg-kes58qKUWQntvJbJ .image-shape .label,#mermaid-svg-kes58qKUWQntvJbJ .icon-shape .label{text-anchor:middle;}#mermaid-svg-kes58qKUWQntvJbJ .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-kes58qKUWQntvJbJ .rough-node .label,#mermaid-svg-kes58qKUWQntvJbJ .node .label,#mermaid-svg-kes58qKUWQntvJbJ .image-shape .label,#mermaid-svg-kes58qKUWQntvJbJ .icon-shape .label{text-align:center;}#mermaid-svg-kes58qKUWQntvJbJ .node.clickable{cursor:pointer;}#mermaid-svg-kes58qKUWQntvJbJ .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-kes58qKUWQntvJbJ .arrowheadPath{fill:#333333;}#mermaid-svg-kes58qKUWQntvJbJ .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-kes58qKUWQntvJbJ .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-kes58qKUWQntvJbJ .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-kes58qKUWQntvJbJ .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-kes58qKUWQntvJbJ .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-kes58qKUWQntvJbJ .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-kes58qKUWQntvJbJ .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-kes58qKUWQntvJbJ .cluster text{fill:#333;}#mermaid-svg-kes58qKUWQntvJbJ .cluster span{color:#333;}#mermaid-svg-kes58qKUWQntvJbJ 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-kes58qKUWQntvJbJ .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-kes58qKUWQntvJbJ rect.text{fill:none;stroke-width:0;}#mermaid-svg-kes58qKUWQntvJbJ .icon-shape,#mermaid-svg-kes58qKUWQntvJbJ .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-kes58qKUWQntvJbJ .icon-shape p,#mermaid-svg-kes58qKUWQntvJbJ .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-kes58qKUWQntvJbJ .icon-shape .label rect,#mermaid-svg-kes58qKUWQntvJbJ .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-kes58qKUWQntvJbJ .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-kes58qKUWQntvJbJ .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-kes58qKUWQntvJbJ :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 否,固定步骤
部分,多步骤编排
是,需自适应
任务
需要动态决策

与外部交互?
脚本 Script

确定性流水线
工作流 Workflow

编排但无推理
Agent

感知-推理-行动循环

决策流程图:Start → Input → Process → End 的判断结构。

  1. 任务简单且确定?→ 脚本/函数
  2. 任务复杂但步骤明确?→ 工作流(Workflow)
  3. 任务复杂、开放式、动态环境?→ AI Agent
好用例的三要素
  • 开放式目标(不是具体指令)
  • 自主行动
  • 多步多工具

用例全景(Use Cases)

类别 用例 目标 → 行动(工具链)
企业自动化 企业管理员"AI 实习生" 入职新工程师:开通账号(工具1) + 发欢迎邮件(工具2) + 约 1v1 会议(工具3)
企业自动化 高级客服"Tier 2 Agent" 订单坏了:验证身份(1) + 查订单(2) + 分析损坏照片并 API 退款(3)
技术/数据 自主数据分析 分析销售 CSV:写并执行 Python 代码(1) + 生成图表(2) + 文字总结(3)
技术/数据 主动研究(Agentic RAG) 写太阳能报告:规划 + 研究 10 个网页(1) + 综合并起草(2) + 自我批判后定稿
技术/数据 AI 结对程序员 重构模块:分析代码 → 重写(1) → 跑测试(2) → 感知失败 → 循环调试自己
复杂集成 IoT 农业 提高产量省水:土壤传感器(1) + 天气 API(2) → 推理最佳时机 → 触发灌溉系统(3)
复杂集成 灾害响应(多智能体) 地震协调:Coordinator 派 Specialist 并行------Satellite_Agent 找损毁、Social_Media_Agent 找受灾者
商业/科学 电商营销 闪购成功:分析客群(1) + 写个性化邮件(2) + 实时监控 + 自动调广告预算(3)
商业/科学 医疗科研 找候选药物:规划流程 + 搜医学库(1) + 分子模拟(2) + 分析 + 汇总 Top5

Agent 的挑战与局限(Challenges & Limitations)

引入

没有"魔法"解决方案。能力越大,复杂度和风险越大。我们的工作不是构建"可能",而是构建健壮、安全、可靠的系统。

五大挑战

挑战 问题 架构师之问
1. 非确定性 传统代码确定性(2+2 恒等于 4);LLM 是随机的,同样目标每次产出略不同。这不是 bug,是模型的固有特性 怎么给"每次输出都不同"的系统写单元测试?怎么保证可靠性?
2. 安全与护栏 给自主系统访问真实工具(API/数据库/文件系统)的风险:销售 Agent 为"成交"擅自给 90% 折扣;配置错误的 Admin Agent 因模糊目标"清理数据库"而调用 DELETE /users/all 怎么在"自主+创造"的系统上强制严格权限和护栏?
3. 成本与延迟 循环里每一步都是 LLM 调用:5 步任务可能要 10--15 次调用,比脚本贵千倍;LLM 慢(秒级),5 步任务 20--30 秒,实时场景不可接受 怎么设计省成本、防"失控循环"?怎么用异步模式管理延迟?
4. 可观测性 传统代码挂了有堆栈追踪;Agent 挂了有什么?是误解目标?选错工具?还是计划逻辑错误? 怎么记录、追踪、调试 Agent 的内心独白(思维链)
5. 幻觉 LLM 生成"看似合理"而非"真实"的文本。两种幻觉:事实性 (编造事实/数字:说 50 美元实际 75 美元)和行动性(编造不存在的工具或参数:调用 search_flights(..., meal_preference) 但该参数不存在) 怎么让 Agent 扎根现实?怎么严格定义工具让它"想象"不出新工具?

用的是同一张 Agent 架构图 (Agents 框 = LLM + Tools + Memory),每翻一页就往上叠一个挑战标签 :Stochastic(随机性)→ Security & Guardrails → Cost & Latency → Observability → Hallucination------课程用这种方式表达:五大挑战全部压在这个核心架构之上,一个都不能躲

态度

这些不是障碍,而是我们的工作(These Are Not Blockers, They Are Our Job)


设计你的第一个 Agent:Weather Agent(天气智能体)

任务定义
  • 目标 :自主回答两段式用户查询------"伦敦天气怎么样,我该带伞吗?"
  • 为什么这是 Agentic 任务:不是简单问答,需要两步:
  1. 获取外部数据(天气)
  2. 基于数据推理(是否带伞的建议)
架构:组件如何连接(本段最重要的图)

#mermaid-svg-436hb6xIpKdN7Wvy{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-436hb6xIpKdN7Wvy .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-436hb6xIpKdN7Wvy .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-436hb6xIpKdN7Wvy .error-icon{fill:#552222;}#mermaid-svg-436hb6xIpKdN7Wvy .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-436hb6xIpKdN7Wvy .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-436hb6xIpKdN7Wvy .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-436hb6xIpKdN7Wvy .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-436hb6xIpKdN7Wvy .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-436hb6xIpKdN7Wvy .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-436hb6xIpKdN7Wvy .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-436hb6xIpKdN7Wvy .marker{fill:#333333;stroke:#333333;}#mermaid-svg-436hb6xIpKdN7Wvy .marker.cross{stroke:#333333;}#mermaid-svg-436hb6xIpKdN7Wvy svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-436hb6xIpKdN7Wvy p{margin:0;}#mermaid-svg-436hb6xIpKdN7Wvy .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-436hb6xIpKdN7Wvy .cluster-label text{fill:#333;}#mermaid-svg-436hb6xIpKdN7Wvy .cluster-label span{color:#333;}#mermaid-svg-436hb6xIpKdN7Wvy .cluster-label span p{background-color:transparent;}#mermaid-svg-436hb6xIpKdN7Wvy .label text,#mermaid-svg-436hb6xIpKdN7Wvy span{fill:#333;color:#333;}#mermaid-svg-436hb6xIpKdN7Wvy .node rect,#mermaid-svg-436hb6xIpKdN7Wvy .node circle,#mermaid-svg-436hb6xIpKdN7Wvy .node ellipse,#mermaid-svg-436hb6xIpKdN7Wvy .node polygon,#mermaid-svg-436hb6xIpKdN7Wvy .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-436hb6xIpKdN7Wvy .rough-node .label text,#mermaid-svg-436hb6xIpKdN7Wvy .node .label text,#mermaid-svg-436hb6xIpKdN7Wvy .image-shape .label,#mermaid-svg-436hb6xIpKdN7Wvy .icon-shape .label{text-anchor:middle;}#mermaid-svg-436hb6xIpKdN7Wvy .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-436hb6xIpKdN7Wvy .rough-node .label,#mermaid-svg-436hb6xIpKdN7Wvy .node .label,#mermaid-svg-436hb6xIpKdN7Wvy .image-shape .label,#mermaid-svg-436hb6xIpKdN7Wvy .icon-shape .label{text-align:center;}#mermaid-svg-436hb6xIpKdN7Wvy .node.clickable{cursor:pointer;}#mermaid-svg-436hb6xIpKdN7Wvy .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-436hb6xIpKdN7Wvy .arrowheadPath{fill:#333333;}#mermaid-svg-436hb6xIpKdN7Wvy .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-436hb6xIpKdN7Wvy .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-436hb6xIpKdN7Wvy .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-436hb6xIpKdN7Wvy .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-436hb6xIpKdN7Wvy .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-436hb6xIpKdN7Wvy .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-436hb6xIpKdN7Wvy .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-436hb6xIpKdN7Wvy .cluster text{fill:#333;}#mermaid-svg-436hb6xIpKdN7Wvy .cluster span{color:#333;}#mermaid-svg-436hb6xIpKdN7Wvy 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-436hb6xIpKdN7Wvy .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-436hb6xIpKdN7Wvy rect.text{fill:none;stroke-width:0;}#mermaid-svg-436hb6xIpKdN7Wvy .icon-shape,#mermaid-svg-436hb6xIpKdN7Wvy .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-436hb6xIpKdN7Wvy .icon-shape p,#mermaid-svg-436hb6xIpKdN7Wvy .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-436hb6xIpKdN7Wvy .icon-shape .label rect,#mermaid-svg-436hb6xIpKdN7Wvy .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-436hb6xIpKdN7Wvy .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-436hb6xIpKdN7Wvy .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-436hb6xIpKdN7Wvy :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 返回结果
综合回答
用户:明天北京天气?
🧠 LLM 推理

判断需要天气数据
🖐️ 工具:get_weather(city)
🌦️ 天气数据源
用户答案

架构图:

  • **用户(User)**在最左,通过 Goal(目标) 发起
  • 中间核心框 Weather Agent :包含 LLM (中间)和 Tools 工具(下方)
  • 最右:Weather Data(天气数据)------工具调用的外部数据源
  • 底部:Reasoning(推理)→ Final Answer(最终答案)(左下角)
  • 右下角问题示例:"Does light rain mean an umbrella is needed?(毛毛雨意味着需要带伞吗?)"
  • 数据流:User → Goal → Tool Call → Weather Agent → Weather Data → 推理 → 最终答案

解读 :这个架构就是"数字员工"的最小落地------LLM 负责推理(该不该带伞),Tools 负责取数(天气 API),两者结合才产出答案。取数 + 推理 = Agentic 任务的最小单元


📌 本段核心收获(一句话版)

  1. Agent 的定义 :数字员工 = 感知→推理→行动 的循环(Agentic Loop),由目标驱动而非指令。
  2. 4 原则记忆钩子:目标驱动 + 自主 + 反应 + 主动(Goal、Autonomy、Reactivity、Pro-activeness)。
  3. 生成式 AI vs Agentic AI:被动回答 vs 主动追求目标;LLM 从"骨干"变成"推理引擎";人类从"每步在场"到"只给目标"。
  4. 选择框架 :简单确定→脚本;复杂但步骤明确→工作流;复杂开放动态→Agent 。自问:"我是在敲钉子,还是造书架?"
  5. Agent 三件套首次同框:LLM + Tools + Memory------后面逐组件深挖的预告。
  6. 五大挑战 = 架构师的五大职责:非确定性、安全护栏、成本延迟、可观测性、幻觉------它们像标签一样压在同一个核心架构上。
  7. Weather Agent:取数(工具)+ 推理(LLM)= Agentic 任务最小单元,是后面所有实战的原型。
  8. 下一个里程碑:逐个深挖 Agent 的 7 大组件:🧠 Brain(LLM)→ 👁️ Senses(感知)→ 📐 Blueprint(规划)→ 📓 Notebook(记忆)→ 🖐️ Hands(行动)→ 🔄 Feedback Loop(学习)→ 🗣️ Voice(通信)。

第 3 篇


组件总览:Agent 的 7 大部件

#mermaid-svg-PW4WKSl5CrNd4AdH{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-PW4WKSl5CrNd4AdH .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-PW4WKSl5CrNd4AdH .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-PW4WKSl5CrNd4AdH .error-icon{fill:#552222;}#mermaid-svg-PW4WKSl5CrNd4AdH .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-PW4WKSl5CrNd4AdH .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-PW4WKSl5CrNd4AdH .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-PW4WKSl5CrNd4AdH .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-PW4WKSl5CrNd4AdH .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-PW4WKSl5CrNd4AdH .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-PW4WKSl5CrNd4AdH .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-PW4WKSl5CrNd4AdH .marker{fill:#333333;stroke:#333333;}#mermaid-svg-PW4WKSl5CrNd4AdH .marker.cross{stroke:#333333;}#mermaid-svg-PW4WKSl5CrNd4AdH svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-PW4WKSl5CrNd4AdH p{margin:0;}#mermaid-svg-PW4WKSl5CrNd4AdH .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-PW4WKSl5CrNd4AdH .cluster-label text{fill:#333;}#mermaid-svg-PW4WKSl5CrNd4AdH .cluster-label span{color:#333;}#mermaid-svg-PW4WKSl5CrNd4AdH .cluster-label span p{background-color:transparent;}#mermaid-svg-PW4WKSl5CrNd4AdH .label text,#mermaid-svg-PW4WKSl5CrNd4AdH span{fill:#333;color:#333;}#mermaid-svg-PW4WKSl5CrNd4AdH .node rect,#mermaid-svg-PW4WKSl5CrNd4AdH .node circle,#mermaid-svg-PW4WKSl5CrNd4AdH .node ellipse,#mermaid-svg-PW4WKSl5CrNd4AdH .node polygon,#mermaid-svg-PW4WKSl5CrNd4AdH .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-PW4WKSl5CrNd4AdH .rough-node .label text,#mermaid-svg-PW4WKSl5CrNd4AdH .node .label text,#mermaid-svg-PW4WKSl5CrNd4AdH .image-shape .label,#mermaid-svg-PW4WKSl5CrNd4AdH .icon-shape .label{text-anchor:middle;}#mermaid-svg-PW4WKSl5CrNd4AdH .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-PW4WKSl5CrNd4AdH .rough-node .label,#mermaid-svg-PW4WKSl5CrNd4AdH .node .label,#mermaid-svg-PW4WKSl5CrNd4AdH .image-shape .label,#mermaid-svg-PW4WKSl5CrNd4AdH .icon-shape .label{text-align:center;}#mermaid-svg-PW4WKSl5CrNd4AdH .node.clickable{cursor:pointer;}#mermaid-svg-PW4WKSl5CrNd4AdH .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-PW4WKSl5CrNd4AdH .arrowheadPath{fill:#333333;}#mermaid-svg-PW4WKSl5CrNd4AdH .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-PW4WKSl5CrNd4AdH .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-PW4WKSl5CrNd4AdH .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-PW4WKSl5CrNd4AdH .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-PW4WKSl5CrNd4AdH .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-PW4WKSl5CrNd4AdH .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-PW4WKSl5CrNd4AdH .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-PW4WKSl5CrNd4AdH .cluster text{fill:#333;}#mermaid-svg-PW4WKSl5CrNd4AdH .cluster span{color:#333;}#mermaid-svg-PW4WKSl5CrNd4AdH 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-PW4WKSl5CrNd4AdH .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-PW4WKSl5CrNd4AdH rect.text{fill:none;stroke-width:0;}#mermaid-svg-PW4WKSl5CrNd4AdH .icon-shape,#mermaid-svg-PW4WKSl5CrNd4AdH .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-PW4WKSl5CrNd4AdH .icon-shape p,#mermaid-svg-PW4WKSl5CrNd4AdH .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-PW4WKSl5CrNd4AdH .icon-shape .label rect,#mermaid-svg-PW4WKSl5CrNd4AdH .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-PW4WKSl5CrNd4AdH .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-PW4WKSl5CrNd4AdH .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-PW4WKSl5CrNd4AdH :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 行动层
大脑层
感知层
👁️ 感官 Senses
🧠 大脑 LLM
📐 蓝图 Blueprint 规划
📓 笔记本 Notebook 记忆
🖐️ 手 Hands 工具
🗣️ 声音 Voice 通信
🔄 反馈环 Feedback Loop 学习

  • :进入"工程师视角"(从 3 万英尺架构视角落地到地面工程视角)
  • · 组件路线图(本段主线)
# 组件 昵称 本笔记位置
1 Foundation Model 🧠 Brain 大脑
2 Perception 👁️ Senses 感官
3 Planning 📐 Blueprint/Strategist 蓝图/军师
4 Memory 📓 Notebook 笔记本
5 Action 🖐️ Hands 手
6 Learning 🔄 Feedback Loop 反馈环
7 Communication 🗣️ Voice 声音

🧠 |组件 1:大脑------基础模型(LLM)

Agent = 一台完整计算机

左右两图:左为电路板图,右为 Agent 概念图(Perception 上方是 Reason,中间 LLM,右侧 Action,底部 Tools,Tools 上方 Memory)。

Agent 组件 计算机部件
LLM(大脑) CPU(中央处理器)
Memory(记忆) RAM(内存)
Tools(工具) 外设(键盘、网卡)
什么是基础模型 / 怎么让 LLM"推理"
  • 基础模型 = 通用模式识别引擎:在海量数据(互联网/书籍/代码)上训练,学会词与概念间的统计关系;本职工作是预测下一个词(token)
  • 我们的目标:把"预测下一个词"的能力引导成"推理"
  • 技巧:让 LLM 不只输出答案,还要输出思考过程System Prompt 就是 Agent 大脑的"操作系统"
  • 两大提示模式:CoT(思维链)ReAct(推理+行动)
CoT 实例:该不该带伞?
  • 坏(无 CoT):"伦敦该带伞吗?→ 是"
  • 好(有 CoT):一步步想------①用户要建议 ②需要知道天气 ③伦敦天气是"小雨" ④小雨需要带伞 ⑤所以答案是"是"
  • 这段思考过程就是 Plan!
怎么选 LLM「大脑」?

架构三难:能力(推理质量)× 成本(每次思考的价格)× 速度(延迟)

选项 代表 适用
1. 最大能力 GPT-5、Claude 4 Opus 复杂研究/规划/代码生成(贵、慢)
2. 最快最便宜 Gemini Flash、Llama 3 8B 客服、简单抽取、聊天(复杂多步可能翻车)
3. 最大隐私 本地/开源模型 医疗、金融等敏感数据(自己运维贵)

你选的大脑决定了整个 Agent 的性格。


👁️ |组件 2:感官------感知与输入处理

感知 = 触发器
  • 大脑与世界隔绝就没用------感知模块是 Agent 与现实世界的接口
  • 感知是 Agentic Loop 的第一步:"敲门声"把 Agent "唤醒"
  • 三种触发:直接 (用户聊天消息)、异步 (API 响应、新文件、数据库更新)、定时(计划事件)
核心挑战与解决:混乱世界 → 归一化
  • 问题 :LLM 只"想"干净的结构化文本,但世界是非结构化、多模态的(带错别字的用户文本、图片视频、语音、JSON/XML、PDF/Word)
  • 解决 :感知模块 = 翻译官 ------把混乱数据转成 LLM 能读的干净文本,这叫 Normalization(归一化)/ 预处理
  • User Chat →(拼写检查)→ 干净文本
  • Image.jpg →(视觉模型)→ 图片的文字描述
  • Report.pdf →(OCR)→ 全文
  • Audio.mp3 →(语音转文字)→ 文字稿
  • API_Response.json →(总结/抽取)→ 摘要
实例:双感官客服 Agent

流程图:左侧用户输入"我的新衬衫有个洞"+ 上传 shirt_photo.jpg → 中间感知模块分两路(文本处理器清洗错别字 / 视觉处理器分析图片)→ 右侧合成干净文本送 LLM。

用户输入:"my new shrit has a hole in it"(错别字)+ 上传 shirt_photo.jpg

  1. 感知1(聊天):文本处理器清洗 → "my new shirt has a hole in it"
  2. 感知2(图片):视觉处理器分析 → "一张蓝色 T 恤照片,左袖有 2 英寸裂口"
  3. 输出给大脑的干净文本:用户的新衬衫有个洞 + 具体描述

📐 |组件 3:蓝图------规划与任务分解

为什么需要规划
  • 只会感知的 Agent 只是传感器(被动)------还需要"军师"
  • 核心问题 :"帮我订下周去伦敦的全程行程"------这不是一个动作,是一个项目,单次 LLM 调用做不了
  • Plan 是什么 :规划模块的输出,不是最终答案,而是一个数据结构------一串要执行的工具调用序列
  • 例:输入"Book my trip" → Plan = ①find_available_flights ②find_hotels ③book_flight ④book_hotel ⑤send_confirmation_email

流程图:Input("Book my trip") → Agent → Reason → Plan & Decompose(分解成 5 个工具调用)→ Environment,LLM 在环中处理。

LLM 当"分解引擎"

用特定 System Prompt 让 LLM 当规划师:①告诉它目标(来自感知)②告诉它可用工具(来自行动模块)③要求"一步步想" ④要求"只产出用这些工具的计划"

两种规划策略(重要)

左右对比:左图 CoT(Input→thought→Output 直线静态链);右图 ReAct 环路(Agent→Perception→Reason→LLM 循环)。

CoT = 静态规划 ReAct = 动态规划
方式 动手前先生成完整多步计划 一次只计划一步:执行→感知结果→再计划下一步
适用 简单、可预测的工作流 复杂、不可预测的环境

ReAct 动态规划实例(订伦敦行程,):

  • 循环1:(计划)我没有航班信息,先调 find_flights →(行动)执行→(感知)返回 {TK-123, 300美元}
  • 循环2:(再计划)状态变了,我有航班了,下一步给用户看选项 →(行动)ask_user→(感知)用户选 TK-123
  • 循环3:(再计划)状态又变了,下一步 book_flight('TK-123')
Plan 就是输出------"想"与"做"分离
  • 规划模块只负责生成计划,不执行
  • 输出是 {"tool_to_call": "find_flights", "parameters": {...}},交给下一个组件(行动模块)
  • "思考"与"行动"分离 = 核心设计原则

📓 |组件 4:笔记本------记忆架构

"土拨鼠之日"问题
  • 没有记忆,每次感知都是全新无上下文的事件;5 步计划做完第 1 步就忘了结果
  • 两种记忆

右上角大脑结构图(Perception/Reason/LLM 与 STM/LTM 的关系示意)。

短期记忆 STM(工作记忆) 长期记忆 LTM(持久记忆)
类比 清醒意识 / 电脑 RAM 知道的全部事实 / 电脑硬盘
特点 极快,但小、易失、贵 海量、永久、便宜但慢
深潜
  • STM = LLM 的上下文窗口 :装着 System Prompt(人格规则)、当前对话历史、当前计划、最近工具调用结果。上下文窗口是 Agent 最贵的资源,有限(8k/128k/1M tokens),装不下整个互联网甚至 50 页文档
  • LTM = 外部持久数据库 :存历史对话、用户偏好、大文档、知识图谱------解决上下文窗口问题:Agent 不用"全记住",只要知道去哪查
STM 与 LTM 协作 = RAG(检索增强生成)

#mermaid-svg-0rMRXPRSXdvCg9Hd{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-0rMRXPRSXdvCg9Hd .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-0rMRXPRSXdvCg9Hd .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-0rMRXPRSXdvCg9Hd .error-icon{fill:#552222;}#mermaid-svg-0rMRXPRSXdvCg9Hd .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-0rMRXPRSXdvCg9Hd .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-0rMRXPRSXdvCg9Hd .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-0rMRXPRSXdvCg9Hd .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-0rMRXPRSXdvCg9Hd .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-0rMRXPRSXdvCg9Hd .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-0rMRXPRSXdvCg9Hd .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-0rMRXPRSXdvCg9Hd .marker{fill:#333333;stroke:#333333;}#mermaid-svg-0rMRXPRSXdvCg9Hd .marker.cross{stroke:#333333;}#mermaid-svg-0rMRXPRSXdvCg9Hd svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-0rMRXPRSXdvCg9Hd p{margin:0;}#mermaid-svg-0rMRXPRSXdvCg9Hd .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-0rMRXPRSXdvCg9Hd .cluster-label text{fill:#333;}#mermaid-svg-0rMRXPRSXdvCg9Hd .cluster-label span{color:#333;}#mermaid-svg-0rMRXPRSXdvCg9Hd .cluster-label span p{background-color:transparent;}#mermaid-svg-0rMRXPRSXdvCg9Hd .label text,#mermaid-svg-0rMRXPRSXdvCg9Hd span{fill:#333;color:#333;}#mermaid-svg-0rMRXPRSXdvCg9Hd .node rect,#mermaid-svg-0rMRXPRSXdvCg9Hd .node circle,#mermaid-svg-0rMRXPRSXdvCg9Hd .node ellipse,#mermaid-svg-0rMRXPRSXdvCg9Hd .node polygon,#mermaid-svg-0rMRXPRSXdvCg9Hd .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-0rMRXPRSXdvCg9Hd .rough-node .label text,#mermaid-svg-0rMRXPRSXdvCg9Hd .node .label text,#mermaid-svg-0rMRXPRSXdvCg9Hd .image-shape .label,#mermaid-svg-0rMRXPRSXdvCg9Hd .icon-shape .label{text-anchor:middle;}#mermaid-svg-0rMRXPRSXdvCg9Hd .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-0rMRXPRSXdvCg9Hd .rough-node .label,#mermaid-svg-0rMRXPRSXdvCg9Hd .node .label,#mermaid-svg-0rMRXPRSXdvCg9Hd .image-shape .label,#mermaid-svg-0rMRXPRSXdvCg9Hd .icon-shape .label{text-align:center;}#mermaid-svg-0rMRXPRSXdvCg9Hd .node.clickable{cursor:pointer;}#mermaid-svg-0rMRXPRSXdvCg9Hd .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-0rMRXPRSXdvCg9Hd .arrowheadPath{fill:#333333;}#mermaid-svg-0rMRXPRSXdvCg9Hd .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-0rMRXPRSXdvCg9Hd .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-0rMRXPRSXdvCg9Hd .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-0rMRXPRSXdvCg9Hd .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-0rMRXPRSXdvCg9Hd .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-0rMRXPRSXdvCg9Hd .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-0rMRXPRSXdvCg9Hd .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-0rMRXPRSXdvCg9Hd .cluster text{fill:#333;}#mermaid-svg-0rMRXPRSXdvCg9Hd .cluster span{color:#333;}#mermaid-svg-0rMRXPRSXdvCg9Hd 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-0rMRXPRSXdvCg9Hd .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-0rMRXPRSXdvCg9Hd rect.text{fill:none;stroke-width:0;}#mermaid-svg-0rMRXPRSXdvCg9Hd .icon-shape,#mermaid-svg-0rMRXPRSXdvCg9Hd .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-0rMRXPRSXdvCg9Hd .icon-shape p,#mermaid-svg-0rMRXPRSXdvCg9Hd .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-0rMRXPRSXdvCg9Hd .icon-shape .label rect,#mermaid-svg-0rMRXPRSXdvCg9Hd .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-0rMRXPRSXdvCg9Hd .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-0rMRXPRSXdvCg9Hd .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-0rMRXPRSXdvCg9Hd :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 用户提问
LLM 判断:需要外部知识
检索 LTM 长期记忆

(向量库/文档库/SQL)
返回相关文档
加载进 STM 上下文窗口
LLM 结合文档生成回答

流程图(左)+ 示意(右:Query → 检索器(查询+文本) → 知识库 → Augment 增强 → Generate → Response)。

6 步循环:①(感知)用户提问 ②(计划)大脑发现需要外部数据 ③(行动-检索)搜索 LTM ④LTM 返回一小段相关事实 ⑤(增强)事实加载进 STM ⑥(生成)LLM 同时"看见"问题与答案

LTM 的三种架构模式
存储 技术 用途
Key-Value / 文档库 Firestore, MongoDB 结构化事实 + 对话历史
SQL PostgreSQL 高关系型企业数据
向量数据库 Pinecone, ChromaDB 语义/概念相似度(RAG 里的 "R")
  • 向量数据库 :存储高维向量的专用库;向量是数据的数值表示,捕捉语义;按"意思"而非关键词搜索

流程图:文档 → Embedding Model(嵌入模型)→ Vector Embeddings → Vector Database;右侧散点图展示高维空间中不同类别数据的分布。


🖐️ |组件 5:手------行动与工具调用

计划只是想法,需要"手"落地
  • 工具 = 任何允许 Agent 执行的函数/脚本/API/外部系统
  • 聊天机器人 vs Agent 的分水岭 :聊天机器人告诉你 天气,Agent 去取天气
  • 工具例子:get_weather(location)、query_database(sql)、send_email(to, body)、run_python_script(code)、call_google_calendar_api()
机制:函数调用(Function Calling)

示意图:用户问"What's the weather in Hawaii?" → 应用 → LLM 返回工具调用 call_abc123(get_weather, Hawaii) → 应用暂停 LLM 并执行真实 API。

  1. 告诉 LLM 有哪些工具:把 schema(函数列表)放进 prompt
  2. LLM 计划一次调用:输出匹配 schema 的结构化 JSON
  3. 我们的系统执行:应用代码收到 JSON,暂停 LLM,跑真实的 Python/API 调用
ReAct 交接详解(6 步)

#mermaid-svg-8jKAghuMdeDwUiSF{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-8jKAghuMdeDwUiSF .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-8jKAghuMdeDwUiSF .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-8jKAghuMdeDwUiSF .error-icon{fill:#552222;}#mermaid-svg-8jKAghuMdeDwUiSF .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-8jKAghuMdeDwUiSF .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-8jKAghuMdeDwUiSF .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-8jKAghuMdeDwUiSF .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-8jKAghuMdeDwUiSF .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-8jKAghuMdeDwUiSF .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-8jKAghuMdeDwUiSF .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-8jKAghuMdeDwUiSF .marker{fill:#333333;stroke:#333333;}#mermaid-svg-8jKAghuMdeDwUiSF .marker.cross{stroke:#333333;}#mermaid-svg-8jKAghuMdeDwUiSF svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-8jKAghuMdeDwUiSF p{margin:0;}#mermaid-svg-8jKAghuMdeDwUiSF .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-8jKAghuMdeDwUiSF .cluster-label text{fill:#333;}#mermaid-svg-8jKAghuMdeDwUiSF .cluster-label span{color:#333;}#mermaid-svg-8jKAghuMdeDwUiSF .cluster-label span p{background-color:transparent;}#mermaid-svg-8jKAghuMdeDwUiSF .label text,#mermaid-svg-8jKAghuMdeDwUiSF span{fill:#333;color:#333;}#mermaid-svg-8jKAghuMdeDwUiSF .node rect,#mermaid-svg-8jKAghuMdeDwUiSF .node circle,#mermaid-svg-8jKAghuMdeDwUiSF .node ellipse,#mermaid-svg-8jKAghuMdeDwUiSF .node polygon,#mermaid-svg-8jKAghuMdeDwUiSF .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-8jKAghuMdeDwUiSF .rough-node .label text,#mermaid-svg-8jKAghuMdeDwUiSF .node .label text,#mermaid-svg-8jKAghuMdeDwUiSF .image-shape .label,#mermaid-svg-8jKAghuMdeDwUiSF .icon-shape .label{text-anchor:middle;}#mermaid-svg-8jKAghuMdeDwUiSF .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-8jKAghuMdeDwUiSF .rough-node .label,#mermaid-svg-8jKAghuMdeDwUiSF .node .label,#mermaid-svg-8jKAghuMdeDwUiSF .image-shape .label,#mermaid-svg-8jKAghuMdeDwUiSF .icon-shape .label{text-align:center;}#mermaid-svg-8jKAghuMdeDwUiSF .node.clickable{cursor:pointer;}#mermaid-svg-8jKAghuMdeDwUiSF .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-8jKAghuMdeDwUiSF .arrowheadPath{fill:#333333;}#mermaid-svg-8jKAghuMdeDwUiSF .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-8jKAghuMdeDwUiSF .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-8jKAghuMdeDwUiSF .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-8jKAghuMdeDwUiSF .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-8jKAghuMdeDwUiSF .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-8jKAghuMdeDwUiSF .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-8jKAghuMdeDwUiSF .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-8jKAghuMdeDwUiSF .cluster text{fill:#333;}#mermaid-svg-8jKAghuMdeDwUiSF .cluster span{color:#333;}#mermaid-svg-8jKAghuMdeDwUiSF 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-8jKAghuMdeDwUiSF .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-8jKAghuMdeDwUiSF rect.text{fill:none;stroke-width:0;}#mermaid-svg-8jKAghuMdeDwUiSF .icon-shape,#mermaid-svg-8jKAghuMdeDwUiSF .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-8jKAghuMdeDwUiSF .icon-shape p,#mermaid-svg-8jKAghuMdeDwUiSF .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-8jKAghuMdeDwUiSF .icon-shape .label rect,#mermaid-svg-8jKAghuMdeDwUiSF .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-8jKAghuMdeDwUiSF .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-8jKAghuMdeDwUiSF .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-8jKAghuMdeDwUiSF :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 信息不足,循环
信息足够
Think 思考

下一步做什么
Act 行动

调用工具
Observe 观察

查看结果
最终回答

  1. 大脑(LLM):计划"我需要天气"→ 生成 JSON {"call": "get_weather", "location": "Paris"}
  2. 行动模块(调度器):接住 JSON,"大脑想要工具"
  3. 行动模块(手):执行真实函数 get_weather("Paris")
  4. 工具:返回 {"temp": "15C", "condition": "Cloudy"}
  5. 行动模块(手):把结果作为"感知"喂回 LLM
  6. 大脑(LLM):巴黎 15°C 多云------现在可以回答用户了
架构总图

与同款架构图:User → Reasoning → Final Answer;中间 Weather Agent(LLM + Tools)→ Tool Call → Weather Data。七组件装配在同一张架构上

安全与护栏(本模块最重要主题)

噩梦场景 :目标"清理测试库的旧用户"→ Agent 的"合理"计划是 DELETE /users → 结果误删了生产库

配图:红白相间路障图案(安全屏障的视觉隐喻)+ 人类图标(HITL)。

三大护栏:

  1. 最小权限原则:绝不给"万能钥匙"(如 run_python_script);天气 Agent 只该有 get_weather
  2. 读优先 vs 写:强烈倾向读工具;对写工具(send_email、delete_record)极度谨慎
  3. 人类介入确认(HITL) :一切写/破坏性操作的终极安全网------Agent 计划 {"call": "send_email"} 时系统暂停,弹给人类 批准 拒绝

🔄 |组件 6:反馈环------学习与适应

静态缺陷与双循环架构
  • 现有 Agent 能执行,但是静态的:计划低效、记忆错误都没法自我改进
  • 双循环

架构图:右下角完整 Agent 架构(Perception/Reason/Action/Memory/Tools/Environment/LLM)+ Learn 模块;左上角简化流程 Perceive→Reason→Act。

  • 循环1 性能环(演员):现有整套 Agent,Perceive→Reason→Act,快、逐轮运转
  • 循环2 学习环(更新者) :更高级的慢循环,观察演员表现,负责改进
两个新组件
  • Critic(评论家/评估器):观察动作与结果,对比"成功标准",生成反馈信号------"上一步达到子目标了吗?为什么失败(API key 无效)?高效吗(工具太慢)?对整体目标有帮助吗?"
  • Learning Element(学习元素/更新者):接收反馈信号,对演员的组件做技术更新
反馈信号两种来源

右上插图:SPAM 标志邮件 + 人形图标(用户当评论家);左下插图:机器人下棋(环境当评论家)。

  • 显式(人类介入):用户是评论家------邮件"这是垃圾邮件"按钮、👍/👎、用户纠正
  • 隐式(环境):Agent 自己当评论家------象棋 AI 输棋(信号)、API 返回错误、销售邮件无人回复
更新机制(由浅入深)
  1. 更新记忆(LTM) :反馈"这个事实错了" → vector_db.delete(fact_id)
  2. 更新规划:反馈"这个 5 步计划失败了" → 在 LTM 存 memo"别再试这个计划"
  3. 更新效用函数(最先进 = 强化学习):反馈"用户讨厌最快但收费的路线" → 给"收费路"调高负权重

垃圾邮件过滤器实例

  1. 演员规则:IF 主题含 "report" THEN 放收件箱
  2. 结果:垃圾邮件主题"Free Report on Drugs"被放行了
  3. 反馈:你标记为垃圾 → 学习元素分析邮件文本
  4. 更新:规则变成 IF ("report") AND NOT ("Drugs") THEN 收件箱

🗣️ |组件 7:声音------Agent 通信

听众问题:两种通信

右上角示意图:两个软件 Agent 之间用结构化数据通信。

Agent→人类 (A2H) Agent→Agent (A2A)
听众 终端用户 另一个软件 Agent
格式 非结构化自然语言 结构化无歧义数据 (JSON)
目标 有帮助、共情、易懂 精确、机器可读、高效
A2H 深潜

这是推理循环的最后一步 = 一次"综合(Synthesis)"调用:

  1. 工具循环已完成;内部状态:{"goal": "订巴黎机票", "result": {"id": "TK-123", "status": "CONFIRMED"}}
  2. 综合提示词:"你是友好旅行助手,内部系统刚完成用户的请求,请用友好自然的方式告知"
  3. 最终声音:"好消息!您的巴黎航班已订好,确认号 TK-123,旅途愉快!"
A2A 深潜------多智能体系统的引擎
  • 坏例子(用 A2H 方式对 Agent 说话):"嘿 Agent,能帮我查一下纽约的天气吗?"------慢、有歧义、贵(一次 LLM 调用)、不可机器读取
  • 原则:人类之间用散文(A2H),服务器之间用 API/JSON(A2A)------Agent 之间要像服务器一样说话
  • 解决方案 = 标准协议(如 MCP):

:三个 Agent(Agent1/2/3)通过 A2A 箭头互联。

  • 请求:{"agent_id": "travel_agent", "task": "get_weather", "parameters": {"location": "New York"}}
  • 响应:{"status": "success", "data": {"temp": "18C", "condition": "Sunny"}}

🛠️ |实战:搭建 Research Assistant(研究助手)

任务
  • 目标:自主撰写关于复杂主题的简短事实报告
  • 用户请求(感知):"给我写一份关于巴黎历史的简短报告"
  • 为什么是 Agentic 任务:内部训练数据可能过时------必须计划:①search_for_info ②analyze_results ③write_report
5 步配方(Lab Plan)

#mermaid-svg-xv9GJTKOC8xV0Vqd{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-xv9GJTKOC8xV0Vqd .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-xv9GJTKOC8xV0Vqd .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-xv9GJTKOC8xV0Vqd .error-icon{fill:#552222;}#mermaid-svg-xv9GJTKOC8xV0Vqd .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-xv9GJTKOC8xV0Vqd .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-xv9GJTKOC8xV0Vqd .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-xv9GJTKOC8xV0Vqd .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-xv9GJTKOC8xV0Vqd .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-xv9GJTKOC8xV0Vqd .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-xv9GJTKOC8xV0Vqd .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-xv9GJTKOC8xV0Vqd .marker{fill:#333333;stroke:#333333;}#mermaid-svg-xv9GJTKOC8xV0Vqd .marker.cross{stroke:#333333;}#mermaid-svg-xv9GJTKOC8xV0Vqd svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-xv9GJTKOC8xV0Vqd p{margin:0;}#mermaid-svg-xv9GJTKOC8xV0Vqd .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-xv9GJTKOC8xV0Vqd .cluster-label text{fill:#333;}#mermaid-svg-xv9GJTKOC8xV0Vqd .cluster-label span{color:#333;}#mermaid-svg-xv9GJTKOC8xV0Vqd .cluster-label span p{background-color:transparent;}#mermaid-svg-xv9GJTKOC8xV0Vqd .label text,#mermaid-svg-xv9GJTKOC8xV0Vqd span{fill:#333;color:#333;}#mermaid-svg-xv9GJTKOC8xV0Vqd .node rect,#mermaid-svg-xv9GJTKOC8xV0Vqd .node circle,#mermaid-svg-xv9GJTKOC8xV0Vqd .node ellipse,#mermaid-svg-xv9GJTKOC8xV0Vqd .node polygon,#mermaid-svg-xv9GJTKOC8xV0Vqd .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-xv9GJTKOC8xV0Vqd .rough-node .label text,#mermaid-svg-xv9GJTKOC8xV0Vqd .node .label text,#mermaid-svg-xv9GJTKOC8xV0Vqd .image-shape .label,#mermaid-svg-xv9GJTKOC8xV0Vqd .icon-shape .label{text-anchor:middle;}#mermaid-svg-xv9GJTKOC8xV0Vqd .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-xv9GJTKOC8xV0Vqd .rough-node .label,#mermaid-svg-xv9GJTKOC8xV0Vqd .node .label,#mermaid-svg-xv9GJTKOC8xV0Vqd .image-shape .label,#mermaid-svg-xv9GJTKOC8xV0Vqd .icon-shape .label{text-align:center;}#mermaid-svg-xv9GJTKOC8xV0Vqd .node.clickable{cursor:pointer;}#mermaid-svg-xv9GJTKOC8xV0Vqd .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-xv9GJTKOC8xV0Vqd .arrowheadPath{fill:#333333;}#mermaid-svg-xv9GJTKOC8xV0Vqd .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-xv9GJTKOC8xV0Vqd .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-xv9GJTKOC8xV0Vqd .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-xv9GJTKOC8xV0Vqd .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-xv9GJTKOC8xV0Vqd .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-xv9GJTKOC8xV0Vqd .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-xv9GJTKOC8xV0Vqd .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-xv9GJTKOC8xV0Vqd .cluster text{fill:#333;}#mermaid-svg-xv9GJTKOC8xV0Vqd .cluster span{color:#333;}#mermaid-svg-xv9GJTKOC8xV0Vqd 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-xv9GJTKOC8xV0Vqd .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-xv9GJTKOC8xV0Vqd rect.text{fill:none;stroke-width:0;}#mermaid-svg-xv9GJTKOC8xV0Vqd .icon-shape,#mermaid-svg-xv9GJTKOC8xV0Vqd .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-xv9GJTKOC8xV0Vqd .icon-shape p,#mermaid-svg-xv9GJTKOC8xV0Vqd .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-xv9GJTKOC8xV0Vqd .icon-shape .label rect,#mermaid-svg-xv9GJTKOC8xV0Vqd .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-xv9GJTKOC8xV0Vqd .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-xv9GJTKOC8xV0Vqd .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-xv9GJTKOC8xV0Vqd :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 再搜索

  1. 灵魂 Soul

System Prompt
2. 大脑 Brain

选择 LLM
3. 手 Hands

web_search 工具
4. 记忆 Memory

chat_history + LTM
5. 循环 Loop

ReAct 逻辑

流程图:Agent → LLM(上方 Perception,下方两个工具图标)→ Environment(Action)→ Learn(Tools/Memory);右上插图三人围绕大脑,标注 PERCEPTION/REASONING/ACTION。

  1. 定义"灵魂"(System Prompt)
  2. 选"大脑"(LLM)
  3. 定义"手"(web_search 工具)
  4. 架构"记忆"(短期 scratchpad)
  5. 写"循环"(编排代码)
逐步实现
  • Step 1 灵魂:System Prompt------"你是研究助手,必须用 web_search 收集信息,不得凭自己知识回答,必须先搜索→分析→写报告"
  • Step 2 大脑:复杂推理任务 → 选高能力模型(GPT-5/Claude 4/Gemini Advanced)
  • Step 3 手 :Python 函数 web_search(query)(模拟返回"埃菲尔铁塔由古斯塔夫·埃菲尔建造...")+ JSON schema 说明书 {"name": "web_search", "description": "Searches the web", "parameters": {"query": "string"}}

:Research Agent ↔ LLM(GPT/Gemini) ↔ JSON response 的连接关系图。

  • Step 4 记忆 :短期 = Python list chat_history = [](存用户消息+工具结果);长期 = 外部数据库(web_search 模拟访问"互联网"这个超大 LTM)
  • Step 5 循环(ReAct 逻辑):
  • 循环1:感知"巴黎历史报告" → 推理"系统提示要求用工具" → 行动:LLM 返回 {"tool_call": "web_search", "query": "history of Paris"} → 代码执行函数 → 结果存进记忆列表
  • 循环2:推理"现在有目标和搜索结果,该综合成报告" → 行动:LLM 生成自然语言报告
完整流程与里程碑

全流程:用户图标(输入目标"Report history of Paris")→ Research Agent 框内(绿色 LLM + 黄色 Tools + short-term/long-term 记忆块)→ 标注箭头:system prompt → Reasoning → web_search → JSON response → 输出 "synthesize report" → "Final Answer"。

里程碑:你已能识别、架构、构建 Agent 的所有核心组件------从"Agent 用户"升级为"Agent 构建者"。


🔁 |PRAL 循环深潜(智能体的"心跳")

总览

#mermaid-svg-nXMn9MGJUNS7pnPi{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-nXMn9MGJUNS7pnPi .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-nXMn9MGJUNS7pnPi .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-nXMn9MGJUNS7pnPi .error-icon{fill:#552222;}#mermaid-svg-nXMn9MGJUNS7pnPi .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-nXMn9MGJUNS7pnPi .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-nXMn9MGJUNS7pnPi .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-nXMn9MGJUNS7pnPi .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-nXMn9MGJUNS7pnPi .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-nXMn9MGJUNS7pnPi .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-nXMn9MGJUNS7pnPi .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-nXMn9MGJUNS7pnPi .marker{fill:#333333;stroke:#333333;}#mermaid-svg-nXMn9MGJUNS7pnPi .marker.cross{stroke:#333333;}#mermaid-svg-nXMn9MGJUNS7pnPi svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-nXMn9MGJUNS7pnPi p{margin:0;}#mermaid-svg-nXMn9MGJUNS7pnPi .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-nXMn9MGJUNS7pnPi .cluster-label text{fill:#333;}#mermaid-svg-nXMn9MGJUNS7pnPi .cluster-label span{color:#333;}#mermaid-svg-nXMn9MGJUNS7pnPi .cluster-label span p{background-color:transparent;}#mermaid-svg-nXMn9MGJUNS7pnPi .label text,#mermaid-svg-nXMn9MGJUNS7pnPi span{fill:#333;color:#333;}#mermaid-svg-nXMn9MGJUNS7pnPi .node rect,#mermaid-svg-nXMn9MGJUNS7pnPi .node circle,#mermaid-svg-nXMn9MGJUNS7pnPi .node ellipse,#mermaid-svg-nXMn9MGJUNS7pnPi .node polygon,#mermaid-svg-nXMn9MGJUNS7pnPi .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-nXMn9MGJUNS7pnPi .rough-node .label text,#mermaid-svg-nXMn9MGJUNS7pnPi .node .label text,#mermaid-svg-nXMn9MGJUNS7pnPi .image-shape .label,#mermaid-svg-nXMn9MGJUNS7pnPi .icon-shape .label{text-anchor:middle;}#mermaid-svg-nXMn9MGJUNS7pnPi .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-nXMn9MGJUNS7pnPi .rough-node .label,#mermaid-svg-nXMn9MGJUNS7pnPi .node .label,#mermaid-svg-nXMn9MGJUNS7pnPi .image-shape .label,#mermaid-svg-nXMn9MGJUNS7pnPi .icon-shape .label{text-align:center;}#mermaid-svg-nXMn9MGJUNS7pnPi .node.clickable{cursor:pointer;}#mermaid-svg-nXMn9MGJUNS7pnPi .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-nXMn9MGJUNS7pnPi .arrowheadPath{fill:#333333;}#mermaid-svg-nXMn9MGJUNS7pnPi .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-nXMn9MGJUNS7pnPi .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-nXMn9MGJUNS7pnPi .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-nXMn9MGJUNS7pnPi .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-nXMn9MGJUNS7pnPi .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-nXMn9MGJUNS7pnPi .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-nXMn9MGJUNS7pnPi .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-nXMn9MGJUNS7pnPi .cluster text{fill:#333;}#mermaid-svg-nXMn9MGJUNS7pnPi .cluster span{color:#333;}#mermaid-svg-nXMn9MGJUNS7pnPi 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-nXMn9MGJUNS7pnPi .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-nXMn9MGJUNS7pnPi rect.text{fill:none;stroke-width:0;}#mermaid-svg-nXMn9MGJUNS7pnPi .icon-shape,#mermaid-svg-nXMn9MGJUNS7pnPi .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-nXMn9MGJUNS7pnPi .icon-shape p,#mermaid-svg-nXMn9MGJUNS7pnPi .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-nXMn9MGJUNS7pnPi .icon-shape .label rect,#mermaid-svg-nXMn9MGJUNS7pnPi .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-nXMn9MGJUNS7pnPi .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-nXMn9MGJUNS7pnPi .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-nXMn9MGJUNS7pnPi :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 下一循环
Perceive 感知

归一化输入
Reason 推理

形成 JSON 计划
Act 行动

执行工具
Learn 学习

更新记忆/计划

流程图:Perception → Reason → Learn → Action → 回到 Perception 成环,中间是 Agent 思维图标。

Agentic Loop(PRAL)= 每个 Agent 的"操作系统/心跳"

  1. Perception 感知:"网关"------如何感知世界
  2. Reasoning 推理:"大脑"------如何思考规划
  3. Action 行动:"手"------如何影响世界
  4. Learning 学习:"记忆"------如何自我改进
Phase 1 感知
  • 触发:用户输入 / API 响应 / 传感器数据(25.5°C)------多样、原始、混乱
  • 关键过程:归一化------Image→视觉模型→文本;Audio→语音转文字;JSON→解析器→"订单123状态已发货"
  • 输出:内部表示(干净文本)= 第一次数据变换

流程图:Perception(大脑图标)→ LLM → Environment(图片/音频/API 响应等输入),右侧标注 Translation to LLM、Reason/Learn/Action(The Agent Loop),底部是具体转换例子。

Phase 2 推理
  • 输入:归一化感知 + 记忆中的相关上下文
  • 过程:①理解(LLM 解读全部上下文)②计划(目标分解成步骤=CoT)③决策(选下一步行动=调工具)
  • 关键输出:Action Plan(JSON 结构化对象)= 第二次数据变换------LLM 的文本"想法"翻译成机器可读格式

示例:用户问"What's the weather in Hawaii?" → 模型推理 → 输出 JSON 计划对象。

Phase 3 行动
  • 过程:①解析(非 LLM 的调度器解析 JSON)②执行(调用真实代码)③影响环境(函数跑 API/查库)
  • 关键输出:"闭合循环" ------工具结果 {"status": "shipped", "eta": "2025-11-12"} 不是终点!它被喂回起点,成为下一轮感知的触发器:感知(API结果)→推理(现在知道状态了)→行动(告诉用户)

循环图:Loop 2 的 Phase 1(Perceive)/Phase 2(Reason)/Phase 3(Action) 明确标出。

Phase 4 学习(元循环)
  • 可选,架在 PRAL 之上:任务完成后 Critic 复盘完整记录(方案有效吗?高效吗?用户满意吗?)→ 适应:更新记忆 / 更新规划(先 get_order_status 再 search_faq 更高效)/ 更新效用(用户满意这类回答→加分)

箭头图:Learn 模块向 Reason、Action、Tools、Memory 都有连线------学习结果要能更新其他所有组件。

PRAL 旅程总结

左侧流程图:Perceive(原始→文本)→ Reason(文本+记忆→JSON计划)→ Act(JSON→工具结果)→ Loop(工具结果→Perceive)→ Learn(最终结果→更新记忆/计划)。

Perceive :原始输入 → 归一化文本

Reason :(文本+记忆) → JSON 计划

Act :JSON 计划 → 工具结果(原始数据)

(Loop) :工具结果 → Perceive

Learn:(最终结果) → 更新记忆/计划

PRAL 流程是一切 Agentic 行为的引擎


🏥 |PRAL 双案例:ChatGPT 与医疗 Agent

案例 1:ChatGPT(数字域)------

  • Phase 1 感知 :你对手机说话"帮我找家好的海鲜餐厅"(音频)→ 语音转文字 → 感知模块丢弃你的语气(讽刺、情绪都不感知,只听内容)→ 干净文本"找一家高级海鲜餐厅"
  • Phase 2 推理:输入 = 归一化文本 + 记忆上下文("用户住在西雅图"、"历史聊天")→ 思考:①用户要高级海鲜 ②记忆说住西雅图 ③这需要实时信息(营业时间、评价)我没有 ④所以计划用 web_search 工具 → 输出 JSON 计划
  • Phase 3 行动 + 闭合循环 :调度器解析 JSON → 执行 web_search → 结果(5 家餐厅的 JSON)喂回 Phase 1 → 循环2:感知(结果归一化为文本)→ 推理(有列表了,综合呈现给用户)→ 行动(生成你看到的文字回答)

"ChatGPT Agent with Loop"架构图:Agent(人形图标)↔ User Prompt;各彩色模块:绿色 Perception(电话图标)、黄色 Action(放大镜)、紫色 Learn、蓝色 Reason(大脑)、紫色 Memory(圆柱体)、蓝色 Tools、蓝色 WWW/Search------ChatGPT 内部就是一套完整 PRAL Agent

案例 2:医疗 Agent(赛博物理域)------

  • Phase 1 感知:ICU 病人高速混乱数据流------vitals.json (HR:125, BP:80/50)、lab_results.pdf、radiology_image.dcm

环境图:ICU 病人 + 三类输入(vitals.json / lab_results.pdf / radiology_image.dcm)→ 归一化(过滤 + Viz.ai 影像翻译)→ 输出"4A 床生命体征不稳定"。

  • 归一化:①过滤 :只在异常数据触发(HR>120)②翻译:专用模型(如 Viz.ai)把影像转成文本"放射影像显示左侧异常"
  • 输出:"4A 床病人生命体征不稳定 (HR:125)。新放射报告:左侧异常"
  • Phase 2 推理:输入 + 记忆("病人青霉素过敏"、"病史")→ 目标:患者存活 → 思考:①病人不稳定+新未知异常 ②必须尊重青霉素过敏 ③计划:需要更多信息------搜 PubMed + 开新的 STAT 血检 → 输出多工具 JSON 计划
  • Phase 3 行动:执行 search_pubmed + order_test → 结果喂回感知 → 循环2:基于新数据推理 → 形成最终计划(推荐药物 X)
  • Phase 4 学习/安全最终计划不自动执行!停下来交给**人类介入(医生)**批准 → 医生反馈("正确,批准")作为学习输入改进未来模型

"Healthcare Agent with Loop"架构图:Agent(Perception 接收 Lab/Vitals/Images → Reason → Action → Learn)+ Tools(PubMed、Viz.ai)+ Memory + LLM,右侧显著标注 Human-in-the-Loop: Dr verifies(医生验证)------医疗场景中人类是最终决策者。

双域总结(预告,下批详述)

PRAL 是通用流程:ChatGPT 感知用户命令/用网页搜索推理/用生成文本行动;医疗 Agent 感知病人数据流/用病史+专业搜索推理/用开检查单+推荐治疗行动。


📌 本段核心收获(一句话版)

  1. Agent = 7 部件:🧠大脑 → 👁️感官 → 📐军师 → 📓笔记本 → 🖐️手 → 🔄反馈环 → 🗣️声音,逐个可独立设计。
  2. 大脑:LLM = CPU;System Prompt = 操作系统;CoT/ReAct 让"预测下一个词"变成"推理";选型三角 = 能力×成本×速度。
  3. 感官:世界是混乱多模态的,感知模块是"翻译官"------归一化成干净文本(第一次数据变换)。
  4. 军师 :复杂目标要分解成计划;Plan = 工具调用序列的数据结构;CoT 静态规划 vs ReAct 动态规划;"想"与"做"分离是核心原则。
  5. 笔记本 :STM(上下文窗口)最贵最有限;LTM(数据库)解决"土拨鼠之日";RAG = STM↔LTM 的桥;向量库存"语义"。
  6. :工具 = 聊天机器人与 Agent 的分水岭;函数调用 = 大脑↔手的桥梁;安全三原则:最小权限、读优先、HITL 确认------护栏不是附加品,是核心设计。
  7. 反馈环:双循环(性能环+学习环);Critic 评估 + Learner 更新;从更新记忆→更新计划→强化学习逐级进阶。
  8. 声音:对人对 Agent 要"说不同的语言"------A2H 自然语言(综合提示词),A2A 结构化 JSON(协议如 MCP)。
  9. Research Assistant 五步配方:灵魂→大脑→手→记忆→循环,就是"从零建 Agent"的通用流程。
  10. PRAL = Agent 的心跳 :感知(归一化)→推理(出 JSON 计划)→行动(执行+闭合循环)→学习(复盘改进);ChatGPT 与医疗两个案例证明它在数字域和物理域同样适用------医疗案例里最终决策必须 HITL(医生批准)
  11. 下一段预告:多智能体时代------单 Agent 的极限、Agentic AI(工厂)、编排 vs 编舞。

第 4 篇


上节收尾:PRAL 双域总结

PRAL 是通用流程

  • ChatGPT(数字域):感知用户命令 / 用网页搜索推理 / 用生成文本行动
  • 医疗 Agent(赛博物理域):感知病人数据流 / 用病史+专业搜索推理 / 用开检查单+推荐治疗行动

从单个 Agent 到 Agentic AI(多智能体时代)

三阶段回顾

顾问(被动问答)→ 工人(有手和笔记本)→ 工厂(多 Agent 协作系统)。对比表与相同。

新问题:单个"工人"的极限
  • 问题太大/太复杂,一个 Agent 搞不定怎么办?
  • 问题分布在多个部门怎么办?
  • 不需要一个通才,而需要 10 个专才团队怎么办?

必须从"造一个工人"升级为"设计整座工厂"

正式定义
AI Agent Agentic AI
是...... 组件(Component) 系统(System)
定义 能感知、推理、用工具行动的参与者 包含一个或多个 Agent 协作解决复杂目标的架构
类比 单个"工人" 整个"工厂/公司"

右侧两幅插图:单独一个机器人 (= AI Agent)vs 一群机器人协作(= Agentic AI)------一眼看懂"组件 vs 系统"。

视角转变:从"心理学"到"社会学"
  • AI Agent = "Agent 心理学":单个 Agent 怎么思考?怎么规划?怎么记忆?
  • Agentic AI = "Agent 社会学":多个 Agent 怎么互动?怎么通信?怎么协调行动?怎么为共同目标协作?
两个核心类比
自由职业者(AI Agent) 软件公司(Agentic AI)
范围 组件 系统
由什么定义 它的解剖学(大脑好不好?记忆好不好?工具有没有?) 它的架构(通信协议 Slack/Email/MCP、协调模式 PM/Orchestrator、协作目标)
首要挑战 任务执行:这一个 Agent 能完成我给的任务吗? 系统编排:我的专才们怎么协作解决一个人搞不定的问题?

:左上机器人 + 内部流程图(Perception → Reason → Tools → Action → Memory)。:Agent1/Agent2/Agent3 方框互联的"公司"架构图。

架构重心转移
  • Agent:关注实现------做什么工具?System Prompt 好不好?记忆怎么管?
  • Agentic AI:关注交互与集成------Agent 间通信协议?协调模式(编排 vs 编舞)?共享状态和资源冲突怎么管?
什么是多智能体系统(MAS)?

MAS = ①多个 Agent (两个以上自主 Agent)②共享环境 (共同操作的"世界":企业数据、API、消息总线)③共同目标(单 Agent 能力之外的问题)

  • 关键区别
  • 单个"巨型 Agent":一个大脑,很多工具
  • MAS:很多专才大脑,各带各的工具(模块化、灵活、有韧性)

三个 Agent(各有大脑)通过箭头协作,共同把复杂目标加工成结果。

什么是 Agentic 架构?

整合一个或多个自主 Agent + 数据源 + 工具 + 通信路径,实现复杂高层目标的系统设计。回答"系统级问题":Agent 间怎么通信?工作流怎么控制(编排 vs 编舞)?状态和记忆怎么大规模管理?怎么和非 Agent 组件(E-Shop 微服务)集成?

核心模式:Agent-as-a-Service(最常用、可扩展)
  • Agent = 长期运行、有状态、可寻址的服务
  • 实现:每个 Agent 有唯一端点(API 或消息队列主题);维护自己的内部状态和记忆;可被其他服务(用户或其他 Agent)调用
  • 这让 Agent 成为微服务世界的"一等公民"

Agentic AI 总图:Agent1/2/3 各自独立 + 下方流程图(复杂目标 → 协作 → 结果)。

为什么需要正式架构?

造一个 Agent 容易,造一个企业级 Agent 系统很难:

  1. 可扩展性:怎么管理 10,000 个并发运行的 Agent?
  2. 可靠性与韧性:Agent 任务中途失败怎么办?系统怎么恢复?
  3. 可管理性与治理:怎么监控、调试、保护非确定性 Agent?怎么在大规模下控制 token 成本?

两大协调模式:Orchestration vs Choreography

核心问题:协调自主行动者
  • 多个独立 Agent,各有目标和工具------怎么保证它们为更大的系统目标协作而不混乱?
  • 任务怎么分解?子任务怎么分配?结果怎么通信?行动怎么同步?
  • 答案:必须实现清晰的协调模式
两大模式

#mermaid-svg-vjzP4uEm4BTJcDbF{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-vjzP4uEm4BTJcDbF .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-vjzP4uEm4BTJcDbF .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-vjzP4uEm4BTJcDbF .error-icon{fill:#552222;}#mermaid-svg-vjzP4uEm4BTJcDbF .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-vjzP4uEm4BTJcDbF .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-vjzP4uEm4BTJcDbF .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-vjzP4uEm4BTJcDbF .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-vjzP4uEm4BTJcDbF .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-vjzP4uEm4BTJcDbF .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-vjzP4uEm4BTJcDbF .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-vjzP4uEm4BTJcDbF .marker{fill:#333333;stroke:#333333;}#mermaid-svg-vjzP4uEm4BTJcDbF .marker.cross{stroke:#333333;}#mermaid-svg-vjzP4uEm4BTJcDbF svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-vjzP4uEm4BTJcDbF p{margin:0;}#mermaid-svg-vjzP4uEm4BTJcDbF .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-vjzP4uEm4BTJcDbF .cluster-label text{fill:#333;}#mermaid-svg-vjzP4uEm4BTJcDbF .cluster-label span{color:#333;}#mermaid-svg-vjzP4uEm4BTJcDbF .cluster-label span p{background-color:transparent;}#mermaid-svg-vjzP4uEm4BTJcDbF .label text,#mermaid-svg-vjzP4uEm4BTJcDbF span{fill:#333;color:#333;}#mermaid-svg-vjzP4uEm4BTJcDbF .node rect,#mermaid-svg-vjzP4uEm4BTJcDbF .node circle,#mermaid-svg-vjzP4uEm4BTJcDbF .node ellipse,#mermaid-svg-vjzP4uEm4BTJcDbF .node polygon,#mermaid-svg-vjzP4uEm4BTJcDbF .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-vjzP4uEm4BTJcDbF .rough-node .label text,#mermaid-svg-vjzP4uEm4BTJcDbF .node .label text,#mermaid-svg-vjzP4uEm4BTJcDbF .image-shape .label,#mermaid-svg-vjzP4uEm4BTJcDbF .icon-shape .label{text-anchor:middle;}#mermaid-svg-vjzP4uEm4BTJcDbF .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-vjzP4uEm4BTJcDbF .rough-node .label,#mermaid-svg-vjzP4uEm4BTJcDbF .node .label,#mermaid-svg-vjzP4uEm4BTJcDbF .image-shape .label,#mermaid-svg-vjzP4uEm4BTJcDbF .icon-shape .label{text-align:center;}#mermaid-svg-vjzP4uEm4BTJcDbF .node.clickable{cursor:pointer;}#mermaid-svg-vjzP4uEm4BTJcDbF .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-vjzP4uEm4BTJcDbF .arrowheadPath{fill:#333333;}#mermaid-svg-vjzP4uEm4BTJcDbF .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-vjzP4uEm4BTJcDbF .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-vjzP4uEm4BTJcDbF .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-vjzP4uEm4BTJcDbF .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-vjzP4uEm4BTJcDbF .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-vjzP4uEm4BTJcDbF .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-vjzP4uEm4BTJcDbF .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-vjzP4uEm4BTJcDbF .cluster text{fill:#333;}#mermaid-svg-vjzP4uEm4BTJcDbF .cluster span{color:#333;}#mermaid-svg-vjzP4uEm4BTJcDbF 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-vjzP4uEm4BTJcDbF .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-vjzP4uEm4BTJcDbF rect.text{fill:none;stroke-width:0;}#mermaid-svg-vjzP4uEm4BTJcDbF .icon-shape,#mermaid-svg-vjzP4uEm4BTJcDbF .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-vjzP4uEm4BTJcDbF .icon-shape p,#mermaid-svg-vjzP4uEm4BTJcDbF .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-vjzP4uEm4BTJcDbF .icon-shape .label rect,#mermaid-svg-vjzP4uEm4BTJcDbF .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-vjzP4uEm4BTJcDbF .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-vjzP4uEm4BTJcDbF .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-vjzP4uEm4BTJcDbF :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Choreography 编舞(事件驱动)
事件
事件
用户目标
Agent 1
Event Bus 事件总线
Agent 2
Agent 3
Agent 4
Orchestration 编排(经理指挥)
用户目标
Orchestrator 编排器
Agent 1
Agent 2
Agent 3

左右对比图:左图 Orchestration------中央一个 Orchestrator 管理多个 Agent;右图 Choreography------多个 Agent 独立响应来自数据源/外部服务/工具的事件。

Orchestration 编排("经理"模式) Choreography 编舞("事件总线"模式)
方式 集中式:一个 Agent 当"指挥/经理" 去中心化:Agent 独立响应共享事件/状态变化
类比 项目经理给团队成员派活 舞者听着音乐互相配合,没有指挥
Orchestration 详解(+ 客服实例)
  • 架构 :Orchestrator 接收用户的复杂目标 → 规划整体步骤序列 → 把每步作为子目标委派给合适的 Specialist Agent → 等待响应 → 综合结果、决定下一步

架构图:User Goal → Orchestrator Agent(中央)→ 分派给 Agent1/Agent2/Agent3。

客服流程图:用户目标"我的订单状态如何?能加快递吗?"→ 中央黄色 Customer Service Agent 控制全程:

  • STEP 1 get_status(order_id) → 委派 Order Agent
  • STEP 2 get_options(order_id) → 委派 Shipping Agent + Inventory Agent
    文字强调:"The Service Agent controls the entire flow"(服务 Agent 控制整个流程)。
Choreography 详解(+ 供应链实例)
  • 架构 :没有中央经理;Agent 通过共享状态/消息总线间接交互:一个 Agent 行动 → 发布事件/改变状态 → 其他监听特定事件的 Agent 自主反应

事件总线图:User → Agent1/Agent2;Agent1/Agent2 发布事件到 Event Bus ;Event Bus → Agent3/Agent4(监听者自主反应)。

供应链图:User → Order Agent → 发布 ORDER_CONFIRMED → Inventory Agent 更新库存并发布 STOCK_LEVEL_UPDATED → Shipping Agent 调度发货发布 SHIPMENT_SCHEDULED → Report Agent 生成报告------事件链接力,无人指挥

如何选择:权衡

上下对比图:上(Orchestration)用户目标 → Orchestrator → Agent1/2/3;下(Choreography)用户目标 → Event Bus → Agent1/2/3/4。

Orchestration Choreography
设计/理解/调试更简单(逻辑集中) 更灵活、可扩展、有韧性(无单点故障)
单点故障(Orchestrator 挂了全系统停);不够灵活(加步骤要改 Orchestrator) 难调试难监控(整体流程是涌现的,不是显式的);有"死循环"或意外交互的风险

真实世界案例

案例 1:自主 E-Shop(Orchestration)------

#mermaid-svg-tyyVBaVc2OK5PqsU{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-tyyVBaVc2OK5PqsU .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-tyyVBaVc2OK5PqsU .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-tyyVBaVc2OK5PqsU .error-icon{fill:#552222;}#mermaid-svg-tyyVBaVc2OK5PqsU .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-tyyVBaVc2OK5PqsU .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-tyyVBaVc2OK5PqsU .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-tyyVBaVc2OK5PqsU .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-tyyVBaVc2OK5PqsU .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-tyyVBaVc2OK5PqsU .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-tyyVBaVc2OK5PqsU .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-tyyVBaVc2OK5PqsU .marker{fill:#333333;stroke:#333333;}#mermaid-svg-tyyVBaVc2OK5PqsU .marker.cross{stroke:#333333;}#mermaid-svg-tyyVBaVc2OK5PqsU svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-tyyVBaVc2OK5PqsU p{margin:0;}#mermaid-svg-tyyVBaVc2OK5PqsU .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-tyyVBaVc2OK5PqsU .cluster-label text{fill:#333;}#mermaid-svg-tyyVBaVc2OK5PqsU .cluster-label span{color:#333;}#mermaid-svg-tyyVBaVc2OK5PqsU .cluster-label span p{background-color:transparent;}#mermaid-svg-tyyVBaVc2OK5PqsU .label text,#mermaid-svg-tyyVBaVc2OK5PqsU span{fill:#333;color:#333;}#mermaid-svg-tyyVBaVc2OK5PqsU .node rect,#mermaid-svg-tyyVBaVc2OK5PqsU .node circle,#mermaid-svg-tyyVBaVc2OK5PqsU .node ellipse,#mermaid-svg-tyyVBaVc2OK5PqsU .node polygon,#mermaid-svg-tyyVBaVc2OK5PqsU .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-tyyVBaVc2OK5PqsU .rough-node .label text,#mermaid-svg-tyyVBaVc2OK5PqsU .node .label text,#mermaid-svg-tyyVBaVc2OK5PqsU .image-shape .label,#mermaid-svg-tyyVBaVc2OK5PqsU .icon-shape .label{text-anchor:middle;}#mermaid-svg-tyyVBaVc2OK5PqsU .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-tyyVBaVc2OK5PqsU .rough-node .label,#mermaid-svg-tyyVBaVc2OK5PqsU .node .label,#mermaid-svg-tyyVBaVc2OK5PqsU .image-shape .label,#mermaid-svg-tyyVBaVc2OK5PqsU .icon-shape .label{text-align:center;}#mermaid-svg-tyyVBaVc2OK5PqsU .node.clickable{cursor:pointer;}#mermaid-svg-tyyVBaVc2OK5PqsU .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-tyyVBaVc2OK5PqsU .arrowheadPath{fill:#333333;}#mermaid-svg-tyyVBaVc2OK5PqsU .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-tyyVBaVc2OK5PqsU .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-tyyVBaVc2OK5PqsU .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-tyyVBaVc2OK5PqsU .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-tyyVBaVc2OK5PqsU .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-tyyVBaVc2OK5PqsU .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-tyyVBaVc2OK5PqsU .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-tyyVBaVc2OK5PqsU .cluster text{fill:#333;}#mermaid-svg-tyyVBaVc2OK5PqsU .cluster span{color:#333;}#mermaid-svg-tyyVBaVc2OK5PqsU 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-tyyVBaVc2OK5PqsU .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-tyyVBaVc2OK5PqsU rect.text{fill:none;stroke-width:0;}#mermaid-svg-tyyVBaVc2OK5PqsU .icon-shape,#mermaid-svg-tyyVBaVc2OK5PqsU .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-tyyVBaVc2OK5PqsU .icon-shape p,#mermaid-svg-tyyVBaVc2OK5PqsU .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-tyyVBaVc2OK5PqsU .icon-shape .label rect,#mermaid-svg-tyyVBaVc2OK5PqsU .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-tyyVBaVc2OK5PqsU .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-tyyVBaVc2OK5PqsU .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-tyyVBaVc2OK5PqsU :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} STEP 1: get_status
STEP 2: get_options
STEP 2: get_options
状态
选项
选项
综合回复
用户:订单状态?能加快递吗?
Customer Service Agent 客服
Order Agent 订单
Shipping Agent 物流
Inventory Agent 库存

  • 场景:客户与电商客服聊天机器人交互;目标:处理超出简单 FAQ 的复杂请求("X 有货吗?有货就下单,用我的保存信息和忠诚折扣")
  • Agent 角色
  • Customer_Service_Agent(Orchestrator,用户唯一对话对象)
  • Inventory_Agent(专才):check_stock(item_id)
  • Order_Agent(专才):place_order(item_id, user_id, discount_code)
  • Billing_Agent(专才):apply_discount(user_id)
  • 编排流程:Service_Agent ①计划(查库存→用折扣→下单)②委派 check_stock →收到 {"stock": true} ③委派 apply_discount →收到 {"discount_code": "LOYALTY10"} ④委派 place_order →收到 {"order_status": "CONFIRMED"} ⑤综合回复用户:"有货,折扣已用,订单已确认"
  • 要点:Service_Agent 显式管理整个序列

案例 2:救灾响应(Orchestration + 并行)------

  • 场景:伦敦地震后协调应急服务;目标:评估损毁、定位受害者、高效派遣援助
  • 编排流程
  1. 事件:检测到地震
  2. Coordinator_Agent 计划:评估损毁/找受害者/预测风险/派遣援助
  3. 并行委派:Satellite_Agent.analyze_imagery + Social_Media_Agent.scan_feeds + Simulation_Agent.predict_aftershocks
  4. 接收综合:更新共享态势图(记忆)
  5. 优先级判定:找最危急区域 → 委派 Logistics_Agent.dispatch_unit("ambulance", ...)
  6. 循环:持续监控专才更新并重新排序
  • 要点:Coordinator 管理并行任务 + 高层决策

案例 3:自主供应链(Choreography)------

#mermaid-svg-2iM3raOWoiyMOwRP{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-2iM3raOWoiyMOwRP .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-2iM3raOWoiyMOwRP .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-2iM3raOWoiyMOwRP .error-icon{fill:#552222;}#mermaid-svg-2iM3raOWoiyMOwRP .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-2iM3raOWoiyMOwRP .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-2iM3raOWoiyMOwRP .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-2iM3raOWoiyMOwRP .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-2iM3raOWoiyMOwRP .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-2iM3raOWoiyMOwRP .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-2iM3raOWoiyMOwRP .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-2iM3raOWoiyMOwRP .marker{fill:#333333;stroke:#333333;}#mermaid-svg-2iM3raOWoiyMOwRP .marker.cross{stroke:#333333;}#mermaid-svg-2iM3raOWoiyMOwRP svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-2iM3raOWoiyMOwRP p{margin:0;}#mermaid-svg-2iM3raOWoiyMOwRP .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-2iM3raOWoiyMOwRP .cluster-label text{fill:#333;}#mermaid-svg-2iM3raOWoiyMOwRP .cluster-label span{color:#333;}#mermaid-svg-2iM3raOWoiyMOwRP .cluster-label span p{background-color:transparent;}#mermaid-svg-2iM3raOWoiyMOwRP .label text,#mermaid-svg-2iM3raOWoiyMOwRP span{fill:#333;color:#333;}#mermaid-svg-2iM3raOWoiyMOwRP .node rect,#mermaid-svg-2iM3raOWoiyMOwRP .node circle,#mermaid-svg-2iM3raOWoiyMOwRP .node ellipse,#mermaid-svg-2iM3raOWoiyMOwRP .node polygon,#mermaid-svg-2iM3raOWoiyMOwRP .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-2iM3raOWoiyMOwRP .rough-node .label text,#mermaid-svg-2iM3raOWoiyMOwRP .node .label text,#mermaid-svg-2iM3raOWoiyMOwRP .image-shape .label,#mermaid-svg-2iM3raOWoiyMOwRP .icon-shape .label{text-anchor:middle;}#mermaid-svg-2iM3raOWoiyMOwRP .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-2iM3raOWoiyMOwRP .rough-node .label,#mermaid-svg-2iM3raOWoiyMOwRP .node .label,#mermaid-svg-2iM3raOWoiyMOwRP .image-shape .label,#mermaid-svg-2iM3raOWoiyMOwRP .icon-shape .label{text-align:center;}#mermaid-svg-2iM3raOWoiyMOwRP .node.clickable{cursor:pointer;}#mermaid-svg-2iM3raOWoiyMOwRP .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-2iM3raOWoiyMOwRP .arrowheadPath{fill:#333333;}#mermaid-svg-2iM3raOWoiyMOwRP .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-2iM3raOWoiyMOwRP .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-2iM3raOWoiyMOwRP .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-2iM3raOWoiyMOwRP .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-2iM3raOWoiyMOwRP .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-2iM3raOWoiyMOwRP .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-2iM3raOWoiyMOwRP .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-2iM3raOWoiyMOwRP .cluster text{fill:#333;}#mermaid-svg-2iM3raOWoiyMOwRP .cluster span{color:#333;}#mermaid-svg-2iM3raOWoiyMOwRP 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-2iM3raOWoiyMOwRP .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-2iM3raOWoiyMOwRP rect.text{fill:none;stroke-width:0;}#mermaid-svg-2iM3raOWoiyMOwRP .icon-shape,#mermaid-svg-2iM3raOWoiyMOwRP .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-2iM3raOWoiyMOwRP .icon-shape p,#mermaid-svg-2iM3raOWoiyMOwRP .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-2iM3raOWoiyMOwRP .icon-shape .label rect,#mermaid-svg-2iM3raOWoiyMOwRP .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-2iM3raOWoiyMOwRP .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-2iM3raOWoiyMOwRP .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-2iM3raOWoiyMOwRP :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} ORDER_CONFIRMED 事件
STOCK_LEVEL_UPDATED 事件
SHIPMENT_SCHEDULED 事件
Order Agent

新订单
Inventory Agent

扣库存
Shipping Agent

安排发货
Report Agent

更新报告

  • 场景:跨多个独立公司(制造商/供应商/物流)管理库存与履约;去中心化 → Choreography 最合适
  • Agent 角色(对等,无经理):Inventory_Agent(制造商,监控库存)、Supplier_Agent(供应商,接单)、Logistics_Agent(物流,排配送)
  • 事件驱动流程
  • 事件1:Inventory_Agent 发现 Widget A 库存低于阈值 → 建采购单 → 发布 NEW_PURCHASE_ORDER(Widget A)
  • 事件2:Supplier_Agent(监听该事件)确认订单 → 发布 ORDER_CONFIRMED(Widget A)
  • 事件3:Logistics_Agent(监听确认事件)安排取货 → 发布 SHIPMENT_SCHEDULED
  • 事件4:Inventory_Agent(监听装运事件)更新到货预测
  • 要点:没有中央控制,事件链驱动整个流程
案例总结
  • Orchestration 适合:需要中央控制、规划、综合的工作流(客服、指挥控制)
  • Choreography 适合:去中心化、组件独立响应事件的系统(供应链、IoT 生态)

MAS 的四大挑战(系统级问题)

从单个组件到分布式系统,带来的是全新一类架构挑战 ------不是单 Agent 问题的放大,而是根本性的系统性问题

挑战 问题 架构师之问
1. 系统级可观测性 单 Agent 调试思维链已经很难;**分布 5 个 Agent 的思维链怎么调?**用户拿到坏答案:是 Agent1 计划差?Agent2 工具调用失败?还是 Agent3 误解了 Agent1 的消息?思维链被碎片化在整个系统里 怎么设计分布式追踪 + 集中日志?
2. 涌现行为 众多 Agent 简单交互涌现出复杂、未计划的系统行为------既是力量也是危险。坏的一面:陷入不可预见的反馈循环;竞争 Agent 意外"互殴";产生任何单个 Agent 都没想过的怪异/有害结果 怎么设计"有益涌现"同时防止"有害涌现"?(测试、模拟、强护栏)
3. 智能体间通信失败 依赖 Agent 间成功对话(协议 MCP / API 契约):协议不匹配 (A 说 MCP v1.0,B 要 v1.1);API 变更 (A 调 get_status(order_id),B 改成 fetch_order_details(id));网络故障 怎么设计弹性通信?(版本化、错误处理、重试、熔断器)
4. 目标冲突与资源竞争 多个自主 Agent 目标冲突或抢同一有限资源:两个客服 Agent 同时为各自客户抢最后一张机票;Cost_Saving_Agent 想关服务器而 Uptime_Agent 想保持运行------分布式系统的经典"并发问题" 怎么实现协商、优先级、锁机制?

配了两个警告标志(右侧+底部)------"有害涌现"的危险隐喻;底部架构图:Complex Goal → Agentic AI 系统(多个 Agent)→ Result。

总结:系统本身就是挑战
  1. 可观测性:调试分布式思维
  2. 涌现:管理不可预测的系统行为
  3. 通信:确保可靠的 Agent 间消息
  4. 冲突:处理资源争用与目标冲突

解决这四大问题 = 设计健壮 Agentic AI 架构的核心


📌 本段核心收获(一句话版)

  1. 视角升级 :从"Agent 心理学"(单 Agent 怎么想)到"Agent 社会学"(多 Agent 怎么协作)。
  2. 定义:AI Agent = 组件(工人/自由职业者);Agentic AI = 系统(工厂/软件公司);MAS = 多专才大脑 + 共享环境 + 共同目标。 一图看懂:单个机器人 vs 一群机器人。
  3. Agent-as-a-Service:把 Agent 当长期运行、有状态、有端点的微服务------进入微服务世界的一等公民。
  4. 两大协调模式:Orchestration(经理,集中控制,简单但单点故障)vs Choreography(事件总线,去中心化,灵活但难调试)。选型看:是否需要中央控制与综合?→ 编排;是否去中心化事件驱动?→ 编舞。
  5. 三个真实案例:E-Shop(编排:客服 Agent 串起库存/折扣/下单)、救灾(编排+并行:卫星/社媒/模拟三路并行)、供应链(编舞:事件链 ORDER_CONFIRMED → STOCK_LEVEL_UPDATED → SHIPMENT_SCHEDULED)。
  6. MAS 四大挑战:可观测性、涌现行为、通信失败、目标冲突------都是"系统级"新问题,不是单 Agent 问题的放大。
  7. 下一段预告:Agentic 工作流------传统工作流 vs Agentic 工作流、编排模式(顺序/并行/群聊/交接)、LangGraph 与低代码平台。

第 5 篇


传统工作流 vs Agentic 工作流

三种工作流演进

#mermaid-svg-01Wbb51jJ7OtV8bc{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-01Wbb51jJ7OtV8bc .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-01Wbb51jJ7OtV8bc .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-01Wbb51jJ7OtV8bc .error-icon{fill:#552222;}#mermaid-svg-01Wbb51jJ7OtV8bc .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-01Wbb51jJ7OtV8bc .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-01Wbb51jJ7OtV8bc .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-01Wbb51jJ7OtV8bc .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-01Wbb51jJ7OtV8bc .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-01Wbb51jJ7OtV8bc .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-01Wbb51jJ7OtV8bc .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-01Wbb51jJ7OtV8bc .marker{fill:#333333;stroke:#333333;}#mermaid-svg-01Wbb51jJ7OtV8bc .marker.cross{stroke:#333333;}#mermaid-svg-01Wbb51jJ7OtV8bc svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-01Wbb51jJ7OtV8bc p{margin:0;}#mermaid-svg-01Wbb51jJ7OtV8bc .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-01Wbb51jJ7OtV8bc .cluster-label text{fill:#333;}#mermaid-svg-01Wbb51jJ7OtV8bc .cluster-label span{color:#333;}#mermaid-svg-01Wbb51jJ7OtV8bc .cluster-label span p{background-color:transparent;}#mermaid-svg-01Wbb51jJ7OtV8bc .label text,#mermaid-svg-01Wbb51jJ7OtV8bc span{fill:#333;color:#333;}#mermaid-svg-01Wbb51jJ7OtV8bc .node rect,#mermaid-svg-01Wbb51jJ7OtV8bc .node circle,#mermaid-svg-01Wbb51jJ7OtV8bc .node ellipse,#mermaid-svg-01Wbb51jJ7OtV8bc .node polygon,#mermaid-svg-01Wbb51jJ7OtV8bc .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-01Wbb51jJ7OtV8bc .rough-node .label text,#mermaid-svg-01Wbb51jJ7OtV8bc .node .label text,#mermaid-svg-01Wbb51jJ7OtV8bc .image-shape .label,#mermaid-svg-01Wbb51jJ7OtV8bc .icon-shape .label{text-anchor:middle;}#mermaid-svg-01Wbb51jJ7OtV8bc .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-01Wbb51jJ7OtV8bc .rough-node .label,#mermaid-svg-01Wbb51jJ7OtV8bc .node .label,#mermaid-svg-01Wbb51jJ7OtV8bc .image-shape .label,#mermaid-svg-01Wbb51jJ7OtV8bc .icon-shape .label{text-align:center;}#mermaid-svg-01Wbb51jJ7OtV8bc .node.clickable{cursor:pointer;}#mermaid-svg-01Wbb51jJ7OtV8bc .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-01Wbb51jJ7OtV8bc .arrowheadPath{fill:#333333;}#mermaid-svg-01Wbb51jJ7OtV8bc .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-01Wbb51jJ7OtV8bc .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-01Wbb51jJ7OtV8bc .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-01Wbb51jJ7OtV8bc .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-01Wbb51jJ7OtV8bc .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-01Wbb51jJ7OtV8bc .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-01Wbb51jJ7OtV8bc .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-01Wbb51jJ7OtV8bc .cluster text{fill:#333;}#mermaid-svg-01Wbb51jJ7OtV8bc .cluster span{color:#333;}#mermaid-svg-01Wbb51jJ7OtV8bc 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-01Wbb51jJ7OtV8bc .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-01Wbb51jJ7OtV8bc rect.text{fill:none;stroke-width:0;}#mermaid-svg-01Wbb51jJ7OtV8bc .icon-shape,#mermaid-svg-01Wbb51jJ7OtV8bc .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-01Wbb51jJ7OtV8bc .icon-shape p,#mermaid-svg-01Wbb51jJ7OtV8bc .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-01Wbb51jJ7OtV8bc .icon-shape .label rect,#mermaid-svg-01Wbb51jJ7OtV8bc .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-01Wbb51jJ7OtV8bc .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-01Wbb51jJ7OtV8bc .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-01Wbb51jJ7OtV8bc :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Agentic 工作流
循环
User
Make Plan 计划
Execute w/ Tools 执行
Reflect on Result 反思
Response
生成式工作流
User
LLM 一次问答
Response
自动化工作流
User
Step1 固定
Step2 固定
Response

三种工作流并排对比图:

  • Automated Workflow(自动化):User → Step 1 → ... → Step N → Response(固定流水线)
  • GenAI Workflow(生成式):User → AI Model(LLM) → Response(单次问答)
  • Agentic Workflow(智能体式) :User → Make Plan(制定计划)→ Execute w/ Tools(用工具执行)→ Reflect on Result(反思结果) → Response(有循环的完整闭环)
什么是传统工作流?
  • 结构化的、可重复的任务序列,达成业务目标
  • "流程图(Flowchart)模型":路径预定义、静态
  • 例子:BPMN (业务流程建模符号)、CI/CD 流水线 (build→test→deploy 刚性序列)、低代码工具(Zapier:When 触发→Do 动作)
  • 关键特性:确定性------相同输入永远走相同路径
传统工作流的极限
  • 能解决:已知、可预测任务的可靠性、可重复性、自动化
  • 致命局限:处理不了歧义或意外输入------输入数据稍有不同,工作流就崩
  • 例子(客服自动化):规则 IF 邮件含 "refund" → 转 Billing;遇到 "我上个订单错了,我要退钱" ------意图一样但关键词不同,死板的工作流就失败了
新方式:Agentic 工作流
  • 用 LLM 的推理在运行时动态路由任务、管理状态,在专才 Agent 和工具之间流转
  • "项目经理模型":不是静态流程图,而是一个聪明的经理------评估情况、决定下一步最佳行动
  • 核心区别:
  • 传统:路径由人类预先定义
  • Agentic:路径由 LLM 在运行时决定
Agentic 工作流三大特性
  1. 有状态(Stateful) :维护"状态/草稿本"(记忆)在步骤间传递,如 {"user_query": "...", "research_data": "..."}
  2. LLM 驱动(推理):路由/逻辑不是静态 if/else 块,而是 LLM 调用------推理当前状态选下一步
  3. 非确定性(自适应) :因为 LLM 在推理,工作流能适应------能处理"退钱"邮件、能决定换工具、甚至能循环重试某一步
总结
  • 传统工作流 = 静态"流程图":确定性、刚性、脆弱
  • Agentic 工作流 = 自适应"项目经理":有状态、LLM 驱动、非确定性------它在运行时构建流程图
  • 这是构建复杂可靠 AI 应用的架构基础

Agentic 工作流的解剖:State / Nodes / Edges

三大核心组件(任何框架都一样)

#mermaid-svg-TRcDFeWMaWFqHtHl{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-TRcDFeWMaWFqHtHl .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-TRcDFeWMaWFqHtHl .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-TRcDFeWMaWFqHtHl .error-icon{fill:#552222;}#mermaid-svg-TRcDFeWMaWFqHtHl .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-TRcDFeWMaWFqHtHl .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-TRcDFeWMaWFqHtHl .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-TRcDFeWMaWFqHtHl .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-TRcDFeWMaWFqHtHl .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-TRcDFeWMaWFqHtHl .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-TRcDFeWMaWFqHtHl .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-TRcDFeWMaWFqHtHl .marker{fill:#333333;stroke:#333333;}#mermaid-svg-TRcDFeWMaWFqHtHl .marker.cross{stroke:#333333;}#mermaid-svg-TRcDFeWMaWFqHtHl svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-TRcDFeWMaWFqHtHl p{margin:0;}#mermaid-svg-TRcDFeWMaWFqHtHl .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-TRcDFeWMaWFqHtHl .cluster-label text{fill:#333;}#mermaid-svg-TRcDFeWMaWFqHtHl .cluster-label span{color:#333;}#mermaid-svg-TRcDFeWMaWFqHtHl .cluster-label span p{background-color:transparent;}#mermaid-svg-TRcDFeWMaWFqHtHl .label text,#mermaid-svg-TRcDFeWMaWFqHtHl span{fill:#333;color:#333;}#mermaid-svg-TRcDFeWMaWFqHtHl .node rect,#mermaid-svg-TRcDFeWMaWFqHtHl .node circle,#mermaid-svg-TRcDFeWMaWFqHtHl .node ellipse,#mermaid-svg-TRcDFeWMaWFqHtHl .node polygon,#mermaid-svg-TRcDFeWMaWFqHtHl .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-TRcDFeWMaWFqHtHl .rough-node .label text,#mermaid-svg-TRcDFeWMaWFqHtHl .node .label text,#mermaid-svg-TRcDFeWMaWFqHtHl .image-shape .label,#mermaid-svg-TRcDFeWMaWFqHtHl .icon-shape .label{text-anchor:middle;}#mermaid-svg-TRcDFeWMaWFqHtHl .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-TRcDFeWMaWFqHtHl .rough-node .label,#mermaid-svg-TRcDFeWMaWFqHtHl .node .label,#mermaid-svg-TRcDFeWMaWFqHtHl .image-shape .label,#mermaid-svg-TRcDFeWMaWFqHtHl .icon-shape .label{text-align:center;}#mermaid-svg-TRcDFeWMaWFqHtHl .node.clickable{cursor:pointer;}#mermaid-svg-TRcDFeWMaWFqHtHl .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-TRcDFeWMaWFqHtHl .arrowheadPath{fill:#333333;}#mermaid-svg-TRcDFeWMaWFqHtHl .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-TRcDFeWMaWFqHtHl .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-TRcDFeWMaWFqHtHl .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-TRcDFeWMaWFqHtHl .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-TRcDFeWMaWFqHtHl .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-TRcDFeWMaWFqHtHl .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-TRcDFeWMaWFqHtHl .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-TRcDFeWMaWFqHtHl .cluster text{fill:#333;}#mermaid-svg-TRcDFeWMaWFqHtHl .cluster span{color:#333;}#mermaid-svg-TRcDFeWMaWFqHtHl 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-TRcDFeWMaWFqHtHl .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-TRcDFeWMaWFqHtHl rect.text{fill:none;stroke-width:0;}#mermaid-svg-TRcDFeWMaWFqHtHl .icon-shape,#mermaid-svg-TRcDFeWMaWFqHtHl .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-TRcDFeWMaWFqHtHl .icon-shape p,#mermaid-svg-TRcDFeWMaWFqHtHl .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-TRcDFeWMaWFqHtHl .icon-shape .label rect,#mermaid-svg-TRcDFeWMaWFqHtHl .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-TRcDFeWMaWFqHtHl .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-TRcDFeWMaWFqHtHl .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-TRcDFeWMaWFqHtHl :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 决定下一步
State 状态

草稿本(唯一事实来源)
Node 节点

工人函数
Node 节点

工人函数
Edge 边

LLM 路由器
Finish

工作流示意图:Start → Node → Node →(Conditional Edge 条件边 / Edge w/ creating loops 循环边)→ Finish,旁边标注 Global State(全局状态)------所有节点共享读写。

组件 昵称 作用
1. State 草稿本 工作流的"记忆":当前任务做到哪了?
2. Nodes 工人 执行任务的 Agent 或工具
3. Edges 路由逻辑 "决策者":决定流程从哪个节点走到哪个节点
State(草稿本)
  • 有状态对象(如 JSON),在工作流生命周期中持续累积数据
  • 功能:工作流的"唯一事实来源(Single Source of Truth)"
  • 示例:
json 复制代码
{"user_query": "What is Agentic RAG?", "research_data": null, "summary": null}

→ ResearchAgent 运行后变成 {"user_query": "...", "research_data": "[...]", "summary": null}------这就是连接所有步骤的"记忆"

Nodes(工人)
  • 执行离散任务的函数/工具/Agent
  • 功能:从 State 读 → 执行任务 → 写回 State
  • 关键原则:模块化(关注点分离)------ResearchNode 只懂搜索,SummaryNode 只懂总结
  • 重要:Node 是无状态的------接收当前状态、干活、返回更新;不关心之前发生了什么、之后会发生什么
Edges(路由逻辑)
  • 连接节点的逻辑,决定"下一步去哪"
  • 功能:读 State → 指引工作流到下一个 Node
  • 这里就是 LLM 推理当路由器的地方
  • 传统(确定性)边:IF 'research_data' 不为空 THEN 去 SummaryNode
  • Agentic(非确定性)边[LLM 调用]:给定这个状态,下一个该跑哪个 Agent:[Researcher, Summarizer, Coder, Finish]?
  • 这就是"项目经理"
完整流程(Putting It All Together)

流程图:Start(State 圆圈)→ Research AgentSummary Agent → Finish(粉色圆圈)------节点间箭头标注 Edge。

  1. Start:工作流收到查询 → 填入 State
  2. Edge(路由器):经理 LLM 看 State → "这需要研究" → 路由到 ResearchNode
  3. Node(工人) :ResearchAgent 从 State 读查询 → 跑工具 → 把 research_data 写回 State
  4. Edge(路由器):经理 LLM 再看 State → "现在有数据了,需要总结" → 路由到 SummaryNode
  5. Node(工人) :SummaryAgent 读 research_data → 运行 → 把 summary 写回 State
  6. Edge(路由器) :经理 LLM 再看 State → "任务完成" → 路由到 Finish
总结

State = 任务持久共享记忆;Nodes = 无状态模块化工人;Edges = LLM 驱动的经理。这是构建所有复杂 Agentic 系统的核心模式


四大编排模式(工作流"蓝图")

#mermaid-svg-vDK4ciK1xQcdPNnK{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-vDK4ciK1xQcdPNnK .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-vDK4ciK1xQcdPNnK .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-vDK4ciK1xQcdPNnK .error-icon{fill:#552222;}#mermaid-svg-vDK4ciK1xQcdPNnK .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-vDK4ciK1xQcdPNnK .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-vDK4ciK1xQcdPNnK .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-vDK4ciK1xQcdPNnK .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-vDK4ciK1xQcdPNnK .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-vDK4ciK1xQcdPNnK .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-vDK4ciK1xQcdPNnK .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-vDK4ciK1xQcdPNnK .marker{fill:#333333;stroke:#333333;}#mermaid-svg-vDK4ciK1xQcdPNnK .marker.cross{stroke:#333333;}#mermaid-svg-vDK4ciK1xQcdPNnK svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-vDK4ciK1xQcdPNnK p{margin:0;}#mermaid-svg-vDK4ciK1xQcdPNnK .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-vDK4ciK1xQcdPNnK .cluster-label text{fill:#333;}#mermaid-svg-vDK4ciK1xQcdPNnK .cluster-label span{color:#333;}#mermaid-svg-vDK4ciK1xQcdPNnK .cluster-label span p{background-color:transparent;}#mermaid-svg-vDK4ciK1xQcdPNnK .label text,#mermaid-svg-vDK4ciK1xQcdPNnK span{fill:#333;color:#333;}#mermaid-svg-vDK4ciK1xQcdPNnK .node rect,#mermaid-svg-vDK4ciK1xQcdPNnK .node circle,#mermaid-svg-vDK4ciK1xQcdPNnK .node ellipse,#mermaid-svg-vDK4ciK1xQcdPNnK .node polygon,#mermaid-svg-vDK4ciK1xQcdPNnK .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-vDK4ciK1xQcdPNnK .rough-node .label text,#mermaid-svg-vDK4ciK1xQcdPNnK .node .label text,#mermaid-svg-vDK4ciK1xQcdPNnK .image-shape .label,#mermaid-svg-vDK4ciK1xQcdPNnK .icon-shape .label{text-anchor:middle;}#mermaid-svg-vDK4ciK1xQcdPNnK .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-vDK4ciK1xQcdPNnK .rough-node .label,#mermaid-svg-vDK4ciK1xQcdPNnK .node .label,#mermaid-svg-vDK4ciK1xQcdPNnK .image-shape .label,#mermaid-svg-vDK4ciK1xQcdPNnK .icon-shape .label{text-align:center;}#mermaid-svg-vDK4ciK1xQcdPNnK .node.clickable{cursor:pointer;}#mermaid-svg-vDK4ciK1xQcdPNnK .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-vDK4ciK1xQcdPNnK .arrowheadPath{fill:#333333;}#mermaid-svg-vDK4ciK1xQcdPNnK .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-vDK4ciK1xQcdPNnK .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-vDK4ciK1xQcdPNnK .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-vDK4ciK1xQcdPNnK .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-vDK4ciK1xQcdPNnK .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-vDK4ciK1xQcdPNnK .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-vDK4ciK1xQcdPNnK .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-vDK4ciK1xQcdPNnK .cluster text{fill:#333;}#mermaid-svg-vDK4ciK1xQcdPNnK .cluster span{color:#333;}#mermaid-svg-vDK4ciK1xQcdPNnK 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-vDK4ciK1xQcdPNnK .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-vDK4ciK1xQcdPNnK rect.text{fill:none;stroke-width:0;}#mermaid-svg-vDK4ciK1xQcdPNnK .icon-shape,#mermaid-svg-vDK4ciK1xQcdPNnK .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-vDK4ciK1xQcdPNnK .icon-shape p,#mermaid-svg-vDK4ciK1xQcdPNnK .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-vDK4ciK1xQcdPNnK .icon-shape .label rect,#mermaid-svg-vDK4ciK1xQcdPNnK .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-vDK4ciK1xQcdPNnK .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-vDK4ciK1xQcdPNnK .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-vDK4ciK1xQcdPNnK :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} ④ 群聊辩论

多智能体循环
Group Manager
Writer ↔ Critic ↔ Formatter
③ 磁性路由

编排器
Task Complete? 否
Manager
Agent1/2/3
② 并发并行

多任务者
Router
Web 搜索
DB 查询
文档搜索
Joiner
① 顺序交接

流水线
Research
Summary
Email

模式 1:Sequential Handoff(顺序交接,"流水线")
  • 最简模式:固定线性节点序列;Edge 是确定性硬编码(Node A 完成 → 永远去 Node B)
  • State 像流水线上的零件,从一节点传到下一节点
  • 流程:Start → Research Agent (研究数据)→ Summary Agent (摘要)→ Email Agent(发邮件)→ Result------直线到底
  • 适用:简单、可预测、无需适应的多步任务
模式 2:Concurrent / Parallel(并发/并行,"多任务者")
  • 工作流"分叉"同时跑多个节点,再"汇合"回单节点
  • Edge 逻辑:A 的边拆分工作;D 前的边等 B 和 C 都完成
  • 流程:Start → Router → 三条并行支线 Web Search / Database Query / Doc SearchJoiner(合并器) → Result
  • 适用:速度与效率------多个互不依赖的任务
模式 3:Magnetic / Sticky Router(磁性/粘性路由,"编排器")
  • 中央"经理"节点在每个工人节点之后运行,重新评估状态、决定下一步
  • 这就是 Agentic Edge:RouterNode 是 LLM 调用,看整个状态推理下一步(A、B、C 或 Finish)
  • 叫"磁性"是因为所有工作流都流回它(项目经理)
  • 流程:Start → Manager → Agent1/Agent2/Agent3 → 回到 Manager → "Task Complete?"(菱形判断) → 否→继续循环 / 是→Result;右上角任务进度记录,右下角人工检查图标
  • 这是构建自适应、自主 Agent 最常用最灵活的模式
模式 4:Group Chat / Debate(群聊/辩论,"多智能体循环")
  • 高级模式:多个 Agent 在共享上下文中"互相对话",循环修改状态
  • State 常常是聊天消息列表;Edge 逻辑:Router 决定下一个谁发言
  • 例:WriterAgent 起草报告加消息 → Router 传给 CriticAgent → Critic 加评论"太复杂了" → Router 把整个聊天历史传回 Writer → Writer 根据评论重写
  • 流程:Start → Group ManagerWriter Agent ↔ Critic Agent ↔ Formatter Agent(互相循环)→ Result
  • 适用:高质量生成、复杂问题求解、自我纠正
模式总结(选型)
模式 适用
顺序交接 简单、线性、可预测任务
并发/并行 独立任务要速度效率
磁性路由 灵活、自适应、有状态的单 Agent 工作流
群聊/辩论 高级、协作、迭代的多 Agent 任务

架构师的关键洞察:你会组合使用这些模式来构建应用


代码优先框架:LangGraph

为什么不直接写 Python?

状态图比看起来难:

  1. 管理状态:怎么可靠地在步骤间传递"草稿本"并保持同步?
  2. 处理循环 :磁性路由和群聊是循环的,简单 if/while 会变成深层嵌套的脆弱代码("意大利面条代码")
  3. 非确定性:LLM 的路由选择不确定,标准脚本怎么管理?

需要一个原生理解 State/Nodes/Edges 解剖、专为循环设计的框架

LangGraph("图"模型)

#mermaid-svg-LcfF3GlE91Ubkw1p{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-LcfF3GlE91Ubkw1p .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-LcfF3GlE91Ubkw1p .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-LcfF3GlE91Ubkw1p .error-icon{fill:#552222;}#mermaid-svg-LcfF3GlE91Ubkw1p .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-LcfF3GlE91Ubkw1p .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-LcfF3GlE91Ubkw1p .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-LcfF3GlE91Ubkw1p .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-LcfF3GlE91Ubkw1p .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-LcfF3GlE91Ubkw1p .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-LcfF3GlE91Ubkw1p .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-LcfF3GlE91Ubkw1p .marker{fill:#333333;stroke:#333333;}#mermaid-svg-LcfF3GlE91Ubkw1p .marker.cross{stroke:#333333;}#mermaid-svg-LcfF3GlE91Ubkw1p svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-LcfF3GlE91Ubkw1p p{margin:0;}#mermaid-svg-LcfF3GlE91Ubkw1p .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-LcfF3GlE91Ubkw1p .cluster-label text{fill:#333;}#mermaid-svg-LcfF3GlE91Ubkw1p .cluster-label span{color:#333;}#mermaid-svg-LcfF3GlE91Ubkw1p .cluster-label span p{background-color:transparent;}#mermaid-svg-LcfF3GlE91Ubkw1p .label text,#mermaid-svg-LcfF3GlE91Ubkw1p span{fill:#333;color:#333;}#mermaid-svg-LcfF3GlE91Ubkw1p .node rect,#mermaid-svg-LcfF3GlE91Ubkw1p .node circle,#mermaid-svg-LcfF3GlE91Ubkw1p .node ellipse,#mermaid-svg-LcfF3GlE91Ubkw1p .node polygon,#mermaid-svg-LcfF3GlE91Ubkw1p .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-LcfF3GlE91Ubkw1p .rough-node .label text,#mermaid-svg-LcfF3GlE91Ubkw1p .node .label text,#mermaid-svg-LcfF3GlE91Ubkw1p .image-shape .label,#mermaid-svg-LcfF3GlE91Ubkw1p .icon-shape .label{text-anchor:middle;}#mermaid-svg-LcfF3GlE91Ubkw1p .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-LcfF3GlE91Ubkw1p .rough-node .label,#mermaid-svg-LcfF3GlE91Ubkw1p .node .label,#mermaid-svg-LcfF3GlE91Ubkw1p .image-shape .label,#mermaid-svg-LcfF3GlE91Ubkw1p .icon-shape .label{text-align:center;}#mermaid-svg-LcfF3GlE91Ubkw1p .node.clickable{cursor:pointer;}#mermaid-svg-LcfF3GlE91Ubkw1p .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-LcfF3GlE91Ubkw1p .arrowheadPath{fill:#333333;}#mermaid-svg-LcfF3GlE91Ubkw1p .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-LcfF3GlE91Ubkw1p .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-LcfF3GlE91Ubkw1p .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-LcfF3GlE91Ubkw1p .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-LcfF3GlE91Ubkw1p .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-LcfF3GlE91Ubkw1p .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-LcfF3GlE91Ubkw1p .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-LcfF3GlE91Ubkw1p .cluster text{fill:#333;}#mermaid-svg-LcfF3GlE91Ubkw1p .cluster span{color:#333;}#mermaid-svg-LcfF3GlE91Ubkw1p 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-LcfF3GlE91Ubkw1p .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-LcfF3GlE91Ubkw1p rect.text{fill:none;stroke-width:0;}#mermaid-svg-LcfF3GlE91Ubkw1p .icon-shape,#mermaid-svg-LcfF3GlE91Ubkw1p .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-LcfF3GlE91Ubkw1p .icon-shape p,#mermaid-svg-LcfF3GlE91Ubkw1p .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-LcfF3GlE91Ubkw1p .icon-shape .label rect,#mermaid-svg-LcfF3GlE91Ubkw1p .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-LcfF3GlE91Ubkw1p .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-LcfF3GlE91Ubkw1p .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-LcfF3GlE91Ubkw1p :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} State 状态

StateGraph(类)
Nodes 节点

@add_node
Edges 边

@add_edge
路由/循环

条件边

  • 专门构建有状态、循环 Agentic 工作流的 Python 库
  • 注意:不是 Agent 框架,是工作流框架
  • 对应关系:
  • State → StateGraph(MyStateObject):正式定义状态对象为类,LangGraph 管理它
  • Nodes → @workflow.add_node:把工人(Agent/工具)定义为标准 Python 函数
  • Edges → @workflow.add_edge:显式定义节点间连接

低代码平台(LCNC)与选型框架

LCNC 在 Agentic AI 中的角色
  • 目标:抽象掉写工作流的代码------可视化拖拽连接组件
  • 视角对比:Code-First(LangGraph)= 用 Python 写 State/Nodes/Edges;Low-Code = 在画布上节点、用可视化边连接
  • 承诺:速度------你在"配置"工作流,不是在"编码";赋能"公民开发者"(业务分析师也能建自动化)
LCNC 生态三类
类别 代表 特点
传统自动化 n8n, Zapier, Make 从"if this then that"起家,现在 AI 原生,可加 LLM 调用(总结/分类)
可视化图构建器 Flowise, Langflow 字面意义"带 UI 的 LangGraph"------LangChain 的可视化前端
一站式"Agent 构建器" OpenAI 的 GPTs 抽象一切:不建图,只"配置一个 Agent"(名字+指令+工具),平台管状态和路由
为什么架构师选低代码
  1. 上市速度:几小时交付可用原型,而非几周
  2. 可及性与赋能:非开发者能自建自测自维护,释放资深工程资源
  3. 减少基础设施负担:平台管服务器、扩展、运行时
  4. 强制最佳实践:平台强制模块化图设计,防"意大利面条代码"
低代码的隐藏成本
  1. 灵活性与表达力受限:想要自定义"群聊/辩论"模式?只能用平台给的节点和模式
  2. 供应商锁定:整个业务逻辑被平台拥有,迁移 = 完全手动重写
  3. "黑箱"问题:坏了你能调试吗?对状态、提示词、错误处理控制更少
  4. 规模成本:大规模下自运维的 code-first 几乎总比 SaaS 按次付费便宜
架构师决策框架

底部四个产品 logo:Zapier、Make、n8n、Langflow(低代码阵营代表)。

用 LOW-CODE(n8n、Flowise、GPTs)当

  • 快速验证想法(还没投入工程资源)
  • 自动化非关键业务流程
  • 任务可预测、符合"顺序交接"模式

用 CODE-FIRST(LangGraph、Autogen)当

  • 逻辑是你的知识产权
  • 需要"磁性路由"或"群聊"模式
  • 需要完全掌控优化和基础设施成本

📌 本段核心收获(一句话版)

  1. 传统 vs Agentic 工作流 :人类预定义路径(静态流程图,遇歧义就崩)vs LLM 运行时决定路径(自适应项目经理)。 三图并排:自动化流水线 / 单次问答 / 计划-执行-反思循环。
  2. 工作流三要素(任何框架通用)State (草稿本=唯一事实来源,JSON 示例一目了然)+ Nodes (无状态模块化工人们)+ Edges(LLM 驱动的路由器=项目经理)。 全局状态图:所有节点共享读写一个 State。
  3. 工作流核心循环 :Start→Edge 判断→Node 干活写回 State→Edge 再看→...→Finish------State 就是连接所有步骤的记忆
  4. 四大编排模式 ( 各配流程图):流水线(顺序交接,Research→Summary→Email)/ 多任务者(并行分叉 Web/DB/文档搜索→Joiner 合并)/ 磁性路由(每步后中央 LLM 经理重新路由 + Task Complete 判断,最常用)/ 会议桌(Group Manager + Writer/Critic/Formatter 循环,自我纠正)。
  5. LangGraph:专为有状态、循环工作流设计的 Python 库(State→StateGraph、Nodes→add_node、Edges→add_edge)------是"工作流框架"不是"Agent 框架"。
  6. 低代码三阵营:传统自动化(n8n/Zapier/Make)、可视化图构建(Flowise/Langflow)、一站式 Agent 构建(GPTs)。 决策框架页列了四个 logo。
  7. 选型:快速验证/非关键/顺序模式→低代码;知识产权/磁性路由/群聊/成本控制→Code-First。
  8. 下一段预告:AI Agent 框架全景------LangChain/LangGraph、LlamaIndex、微软 Agent 框架、云平台(Bedrock/Azure/Google)、Build vs Buy。

第 6 篇


框架全景与三分类地图

为什么需要框架?
  • 裸调 LLM API、手动解析 JSON、手工搭状态机------不可维护
  • 要了解框架版图,为业务选对地基
样板代码问题(Boilerplate Problem)

"一个 Agent 就是简单循环......直到你加上'管道(plumbing)'":

  1. 工具调用与解析:格式化工具 schema;解析 LLM 非确定性的 JSON 输出;处理调用失败
  2. 状态管理:可靠地在循环迭代间传递聊天历史/草稿本
  3. RAG 管道:连接数据、切块、嵌入、存储、检索文档
  4. 提示词管理:模板化、管理、链式组合复杂提示词
架构师地图:工具三大类

三分类 + 底部 Agentic Workflow 流程(用户查询 → 计划 → 用工具执行 → 反馈 → 反馈)。
#mermaid-svg-uhNAp90IGiv842P2{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-uhNAp90IGiv842P2 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-uhNAp90IGiv842P2 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-uhNAp90IGiv842P2 .error-icon{fill:#552222;}#mermaid-svg-uhNAp90IGiv842P2 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-uhNAp90IGiv842P2 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-uhNAp90IGiv842P2 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-uhNAp90IGiv842P2 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-uhNAp90IGiv842P2 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-uhNAp90IGiv842P2 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-uhNAp90IGiv842P2 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-uhNAp90IGiv842P2 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-uhNAp90IGiv842P2 .marker.cross{stroke:#333333;}#mermaid-svg-uhNAp90IGiv842P2 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-uhNAp90IGiv842P2 p{margin:0;}#mermaid-svg-uhNAp90IGiv842P2 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-uhNAp90IGiv842P2 .cluster-label text{fill:#333;}#mermaid-svg-uhNAp90IGiv842P2 .cluster-label span{color:#333;}#mermaid-svg-uhNAp90IGiv842P2 .cluster-label span p{background-color:transparent;}#mermaid-svg-uhNAp90IGiv842P2 .label text,#mermaid-svg-uhNAp90IGiv842P2 span{fill:#333;color:#333;}#mermaid-svg-uhNAp90IGiv842P2 .node rect,#mermaid-svg-uhNAp90IGiv842P2 .node circle,#mermaid-svg-uhNAp90IGiv842P2 .node ellipse,#mermaid-svg-uhNAp90IGiv842P2 .node polygon,#mermaid-svg-uhNAp90IGiv842P2 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-uhNAp90IGiv842P2 .rough-node .label text,#mermaid-svg-uhNAp90IGiv842P2 .node .label text,#mermaid-svg-uhNAp90IGiv842P2 .image-shape .label,#mermaid-svg-uhNAp90IGiv842P2 .icon-shape .label{text-anchor:middle;}#mermaid-svg-uhNAp90IGiv842P2 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-uhNAp90IGiv842P2 .rough-node .label,#mermaid-svg-uhNAp90IGiv842P2 .node .label,#mermaid-svg-uhNAp90IGiv842P2 .image-shape .label,#mermaid-svg-uhNAp90IGiv842P2 .icon-shape .label{text-align:center;}#mermaid-svg-uhNAp90IGiv842P2 .node.clickable{cursor:pointer;}#mermaid-svg-uhNAp90IGiv842P2 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-uhNAp90IGiv842P2 .arrowheadPath{fill:#333333;}#mermaid-svg-uhNAp90IGiv842P2 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-uhNAp90IGiv842P2 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-uhNAp90IGiv842P2 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-uhNAp90IGiv842P2 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-uhNAp90IGiv842P2 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-uhNAp90IGiv842P2 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-uhNAp90IGiv842P2 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-uhNAp90IGiv842P2 .cluster text{fill:#333;}#mermaid-svg-uhNAp90IGiv842P2 .cluster span{color:#333;}#mermaid-svg-uhNAp90IGiv842P2 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-uhNAp90IGiv842P2 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-uhNAp90IGiv842P2 rect.text{fill:none;stroke-width:0;}#mermaid-svg-uhNAp90IGiv842P2 .icon-shape,#mermaid-svg-uhNAp90IGiv842P2 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-uhNAp90IGiv842P2 .icon-shape p,#mermaid-svg-uhNAp90IGiv842P2 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-uhNAp90IGiv842P2 .icon-shape .label rect,#mermaid-svg-uhNAp90IGiv842P2 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-uhNAp90IGiv842P2 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-uhNAp90IGiv842P2 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-uhNAp90IGiv842P2 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 要全部底层组件

自己搭一切
解决某个特定难题

有预构建方案
不想构建

配置即用
架构师需求
选哪一类?
通用工具箱 「车间 Workshop」

LangChain & LangGraph
专才框架 「高端机器」

LlamaIndex(数据)/ MAF(多智能体)
托管平台 「全包工厂」

Bedrock / Azure Foundry / Vertex AI

类别 类比 定位
1. 通用工具箱(Generalist Toolkits) "车间(Workshop)" 给你全部底层组件,能搭任何东西
2. 专才框架(Specialist Frameworks) "高端机器" 为某一个特定难题提供预构建方案
3. 托管平台(Managed Platforms) "全包工厂" 卖你成品"Agent-as-a-Service"------你不构建,你配置

通用工具箱:LangChain & LangGraph

核心哲学:"可组合性(Composability)"
  • LangChain 开创了整个 Agent 开发领域;理念:任何 LLM 应用都能用标准件"组合"出来
  • "砖块"(组件):Models(LLM/聊天/嵌入模型)、Prompts(提示模板)、Tools(函数/API/检索器)、Parsers(把 LLM 输出解析成 JSON/列表)
  • "胶水"(核心概念)LCEL(LangChain Expression Language) ------| 管道操作符,把组件"链"起来

#mermaid-svg-wyfKDRqqKoP1pIQh{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-wyfKDRqqKoP1pIQh .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-wyfKDRqqKoP1pIQh .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-wyfKDRqqKoP1pIQh .error-icon{fill:#552222;}#mermaid-svg-wyfKDRqqKoP1pIQh .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-wyfKDRqqKoP1pIQh .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-wyfKDRqqKoP1pIQh .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-wyfKDRqqKoP1pIQh .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-wyfKDRqqKoP1pIQh .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-wyfKDRqqKoP1pIQh .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-wyfKDRqqKoP1pIQh .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-wyfKDRqqKoP1pIQh .marker{fill:#333333;stroke:#333333;}#mermaid-svg-wyfKDRqqKoP1pIQh .marker.cross{stroke:#333333;}#mermaid-svg-wyfKDRqqKoP1pIQh svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-wyfKDRqqKoP1pIQh p{margin:0;}#mermaid-svg-wyfKDRqqKoP1pIQh .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-wyfKDRqqKoP1pIQh .cluster-label text{fill:#333;}#mermaid-svg-wyfKDRqqKoP1pIQh .cluster-label span{color:#333;}#mermaid-svg-wyfKDRqqKoP1pIQh .cluster-label span p{background-color:transparent;}#mermaid-svg-wyfKDRqqKoP1pIQh .label text,#mermaid-svg-wyfKDRqqKoP1pIQh span{fill:#333;color:#333;}#mermaid-svg-wyfKDRqqKoP1pIQh .node rect,#mermaid-svg-wyfKDRqqKoP1pIQh .node circle,#mermaid-svg-wyfKDRqqKoP1pIQh .node ellipse,#mermaid-svg-wyfKDRqqKoP1pIQh .node polygon,#mermaid-svg-wyfKDRqqKoP1pIQh .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-wyfKDRqqKoP1pIQh .rough-node .label text,#mermaid-svg-wyfKDRqqKoP1pIQh .node .label text,#mermaid-svg-wyfKDRqqKoP1pIQh .image-shape .label,#mermaid-svg-wyfKDRqqKoP1pIQh .icon-shape .label{text-anchor:middle;}#mermaid-svg-wyfKDRqqKoP1pIQh .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-wyfKDRqqKoP1pIQh .rough-node .label,#mermaid-svg-wyfKDRqqKoP1pIQh .node .label,#mermaid-svg-wyfKDRqqKoP1pIQh .image-shape .label,#mermaid-svg-wyfKDRqqKoP1pIQh .icon-shape .label{text-align:center;}#mermaid-svg-wyfKDRqqKoP1pIQh .node.clickable{cursor:pointer;}#mermaid-svg-wyfKDRqqKoP1pIQh .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-wyfKDRqqKoP1pIQh .arrowheadPath{fill:#333333;}#mermaid-svg-wyfKDRqqKoP1pIQh .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-wyfKDRqqKoP1pIQh .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-wyfKDRqqKoP1pIQh .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-wyfKDRqqKoP1pIQh .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-wyfKDRqqKoP1pIQh .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-wyfKDRqqKoP1pIQh .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-wyfKDRqqKoP1pIQh .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-wyfKDRqqKoP1pIQh .cluster text{fill:#333;}#mermaid-svg-wyfKDRqqKoP1pIQh .cluster span{color:#333;}#mermaid-svg-wyfKDRqqKoP1pIQh 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-wyfKDRqqKoP1pIQh .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-wyfKDRqqKoP1pIQh rect.text{fill:none;stroke-width:0;}#mermaid-svg-wyfKDRqqKoP1pIQh .icon-shape,#mermaid-svg-wyfKDRqqKoP1pIQh .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-wyfKDRqqKoP1pIQh .icon-shape p,#mermaid-svg-wyfKDRqqKoP1pIQh .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-wyfKDRqqKoP1pIQh .icon-shape .label rect,#mermaid-svg-wyfKDRqqKoP1pIQh .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-wyfKDRqqKoP1pIQh .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-wyfKDRqqKoP1pIQh .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-wyfKDRqqKoP1pIQh :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} LCEL 管道 |
Models 模型
Prompts 提示词
Tools 工具
Parsers 解析器
LLM 应用

LangChain Agent 的两大关键组件
  1. 工具装饰器(@tool):一个装饰器把任意 Python 函数变成 LLM 可调用的"工具",自动处理复杂 JSON schema 生成
  2. 预构建"Agent 执行器":内置 ReAct / Function-calling 循环------给它模型、工具、提示词,它帮你跑循环
"执行器"的架构极限
  • 问题 :预构建执行器是"黑箱"------它是循环的,但逻辑固定
  • 想要"磁性路由"?"群聊"?加 HITL 审批?------预构建执行器做不到,它不灵活
  • 黑箱问题:简单任务够用,自定义有状态架构不可能
解决方案:LangGraph("白箱")

LangGraph logo;Start / Node / Conditional Edge 流程图。

  • LangGraph 就是为此而生:构建 Agent 的"白箱"方案,LangChain 的有状态循环工作流引擎
  • LangGraph = "自己造 Agent"架构

#mermaid-svg-BGN93Q5Enw5ZcoZP{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-BGN93Q5Enw5ZcoZP .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-BGN93Q5Enw5ZcoZP .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-BGN93Q5Enw5ZcoZP .error-icon{fill:#552222;}#mermaid-svg-BGN93Q5Enw5ZcoZP .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-BGN93Q5Enw5ZcoZP .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-BGN93Q5Enw5ZcoZP .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-BGN93Q5Enw5ZcoZP .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-BGN93Q5Enw5ZcoZP .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-BGN93Q5Enw5ZcoZP .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-BGN93Q5Enw5ZcoZP .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-BGN93Q5Enw5ZcoZP .marker{fill:#333333;stroke:#333333;}#mermaid-svg-BGN93Q5Enw5ZcoZP .marker.cross{stroke:#333333;}#mermaid-svg-BGN93Q5Enw5ZcoZP svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-BGN93Q5Enw5ZcoZP p{margin:0;}#mermaid-svg-BGN93Q5Enw5ZcoZP .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-BGN93Q5Enw5ZcoZP .cluster-label text{fill:#333;}#mermaid-svg-BGN93Q5Enw5ZcoZP .cluster-label span{color:#333;}#mermaid-svg-BGN93Q5Enw5ZcoZP .cluster-label span p{background-color:transparent;}#mermaid-svg-BGN93Q5Enw5ZcoZP .label text,#mermaid-svg-BGN93Q5Enw5ZcoZP span{fill:#333;color:#333;}#mermaid-svg-BGN93Q5Enw5ZcoZP .node rect,#mermaid-svg-BGN93Q5Enw5ZcoZP .node circle,#mermaid-svg-BGN93Q5Enw5ZcoZP .node ellipse,#mermaid-svg-BGN93Q5Enw5ZcoZP .node polygon,#mermaid-svg-BGN93Q5Enw5ZcoZP .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-BGN93Q5Enw5ZcoZP .rough-node .label text,#mermaid-svg-BGN93Q5Enw5ZcoZP .node .label text,#mermaid-svg-BGN93Q5Enw5ZcoZP .image-shape .label,#mermaid-svg-BGN93Q5Enw5ZcoZP .icon-shape .label{text-anchor:middle;}#mermaid-svg-BGN93Q5Enw5ZcoZP .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-BGN93Q5Enw5ZcoZP .rough-node .label,#mermaid-svg-BGN93Q5Enw5ZcoZP .node .label,#mermaid-svg-BGN93Q5Enw5ZcoZP .image-shape .label,#mermaid-svg-BGN93Q5Enw5ZcoZP .icon-shape .label{text-align:center;}#mermaid-svg-BGN93Q5Enw5ZcoZP .node.clickable{cursor:pointer;}#mermaid-svg-BGN93Q5Enw5ZcoZP .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-BGN93Q5Enw5ZcoZP .arrowheadPath{fill:#333333;}#mermaid-svg-BGN93Q5Enw5ZcoZP .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-BGN93Q5Enw5ZcoZP .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-BGN93Q5Enw5ZcoZP .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-BGN93Q5Enw5ZcoZP .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-BGN93Q5Enw5ZcoZP .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-BGN93Q5Enw5ZcoZP .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-BGN93Q5Enw5ZcoZP .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-BGN93Q5Enw5ZcoZP .cluster text{fill:#333;}#mermaid-svg-BGN93Q5Enw5ZcoZP .cluster span{color:#333;}#mermaid-svg-BGN93Q5Enw5ZcoZP 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-BGN93Q5Enw5ZcoZP .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-BGN93Q5Enw5ZcoZP rect.text{fill:none;stroke-width:0;}#mermaid-svg-BGN93Q5Enw5ZcoZP .icon-shape,#mermaid-svg-BGN93Q5Enw5ZcoZP .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-BGN93Q5Enw5ZcoZP .icon-shape p,#mermaid-svg-BGN93Q5Enw5ZcoZP .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-BGN93Q5Enw5ZcoZP .icon-shape .label rect,#mermaid-svg-BGN93Q5Enw5ZcoZP .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-BGN93Q5Enw5ZcoZP .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-BGN93Q5Enw5ZcoZP .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-BGN93Q5Enw5ZcoZP :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 读状态 → 决定下一步
执行后写回
作为输入
Edge 边(LLM 路由器)
Node 节点(任意 Python 函数)
State 状态(显式定义的中央对象)

何时用 / 何时不用

:最大灵活性(非标准自定义工作流如群聊/磁性路由);推理逻辑是知识产权(不能是黑箱);要粘合多家厂商的模型/数据/工具

不用 :复杂、学习曲线陡;冗长------所有架构"管道"(定义状态/节点/边)都要自己写

总结 :LangChain = 底层组件"车间"(LCEL、Tools);LangGraph = "工作台"(把组件组装成任意自定义有状态循环 Agent)------要最大灵活性和自定义逻辑用它;警惕高复杂度和"全自己造"


数据专才:LlamaIndex 深潜

定位
  • 专才类:解决一个特别难的问题------构建强大的数据密集型 Agent
  • 如果 LangChain 是"通用车间",LlamaIndex 就是"专业数据科学实验室"( 粉蓝渐变卡通 logo)
  • 视角转变:从"应用优先"到"数据优先"
核心问题:超越简单 RAG
  • 简单 RAG(检索→增强→生成):找几个相关块→塞进提示词→得到答案
  • LlamaIndex 要解决的问题(Agentic RAG)
  • 答案不在一个文档里怎么办?
  • 要对比多个文档怎么办?
  • 要先查 PDF、再查 SQL 库、再综合结果怎么办?
LangChain LlamaIndex
世界观 应用优先 数据优先
关注点 Agent 的执行循环(工作流) 数据本身:摄取、结构化、索引
数据地位 只是 Agent 可调的众多"工具"之一 Agent 是数据之上的推理层
选谁 复杂 Agent 逻辑 复杂数据交互
四大核心概念(两条管道)

管道 1:数据摄取(数据进)

  • Data Connectors 数据连接器:预构建模块从任何地方加载数据(S3、Salesforce、Notion、SQL 库、API、PDF)
  • Indexing 索引 :LlamaIndex 的"魔法"------不只是向量存储,而是智能结构化你的数据:VectorStoreIndex(搜索)、SummaryIndex(总结)、KeywordTableIndex(元数据)

管道 2:数据检索(数据出)

  • Query Engines 查询引擎 :向索引提问的高级接口------index.as_query_engine()
  • RAG Pipelines :可定制检索过程------加**重排序(re-ranking)响应综合(response synthesis)**步骤,构建精细调优的 RAG 系统
LlamaIndex Agents(Agentic RAG)
  • Agent 在哪? LlamaIndex 的 Agent 是 Query Engines 之上的推理层
  • 把多个 Query Engines 当作 Agent 的"工具":

#mermaid-svg-4woxlmzZHKz668VQ{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-4woxlmzZHKz668VQ .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-4woxlmzZHKz668VQ .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-4woxlmzZHKz668VQ .error-icon{fill:#552222;}#mermaid-svg-4woxlmzZHKz668VQ .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-4woxlmzZHKz668VQ .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-4woxlmzZHKz668VQ .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-4woxlmzZHKz668VQ .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-4woxlmzZHKz668VQ .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-4woxlmzZHKz668VQ .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-4woxlmzZHKz668VQ .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-4woxlmzZHKz668VQ .marker{fill:#333333;stroke:#333333;}#mermaid-svg-4woxlmzZHKz668VQ .marker.cross{stroke:#333333;}#mermaid-svg-4woxlmzZHKz668VQ svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-4woxlmzZHKz668VQ p{margin:0;}#mermaid-svg-4woxlmzZHKz668VQ .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-4woxlmzZHKz668VQ .cluster-label text{fill:#333;}#mermaid-svg-4woxlmzZHKz668VQ .cluster-label span{color:#333;}#mermaid-svg-4woxlmzZHKz668VQ .cluster-label span p{background-color:transparent;}#mermaid-svg-4woxlmzZHKz668VQ .label text,#mermaid-svg-4woxlmzZHKz668VQ span{fill:#333;color:#333;}#mermaid-svg-4woxlmzZHKz668VQ .node rect,#mermaid-svg-4woxlmzZHKz668VQ .node circle,#mermaid-svg-4woxlmzZHKz668VQ .node ellipse,#mermaid-svg-4woxlmzZHKz668VQ .node polygon,#mermaid-svg-4woxlmzZHKz668VQ .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-4woxlmzZHKz668VQ .rough-node .label text,#mermaid-svg-4woxlmzZHKz668VQ .node .label text,#mermaid-svg-4woxlmzZHKz668VQ .image-shape .label,#mermaid-svg-4woxlmzZHKz668VQ .icon-shape .label{text-anchor:middle;}#mermaid-svg-4woxlmzZHKz668VQ .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-4woxlmzZHKz668VQ .rough-node .label,#mermaid-svg-4woxlmzZHKz668VQ .node .label,#mermaid-svg-4woxlmzZHKz668VQ .image-shape .label,#mermaid-svg-4woxlmzZHKz668VQ .icon-shape .label{text-align:center;}#mermaid-svg-4woxlmzZHKz668VQ .node.clickable{cursor:pointer;}#mermaid-svg-4woxlmzZHKz668VQ .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-4woxlmzZHKz668VQ .arrowheadPath{fill:#333333;}#mermaid-svg-4woxlmzZHKz668VQ .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-4woxlmzZHKz668VQ .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-4woxlmzZHKz668VQ .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-4woxlmzZHKz668VQ .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-4woxlmzZHKz668VQ .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-4woxlmzZHKz668VQ .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-4woxlmzZHKz668VQ .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-4woxlmzZHKz668VQ .cluster text{fill:#333;}#mermaid-svg-4woxlmzZHKz668VQ .cluster span{color:#333;}#mermaid-svg-4woxlmzZHKz668VQ 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-4woxlmzZHKz668VQ .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-4woxlmzZHKz668VQ rect.text{fill:none;stroke-width:0;}#mermaid-svg-4woxlmzZHKz668VQ .icon-shape,#mermaid-svg-4woxlmzZHKz668VQ .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-4woxlmzZHKz668VQ .icon-shape p,#mermaid-svg-4woxlmzZHKz668VQ .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-4woxlmzZHKz668VQ .icon-shape .label rect,#mermaid-svg-4woxlmzZHKz668VQ .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-4woxlmzZHKz668VQ .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-4woxlmzZHKz668VQ .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-4woxlmzZHKz668VQ :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 用户提问:对比 2024 销售额与财务预测
Agent 推理层

(分解复杂问题)
工具1:2024 财务 PDF

查询引擎
工具2:SQL 销售数据库

查询引擎
先查 SQL → 再查 PDF → 综合
最终答案

  • 例子:"对比 2024 年销售额与财务报告中的预测" → Agent 计划先调工具2(SQL)、再调工具1(PDF)、最后综合答案
总结与选型
  • 核心优势:从多样数据源构建丰富 "Indexes";关键特性:Agentic RAG(跨多个复杂查询引擎推理综合)
  • 何时用:①主挑战是 RAG(高级 RAG)②数据密集型 Agent(大/复杂/多模态/多源数据)③要精细调优检索(重排序、复杂综合)
  • 代价 :不是通用框架(不适合通用工作流或复杂群聊);要求你先想清楚数据架构(数据优先思维)

多智能体专才:Microsoft Agent Framework(MAF)

为什么要合并两个遗产?
  • AutoGen:多智能体协作出色------"对话优先"模型、群聊等模式的简单抽象
  • Semantic Kernel:企业级稳健------规划器、中间件、线程状态、类型安全、遥测、安全
  • MAF 的目标:两者优点合一

#mermaid-svg-psVvMMRyeDbBySfs{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-psVvMMRyeDbBySfs .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-psVvMMRyeDbBySfs .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-psVvMMRyeDbBySfs .error-icon{fill:#552222;}#mermaid-svg-psVvMMRyeDbBySfs .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-psVvMMRyeDbBySfs .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-psVvMMRyeDbBySfs .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-psVvMMRyeDbBySfs .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-psVvMMRyeDbBySfs .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-psVvMMRyeDbBySfs .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-psVvMMRyeDbBySfs .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-psVvMMRyeDbBySfs .marker{fill:#333333;stroke:#333333;}#mermaid-svg-psVvMMRyeDbBySfs .marker.cross{stroke:#333333;}#mermaid-svg-psVvMMRyeDbBySfs svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-psVvMMRyeDbBySfs p{margin:0;}#mermaid-svg-psVvMMRyeDbBySfs .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-psVvMMRyeDbBySfs .cluster-label text{fill:#333;}#mermaid-svg-psVvMMRyeDbBySfs .cluster-label span{color:#333;}#mermaid-svg-psVvMMRyeDbBySfs .cluster-label span p{background-color:transparent;}#mermaid-svg-psVvMMRyeDbBySfs .label text,#mermaid-svg-psVvMMRyeDbBySfs span{fill:#333;color:#333;}#mermaid-svg-psVvMMRyeDbBySfs .node rect,#mermaid-svg-psVvMMRyeDbBySfs .node circle,#mermaid-svg-psVvMMRyeDbBySfs .node ellipse,#mermaid-svg-psVvMMRyeDbBySfs .node polygon,#mermaid-svg-psVvMMRyeDbBySfs .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-psVvMMRyeDbBySfs .rough-node .label text,#mermaid-svg-psVvMMRyeDbBySfs .node .label text,#mermaid-svg-psVvMMRyeDbBySfs .image-shape .label,#mermaid-svg-psVvMMRyeDbBySfs .icon-shape .label{text-anchor:middle;}#mermaid-svg-psVvMMRyeDbBySfs .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-psVvMMRyeDbBySfs .rough-node .label,#mermaid-svg-psVvMMRyeDbBySfs .node .label,#mermaid-svg-psVvMMRyeDbBySfs .image-shape .label,#mermaid-svg-psVvMMRyeDbBySfs .icon-shape .label{text-align:center;}#mermaid-svg-psVvMMRyeDbBySfs .node.clickable{cursor:pointer;}#mermaid-svg-psVvMMRyeDbBySfs .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-psVvMMRyeDbBySfs .arrowheadPath{fill:#333333;}#mermaid-svg-psVvMMRyeDbBySfs .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-psVvMMRyeDbBySfs .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-psVvMMRyeDbBySfs .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-psVvMMRyeDbBySfs .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-psVvMMRyeDbBySfs .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-psVvMMRyeDbBySfs .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-psVvMMRyeDbBySfs .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-psVvMMRyeDbBySfs .cluster text{fill:#333;}#mermaid-svg-psVvMMRyeDbBySfs .cluster span{color:#333;}#mermaid-svg-psVvMMRyeDbBySfs 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-psVvMMRyeDbBySfs .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-psVvMMRyeDbBySfs rect.text{fill:none;stroke-width:0;}#mermaid-svg-psVvMMRyeDbBySfs .icon-shape,#mermaid-svg-psVvMMRyeDbBySfs .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-psVvMMRyeDbBySfs .icon-shape p,#mermaid-svg-psVvMMRyeDbBySfs .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-psVvMMRyeDbBySfs .icon-shape .label rect,#mermaid-svg-psVvMMRyeDbBySfs .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-psVvMMRyeDbBySfs .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-psVvMMRyeDbBySfs .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-psVvMMRyeDbBySfs :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} AutoGen

多智能体协作

对话优先 / 群聊抽象
Microsoft Agent Framework (MAF)

两者优点合一
Semantic Kernel

企业级稳健

规划器 / 中间件 / 类型安全
图工作流 / 类型化路由

检查点 / HITL / MCP 一等公民

核心能力 1:企业级 Agent(SK 遗产)
  • 中间件(过滤器):拦截 Agent 动作做日志、认证、安全检查
  • Agent Thread(状态管理):管理长对话状态的正式系统
  • 广泛支持:原生支持 Azure OpenAI、OpenAI 等
  • MCP 集成:与模型上下文协议一等公民集成(标准化工具调用)
核心能力 2:Workflows(AutoGen 进化)
  • 多智能体协作的新抽象:基于图的工作流引擎(像 LangGraph)------AutoGen "群聊"的进化
  • 企业级特性:
  • 类型化路由:显式、可预测的流程控制
  • 嵌套:工作流里嵌套工作流
  • 检查点(Checkpointing):保存工作流状态、之后恢复(长任务必备)
  • HITL:内建暂停等人类审批的模式
"对话优先"模式
  • 保留 AutoGen 的对话优先模式:
  • AutoGen 式"群聊":快速原型、辩论、涌现行为
  • 显式"工作流":生产环境、可靠、逐步可预测且安全
何时用 / 何时不用

:①企业级多智能体系统(#1 用途,既要稳健又要协作)②有状态长运行 Agent(要检查点+HITL)③.NET 和 Azure 生态(第一方选择)

不用 :新框架(社区和示例还在成长);"有主见"(比 LangChain 更引导你走向微软中心化架构)

总结 :MAF = AutoGen + Semantic Kernel 的"下一代"继任者------生产级多智能体系统,尤其 .NET/Azure 世界


托管平台:云 Agent(AWS / Azure / Google)

什么是"Agent-as-a-Service"("买"的决策)
  • 不写 Agent 推理代码、不管运行时/状态/扩展------云厂商管理整个 Agentic 栈
  • 架构师的工作:①配置 (声明 Agent 该做什么)②提供工具 (OpenAPI 规范或函数定义)③写指令(自然语言目标)------平台生成并托管 Agent
厂商 产品 特点
Amazon Bedrock Agents 深度集成 Lambda/S3/DynamoDB,用 Bedrock 模型库
Microsoft Azure AI Foundry 构建/管理/部署 Agentic 应用,集成 Azure Functions、AI Search
Google Cloud Agent Builder(Vertex AI) 统一平台,连接 Google 生态

它们的目标:把你留在它们的生态里

5 步配方回顾( 流程图:灵魂/大脑/手/记忆/循环)

与同款:System Prompt(灵魂)→ LLM(大脑)→ web_search(手/工具)→ Memory(记忆)→ Loop(循环)。

PROS(买的好处)
  1. 全托管 + 自动扩展:零基础设施负担(第一业务驱动力)
  2. 深度云集成:最容易让 Agent 访问现有云资源(S3/DynamoDB/Azure Functions),自动处理 IAM 权限和凭证
  3. 上市速度:几小时搭好简单、稳健、安全的 Agent
  4. 安全合规:自带父云的内置日志/监控/合规(HIPAA、SOC 2)
CONS(买的代价)
  1. "黑箱"推理 (关键缺点):看不到/控制不了 Agent 如何推理(它的 ReAct 提示词);不能定制错误处理和重试;调试"卡住"的 Agent 几乎不可能
  2. 极端供应商锁定:Agent 是特定云的 API,不可迁移
  3. 有限灵活性 :建不了我们学的高级模式(群聊、磁性路由)------你被限制在它们定义的简单单循环 ReAct Agent 里
Build vs Buy 决策( "Agents in the Cloud" logo)

#mermaid-svg-MymlcfkdhzFqD6qK{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-MymlcfkdhzFqD6qK .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-MymlcfkdhzFqD6qK .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-MymlcfkdhzFqD6qK .error-icon{fill:#552222;}#mermaid-svg-MymlcfkdhzFqD6qK .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-MymlcfkdhzFqD6qK .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-MymlcfkdhzFqD6qK .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-MymlcfkdhzFqD6qK .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-MymlcfkdhzFqD6qK .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-MymlcfkdhzFqD6qK .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-MymlcfkdhzFqD6qK .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-MymlcfkdhzFqD6qK .marker{fill:#333333;stroke:#333333;}#mermaid-svg-MymlcfkdhzFqD6qK .marker.cross{stroke:#333333;}#mermaid-svg-MymlcfkdhzFqD6qK svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-MymlcfkdhzFqD6qK p{margin:0;}#mermaid-svg-MymlcfkdhzFqD6qK .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-MymlcfkdhzFqD6qK .cluster-label text{fill:#333;}#mermaid-svg-MymlcfkdhzFqD6qK .cluster-label span{color:#333;}#mermaid-svg-MymlcfkdhzFqD6qK .cluster-label span p{background-color:transparent;}#mermaid-svg-MymlcfkdhzFqD6qK .label text,#mermaid-svg-MymlcfkdhzFqD6qK span{fill:#333;color:#333;}#mermaid-svg-MymlcfkdhzFqD6qK .node rect,#mermaid-svg-MymlcfkdhzFqD6qK .node circle,#mermaid-svg-MymlcfkdhzFqD6qK .node ellipse,#mermaid-svg-MymlcfkdhzFqD6qK .node polygon,#mermaid-svg-MymlcfkdhzFqD6qK .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-MymlcfkdhzFqD6qK .rough-node .label text,#mermaid-svg-MymlcfkdhzFqD6qK .node .label text,#mermaid-svg-MymlcfkdhzFqD6qK .image-shape .label,#mermaid-svg-MymlcfkdhzFqD6qK .icon-shape .label{text-anchor:middle;}#mermaid-svg-MymlcfkdhzFqD6qK .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-MymlcfkdhzFqD6qK .rough-node .label,#mermaid-svg-MymlcfkdhzFqD6qK .node .label,#mermaid-svg-MymlcfkdhzFqD6qK .image-shape .label,#mermaid-svg-MymlcfkdhzFqD6qK .icon-shape .label{text-align:center;}#mermaid-svg-MymlcfkdhzFqD6qK .node.clickable{cursor:pointer;}#mermaid-svg-MymlcfkdhzFqD6qK .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-MymlcfkdhzFqD6qK .arrowheadPath{fill:#333333;}#mermaid-svg-MymlcfkdhzFqD6qK .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-MymlcfkdhzFqD6qK .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-MymlcfkdhzFqD6qK .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-MymlcfkdhzFqD6qK .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-MymlcfkdhzFqD6qK .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-MymlcfkdhzFqD6qK .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-MymlcfkdhzFqD6qK .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-MymlcfkdhzFqD6qK .cluster text{fill:#333;}#mermaid-svg-MymlcfkdhzFqD6qK .cluster span{color:#333;}#mermaid-svg-MymlcfkdhzFqD6qK 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-MymlcfkdhzFqD6qK .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-MymlcfkdhzFqD6qK rect.text{fill:none;stroke-width:0;}#mermaid-svg-MymlcfkdhzFqD6qK .icon-shape,#mermaid-svg-MymlcfkdhzFqD6qK .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-MymlcfkdhzFqD6qK .icon-shape p,#mermaid-svg-MymlcfkdhzFqD6qK .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-MymlcfkdhzFqD6qK .icon-shape .label rect,#mermaid-svg-MymlcfkdhzFqD6qK .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-MymlcfkdhzFqD6qK .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-MymlcfkdhzFqD6qK .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-MymlcfkdhzFqD6qK :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 是



要构建什么?
任务简单、定义明确、

内部使用?
买 Buy → 托管平台

Bedrock / Azure Foundry / Vertex AI
复杂、自定义、非确定性?

需要多智能体协作?

推理逻辑是核心优势?

需要多云中立?
建 Build → Code-First 框架

LangGraph / LlamaIndex / MAF
混合方案或

按场景权衡

选"买"(托管平台)当 :任务简单、定义明确、内部使用;核心价值在于与同云其他服务集成(例:"帮客服团队从 DynamoDB 查订单详情的内置 Agent")

选"建"(框架)当 :任务复杂、自定义或非确定性;需要多智能体协作(群聊);Agent 的推理逻辑本身就是你的竞争优势;需要多云或厂商中立方案

三分类总结( 三图标:LangChain 鸟+链 / LlamaIndex 粉蓝卡通 / 三云 logo)
  1. 通用类(LangChain):最大灵活性和自定义"自己造"逻辑
  2. 专才类(LlamaIndex、MAF):预构建方案解决特定难题(最佳 RAG / 最佳多智能体协作)
  3. 托管类(Bedrock、Azure、Google):买成品,配置即用(简单、快速、全托管)

📌 本段核心收获(一句话版)

  1. 框架存在的理由:样板代码(工具解析/状态管理/RAG 管道/提示词管理)太多,裸写不可维护。
  2. 三分类地图(Mermaid 决策图):通用工具箱(车间)/ 专才框架(高端机器)/ 托管平台(全包工厂)。
  3. LangChain = 可组合车间 :LCEL 管道胶水 + @tool 装饰器 + 预构建执行器;LangGraph = 白箱工作台:State/Nodes/Edges 全显式------解决执行器黑箱问题。
  4. LlamaIndex = 数据优先 :连接器+智能索引+查询引擎+RAG 管道;Agentic RAG = 把多个查询引擎当工具的 Agent(Mermaid 图:先 SQL 后 PDF 再综合)。
  5. MAF = AutoGen(多智能体模式)+ Semantic Kernel(企业级)合体(Mermaid 合并图):图工作流、类型化路由、检查点、HITL、MCP 一等公民。
  6. 托管平台三巨头 :Bedrock / Azure AI Foundry / Vertex AI------全托管+云集成+合规,但黑箱推理+供应商锁定+灵活性受限
  7. Build vs Buy 口诀(Mermaid 决策树):简单内部任务→买;复杂自定义/多智能体/逻辑是核心竞争力/要多云→建。
  8. 下一段预告:Agentic 设计模式总览------Tool Use / Planning / Reflection / ReAct 四大模式逐个深挖,从"用什么框架"转向"用什么模式"。

第 7 篇


Agentic 设计原则(四大支柱)

为什么学设计模式?
  • 已经掌握"工具"(how)------现在学"蓝图"(what & why)
  • 本节 = Agentic AI 的"四人帮(Gang of Four)"
  • Prompt Engineering 是战术 (为单个任务雕琢完美指令,脆弱、新模型就崩);Agentic Architecture 是战略(设计可靠解决问题的组件系统)
  • 框架是工具(How):具体的代码库(LangChain、MAF)------锤子锯子电动工具
  • 模式是蓝图(What & Why):可复用的概念方案------"自纠正系统"或"委派系统"的架构蓝图
  • 关键洞察:模式与框架无关------"Reflection 模式"用 LangChain、MAF 或纯 Python 都能实现
模式目录路线图
  • Part 1 基础:设计原则
  • Part 2 核心单 Agent 模式:Tool Use / Planning / Reflection / ReAct
  • Part 3 多智能体模式:Router & Specialist / Handoff / Group Chat / Swarm
  • Part 4 控制与安全:HITL / Ejection
四大设计原则(Agent 的"物理定律")
原则 概念 架构含义
1. Goal-Directed 目标驱动 目的定义而非任务:指令式"调 API 查伦敦天气" vs 目标式"给我规划 3 天伦敦行程"(Agent 自己发现步骤:查天气/找航班/订酒店) 目标是启动推理循环的主要输入,所有规划由此派生
2. Reactive 反应性 能感知并响应环境(用户的追问、工具结果/API 错误、新邮件) 循环不能是直线,必须是循环------遇到意外和错误要反应,不能崩溃
3. Stateful 有状态 记住发生了什么:原始目标、聊天历史、工具调用历史、草稿本(当前想法) 状态管理是核心架构问题------设计跨循环持久化的"记忆"组件
4. Autonomous 自主性 能自己行动推进目标------是前三个原则的结果:知道目的地(目标)、看得见路(反应)、知道去过哪(状态)→ 能"开车"(自主) 授予 Agent "代理权":无需逐步人类确认即可执行动作

:四个图标卡片(右上状态化、中间反应性、左下自主性图标);:四原则系统图。

四原则作为系统 :目标定义"为什么"→ 反应提供"现在怎么办"→ 状态提供"之前发生了什么"→ 自主是"怎么做"(执行决策的能力)------这 4 条构成 Agent 的引擎
#mermaid-svg-jdegiTAst3n72nvm{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-jdegiTAst3n72nvm .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-jdegiTAst3n72nvm .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-jdegiTAst3n72nvm .error-icon{fill:#552222;}#mermaid-svg-jdegiTAst3n72nvm .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-jdegiTAst3n72nvm .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-jdegiTAst3n72nvm .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-jdegiTAst3n72nvm .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-jdegiTAst3n72nvm .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-jdegiTAst3n72nvm .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-jdegiTAst3n72nvm .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-jdegiTAst3n72nvm .marker{fill:#333333;stroke:#333333;}#mermaid-svg-jdegiTAst3n72nvm .marker.cross{stroke:#333333;}#mermaid-svg-jdegiTAst3n72nvm svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-jdegiTAst3n72nvm p{margin:0;}#mermaid-svg-jdegiTAst3n72nvm .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-jdegiTAst3n72nvm .cluster-label text{fill:#333;}#mermaid-svg-jdegiTAst3n72nvm .cluster-label span{color:#333;}#mermaid-svg-jdegiTAst3n72nvm .cluster-label span p{background-color:transparent;}#mermaid-svg-jdegiTAst3n72nvm .label text,#mermaid-svg-jdegiTAst3n72nvm span{fill:#333;color:#333;}#mermaid-svg-jdegiTAst3n72nvm .node rect,#mermaid-svg-jdegiTAst3n72nvm .node circle,#mermaid-svg-jdegiTAst3n72nvm .node ellipse,#mermaid-svg-jdegiTAst3n72nvm .node polygon,#mermaid-svg-jdegiTAst3n72nvm .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-jdegiTAst3n72nvm .rough-node .label text,#mermaid-svg-jdegiTAst3n72nvm .node .label text,#mermaid-svg-jdegiTAst3n72nvm .image-shape .label,#mermaid-svg-jdegiTAst3n72nvm .icon-shape .label{text-anchor:middle;}#mermaid-svg-jdegiTAst3n72nvm .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-jdegiTAst3n72nvm .rough-node .label,#mermaid-svg-jdegiTAst3n72nvm .node .label,#mermaid-svg-jdegiTAst3n72nvm .image-shape .label,#mermaid-svg-jdegiTAst3n72nvm .icon-shape .label{text-align:center;}#mermaid-svg-jdegiTAst3n72nvm .node.clickable{cursor:pointer;}#mermaid-svg-jdegiTAst3n72nvm .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-jdegiTAst3n72nvm .arrowheadPath{fill:#333333;}#mermaid-svg-jdegiTAst3n72nvm .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-jdegiTAst3n72nvm .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-jdegiTAst3n72nvm .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-jdegiTAst3n72nvm .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-jdegiTAst3n72nvm .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-jdegiTAst3n72nvm .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-jdegiTAst3n72nvm .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-jdegiTAst3n72nvm .cluster text{fill:#333;}#mermaid-svg-jdegiTAst3n72nvm .cluster span{color:#333;}#mermaid-svg-jdegiTAst3n72nvm 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-jdegiTAst3n72nvm .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-jdegiTAst3n72nvm rect.text{fill:none;stroke-width:0;}#mermaid-svg-jdegiTAst3n72nvm .icon-shape,#mermaid-svg-jdegiTAst3n72nvm .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-jdegiTAst3n72nvm .icon-shape p,#mermaid-svg-jdegiTAst3n72nvm .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-jdegiTAst3n72nvm .icon-shape .label rect,#mermaid-svg-jdegiTAst3n72nvm .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-jdegiTAst3n72nvm .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-jdegiTAst3n72nvm .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-jdegiTAst3n72nvm :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Goal-Directed

为什么(目的地)
Autonomous

怎么做(开车)
Reactive

现在怎么办(看路)
Stateful

之前发生了什么(记路)


模式 1:Tool Use(工具使用)

核心问题:没有手的脑袋
  • LLM 是"罐子里的脑子":文本进文本出,不能上网、查库、甚至不知道今天日期------它的整个世界是上下文窗口里的文本
  • 怎么连接"大脑"(推理)与"真实世界"(代码/API/数据库)?→ Tool Use 模式
模式定义:三部分架构

工作流:User Query → Agentic Workflow(Listing Tools 列出工具 → Select Tools 选择 → Use Tools 使用 → Orchestrator → Func Response → Get Results → Tools → Generate Response → Results OK 校验)→ JSON。

  1. Schema(工具说明书) :JSON 描述------①name:函数名(get_weather)②description最重要 ,清晰自然语言描述工具做什么("获取指定城市当前天气")③parameters:参数描述(city: string, "城市名,如 London")
  2. LLM(选择者) :推理------"目标关于天气,get_weather 的描述匹配;目标指定城市 London,工具需要 city 参数"→ 输出结构化 JSON:{"tool_call": {"name": "get_weather", "arguments": {"city": "London"}}}
  3. Orchestrator(执行者,我们的代码) :①收 JSON ②解析(name/arguments)③映射到真实 Python 函数 ④执行 get_weather(city="London") ⑤把结果("25°C")返回 LLM 进入下一循环
架构含义
  1. 工具描述就是提示工程:描述质量决定工具会不会被用------坏描述 = 工具永远不会被调用
  2. 安全与校验 :Orchestrator 必须是安全门------验证 LLM 的所有参数,绝不直接信任 LLM 输出(防 SQL 注入)
  3. 错误处理:LLM 调用可能失败,要有处理机制

模式 2:Planning(规划)

从单步到多步
  • Tool Use 是单步:"伦敦天气?"→ 调一次工具
  • Planning 问题(多步):"把伦敦天气发邮件给我"→ 需要序列:①call_weather ②call_email(结果来自步骤1)------Agent 怎么知道不能先调邮件工具?
模式定义

工作流:User Query → Agentic Workflow(Create Tasks 创建任务 → Make Plan 制定计划 → Run Task Steps 执行任务步骤 → Plan → Execute Task → Tools → All Task Complete? 判断 → YES → Generate Response)。

  • 用 LLM 把高层目标分解成显式的、有序的可执行步骤列表
  • 停止问 LLM"给我答案",开始问"给我找到答案的计划"------计划只是数据结构(文本列表/JSON 数组)
  • 使能技术:CoT(思维链) ------"先创建计划,再执行第一步"。LLM 内心独白:"用户要天气还要邮件。计划:1. 调 get_weather 查伦敦 2. 用步骤1结果调 send_email。行动:先输出第一个工具调用 call_weather("London")"
Orchestrator 的新角色:状态机
  • ①存完整计划(进记忆)②跟踪当前步骤("第 1/2 步")③执行当前步 ④把结果喂回 LLM ⑤LLM 感知结果继续下一步
  • Plan → Act → Observe → Continue Plan 循环 = 高级 Agent 的基础
  • 架构师三要点:①提示词管过程 不只结果("一步步想""创建计划""分解问题")②必须有组件存/读/更新计划 ③处理失败:步骤2失败怎么办?→ 感知失败并重新规划("send_email 失败,新计划:notify_user_of_failure")
小结
  • Tool Use 给 Agent "手";Planning 给 Agent "内心独白"------行动前思考、把大目标分解成小动作
  • 这就是反射式 Agent 与思考型 Agent 的区别

模式 3:Reflection(反思/元认知)

核心问题:"质量盲"Agent
  • 场景:目标"写 500 字微服务好处博客"。计划:①搜索 ②write_blog_post
  • "成功的失败" :计划执行完美、500 字写出来了,但重复啰嗦、漏关键点、语气别扭 ------Agent 报告"成功!",因为它没有机制评判自己输出的质量
模式定义:Writer-Critic 模型
  • 元认知 = "思考你的思考"
  • Agent 产出后暂停,用第二个批判性过程按标准评估输出------从"我做了任务吗?"到"我做得好吗?"
  • 实现几乎总是 Writer-Critic
  • Writer(行动者):标准 Agent------跟随计划、用工具、产出初稿(博客/代码)
  • Critic(反思者)另一次独立 LLM 调用 ,专用提示词:"你是评论家,根据原始目标质量标准评审作者的草稿,给出改进反馈"------Critic 只是另一个有专门反思目的的 Agent
反思工作流(迭代循环)

工作流:Make Plan → Run Task Steps → Execute Task → Task Complete → Get Results → Response → Reflect(反思)→ Reflected Response(反思后的响应);:Start → Writer Agent → Output → Critic Agent → Finish,State 与 Feedback 箭头构成迭代。

复制代码
[目标] → [Writer] → 草稿1 → [Critic] → 评审
  • 评审说"输出好" → 最终答案
  • 评审说"有缺陷" → 反馈 → 回到 Writer(内部自我改进循环,用户看到前已迭代)
架构含义与小结
  1. :每个反思循环至少多一次 LLM 调用------成本和时间可能翻倍或三倍
  2. 需要循环编排:线性 chain 实现不了------这正是 LangGraph 存在的意义
  3. 提示词"人格":要维护两个不同 System Prompt(Writer 提示词管"做",Critic 提示词管"审")
  • 小结:Planning 给内心独白,Reflection 给内心评论家------"初稿 Agent"与"定稿 Agent"的区别

模式 4:ReAct(复合模式)

核心问题:"脆弱"的计划
  • 目标"找 3 本顶级科幻书并邮件发我"→ 计划:①search ②send_email
  • 问题 :步骤1(搜索)失败或空结果怎么办?Agent 按死板计划照样执行步骤2------把空列表发出去,违背用户真实目标
  • 怎么让 Agent 根据每次行动的结果适应计划
模式定义

工作流:User Query → Think&Plan(齿轮人形)→ Reason(蓝圈文件夹)→ Act(橙色工具箱)→ Observe(蓝扳手)→ Repeat;:Thought 阶段(Planning 模式)与 Action 阶段(Tool Use 模式)并排。

  • ReAct = Reason + Act:把 Planning 和 Tool Use 交错的紧密迭代循环
  • 循环:①Reason(想) :生成想法(下一步计划)②Act(做) :执行那一步(工具调用)③Observe(看) :感知工具结果 ④Repeat:基于观察推理规划下一步
  • 不是 Plan-then-Execute,是 Plan-Act-Observe-Plan-Act-Observe...
  • 解构:Reason 阶段 = Planning 模式(提示词让 LLM 产出 Thought);Act 阶段 = Tool Use 模式(产出 Action JSON);ReAct 提示词就是强制 LLM 按 Thought/Action 格式输出
实例 + 为什么是"复合"模式
  • 实例(伦敦天气):循环1:Reason"我要伦敦天气"→ Act call_weather → 观察"25°C 晴";循环2:Reason"有天气信息了可以回答"→ 最终答案
  • ReAct = Planning + Tool Use + Loop;Reflection 也常参与!高级循环:Reason(写博客) → Act(write_blog_post→草稿1) → Observe → Reason(反思"草稿弱") → Act(critique_draft→反馈)
  • ReAct 是让所有其他模式协同工作的引擎
架构含义
  1. 高延迟高成本(最大代价):每步都是完整 LLM 调用,5 步任务 = 5-6 次调用
  2. 自适应稳健(最大收益):搜索失败,下一循环就知道并重新规划("搜索失败,换一个查询词")
  3. 复杂编排:Orchestrator 要管理循环、解析 Thought/Action、执行、反馈------LangChain 叫它 "Agent Executor"
  • 小结:ReAct 不是新模式,是 Planning(Thought)+ Tool Use(Action)的复合;"魔法"在于把观察喂回 Thought 的编排循环------创造能响应环境的自适应 Agent

#mermaid-svg-UVwWgEt5gH0KkWaQ{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-UVwWgEt5gH0KkWaQ .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-UVwWgEt5gH0KkWaQ .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-UVwWgEt5gH0KkWaQ .error-icon{fill:#552222;}#mermaid-svg-UVwWgEt5gH0KkWaQ .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-UVwWgEt5gH0KkWaQ .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-UVwWgEt5gH0KkWaQ .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-UVwWgEt5gH0KkWaQ .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-UVwWgEt5gH0KkWaQ .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-UVwWgEt5gH0KkWaQ .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-UVwWgEt5gH0KkWaQ .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-UVwWgEt5gH0KkWaQ .marker{fill:#333333;stroke:#333333;}#mermaid-svg-UVwWgEt5gH0KkWaQ .marker.cross{stroke:#333333;}#mermaid-svg-UVwWgEt5gH0KkWaQ svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-UVwWgEt5gH0KkWaQ p{margin:0;}#mermaid-svg-UVwWgEt5gH0KkWaQ .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-UVwWgEt5gH0KkWaQ .cluster-label text{fill:#333;}#mermaid-svg-UVwWgEt5gH0KkWaQ .cluster-label span{color:#333;}#mermaid-svg-UVwWgEt5gH0KkWaQ .cluster-label span p{background-color:transparent;}#mermaid-svg-UVwWgEt5gH0KkWaQ .label text,#mermaid-svg-UVwWgEt5gH0KkWaQ span{fill:#333;color:#333;}#mermaid-svg-UVwWgEt5gH0KkWaQ .node rect,#mermaid-svg-UVwWgEt5gH0KkWaQ .node circle,#mermaid-svg-UVwWgEt5gH0KkWaQ .node ellipse,#mermaid-svg-UVwWgEt5gH0KkWaQ .node polygon,#mermaid-svg-UVwWgEt5gH0KkWaQ .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-UVwWgEt5gH0KkWaQ .rough-node .label text,#mermaid-svg-UVwWgEt5gH0KkWaQ .node .label text,#mermaid-svg-UVwWgEt5gH0KkWaQ .image-shape .label,#mermaid-svg-UVwWgEt5gH0KkWaQ .icon-shape .label{text-anchor:middle;}#mermaid-svg-UVwWgEt5gH0KkWaQ .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-UVwWgEt5gH0KkWaQ .rough-node .label,#mermaid-svg-UVwWgEt5gH0KkWaQ .node .label,#mermaid-svg-UVwWgEt5gH0KkWaQ .image-shape .label,#mermaid-svg-UVwWgEt5gH0KkWaQ .icon-shape .label{text-align:center;}#mermaid-svg-UVwWgEt5gH0KkWaQ .node.clickable{cursor:pointer;}#mermaid-svg-UVwWgEt5gH0KkWaQ .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-UVwWgEt5gH0KkWaQ .arrowheadPath{fill:#333333;}#mermaid-svg-UVwWgEt5gH0KkWaQ .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-UVwWgEt5gH0KkWaQ .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-UVwWgEt5gH0KkWaQ .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-UVwWgEt5gH0KkWaQ .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-UVwWgEt5gH0KkWaQ .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-UVwWgEt5gH0KkWaQ .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-UVwWgEt5gH0KkWaQ .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-UVwWgEt5gH0KkWaQ .cluster text{fill:#333;}#mermaid-svg-UVwWgEt5gH0KkWaQ .cluster span{color:#333;}#mermaid-svg-UVwWgEt5gH0KkWaQ 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-UVwWgEt5gH0KkWaQ .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-UVwWgEt5gH0KkWaQ rect.text{fill:none;stroke-width:0;}#mermaid-svg-UVwWgEt5gH0KkWaQ .icon-shape,#mermaid-svg-UVwWgEt5gH0KkWaQ .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-UVwWgEt5gH0KkWaQ .icon-shape p,#mermaid-svg-UVwWgEt5gH0KkWaQ .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-UVwWgEt5gH0KkWaQ .icon-shape .label rect,#mermaid-svg-UVwWgEt5gH0KkWaQ .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-UVwWgEt5gH0KkWaQ .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-UVwWgEt5gH0KkWaQ .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-UVwWgEt5gH0KkWaQ :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 喂回
Reason 想

(Planning 模式)
Act 做

(Tool Use 模式)
Observe 看

(工具结果)


多智能体模式导论

"超级 Agent"谬论(反模式)

三个问题点小图(提示词膨胀 / 上下文窗口 / 单点故障)。

  • 一个 50 个工具、10 页系统提示、全能(销售+研究+编码+客服)的单体 Agent
  • 为什么是反模式:①提示词复杂 :10 页巨型文档 → "提示词渗漏"(任务1的指令干扰任务2)②上下文窗口限制 :50 个工具的 schema 就吃光窗口,没地方放记忆和任务 ③单点故障:一部分卡住整个系统崩,调试噩梦
解决方案:"数字团队"模式 + 三大力量

:单个 Worker 图标 vs Agent1/Agent2/Agent3 协作框。

不要建一个单体 Agent,建一支"微型 Agent 团队"------每个 Agent 提示词小、工具少、可测试可替换;从设计"工人"到设计"组织"

力量 1:专业化(Specialization)------每个 Agent 被设计成只把一件事做到完美:

  • ResearchAgent(有搜索工具,"彻底客观");CopywriterAgent(无工具,"创意风趣");LegalAgent(有审合同工具,"严谨规避风险")
  • 收益:质量可靠性大增------Copywriter 永远不会去调法律工具,Legal 永远不会写俏皮博客

力量 2:并行化(Parallelization)------并发执行无依赖任务:

时间对比图:单体顺序 10s+5s=15s vs 并行 Agent A(10s)‖B(5s)=10s

力量 3:辩论与批判(Debate & Critique) ------Agent 间互相批判提升质量 = Agent 间的 Reflection 模式:WriterAgent 初稿 → CriticAgent 评审 → WriterAgent 修订------"团队式反思"比单 Agent 自审更稳健

多智能体模式路线图

三大力量 → 四个蓝图:Router & Specialist (专业化)/ Handoff (顺序流)/ Group Chat (辩论)/ Swarm(大规模并行)


模式 5:Router & Specialist(路由与专才)

定义:委派模式(不是协作模式)

:User Query → Router → task1/task2 分派图;完整流程:用户问 "X-1000 laptop in stock?" → Router → Inventory Agent 执行 check_stock('X-1000') / Order Agent。

  • "经理-工人"或"交警"模型:
  • Specialist Agents(工人):聚焦小提示词 + 只带需要的工具(SupportAgent: get_order_status, process_refund;InventoryAgent: check_stock, get_product_details
  • Router Agent(经理)自己不做任何"工作" ,唯一工作是分类用户意图并路由给正确的专才 。它的提示词禁止直接回答,只能调用 route_task(destination, original_query):"你必须从 'support', 'inventory', 'billing' 选一个目的地并调用 route_task"
架构含义
  1. 可维护性与模块化(微服务模式) :加 Billing 部门?只需新建隔离的 BillingAgent + 更新 Router 提示词的列表------其他 Agent 完全不受影响(巨大胜利)
  2. 性能与成本 :Router 调用又快又便宜 (简单分类,不是复杂 ReAct 循环);只有被选中的那个专才做昂贵的多步工作------不在无关工具/提示词上浪费 token
  3. 可测试性:每个专才完全隔离测试
  • 小结:委派的根本模式,直接实现"专业化"原则------复杂多功能 Agent 系统的默认首选模式(Router = 快便宜的"分类器",Specialists = 聚焦可靠的"工人")

#mermaid-svg-AisiNE7wfR8qiG4o{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-AisiNE7wfR8qiG4o .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-AisiNE7wfR8qiG4o .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-AisiNE7wfR8qiG4o .error-icon{fill:#552222;}#mermaid-svg-AisiNE7wfR8qiG4o .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-AisiNE7wfR8qiG4o .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-AisiNE7wfR8qiG4o .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-AisiNE7wfR8qiG4o .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-AisiNE7wfR8qiG4o .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-AisiNE7wfR8qiG4o .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-AisiNE7wfR8qiG4o .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-AisiNE7wfR8qiG4o .marker{fill:#333333;stroke:#333333;}#mermaid-svg-AisiNE7wfR8qiG4o .marker.cross{stroke:#333333;}#mermaid-svg-AisiNE7wfR8qiG4o svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-AisiNE7wfR8qiG4o p{margin:0;}#mermaid-svg-AisiNE7wfR8qiG4o .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-AisiNE7wfR8qiG4o .cluster-label text{fill:#333;}#mermaid-svg-AisiNE7wfR8qiG4o .cluster-label span{color:#333;}#mermaid-svg-AisiNE7wfR8qiG4o .cluster-label span p{background-color:transparent;}#mermaid-svg-AisiNE7wfR8qiG4o .label text,#mermaid-svg-AisiNE7wfR8qiG4o span{fill:#333;color:#333;}#mermaid-svg-AisiNE7wfR8qiG4o .node rect,#mermaid-svg-AisiNE7wfR8qiG4o .node circle,#mermaid-svg-AisiNE7wfR8qiG4o .node ellipse,#mermaid-svg-AisiNE7wfR8qiG4o .node polygon,#mermaid-svg-AisiNE7wfR8qiG4o .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-AisiNE7wfR8qiG4o .rough-node .label text,#mermaid-svg-AisiNE7wfR8qiG4o .node .label text,#mermaid-svg-AisiNE7wfR8qiG4o .image-shape .label,#mermaid-svg-AisiNE7wfR8qiG4o .icon-shape .label{text-anchor:middle;}#mermaid-svg-AisiNE7wfR8qiG4o .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-AisiNE7wfR8qiG4o .rough-node .label,#mermaid-svg-AisiNE7wfR8qiG4o .node .label,#mermaid-svg-AisiNE7wfR8qiG4o .image-shape .label,#mermaid-svg-AisiNE7wfR8qiG4o .icon-shape .label{text-align:center;}#mermaid-svg-AisiNE7wfR8qiG4o .node.clickable{cursor:pointer;}#mermaid-svg-AisiNE7wfR8qiG4o .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-AisiNE7wfR8qiG4o .arrowheadPath{fill:#333333;}#mermaid-svg-AisiNE7wfR8qiG4o .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-AisiNE7wfR8qiG4o .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-AisiNE7wfR8qiG4o .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-AisiNE7wfR8qiG4o .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-AisiNE7wfR8qiG4o .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-AisiNE7wfR8qiG4o .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-AisiNE7wfR8qiG4o .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-AisiNE7wfR8qiG4o .cluster text{fill:#333;}#mermaid-svg-AisiNE7wfR8qiG4o .cluster span{color:#333;}#mermaid-svg-AisiNE7wfR8qiG4o 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-AisiNE7wfR8qiG4o .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-AisiNE7wfR8qiG4o rect.text{fill:none;stroke-width:0;}#mermaid-svg-AisiNE7wfR8qiG4o .icon-shape,#mermaid-svg-AisiNE7wfR8qiG4o .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-AisiNE7wfR8qiG4o .icon-shape p,#mermaid-svg-AisiNE7wfR8qiG4o .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-AisiNE7wfR8qiG4o .icon-shape .label rect,#mermaid-svg-AisiNE7wfR8qiG4o .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-AisiNE7wfR8qiG4o .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-AisiNE7wfR8qiG4o .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-AisiNE7wfR8qiG4o :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} support
inventory
billing
用户请求
Router Agent

分类意图(快、便宜)
SupportAgent

订单/退款
InventoryAgent

库存/产品
BillingAgent

账单


模式 6:Handoff(顺序交接/流水线)

定义
  • 用户请求是多步流程 ("找 5 篇最新文章 → 总结 → 写社媒帖")→ 一个 Agent 研究完交接给第二个总结,再交接给第三个写帖
  • "流水线"模式 :固定、预定顺序的专才序列 [Agent A] → [Agent B] → [Agent C] → 最终输出
  • 核心机制:一个 Agent 的输出 = 下一个 Agent 的直接输入(State Handoff,由 Orchestrator 用工作流状态/草稿本传递:调 A → 存 Result A 进 State → 调 B 输入 Result A → ...)
  • 与 Router 的区别:Router 选路径,Handoff 路径固定------关于过程,不是分类
实例:博客工作流

:UI("Write a blog post")→ Research → Drafting → Editor → Result,右侧 State 框。

"写一篇关于 AI 未来的博客":ResearchAgent(输入"AI 未来",输出 500 字原始文本+事实+链接)→ DraftingAgent(输出 5 段结构化博客)→ EditorAgent(校对语法和语气,输出终稿)

架构含义
  1. 高可靠高确定(最大收益):LLM 调用序列完全已知、无意外------完美适合自动化已知业务流程
  2. 简单可测:失败时精确知道哪段交接断了(如 B→C 链)
  3. 僵硬脆弱(最大代价):链条固定,不能适应意外------Agent A 失败整个链停;不能跳过 B 或加新步骤
  • 小结:固定顺序路径 = Agent 架构的"流水线";适用已知稳定流程(如"处理发票");收益=可靠性,代价=僵硬

#mermaid-svg-xuoNCaHMd8uzm703{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-xuoNCaHMd8uzm703 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-xuoNCaHMd8uzm703 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-xuoNCaHMd8uzm703 .error-icon{fill:#552222;}#mermaid-svg-xuoNCaHMd8uzm703 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-xuoNCaHMd8uzm703 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-xuoNCaHMd8uzm703 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-xuoNCaHMd8uzm703 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-xuoNCaHMd8uzm703 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-xuoNCaHMd8uzm703 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-xuoNCaHMd8uzm703 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-xuoNCaHMd8uzm703 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-xuoNCaHMd8uzm703 .marker.cross{stroke:#333333;}#mermaid-svg-xuoNCaHMd8uzm703 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-xuoNCaHMd8uzm703 p{margin:0;}#mermaid-svg-xuoNCaHMd8uzm703 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-xuoNCaHMd8uzm703 .cluster-label text{fill:#333;}#mermaid-svg-xuoNCaHMd8uzm703 .cluster-label span{color:#333;}#mermaid-svg-xuoNCaHMd8uzm703 .cluster-label span p{background-color:transparent;}#mermaid-svg-xuoNCaHMd8uzm703 .label text,#mermaid-svg-xuoNCaHMd8uzm703 span{fill:#333;color:#333;}#mermaid-svg-xuoNCaHMd8uzm703 .node rect,#mermaid-svg-xuoNCaHMd8uzm703 .node circle,#mermaid-svg-xuoNCaHMd8uzm703 .node ellipse,#mermaid-svg-xuoNCaHMd8uzm703 .node polygon,#mermaid-svg-xuoNCaHMd8uzm703 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-xuoNCaHMd8uzm703 .rough-node .label text,#mermaid-svg-xuoNCaHMd8uzm703 .node .label text,#mermaid-svg-xuoNCaHMd8uzm703 .image-shape .label,#mermaid-svg-xuoNCaHMd8uzm703 .icon-shape .label{text-anchor:middle;}#mermaid-svg-xuoNCaHMd8uzm703 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-xuoNCaHMd8uzm703 .rough-node .label,#mermaid-svg-xuoNCaHMd8uzm703 .node .label,#mermaid-svg-xuoNCaHMd8uzm703 .image-shape .label,#mermaid-svg-xuoNCaHMd8uzm703 .icon-shape .label{text-align:center;}#mermaid-svg-xuoNCaHMd8uzm703 .node.clickable{cursor:pointer;}#mermaid-svg-xuoNCaHMd8uzm703 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-xuoNCaHMd8uzm703 .arrowheadPath{fill:#333333;}#mermaid-svg-xuoNCaHMd8uzm703 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-xuoNCaHMd8uzm703 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-xuoNCaHMd8uzm703 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-xuoNCaHMd8uzm703 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-xuoNCaHMd8uzm703 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-xuoNCaHMd8uzm703 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-xuoNCaHMd8uzm703 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-xuoNCaHMd8uzm703 .cluster text{fill:#333;}#mermaid-svg-xuoNCaHMd8uzm703 .cluster span{color:#333;}#mermaid-svg-xuoNCaHMd8uzm703 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-xuoNCaHMd8uzm703 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-xuoNCaHMd8uzm703 rect.text{fill:none;stroke-width:0;}#mermaid-svg-xuoNCaHMd8uzm703 .icon-shape,#mermaid-svg-xuoNCaHMd8uzm703 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-xuoNCaHMd8uzm703 .icon-shape p,#mermaid-svg-xuoNCaHMd8uzm703 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-xuoNCaHMd8uzm703 .icon-shape .label rect,#mermaid-svg-xuoNCaHMd8uzm703 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-xuoNCaHMd8uzm703 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-xuoNCaHMd8uzm703 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-xuoNCaHMd8uzm703 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Result A
Result B
ResearchAgent

搜索+原始资料
DraftingAgent

结构化初稿
EditorAgent

校对终稿
最终输出


模式 7:Group Chat / Debate(群聊/辩论)

定义:"数字会议室"
  • Router 是经理派活、Handoff 是流水线------Agent 们都沉默,从不互相说话
  • 复杂问题、最佳方案未知、需要讨论批判发现 → "数字会议室"
  • 三大组件:
  1. Specialist Agents(参会者):熟悉的工人(Researcher/Writer/Critic)
  2. 共享聊天历史(State) :会议室的"白板"------每个 Agent 都能看到所有人的所有消息(共享上下文)
  3. GroupChatManager(主持人)最重要的新组件------管理轮流发言、决定下一个谁说话
好处与代价

辩论循环:UI(用户输入 "new marketing campaign")→ Moderator 主持 → Planner / Critic / Manager 参与 → Result。

  • 高质量与"涌现"方案 (最大优势):辩论修订过程产出远超任何单 Agent 的结果------方案是发现的不是执行的
  • 灵活适应:对话可以是 3 步或 15 步,适应问题复杂度
  • 成本与延迟(最大劣势):聊天里每一条消息都是昂贵的 LLM 调用------10 轮辩论 = 至少 10 次 API 调用
  • 非确定性与混乱:Agent 可能陷入"死循环"争论不休、跑题
小结
  • 用受主持的对话循环取代固定路径;组件 = 专才 + GroupChatManager + 共享聊天历史
  • 适用:复杂、创意、定义不清的问题,质量是 #1 优先级(胜过速度/成本/可预测性)------例:"设计新产品""辩论法律策略"

#mermaid-svg-XGlzqQGw3Aci5Vgg{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-XGlzqQGw3Aci5Vgg .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-XGlzqQGw3Aci5Vgg .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-XGlzqQGw3Aci5Vgg .error-icon{fill:#552222;}#mermaid-svg-XGlzqQGw3Aci5Vgg .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-XGlzqQGw3Aci5Vgg .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-XGlzqQGw3Aci5Vgg .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-XGlzqQGw3Aci5Vgg .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-XGlzqQGw3Aci5Vgg .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-XGlzqQGw3Aci5Vgg .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-XGlzqQGw3Aci5Vgg .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-XGlzqQGw3Aci5Vgg .marker{fill:#333333;stroke:#333333;}#mermaid-svg-XGlzqQGw3Aci5Vgg .marker.cross{stroke:#333333;}#mermaid-svg-XGlzqQGw3Aci5Vgg svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-XGlzqQGw3Aci5Vgg p{margin:0;}#mermaid-svg-XGlzqQGw3Aci5Vgg .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-XGlzqQGw3Aci5Vgg .cluster-label text{fill:#333;}#mermaid-svg-XGlzqQGw3Aci5Vgg .cluster-label span{color:#333;}#mermaid-svg-XGlzqQGw3Aci5Vgg .cluster-label span p{background-color:transparent;}#mermaid-svg-XGlzqQGw3Aci5Vgg .label text,#mermaid-svg-XGlzqQGw3Aci5Vgg span{fill:#333;color:#333;}#mermaid-svg-XGlzqQGw3Aci5Vgg .node rect,#mermaid-svg-XGlzqQGw3Aci5Vgg .node circle,#mermaid-svg-XGlzqQGw3Aci5Vgg .node ellipse,#mermaid-svg-XGlzqQGw3Aci5Vgg .node polygon,#mermaid-svg-XGlzqQGw3Aci5Vgg .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-XGlzqQGw3Aci5Vgg .rough-node .label text,#mermaid-svg-XGlzqQGw3Aci5Vgg .node .label text,#mermaid-svg-XGlzqQGw3Aci5Vgg .image-shape .label,#mermaid-svg-XGlzqQGw3Aci5Vgg .icon-shape .label{text-anchor:middle;}#mermaid-svg-XGlzqQGw3Aci5Vgg .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-XGlzqQGw3Aci5Vgg .rough-node .label,#mermaid-svg-XGlzqQGw3Aci5Vgg .node .label,#mermaid-svg-XGlzqQGw3Aci5Vgg .image-shape .label,#mermaid-svg-XGlzqQGw3Aci5Vgg .icon-shape .label{text-align:center;}#mermaid-svg-XGlzqQGw3Aci5Vgg .node.clickable{cursor:pointer;}#mermaid-svg-XGlzqQGw3Aci5Vgg .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-XGlzqQGw3Aci5Vgg .arrowheadPath{fill:#333333;}#mermaid-svg-XGlzqQGw3Aci5Vgg .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-XGlzqQGw3Aci5Vgg .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-XGlzqQGw3Aci5Vgg .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-XGlzqQGw3Aci5Vgg .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-XGlzqQGw3Aci5Vgg .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-XGlzqQGw3Aci5Vgg .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-XGlzqQGw3Aci5Vgg .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-XGlzqQGw3Aci5Vgg .cluster text{fill:#333;}#mermaid-svg-XGlzqQGw3Aci5Vgg .cluster span{color:#333;}#mermaid-svg-XGlzqQGw3Aci5Vgg 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-XGlzqQGw3Aci5Vgg .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-XGlzqQGw3Aci5Vgg rect.text{fill:none;stroke-width:0;}#mermaid-svg-XGlzqQGw3Aci5Vgg .icon-shape,#mermaid-svg-XGlzqQGw3Aci5Vgg .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-XGlzqQGw3Aci5Vgg .icon-shape p,#mermaid-svg-XGlzqQGw3Aci5Vgg .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-XGlzqQGw3Aci5Vgg .icon-shape .label rect,#mermaid-svg-XGlzqQGw3Aci5Vgg .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-XGlzqQGw3Aci5Vgg .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-XGlzqQGw3Aci5Vgg .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-XGlzqQGw3Aci5Vgg :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 轮次管理
草稿
评审意见
达成共识
GroupChatManager

主持人(决定谁发言)
共享聊天历史

(白板 State)
WriterAgent
CriticAgent
最终结果


模式 8:Swarm(蜂群/并行)

定义:"蜂巢/工人大军"
  • 问题不是创意复杂,而是规模巨大:"总结昨天发布的 10,000 篇文章"------需要"一支同时干活的 Agent 大军"
  • 定义 :中央"蜂后(Queen)"Agent 把大任务分解成许多小的相同子任务 ,派出大量"工人(Worker)"Agent 并行执行
  • 核心概念:MapReduce 设计模式应用到 Agent
  • Map 阶段(分解分发):Queen 拿大任务(1000 份报告清单)→ 为每个条目派一个 Worker
  • Reduce 阶段(聚合综合):Queen 等所有 Worker 完成 → 收集 1000 个结果 → "总结这些总结"成一个最终答案
好处与代价

:Queen → 成千上万 Worker 的扇出图;:用户指令 "Summarize the 1,000 articles in this folder" → Queen 分解(DECOMPOSE LARGE TASK)→ 子任务(SUB-TASK)→ Workers(齿轮图标)→ COMPLETED RESULT。

  • 巨大速度与规模 :真正大规模列表任务的唯一模式------比顺序循环快 1000 倍
  • ❌ 局限 1:只能"尴尬并行" ------子任务必须 100% 独立;Worker 之间不能通信(需要通信就用 Group Chat)
  • ❌ 代价 1:极端成本------1000 个并行 Agent = 1000 次同时 LLM API 调用(这是成本取舍,不是延迟取舍)
  • ❌ 代价 2:编排复杂------不是简单 for 循环,是复杂异步并行处理系统
  • 小结:1-to-N 并行模型 = Agent 的 MapReduce;Queen(分解/聚合)+ Workers(执行);适用海量列表独立任务;用成本与复杂度换速度与规模

#mermaid-svg-QGpcDxEf84kN0db4{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-QGpcDxEf84kN0db4 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-QGpcDxEf84kN0db4 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-QGpcDxEf84kN0db4 .error-icon{fill:#552222;}#mermaid-svg-QGpcDxEf84kN0db4 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-QGpcDxEf84kN0db4 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-QGpcDxEf84kN0db4 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-QGpcDxEf84kN0db4 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-QGpcDxEf84kN0db4 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-QGpcDxEf84kN0db4 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-QGpcDxEf84kN0db4 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-QGpcDxEf84kN0db4 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-QGpcDxEf84kN0db4 .marker.cross{stroke:#333333;}#mermaid-svg-QGpcDxEf84kN0db4 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-QGpcDxEf84kN0db4 p{margin:0;}#mermaid-svg-QGpcDxEf84kN0db4 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-QGpcDxEf84kN0db4 .cluster-label text{fill:#333;}#mermaid-svg-QGpcDxEf84kN0db4 .cluster-label span{color:#333;}#mermaid-svg-QGpcDxEf84kN0db4 .cluster-label span p{background-color:transparent;}#mermaid-svg-QGpcDxEf84kN0db4 .label text,#mermaid-svg-QGpcDxEf84kN0db4 span{fill:#333;color:#333;}#mermaid-svg-QGpcDxEf84kN0db4 .node rect,#mermaid-svg-QGpcDxEf84kN0db4 .node circle,#mermaid-svg-QGpcDxEf84kN0db4 .node ellipse,#mermaid-svg-QGpcDxEf84kN0db4 .node polygon,#mermaid-svg-QGpcDxEf84kN0db4 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-QGpcDxEf84kN0db4 .rough-node .label text,#mermaid-svg-QGpcDxEf84kN0db4 .node .label text,#mermaid-svg-QGpcDxEf84kN0db4 .image-shape .label,#mermaid-svg-QGpcDxEf84kN0db4 .icon-shape .label{text-anchor:middle;}#mermaid-svg-QGpcDxEf84kN0db4 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-QGpcDxEf84kN0db4 .rough-node .label,#mermaid-svg-QGpcDxEf84kN0db4 .node .label,#mermaid-svg-QGpcDxEf84kN0db4 .image-shape .label,#mermaid-svg-QGpcDxEf84kN0db4 .icon-shape .label{text-align:center;}#mermaid-svg-QGpcDxEf84kN0db4 .node.clickable{cursor:pointer;}#mermaid-svg-QGpcDxEf84kN0db4 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-QGpcDxEf84kN0db4 .arrowheadPath{fill:#333333;}#mermaid-svg-QGpcDxEf84kN0db4 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-QGpcDxEf84kN0db4 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-QGpcDxEf84kN0db4 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-QGpcDxEf84kN0db4 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-QGpcDxEf84kN0db4 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-QGpcDxEf84kN0db4 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-QGpcDxEf84kN0db4 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-QGpcDxEf84kN0db4 .cluster text{fill:#333;}#mermaid-svg-QGpcDxEf84kN0db4 .cluster span{color:#333;}#mermaid-svg-QGpcDxEf84kN0db4 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-QGpcDxEf84kN0db4 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-QGpcDxEf84kN0db4 rect.text{fill:none;stroke-width:0;}#mermaid-svg-QGpcDxEf84kN0db4 .icon-shape,#mermaid-svg-QGpcDxEf84kN0db4 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-QGpcDxEf84kN0db4 .icon-shape p,#mermaid-svg-QGpcDxEf84kN0db4 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-QGpcDxEf84kN0db4 .icon-shape .label rect,#mermaid-svg-QGpcDxEf84kN0db4 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-QGpcDxEf84kN0db4 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-QGpcDxEf84kN0db4 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-QGpcDxEf84kN0db4 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Queen 蜂后

分解任务
Worker 1
Worker 2
Worker 3
Worker N...
Queen 聚合

(Reduce 综合)
最终答案


控制与安全模式(企业级)

核心问题:非确定性的危险
  • 传统软件:确定性(IF X THEN Y,相同输入相同输出,可预测)
  • Agentic AI:非确定性(IF X THEN 也许 Y?也许 Z?)------LLM 输出是概率性的,只能引导不能 100% 保证
  • 架构师噩梦:你在构建一个核心逻辑组件天生不可预测的系统
  • 企业风险四类:财务 (误读请求退了 100,000 而非 1,000)、数据完整性 (误解"清理旧用户"删了活跃客户数据)、安全隐私 (把"John 的客户数据"给了另一个 John)、声誉(Agent 暴走向客户发冒犯信息)
  • 永远不能给非确定性 Agent 完全控制权
解决方案:"护栏"不是"笼子"
  • 笼子(错):移除所有工具,只能回答简单问题------安全但毁掉一切价值,退回简单聊天机器人
  • 护栏(对) :让 Agent 开车,但在周围建安全系统 ------把确定性检查点和覆盖机制架构进非确定性工作流 → 目标:安全自主(Safe Autonomy)
模式 9:Human-in-the-Loop(HITL,"你确定吗?"按钮)

定义 :工作流在预定义的高风险检查点故意暂停 ,等待人类明确批准才继续------在非确定性 Agent 执行不可逆/高价值 动作前重新引入确定性人类判断。这不是失败状态,是设计特性

检查点架构(Checkpoint) ------关键:不让 Agent 决定何时求助,由我们定义检查点

  1. Agent 规划:Reason 阶段生成计划(如 call_tool('refund_customer', amount=10000))
  2. Orchestrator 拦截:执行前拦截该计划
  3. 确定性规则:检查硬编码规则 IF tool_name == 'refund_customer' AND amount > 1000:
  4. 暂停等待:命中 → 转入 human_approval 状态;未命中 → 立即执行

:盾牌带叉图标(拦截隐喻);退款工作流:用户(不满退款金额)→ AI Agent 计划 refund_customer → Orchestrator 拦截 → Rule Check=True → 暂停发警报 → Orchestrator 恢复。

架构含义

  • 两全其美:Agent 的自主魔法问题解决 + 人类的确定性可问责判断------高价值任务安全部署的唯一方式
  • 延迟与扩展性:把人类尺度延迟(秒/分钟/小时)引入毫秒级软件循环;贵;不扩展(要人类 standby)
  • 🎯 关键设计决策:阈值 ------100?(太低,警报太多,贵)100,000?(太高,风险太大)------阈值是核心业务逻辑决策

小结:Agent 建议,人类决定(The agent suggests, the human decides)------适用金融交易、数据删除、发送关键外部消息
#mermaid-svg-mJWjRVHgwr5NQKIB{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-mJWjRVHgwr5NQKIB .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-mJWjRVHgwr5NQKIB .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-mJWjRVHgwr5NQKIB .error-icon{fill:#552222;}#mermaid-svg-mJWjRVHgwr5NQKIB .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-mJWjRVHgwr5NQKIB .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-mJWjRVHgwr5NQKIB .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-mJWjRVHgwr5NQKIB .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-mJWjRVHgwr5NQKIB .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-mJWjRVHgwr5NQKIB .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-mJWjRVHgwr5NQKIB .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-mJWjRVHgwr5NQKIB .marker{fill:#333333;stroke:#333333;}#mermaid-svg-mJWjRVHgwr5NQKIB .marker.cross{stroke:#333333;}#mermaid-svg-mJWjRVHgwr5NQKIB svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-mJWjRVHgwr5NQKIB p{margin:0;}#mermaid-svg-mJWjRVHgwr5NQKIB .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-mJWjRVHgwr5NQKIB .cluster-label text{fill:#333;}#mermaid-svg-mJWjRVHgwr5NQKIB .cluster-label span{color:#333;}#mermaid-svg-mJWjRVHgwr5NQKIB .cluster-label span p{background-color:transparent;}#mermaid-svg-mJWjRVHgwr5NQKIB .label text,#mermaid-svg-mJWjRVHgwr5NQKIB span{fill:#333;color:#333;}#mermaid-svg-mJWjRVHgwr5NQKIB .node rect,#mermaid-svg-mJWjRVHgwr5NQKIB .node circle,#mermaid-svg-mJWjRVHgwr5NQKIB .node ellipse,#mermaid-svg-mJWjRVHgwr5NQKIB .node polygon,#mermaid-svg-mJWjRVHgwr5NQKIB .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-mJWjRVHgwr5NQKIB .rough-node .label text,#mermaid-svg-mJWjRVHgwr5NQKIB .node .label text,#mermaid-svg-mJWjRVHgwr5NQKIB .image-shape .label,#mermaid-svg-mJWjRVHgwr5NQKIB .icon-shape .label{text-anchor:middle;}#mermaid-svg-mJWjRVHgwr5NQKIB .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-mJWjRVHgwr5NQKIB .rough-node .label,#mermaid-svg-mJWjRVHgwr5NQKIB .node .label,#mermaid-svg-mJWjRVHgwr5NQKIB .image-shape .label,#mermaid-svg-mJWjRVHgwr5NQKIB .icon-shape .label{text-align:center;}#mermaid-svg-mJWjRVHgwr5NQKIB .node.clickable{cursor:pointer;}#mermaid-svg-mJWjRVHgwr5NQKIB .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-mJWjRVHgwr5NQKIB .arrowheadPath{fill:#333333;}#mermaid-svg-mJWjRVHgwr5NQKIB .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-mJWjRVHgwr5NQKIB .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-mJWjRVHgwr5NQKIB .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-mJWjRVHgwr5NQKIB .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-mJWjRVHgwr5NQKIB .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-mJWjRVHgwr5NQKIB .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-mJWjRVHgwr5NQKIB .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-mJWjRVHgwr5NQKIB .cluster text{fill:#333;}#mermaid-svg-mJWjRVHgwr5NQKIB .cluster span{color:#333;}#mermaid-svg-mJWjRVHgwr5NQKIB 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-mJWjRVHgwr5NQKIB .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-mJWjRVHgwr5NQKIB rect.text{fill:none;stroke-width:0;}#mermaid-svg-mJWjRVHgwr5NQKIB .icon-shape,#mermaid-svg-mJWjRVHgwr5NQKIB .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-mJWjRVHgwr5NQKIB .icon-shape p,#mermaid-svg-mJWjRVHgwr5NQKIB .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-mJWjRVHgwr5NQKIB .icon-shape .label rect,#mermaid-svg-mJWjRVHgwr5NQKIB .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-mJWjRVHgwr5NQKIB .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-mJWjRVHgwr5NQKIB .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-mJWjRVHgwr5NQKIB :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 否

批准
拒绝
Agent 计划动作

refund_customer 10000
Orchestrator 拦截
确定性规则

退款 > 1000?
立即执行
暂停 → 人类审批
中止并通知

模式 10:Ejection / Custom Logic(弹出/自定义逻辑,"红色停止按钮")

为什么需要"逃生舱" :HITL 用于危险动作 (Agent 工作正常,如"我要扣 $10,000,可以吗?");Ejection 用于损坏或不良对话(Agent 失败或用户想退出)

定义 :确定性、基于规则的模式------特定条件满足时立即绕过或终止 非确定性 Agent 循环------瞬间把控制权从不可预测的 LLM 转移到可预测的确定性系统(非确定性系统的确定性覆盖

关键场景:①用户沮丧(Agent 死循环,用户说"你没用,让我找真人!")②用户终止("停""取消""算了""再见")③政策/安全违规(用户辱骂、粗俗、要求政策禁止的事)

架构:"预检过滤器"

  • ⚠️ 关键:这个逻辑绝不能放进 Agent 的提示词里(Agent 可能无视它)
  • 实现:在 Agent 的感知/推理阶段之前运行的简单确定性 if 语句

流程图:User Input → Deterministic Ejection Filter → 输入含 "human" → EJECT 转实时聊天系统(Live Chat);否则 → Agentic Loop(Perceive → Reason → Act)。
#mermaid-svg-RFH5d0IrZgng1Xek{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-RFH5d0IrZgng1Xek .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-RFH5d0IrZgng1Xek .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-RFH5d0IrZgng1Xek .error-icon{fill:#552222;}#mermaid-svg-RFH5d0IrZgng1Xek .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-RFH5d0IrZgng1Xek .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-RFH5d0IrZgng1Xek .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-RFH5d0IrZgng1Xek .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-RFH5d0IrZgng1Xek .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-RFH5d0IrZgng1Xek .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-RFH5d0IrZgng1Xek .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-RFH5d0IrZgng1Xek .marker{fill:#333333;stroke:#333333;}#mermaid-svg-RFH5d0IrZgng1Xek .marker.cross{stroke:#333333;}#mermaid-svg-RFH5d0IrZgng1Xek svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-RFH5d0IrZgng1Xek p{margin:0;}#mermaid-svg-RFH5d0IrZgng1Xek .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-RFH5d0IrZgng1Xek .cluster-label text{fill:#333;}#mermaid-svg-RFH5d0IrZgng1Xek .cluster-label span{color:#333;}#mermaid-svg-RFH5d0IrZgng1Xek .cluster-label span p{background-color:transparent;}#mermaid-svg-RFH5d0IrZgng1Xek .label text,#mermaid-svg-RFH5d0IrZgng1Xek span{fill:#333;color:#333;}#mermaid-svg-RFH5d0IrZgng1Xek .node rect,#mermaid-svg-RFH5d0IrZgng1Xek .node circle,#mermaid-svg-RFH5d0IrZgng1Xek .node ellipse,#mermaid-svg-RFH5d0IrZgng1Xek .node polygon,#mermaid-svg-RFH5d0IrZgng1Xek .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-RFH5d0IrZgng1Xek .rough-node .label text,#mermaid-svg-RFH5d0IrZgng1Xek .node .label text,#mermaid-svg-RFH5d0IrZgng1Xek .image-shape .label,#mermaid-svg-RFH5d0IrZgng1Xek .icon-shape .label{text-anchor:middle;}#mermaid-svg-RFH5d0IrZgng1Xek .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-RFH5d0IrZgng1Xek .rough-node .label,#mermaid-svg-RFH5d0IrZgng1Xek .node .label,#mermaid-svg-RFH5d0IrZgng1Xek .image-shape .label,#mermaid-svg-RFH5d0IrZgng1Xek .icon-shape .label{text-align:center;}#mermaid-svg-RFH5d0IrZgng1Xek .node.clickable{cursor:pointer;}#mermaid-svg-RFH5d0IrZgng1Xek .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-RFH5d0IrZgng1Xek .arrowheadPath{fill:#333333;}#mermaid-svg-RFH5d0IrZgng1Xek .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-RFH5d0IrZgng1Xek .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-RFH5d0IrZgng1Xek .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-RFH5d0IrZgng1Xek .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-RFH5d0IrZgng1Xek .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-RFH5d0IrZgng1Xek .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-RFH5d0IrZgng1Xek .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-RFH5d0IrZgng1Xek .cluster text{fill:#333;}#mermaid-svg-RFH5d0IrZgng1Xek .cluster span{color:#333;}#mermaid-svg-RFH5d0IrZgng1Xek 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-RFH5d0IrZgng1Xek .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-RFH5d0IrZgng1Xek rect.text{fill:none;stroke-width:0;}#mermaid-svg-RFH5d0IrZgng1Xek .icon-shape,#mermaid-svg-RFH5d0IrZgng1Xek .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-RFH5d0IrZgng1Xek .icon-shape p,#mermaid-svg-RFH5d0IrZgng1Xek .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-RFH5d0IrZgng1Xek .icon-shape .label rect,#mermaid-svg-RFH5d0IrZgng1Xek .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-RFH5d0IrZgng1Xek .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-RFH5d0IrZgng1Xek .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-RFH5d0IrZgng1Xek :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 命中:'Stop'/'Cancel'/辱骂
未命中
用户输入
预检过滤器

(确定性 if 语句)
弹出 → 转人工/终止
Agent 正常循环

(感知→推理→行动)


📌 本段核心收获(一句话版)

  1. 模式 vs 框架 :框架是工具(How),模式是蓝图(What & Why)------模式与框架无关,任何框架都能实现。
  2. 四大设计原则 :目标驱动(为什么)+ 反应性(现在怎么办)+ 有状态(之前发生了什么)→ 自主性(怎么做)------Agent 与普通程序的分界线。
  3. 四大核心模式递进Tool Use (给手)→ Planning (给内心独白)→ Reflection (给内心评论家)→ ReAct(手+独白+循环复合,观察喂回思考 = 自适应)。 每个模式都配了完整工作流图。
  4. 超级 Agent 是反模式 (提示词渗漏/上下文窗口吃光/单点故障)→ 建"数字团队":专业化 + 并行化 + 辩论批判 三大力量。
  5. 四大协作模式:Router & Specialist(交警分类派活,默认首选)/ Handoff(固定流水线,可靠但僵硬)/ Group Chat(会议室,质量最高最贵)/ Swarm(蜂群 MapReduce,海量并行,Worker 间不能通信)。
  6. 非确定性是架构师噩梦护栏不是笼子:要"安全自主"。
  7. HITL :"你确定吗?"------检查点拦截 + 确定性规则 + 人类审批;阈值是核心业务决策;Agent 建议,人类决定。 退款工作流全程图示。
  8. Ejection :"红色停止按钮"------预检过滤器(在感知之前、绝不能放提示词里)检测停止词/违规(含 "human" 就转实时聊天)→ 确定性覆盖。
  9. 下一段预告:Agentic RAG------传统 RAG 的局限 → "主动研究员"循环。

第 8 篇


传统 RAG 的局限

什么是传统 RAG(复习)
  • RAG = Retrieval-Augmented-Generation(检索增强生成)------企业生成式 AI 最常用的架构
  • 目标:用特定私有文档回答用户问题,而不是 LLM 训练数据
  • 口诀:别让 LLM 猜答案------把答案给它,让它总结
  • 本质:"接地(Grounding)"机制------让 LLM 扎根事实,减少幻觉,能用新信息
传统 RAG 架构:被动管道

架构图:左侧文档处理链(Upload Documents 上传文档 → Split Chunks 切块 → Embedding Model 嵌入模型 → Embedding Vectors 嵌入向量 → Vector DB 向量库 → Indexing 索引);右侧查询链(Query → Embedding Model → Query Vectors → 相似搜索)。

示例:文档/应用/用户查询 "What is our Q3 revenue?" → 嵌入(查询转数字向量)→ 搜索(Top-K 前5最相似块)→ 塞入 → 生成。

传统 RAG 是单向线性"链"

复制代码
[Query 查询] -> [Embed 嵌入] -> [Search 搜索] -> [Stuff 塞入] -> [Generate 生成]
  1. 用户查询:"我们 Q3 营收多少?"
  2. 嵌入:查询转成向量(数字列表)
  3. 搜索:用向量找向量库中 Top-K(前5) 最相似的文本块
  4. 塞入:原始文本块"塞"进 LLM 的提示上下文
  5. 生成:LLM 只用给定文本回答
核心问题:RAG "被动又笨"

右侧流程图:Unstructured Data → Embedding Model → Vector DB → Knowledge Base(数据单向流动,无反馈回路)。

管道不能自己思考

  1. 单次检索(One-Shot):只搜一次------Top-K 结果差或无关,整个过程就失败
  2. 不能自我纠正:LLM 不能"顶嘴"检索器------不能说"这些搜索结果没用,换个查询词再搜"
  3. 复杂多步问题直接失败:查询"对比我们 Q3 营收与头号竞争对手 Q3 营收"------单次搜索不可能同时找到两者,只会找到其中一个或噪音
架构师视角:局限总结

右侧完整 RAG 数据流:无结构数据→嵌入模型→向量库;用户查询→检索器(查询文本+知识库)→增强→LLM→响应。

  • 系统:线性单向"链";智能:LLM 只在最后用一次(总结)
  • 失败模式:脆弱------第一步(检索)不完美就全盘失败
  • 后果:只能回答简单"查表式"问题,不能做研究

我们有的是"检索器系统",不是"推理系统"


Agentic RAG:定义与超能力

正式定义

工作流:User Query → Answer Before?(回答前先规划推理?) → Memory → Decompose subqueries(分解子查询)→ Task 1...N → Query Routing & Processing(查询路由与处理)。

  • 不是"改进",是根本性的架构转变:从被动数据管道 → 主动智能过程
  • 定义:把"推理 Agent"(LLM)放在整个检索与综合过程的"总指挥"位置
  • "主动研究员"模型 :不是被动接收数据,而是主动决定搜什么、何时搜、如何应对搜索结果
  • 核心转变:LLM 不再在链条末端------LLM 是整个循环的"编排者"
新架构:"循环"不是"链条"
复制代码
传统 RAG(链): [Query] -> [Search] -> [Stuff] -> [Generate]
 (单向被动管道,每步只执行一次)

Agentic RAG(环):[Agent: Reason/Plan]
 -> [Agent: Act (Search)]
 -> [Results: Perceive]
 -> [Agent: Reason/Reflect/Update Plan]
 -> [Agent: Act (Search Again)] ...

这就是 ReAct 模式应用到研究

三大"超能力"(逐一解决传统 RAG 的三大缺陷)
超能力 解决 说明
1. 多步检索 单次检索 搜→读→再搜,渐进构建复杂知识
2. 反思与自我纠正 笨检索 批判自己的搜索结果:"这些结果无关,我换个措辞换个关键词再搜"
3. 自主规划 复杂问题 把复杂查询("对比 X 和 Y")分解成逻辑多步计划:①搜 X ②搜 Y ③综合

总结:Agent 在多步推理循环中管理检索过程------不是"链/管道",是"主动、反思、多步"的过程------能解决传统 RAG 不可能完成的复杂多部分研究问题。
#mermaid-svg-qWl2wzsDaxb3mHsH{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-qWl2wzsDaxb3mHsH .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-qWl2wzsDaxb3mHsH .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-qWl2wzsDaxb3mHsH .error-icon{fill:#552222;}#mermaid-svg-qWl2wzsDaxb3mHsH .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-qWl2wzsDaxb3mHsH .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-qWl2wzsDaxb3mHsH .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-qWl2wzsDaxb3mHsH .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-qWl2wzsDaxb3mHsH .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-qWl2wzsDaxb3mHsH .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-qWl2wzsDaxb3mHsH .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-qWl2wzsDaxb3mHsH .marker{fill:#333333;stroke:#333333;}#mermaid-svg-qWl2wzsDaxb3mHsH .marker.cross{stroke:#333333;}#mermaid-svg-qWl2wzsDaxb3mHsH svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-qWl2wzsDaxb3mHsH p{margin:0;}#mermaid-svg-qWl2wzsDaxb3mHsH .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-qWl2wzsDaxb3mHsH .cluster-label text{fill:#333;}#mermaid-svg-qWl2wzsDaxb3mHsH .cluster-label span{color:#333;}#mermaid-svg-qWl2wzsDaxb3mHsH .cluster-label span p{background-color:transparent;}#mermaid-svg-qWl2wzsDaxb3mHsH .label text,#mermaid-svg-qWl2wzsDaxb3mHsH span{fill:#333;color:#333;}#mermaid-svg-qWl2wzsDaxb3mHsH .node rect,#mermaid-svg-qWl2wzsDaxb3mHsH .node circle,#mermaid-svg-qWl2wzsDaxb3mHsH .node ellipse,#mermaid-svg-qWl2wzsDaxb3mHsH .node polygon,#mermaid-svg-qWl2wzsDaxb3mHsH .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-qWl2wzsDaxb3mHsH .rough-node .label text,#mermaid-svg-qWl2wzsDaxb3mHsH .node .label text,#mermaid-svg-qWl2wzsDaxb3mHsH .image-shape .label,#mermaid-svg-qWl2wzsDaxb3mHsH .icon-shape .label{text-anchor:middle;}#mermaid-svg-qWl2wzsDaxb3mHsH .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-qWl2wzsDaxb3mHsH .rough-node .label,#mermaid-svg-qWl2wzsDaxb3mHsH .node .label,#mermaid-svg-qWl2wzsDaxb3mHsH .image-shape .label,#mermaid-svg-qWl2wzsDaxb3mHsH .icon-shape .label{text-align:center;}#mermaid-svg-qWl2wzsDaxb3mHsH .node.clickable{cursor:pointer;}#mermaid-svg-qWl2wzsDaxb3mHsH .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-qWl2wzsDaxb3mHsH .arrowheadPath{fill:#333333;}#mermaid-svg-qWl2wzsDaxb3mHsH .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-qWl2wzsDaxb3mHsH .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-qWl2wzsDaxb3mHsH .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-qWl2wzsDaxb3mHsH .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-qWl2wzsDaxb3mHsH .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-qWl2wzsDaxb3mHsH .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-qWl2wzsDaxb3mHsH .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-qWl2wzsDaxb3mHsH .cluster text{fill:#333;}#mermaid-svg-qWl2wzsDaxb3mHsH .cluster span{color:#333;}#mermaid-svg-qWl2wzsDaxb3mHsH 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-qWl2wzsDaxb3mHsH .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-qWl2wzsDaxb3mHsH rect.text{fill:none;stroke-width:0;}#mermaid-svg-qWl2wzsDaxb3mHsH .icon-shape,#mermaid-svg-qWl2wzsDaxb3mHsH .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-qWl2wzsDaxb3mHsH .icon-shape p,#mermaid-svg-qWl2wzsDaxb3mHsH .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-qWl2wzsDaxb3mHsH .icon-shape .label rect,#mermaid-svg-qWl2wzsDaxb3mHsH .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-qWl2wzsDaxb3mHsH .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-qWl2wzsDaxb3mHsH .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-qWl2wzsDaxb3mHsH :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 架构转变
传统 RAG:链条

Query→Search→Stuff→Generate

(每步一次,单向)
Agentic RAG:循环

Reason→Act→Perceive→Reflect→Act...

(LLM 是总编排者)


Agentic RAG vs 传统 RAG(三维对比)

对比 1:过程(链 vs 环)
传统 RAG(链) Agentic RAG(环)
结构 固定线性管道,每步执行一次 动态循环图,迭代进行
搜索 一次 可多次调用
LLM 位置 最后一步(总结者) 第一步 + 中央编排者
对比 2:智能(笨 vs 反思)

左右对比图:

  • 左(传统 RAG,不能自纠):User Query → Dumb Retrieval(一次搜索)→ Bad Results → LLM (No Choice) 无选择 → Failure
  • 右(Agentic RAG,为自纠而设计):User Query → Initial Results → Smart Retrieval → Agent(LLM) → Reflection 反思 → Critique:"营销废话,无关" → Self-Correct 自我纠正
"笨助理" vs "资深研究员"

两幅插图:

  • 左:"传统 RAG 是笨助理"------用户问 "Top 5 books on finance" → 机器人"取最先找到的 5 本,递过去就走人,不知道好不好、相不相关"(单次被动查表)
  • 右:"Agentic RAG 是资深研究员"------用户问 "Analyze the market impact of Event A" → 研究员主动研究分析
对比 3:架构师的选择(权衡)
传统 RAG Agentic RAG
速度 快(一次搜索一次 LLM 调用,低延迟) 慢(多步 LLM 调用 → 高延迟)
成本 便宜(token 最少) 贵(每步反思都是完整 LLM 调用)
复杂度 简单(好建好调好确定) 复杂(难建难调,天然非确定)

答案是经典的架构师"看情况(it depends)"

何时用哪个?

用传统 RAG(查表任务) :简单问答("公司 PTO 政策是啥?")、简单总结("总结这份文档")------目标:速度、省钱、高可靠

用 Agentic RAG(研究任务):复杂多步问题;模糊歧义查询("市场对我们新产品的情绪如何?")------目标:强大、稳健、能解决复杂问题(延迟不那么重要)

两把工具,两种工作:传统 RAG = 简单快便宜的"链";Agentic RAG = 复杂慢贵的"环"


主动研究员循环(逐步走一遍)

场景:复杂研究任务

目标:找出新产品 "Product X" 对公司 "Company Y" 的财务影响

  • 传统 RAG 为什么失败:整串查询搜一次找不到有用的东西------查询歧义、多部分,需要策略
循环逐步拆解

每页都配 Agentic RAG Workflow 图:User Query → Decompose subqueries → Query Routing & Processing → Generate → Reflect → Results OK(带 Memory/Tools/Vector DB 组件)。

循环 1:

  • Reason 初始计划:"这很复杂,不能直接回答。计划:①先找 Product X 的发布时间 ②再找 Company Y 在发布后的季度财报"
  • Act 执行计划第一步:search("Product X launch date")
  • Perceive 观察:"搜索结果表示 Product X 于 2024 年 Q2 发布"
  • Reason 反思更新计划:"有发布时间了(Q2 2024),原计划更新:①已完成 ②找 Company Y 的 2024 Q2/Q3 财报"

循环 2:

  • Act 执行更新后的第二步:search("Company Y quarterly report Q2 2024 Q3 2024 financial impact")
  • 关键洞察:第二次搜索更聪明更具体------只有循环 1 获得的知识才能做到
  • Perceive 拿到第二组结果(财报)
  • Reason 综合:"信息齐了:①发布时间 Q2 2024 ②Q2/Q3 财报显示'新产品'部门增长 15%。计划完成,可以生成最终答案"
  • 最终输出:综合所有收集的事实成一个答案
总结:循环的本质
  • 我们没做"单次搜索"------执行了动态多步研究计划
  • 循环 1:Agent "无知",寻找"已知的未知"(发布日期)
  • 循环 2:Agent "知情",用新知识寻找最终答案

Reason → Act → Perceive → Reflect 循环 = Agentic RAG 的核心引擎
#mermaid-svg-rEgPVsb2xtb8tFje{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-rEgPVsb2xtb8tFje .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-rEgPVsb2xtb8tFje .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-rEgPVsb2xtb8tFje .error-icon{fill:#552222;}#mermaid-svg-rEgPVsb2xtb8tFje .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-rEgPVsb2xtb8tFje .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-rEgPVsb2xtb8tFje .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-rEgPVsb2xtb8tFje .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-rEgPVsb2xtb8tFje .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-rEgPVsb2xtb8tFje .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-rEgPVsb2xtb8tFje .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-rEgPVsb2xtb8tFje .marker{fill:#333333;stroke:#333333;}#mermaid-svg-rEgPVsb2xtb8tFje .marker.cross{stroke:#333333;}#mermaid-svg-rEgPVsb2xtb8tFje svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-rEgPVsb2xtb8tFje p{margin:0;}#mermaid-svg-rEgPVsb2xtb8tFje .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-rEgPVsb2xtb8tFje .cluster-label text{fill:#333;}#mermaid-svg-rEgPVsb2xtb8tFje .cluster-label span{color:#333;}#mermaid-svg-rEgPVsb2xtb8tFje .cluster-label span p{background-color:transparent;}#mermaid-svg-rEgPVsb2xtb8tFje .label text,#mermaid-svg-rEgPVsb2xtb8tFje span{fill:#333;color:#333;}#mermaid-svg-rEgPVsb2xtb8tFje .node rect,#mermaid-svg-rEgPVsb2xtb8tFje .node circle,#mermaid-svg-rEgPVsb2xtb8tFje .node ellipse,#mermaid-svg-rEgPVsb2xtb8tFje .node polygon,#mermaid-svg-rEgPVsb2xtb8tFje .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-rEgPVsb2xtb8tFje .rough-node .label text,#mermaid-svg-rEgPVsb2xtb8tFje .node .label text,#mermaid-svg-rEgPVsb2xtb8tFje .image-shape .label,#mermaid-svg-rEgPVsb2xtb8tFje .icon-shape .label{text-anchor:middle;}#mermaid-svg-rEgPVsb2xtb8tFje .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-rEgPVsb2xtb8tFje .rough-node .label,#mermaid-svg-rEgPVsb2xtb8tFje .node .label,#mermaid-svg-rEgPVsb2xtb8tFje .image-shape .label,#mermaid-svg-rEgPVsb2xtb8tFje .icon-shape .label{text-align:center;}#mermaid-svg-rEgPVsb2xtb8tFje .node.clickable{cursor:pointer;}#mermaid-svg-rEgPVsb2xtb8tFje .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-rEgPVsb2xtb8tFje .arrowheadPath{fill:#333333;}#mermaid-svg-rEgPVsb2xtb8tFje .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-rEgPVsb2xtb8tFje .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-rEgPVsb2xtb8tFje .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-rEgPVsb2xtb8tFje .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-rEgPVsb2xtb8tFje .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-rEgPVsb2xtb8tFje .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-rEgPVsb2xtb8tFje .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-rEgPVsb2xtb8tFje .cluster text{fill:#333;}#mermaid-svg-rEgPVsb2xtb8tFje .cluster span{color:#333;}#mermaid-svg-rEgPVsb2xtb8tFje 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-rEgPVsb2xtb8tFje .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-rEgPVsb2xtb8tFje rect.text{fill:none;stroke-width:0;}#mermaid-svg-rEgPVsb2xtb8tFje .icon-shape,#mermaid-svg-rEgPVsb2xtb8tFje .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-rEgPVsb2xtb8tFje .icon-shape p,#mermaid-svg-rEgPVsb2xtb8tFje .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-rEgPVsb2xtb8tFje .icon-shape .label rect,#mermaid-svg-rEgPVsb2xtb8tFje .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-rEgPVsb2xtb8tFje .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-rEgPVsb2xtb8tFje .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-rEgPVsb2xtb8tFje :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 目标:Product X 对 Company Y 的财务影响
循环1 Reason

计划:先找发布日
循环1 Act

search 发布日
循环1 Perceive

→ Q2 2024 发布
循环2 Reason

更新计划:找 Q2/Q3 财报
循环2 Act

search 财报(更聪明)
循环2 Perceive+Reason

→ 增长 15%,综合
最终答案


Agentic RAG 三大用例

用例 1:复杂对比研究

  • 查询:"对比英伟达、AMD、英特尔过去 3 年的芯片架构"
  • 传统 RAG 失败:"致命"查询------向量库里没有任何单一文档能回答;整串搜 = 噪音
  • Agentic RAG 成功(分解):①search("Nvidia 芯片架构 2023-2025") ②search("AMD ...") ③search("Intel ...") ④synthesize_comparison(结果1,2,3)

用例 2:自动化尽职调查

  • 查询:"分析 Company Z 的市场情绪与财务健康状况"
  • 传统 RAG 失败:查询模糊------"情绪"和"财务健康"什么意思?简单向量搜索没用
  • Agentic RAG 成功(策略制定):把模糊术语翻译成具体研究策略------①search("Z 最新季度财报")(财务健康)②search("Z 股票分析师评级 2025 年 10 月")(情绪)③search("Z 近期新闻 产品发布 OR 丑闻")(情绪)

用例 3:科学/法律文献综述

  • 查询如:"总结科学界对某新药的共识"------多步过程需要自我纠正(反思)
什么时候需要 Agentic RAG?

查询需要以下三要素之一:

  1. 分解(Decomposition):复杂查询要拆成多部分("对比 X、Y、Z")
  2. 策略(Strategy):模糊查询要翻译成具体计划("分析情绪...")
  3. 反思(Reflection):多步过程需要自我纠正("总结共识...")

📌 本段核心收获(一句话版)

  1. 传统 RAG = 单向链条 :Query→Embed→Search→Stuff→Generate,每步一次------被动、笨、脆弱(第一步检索失败就全盘崩)。 两条管道图(文档处理链 + 查询链)。
  2. 三大缺陷:单次检索 / 不能自我纠正 / 复杂多步问题失败------只能做"查表",不能做"研究"。
  3. Agentic RAG = 主动循环 :LLM 从链条末端变成总编排者 ------Reason→Act→Perceive→Reflect 循环 = ReAct 应用到研究。 Answer Before? 决策 + 子查询分解工作流。
  4. 三大超能力对症下药:多步检索(解单次)、反思自纠(解笨)、自主规划(解复杂)。
  5. 对比三连:过程(链 vs 环)、智能(笨 vs 反思, 左右对比图:LLM No Choice vs Reflection+Critique)、权衡(快便宜简单 vs 慢贵复杂)------经典"看情况"。
  6. ** 笨助理 vs 资深研究员**:取最先 5 本就递过去走人 vs 主动研究分析------一张图记住两者区别。
  7. 选型:查表任务(PTO 政策问答)→ 传统 RAG;研究任务(对比/情绪分析)→ Agentic RAG。
  8. 主动研究员循环实例 :先搜"已知的未知"(发布日期)→ 用新知识做更聪明的第二次搜索 → 综合答案------循环 2 的查询只可能来自循环 1 的收获
  9. 三大用例:对比研究(分解)、尽职调查(策略制定)、文献综述(反思)------需要分解/策略/反思时就用 Agentic RAG。
  10. 下一段预告:Agent 通信协议------ACP / A2A / AG-UI / MCP 四大协议全景("巴别塔"问题 → 标准化协议)。

第 9 篇


协议问题与解决方案

"协议问题"
  • 我们已能在封闭系统内让 Agent 推理、用工具、协作
  • 但当我们的 Agent 要跟你们的 Agent 说话呢?OpenAI 的 Agent 要消费 LlamaIndex 团队构建的工具呢?
  • 不同团队、不同平台、不同公司构建的 Agent 怎么互相对话?
"显而易见"的答案:自定义 REST API?

"巴别塔"图:中心一座由方块堆成的塔(OpenAI、Microsoft 等),方块间箭头连接着各种"方言"------"Function-calling dialect"、"Microsoft Agent Framework dialect"、"Agent A (OpenAI)"、"Agent B (Microsoft)"、"Your E-Shop Tool"、"Custom REST API"......每个服务说着自己的语言,混乱不堪。

  • 短期修复,长期架构债务巨大。结果:
  1. 供应商锁定:OpenAI 的 Agent 被锁进 OpenAI 生态
  2. N 平方问题 :连接 100 个 Agent 需要约 5,000 个自定义集成
  3. 根本上不可扩展:无法扩展到全球 Agent 网络
解决方案:什么是"Agent 协议"?
  • 正式规范("共同语言"/"社会契约"),定义自主 Agent 和工具如何:
  1. 发现彼此(Discover)
  2. 描述能力("这是我的工具和它们做什么")
  3. 通信("请帮我跑这个任务")
  4. 交换上下文(状态、记忆、用户 ID)
  • 目标:互操作性(Interoperability)------把"Agent(大脑)"和"Tool(功能)"解耦
路线图:四大新兴标准(还没"解决"的问题)

关系图:ACP(大脑形状)→ A2A(对话)→ AG-UI(用户界面交互)→ MCP(工具集成);ACP 还直接指向代理和工具/系统。

协议 全称 专注点
ACP Agent Communication Protocol 广泛全面的标准(一切 Agent 交互)
A2A Agent-to-Agent Agent 对话
AG-UI Agent-User Interaction Agent 到 UI 交互
MCP Model-Context Protocol Agent 到工具集成

ACP(Agent 通信协议)------"一统江湖"

定义
  • 广泛的开源规范 ,目标是成为所有基于 Agent 交互的通用"语言"
  • 类比:HTTP 是网页的协议,ACP 想成为"任务/目标"的协议
  • 是规范(specification)不是实现(implementation)------一个谁都能照着构建的蓝图
  • 野心:全面互操作性------成为整个生态的单一"通用语(lingua franca)"
ACP 实际定义了什么规则?

四大规则板块:

  1. Task Management(任务管理):标准定义"任务/子任务/目标"
  2. State Synchronization(状态同步) :标准方式报告任务状态(Pending 待处理 / Running 运行中 / Completed 已完成 / Failed 失败
  3. Discovery & Capabilities(发现与能力):标准 "manifest" 宣传工具/技能
  4. Artifact & Data Exchange(工件与数据交换):标准方式在 Agent 间传递数据(文件、数据库行、文本)
小结
  • 全面的开源规范,目标:任务委派、发现、状态管理的单一通用标准
  • 范围:野心大------覆盖 A2A(Agent对Agent)、A2T(Agent对工具)、A2E(Agent对环境)、A2H(Agent对人)
  • 状态:新兴标准,由 AI 领袖们的协作协议支持

A2A(Agent 到 Agent 协议)------"Agent 聊天标准"

定义
  • ACP 太全面,"一刀切"方案实现起来复杂
  • A2A = 专注的通信标准 ,专为两个以上 Agent 之间的对话协作设计
  • 专注点:标准化协作"群聊"或"交接"中的消息
  • 类比:ACP 像完整业务流程标准,A2A 更像即时消息标准(如 XMPP)或邮件------不关心工具怎么跑,关心 Agent 怎么通信
A2A 标准化了什么?

两部分:

  • Message Schema(消息模式) :JSON 结构------{"sender_id": "Agent_A", "recipient_id": "Agent_B", "session_id": "12345", "content": "{...}"}
  • Speech Acts(言语行为/标准"动词") :定义意图的消息类型------REQUEST(请求) :"请执行这个任务"、INFORM(告知) :"这是......"、PROPOSE(提议)......
何时用 A2A?
  • 当你的主要问题是协作,不只是工具使用
  • 理想模式:Group Chat / Debate、Router & Specialist(交接对话)、Reflection(CriticAgent 给 WriterAgent 的消息)
  • 核心收益:构建联邦式 Agent 系统------不同团队的 Agent 无需互相了解就能协作
  • 小结:聚焦、轻量的"Agent 聊天标准"------消息 schema + "言语行为"(REQUEST / INFORM / PROPOSE)
  • 缺口 :A2A 解决了 Agent 对 Agent------但最常见的场景是 Agent 对非 Agent(人类) 呢?

AG-UI(Agent 用户交互协议)------"店面前台"

定义
  • ACP 全面、A2A 管 Agent 对话------还差一个关键参与者:人类
  • Agent 怎么给用户发送不只是纯文本的东西?怎么动态生成按钮、表单、图表?
  • 类比:A2A 是"后台办公室"标准,AG-UI 是"店面前台"标准------Agent 与用户相遇的界面
  • 定义:定义 AI Agent 如何动态渲染丰富、交互式 UI 的标准和模式集合
  • 转变:超越"文本进文本出"(聊天机器人)→ 目标:"生成式 UI(Generative UI) "------Agent 根据上下文当场生成界面
  • 例子:Adaptive Cards (微软,交换卡片内容的标准)、Vercel AI SDK (RSC)(从 Agent 到客户端流式传输 React 组件)

它是"智能体时代的 HTML"

AG-UI vs A2A/MCP:前端缺口

分两栏:BACKEND(A2A & ACP) ------Agent 间 JSON 通信,标注"为机器对机器(M2M)优化";FRONTEND(AG-UI) ------面向人的界面层。

两个关键概念:

  • ①平台无关渲染(Platform Agnostic Rendering) :Agent → 标准 Adaptive Card 消息(JSON)→ 在 Teams / Slack / Web / Mobile 上分别渲染------"Agent 不知道如何画按钮,它只是声明'我需要一个按钮'"
  • ②"Human-in-the-Loop" UI:Agent 发送 → 人机交互界面(HITL 确认)
小结
  • AG-UI 标准化 Agent 与人类之间的界面------启用随对话自适应的生成式 UI
  • 安全(HITL)和用户体验至关重要

MCP(模型上下文协议)------"Agent 的 OpenAPI"

定义
  • Agent 怎么跟我现有系统 说话?怎么消费 E-Shop 微服务、产品数据库、支付 API?------这些不是"Agent",是"工具(Tools)"
  • MCP = 专注、轻量的协议 ,标准化 Model(如 LLM Agent)与 Context(工具、API、数据源) 的交互
  • 类比:A2A 是"Agent 的邮件",MCP 是"Agent 的 OpenAPI/Swagger"
  • 核心解决的问题:Agent 到工具(A2T)通信
  • 重要玩家:LlamaIndex 等专注"数据集成"问题的团队
小结
  • 轻量协议:Agent 到工具通信;用标准 manifest.json 做工具发现和 schema
  • 企业集成的标准------把 Agent 从专有工具中解耦
  • 目标:任何工具/微服务都能被任何 Agent 消费

架构师视角:协议地图与决策

三大协议不是竞争,是解决不同问题
协议 定位 类比
ACP 野心勃勃的"重量级"标准,统管所有 Agent 交互 "全套业务流程标准"
A2A 专注的"轻量级"标准,Agent 对话协作 "邮件/即时消息"
MCP 实用的"集成"标准,Agent 消费工具和 API "OpenAPI/Swagger"
  • 架构师视角有 2 个截然不同的问题(协作问题 vs 集成问题)------它们不是同一个
协议地图:谁解决什么?

三栏结构:

  • 问题 :Problem 1 Collaboration(A2A) "怎么让机器人协作?"(聊天图标)/ Problem 2 Integration(A2T)"怎么让机器人与工具沟通?"(数据库图标)
  • 解决方案A2A → 协作(用例:联邦群聊);ACP → 两者都解决,是"超集协议"(用例:全面一站式生态);MCP → 集成(用例:......)
  • 对大多数企业架构师来说,最直接最痛苦的问题是:集成(Integration)
架构师决策矩阵
复制代码
IF 我的主要目标是...... 让我的现有 API 能被任何 Agent 消费
 THEN 实现一个 MCP server

IF 让我的自有 Agent 团队(Writer 和 Critic)协作
 THEN 用 A2A 风格内部标准

IF 从零构建一个完整、全新、全面的 Agentic 生态
 THEN 评估采用完整 ACP 规范

大多数企业会从 MCP 开始

完整协议栈

三层结构(完整架构需要全部三层):

  1. BACKEND(A2A)(绿色):内部协作与编排
  2. INTEGRATION LAYER(MCP)(橙色):连接企业数据与服务
  1. FRONTEND(AG-UI)(蓝色):渲染生成式 UI 并处理人类反馈
    #mermaid-svg-yEWqz9tMPKMUnyLS{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-yEWqz9tMPKMUnyLS .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-yEWqz9tMPKMUnyLS .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-yEWqz9tMPKMUnyLS .error-icon{fill:#552222;}#mermaid-svg-yEWqz9tMPKMUnyLS .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-yEWqz9tMPKMUnyLS .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-yEWqz9tMPKMUnyLS .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-yEWqz9tMPKMUnyLS .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-yEWqz9tMPKMUnyLS .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-yEWqz9tMPKMUnyLS .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-yEWqz9tMPKMUnyLS .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-yEWqz9tMPKMUnyLS .marker{fill:#333333;stroke:#333333;}#mermaid-svg-yEWqz9tMPKMUnyLS .marker.cross{stroke:#333333;}#mermaid-svg-yEWqz9tMPKMUnyLS svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-yEWqz9tMPKMUnyLS p{margin:0;}#mermaid-svg-yEWqz9tMPKMUnyLS .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-yEWqz9tMPKMUnyLS .cluster-label text{fill:#333;}#mermaid-svg-yEWqz9tMPKMUnyLS .cluster-label span{color:#333;}#mermaid-svg-yEWqz9tMPKMUnyLS .cluster-label span p{background-color:transparent;}#mermaid-svg-yEWqz9tMPKMUnyLS .label text,#mermaid-svg-yEWqz9tMPKMUnyLS span{fill:#333;color:#333;}#mermaid-svg-yEWqz9tMPKMUnyLS .node rect,#mermaid-svg-yEWqz9tMPKMUnyLS .node circle,#mermaid-svg-yEWqz9tMPKMUnyLS .node ellipse,#mermaid-svg-yEWqz9tMPKMUnyLS .node polygon,#mermaid-svg-yEWqz9tMPKMUnyLS .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-yEWqz9tMPKMUnyLS .rough-node .label text,#mermaid-svg-yEWqz9tMPKMUnyLS .node .label text,#mermaid-svg-yEWqz9tMPKMUnyLS .image-shape .label,#mermaid-svg-yEWqz9tMPKMUnyLS .icon-shape .label{text-anchor:middle;}#mermaid-svg-yEWqz9tMPKMUnyLS .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-yEWqz9tMPKMUnyLS .rough-node .label,#mermaid-svg-yEWqz9tMPKMUnyLS .node .label,#mermaid-svg-yEWqz9tMPKMUnyLS .image-shape .label,#mermaid-svg-yEWqz9tMPKMUnyLS .icon-shape .label{text-align:center;}#mermaid-svg-yEWqz9tMPKMUnyLS .node.clickable{cursor:pointer;}#mermaid-svg-yEWqz9tMPKMUnyLS .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-yEWqz9tMPKMUnyLS .arrowheadPath{fill:#333333;}#mermaid-svg-yEWqz9tMPKMUnyLS .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-yEWqz9tMPKMUnyLS .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-yEWqz9tMPKMUnyLS .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-yEWqz9tMPKMUnyLS .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-yEWqz9tMPKMUnyLS .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-yEWqz9tMPKMUnyLS .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-yEWqz9tMPKMUnyLS .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-yEWqz9tMPKMUnyLS .cluster text{fill:#333;}#mermaid-svg-yEWqz9tMPKMUnyLS .cluster span{color:#333;}#mermaid-svg-yEWqz9tMPKMUnyLS 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-yEWqz9tMPKMUnyLS .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-yEWqz9tMPKMUnyLS rect.text{fill:none;stroke-width:0;}#mermaid-svg-yEWqz9tMPKMUnyLS .icon-shape,#mermaid-svg-yEWqz9tMPKMUnyLS .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-yEWqz9tMPKMUnyLS .icon-shape p,#mermaid-svg-yEWqz9tMPKMUnyLS .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-yEWqz9tMPKMUnyLS .icon-shape .label rect,#mermaid-svg-yEWqz9tMPKMUnyLS .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-yEWqz9tMPKMUnyLS .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-yEWqz9tMPKMUnyLS .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-yEWqz9tMPKMUnyLS :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} AG-UI

前端层:生成式 UI + 人类反馈
A2A

后端层:内部协作与编排
MCP

集成层:连接企业数据与服务
人类 User
Agent
其他 Agent
工具/微服务/数据源
ACP 全面标准

(超集:A2A/A2T/A2E/A2H)


📌 本段核心收获(一句话版)

  1. 协议问题 :没有共同语言 → "巴别塔"------ 各服务说着自己的"方言"(Function-calling dialect / MAF dialect / Custom REST API)→ 供应商锁定 + N² 问题(100 Agent 要 5,000 集成)+ 不可扩展
  2. Agent 协议 = "社会契约":发现彼此 / 描述能力 / 通信 / 交换上下文------目标互操作性、解耦大脑与功能。
  3. 四大协议各管一段:ACP(一切,重量级)/ A2A(Agent 对话,轻量)/ AG-UI(Agent 到人界面)/ MCP(Agent 到工具集成)。
  4. ACP 四大规则():任务管理(任务/子任务/目标)+ 状态同步(Pending/Running/Completed/Failed)+ 发现与能力(manifest)+ 工件与数据交换------覆盖 A2A/A2T/A2E/A2H。
  5. A2A :"Agent 的邮件"------ 消息 schema(sender/recipient/session/content)+ 言语行为(REQUEST/INFORM/PROPOSE),专为群聊/交接/反思协作;能建联邦式系统
  6. AG-UI :"智能体时代的 HTML"------生成式 UI: Agent 声明"我需要一个按钮",卡片在 Teams/Slack/Web/Mobile 各自渲染(平台无关);对 HITL 安全和体验至关重要。
  7. MCP :"Agent 的 OpenAPI"------manifest.json 工具发现;企业集成的解耦关键
  8. 协议地图():协作问题(A2A)+ 集成问题(A2T)= 两个不同问题;ACP 是"超集"两者都解决。
  9. 决策矩阵 :让 API 被任何 Agent 消费→MCP ;自家团队协作→A2A 内部标准;从零建生态→ACP。大多数企业从 MCP 开始
  10. 完整协议栈三层():BACKEND(A2A 协作)+ INTEGRATION(MCP 工具)+ FRONTEND(AG-UI 界面)------现代 Agentic 系统三件套。
  11. 下一段预告MCP 深潜------4 层拓扑(Host/Client、Protocol、Server、数据源)、核心概念、生命周期、设计模式与案例。

第 10 篇


为什么深潜 MCP?("90% 问题")

  • 回顾:A2A 解决 Agent 协作、MCP 解决 Agent 工具集成、ACP 两者都管------企业最紧迫的问题是集成
  • MCP 是"你正在面对的问题"的标准------防止供应商锁定、构建面向未来的 Agentic 架构
  • MCP = "Agent 的 OpenAPI/Swagger",是实现架构师首要目标------解耦(Decoupling)------的关键

MCP 架构:4 层拓扑(架构师最核心的概念)

从 1 万英尺看,MCP 系统不是复杂网络,而是干净、线性的 4 层管道

组件 角色 说明
1 MCP Client(Host) 发起连接的 AI 应用 Claude Desktop(消费端)、Cursor IDE(开发者端)、你的自定义 Agent(企业端)。职责:维持连接(1:1 或 1:N)、提供 LLM(大脑)、决定何时调工具
2 The Protocol(Bridge 桥) 通信标准规则 基于 JSON-RPC 2.0 ;传输通道(Transport):Stdio (进程管道,本地应用)/ SSE(HTTP 流,远程服务器);定义如何发送 Prompts、Resources、Tools
3 MCP Server(Adapter 适配器) 你构建的轻量翻译层 "万能适配器" :包装特定数据源,把"混乱的现实"翻译成"标准 MCP"。关键:不含 LLM,是确定性的(代码/SQL)。例:Google Drive MCP Server 知道怎么用 Drive API
4 Data Source(Reality 现实) 真实数据系统 PostgreSQL、Slack API、本地文件系统。Server 持有数据源的 API Key,对 Client 保密

架构图:User → MCP Host → 四个 MCP Client(A/B/C/D)→ 协议层(JSON-RPC + HTTP+SSE)→ 四个 MCP Server(A/B/C/D)→ 数据源(本地文件 / 本地 API / 远程数据库 / 外部 API)------1 Host 对多 Client 对多 Server 的扇出结构。

数据流:Client(问)→ Protocol(说标准语)→ Server(翻译)→ Data Source(取数)

小结:Client 提供大脑并发起请求;Protocol 提供标准语言;Server 提供"手"并翻译请求;Data Source 提供"现实"。
#mermaid-svg-Kqzwh6nKCFGfODKC{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-Kqzwh6nKCFGfODKC .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-Kqzwh6nKCFGfODKC .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-Kqzwh6nKCFGfODKC .error-icon{fill:#552222;}#mermaid-svg-Kqzwh6nKCFGfODKC .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-Kqzwh6nKCFGfODKC .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-Kqzwh6nKCFGfODKC .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-Kqzwh6nKCFGfODKC .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-Kqzwh6nKCFGfODKC .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-Kqzwh6nKCFGfODKC .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-Kqzwh6nKCFGfODKC .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-Kqzwh6nKCFGfODKC .marker{fill:#333333;stroke:#333333;}#mermaid-svg-Kqzwh6nKCFGfODKC .marker.cross{stroke:#333333;}#mermaid-svg-Kqzwh6nKCFGfODKC svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-Kqzwh6nKCFGfODKC p{margin:0;}#mermaid-svg-Kqzwh6nKCFGfODKC .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-Kqzwh6nKCFGfODKC .cluster-label text{fill:#333;}#mermaid-svg-Kqzwh6nKCFGfODKC .cluster-label span{color:#333;}#mermaid-svg-Kqzwh6nKCFGfODKC .cluster-label span p{background-color:transparent;}#mermaid-svg-Kqzwh6nKCFGfODKC .label text,#mermaid-svg-Kqzwh6nKCFGfODKC span{fill:#333;color:#333;}#mermaid-svg-Kqzwh6nKCFGfODKC .node rect,#mermaid-svg-Kqzwh6nKCFGfODKC .node circle,#mermaid-svg-Kqzwh6nKCFGfODKC .node ellipse,#mermaid-svg-Kqzwh6nKCFGfODKC .node polygon,#mermaid-svg-Kqzwh6nKCFGfODKC .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-Kqzwh6nKCFGfODKC .rough-node .label text,#mermaid-svg-Kqzwh6nKCFGfODKC .node .label text,#mermaid-svg-Kqzwh6nKCFGfODKC .image-shape .label,#mermaid-svg-Kqzwh6nKCFGfODKC .icon-shape .label{text-anchor:middle;}#mermaid-svg-Kqzwh6nKCFGfODKC .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-Kqzwh6nKCFGfODKC .rough-node .label,#mermaid-svg-Kqzwh6nKCFGfODKC .node .label,#mermaid-svg-Kqzwh6nKCFGfODKC .image-shape .label,#mermaid-svg-Kqzwh6nKCFGfODKC .icon-shape .label{text-align:center;}#mermaid-svg-Kqzwh6nKCFGfODKC .node.clickable{cursor:pointer;}#mermaid-svg-Kqzwh6nKCFGfODKC .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-Kqzwh6nKCFGfODKC .arrowheadPath{fill:#333333;}#mermaid-svg-Kqzwh6nKCFGfODKC .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-Kqzwh6nKCFGfODKC .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-Kqzwh6nKCFGfODKC .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-Kqzwh6nKCFGfODKC .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-Kqzwh6nKCFGfODKC .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-Kqzwh6nKCFGfODKC .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-Kqzwh6nKCFGfODKC .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-Kqzwh6nKCFGfODKC .cluster text{fill:#333;}#mermaid-svg-Kqzwh6nKCFGfODKC .cluster span{color:#333;}#mermaid-svg-Kqzwh6nKCFGfODKC 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-Kqzwh6nKCFGfODKC .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-Kqzwh6nKCFGfODKC rect.text{fill:none;stroke-width:0;}#mermaid-svg-Kqzwh6nKCFGfODKC .icon-shape,#mermaid-svg-Kqzwh6nKCFGfODKC .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-Kqzwh6nKCFGfODKC .icon-shape p,#mermaid-svg-Kqzwh6nKCFGfODKC .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-Kqzwh6nKCFGfODKC .icon-shape .label rect,#mermaid-svg-Kqzwh6nKCFGfODKC .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-Kqzwh6nKCFGfODKC .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-Kqzwh6nKCFGfODKC .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-Kqzwh6nKCFGfODKC :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} JSON-RPC 2.0

Stdio / SSE
MCP Client / Host

(AI 应用:Claude/Cursor/你的 Agent)

提供大脑+发起请求
MCP Server

(Adapter 适配器)

翻译,无 LLM,确定性
Data Source

(数据库/API/文件系统)

持有 API Key


MCP 规范四大核心概念

两大支柱
  • Pillar 1:DISCOVERY(发现) ------"这个工具能做什么?" → 机制:manifest.json,位置:标准"知名路径"
  • Pillar 2:EXECUTION(执行) ------"怎么运行这个工具?" → 机制:标准 call 端点
概念 1:/.mcp/ 知名路径
复制代码
GET https://api.my-eshop.com/.mcp/manifest.json
  • 单一、标准、可预测的位置------Agent 找工具清单的"前门",消除所有猜测
  • Agent 不需要被告知 manifest 在哪,它知道去哪找
  • 类比:Agent 界的 robots.txt / ads.txt------已知的标准程序化发现入口
概念 2:manifest.json("给 LLM 的用户手册")

封面(顶层字段)示例:

json 复制代码
{
"name": "EshopProductAPI",
"description": "API for searching E-shop product details, stock, and pricing.",
"documentation_url": "https://docs.my-eshop.com/api",
"authentication": {"type": "bearer", "instructions": "Get your API key from your E-shop user profile..."},
"functions": [...]
}

functions 数组(单个工具定义)示例:

json 复制代码
{
"name": "get_product_details",
"description": "Gets all details for a single product (price, stock, specs) given its unique product ID.",
"parameters": {"type": "object", "properties": {"product_id": {"type": "string", "description": "The unique ID (e.g., 'abc-123') of the product."}}, "required": ["product_id"]},
"endpoint": "/mcp/call/get_product_details"
}
概念 3:call 端点格式
  • manifest 定义了"怎么做 ",call 端点是""
  • 核心原则:JSON 进,JSON 出------简单、标准、无状态
概念 4:安全与认证

验证流程:Agent 发 API 请求(带 Authorization: Bearer API_KEY_OR_OAUTH_TOKEN 头)→ MCP Server 验证令牌 → 有效则处理返回结果 / 无效则拒绝------Agent 负责验证每个请求中的令牌

  • 问题:manifest 和 call 端点是公开的,怎么保护?
  • MCP 之道:复用成熟 web 标准------标准 Authorization 请求头(Bearer token / OAuth)
小结:规范四件套
  1. /.mcp/ 路径:可发现的前门
  2. manifest.json:LLM 的用户手册(定义做什么和怎么做)
  3. call 端点:执行机制(JSON in, JSON out)
  4. 安全:复用标准 Authorization 头

MCP 生命周期:4 步握手

四步
步骤 名称 动作
1 "敲门"(发现) Agent 检查知名路径
2 "菜单"(能力协商) Agent 读取并摄取 Manifest
3 "点单"(工具选择与执行) Agent 选择工具并发送 JSON 负载(Agent 根据你的 schema 自动写 JSON body
4 "上菜"(响应) Server 执行逻辑并返回原始 JSON

(步骤 1&2):Agent 大脑气泡:"LLM '知道'你的 API 存在;如果用户问产品,我可以用这个工具"→ GET /.mcp/manifest.json(带 Authorization: Bearer )→ 下载 manifest.json 并注入系统提示(上下文)

(步骤 3):Agent 推理:"我需要产品 ID '123' 的详情,用 get_product 工具"→ POST /mcp/call/get_product,body {"product_id": "123"}------关键:Agent 根据你的 schema 自动写 JSON body
Data Source MCP Server Agent (Client) Data Source MCP Server Agent (Client) #mermaid-svg-K3zUNq72FOoNK5Qg{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-K3zUNq72FOoNK5Qg .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-K3zUNq72FOoNK5Qg .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-K3zUNq72FOoNK5Qg .error-icon{fill:#552222;}#mermaid-svg-K3zUNq72FOoNK5Qg .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-K3zUNq72FOoNK5Qg .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-K3zUNq72FOoNK5Qg .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-K3zUNq72FOoNK5Qg .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-K3zUNq72FOoNK5Qg .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-K3zUNq72FOoNK5Qg .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-K3zUNq72FOoNK5Qg .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-K3zUNq72FOoNK5Qg .marker{fill:#333333;stroke:#333333;}#mermaid-svg-K3zUNq72FOoNK5Qg .marker.cross{stroke:#333333;}#mermaid-svg-K3zUNq72FOoNK5Qg svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-K3zUNq72FOoNK5Qg p{margin:0;}#mermaid-svg-K3zUNq72FOoNK5Qg .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-K3zUNq72FOoNK5Qg text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-K3zUNq72FOoNK5Qg .actor-line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-K3zUNq72FOoNK5Qg .innerArc{stroke-width:1.5;stroke-dasharray:none;}#mermaid-svg-K3zUNq72FOoNK5Qg .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-K3zUNq72FOoNK5Qg .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-K3zUNq72FOoNK5Qg #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-K3zUNq72FOoNK5Qg .sequenceNumber{fill:white;}#mermaid-svg-K3zUNq72FOoNK5Qg #sequencenumber{fill:#333;}#mermaid-svg-K3zUNq72FOoNK5Qg #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-K3zUNq72FOoNK5Qg .messageText{fill:#333;stroke:none;}#mermaid-svg-K3zUNq72FOoNK5Qg .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-K3zUNq72FOoNK5Qg .labelText,#mermaid-svg-K3zUNq72FOoNK5Qg .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-K3zUNq72FOoNK5Qg .loopText,#mermaid-svg-K3zUNq72FOoNK5Qg .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-K3zUNq72FOoNK5Qg .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-K3zUNq72FOoNK5Qg .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-K3zUNq72FOoNK5Qg .noteText,#mermaid-svg-K3zUNq72FOoNK5Qg .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-K3zUNq72FOoNK5Qg .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-K3zUNq72FOoNK5Qg .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-K3zUNq72FOoNK5Qg .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-K3zUNq72FOoNK5Qg .actorPopupMenu{position:absolute;}#mermaid-svg-K3zUNq72FOoNK5Qg .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-K3zUNq72FOoNK5Qg .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-K3zUNq72FOoNK5Qg .actor-man circle,#mermaid-svg-K3zUNq72FOoNK5Qg line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-K3zUNq72FOoNK5Qg :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 1. 敲门:GET /.mcp/manifest.json返回 manifest(工具清单)2. 读"菜单":注入上下文3. 点单:POST call {"product_id":"123"}执行真实逻辑(查库/调 API)原始数据4. 上菜:返回 JSON 结果 → 回到 Agent 循环


MCP vs OpenAPI(为什么不用现成的 OpenAPI?)

两个问题
  1. 噪音与 token 成本 :你的 E-Shop OpenAPI 规范可能有 5,000 行------全塞进 LLM 上下文太贵
  2. "开发者语言" vs "LLM 语言" :OpenAPI 是写给工程师的,不是给 LLM 的;MCP 是语义规范,不只是技术规范
解决方案:MCP = "Agent 友好适配器"
  • 不是用 MCP 替代 OpenAPI------MCP 是"适配器/门面(Facade)"模式
  • OpenAPI = 全面的技术蓝图(为人设计)MCP = 精选的语义"菜单"(为 LLM 设计)
  • 架构师的工作:用 MCP 在复杂内部系统前面建一个安全、高效、智能的"门面"

MCP 设计模式与案例

模式 1:Adapter(适配器)模式(遗留系统)

电源适配器类比图:新"插头"(Agent)→ **国际电源适配器(MCP Server)**→ 旧"墙插座"(Legacy 系统,如 SOAP/REST XML,内部处理)------AI Agent 发 MCP 调用(get_product_details)→ MCP Adapter Server(插头图标)→ Legacy System。

  • 问题:你有一个**单一、有价值但不"懂 Agent"**的遗留系统
  • 任务:把调用"翻译"给这一个特定系统
模式 2:Gateway(网关)模式(微服务)

架构图:AGENT 的 MCP 流量 → MCP Gateway Server (内含 manifest.json 聚合 + ROUTER 路由)→ 路由到 Service A / B / C------收益:所有 Agentic 流量的单一、安全、可管理入口。

  • 问题:不是 1 个遗留系统,而是 50 个现代微服务------不想暴露 50 个不同的 MCP server
  • 收益:所有 Agentic 流量的单一、安全、可管理的入口
案例:用 MCP 架构 E-Shop
  • 系统:微服务架构(Inventory 库存、Orders 订单、User 用户服务)
  • 目标:把 get_product_details(来自 Inventory)和 get_order_status(来自 Orders)暴露给合作伙伴的 Support Agent
  • 错误做法:给伙伴 Agent 两份 API 规范,指望它都集成
  • 正确做法(网关模式)
  1. 一个 MCP 网关 serverhttps://api.my-eshop.com
  2. 它的 manifest.json 同时定义 get_product_detailsget_order_status
  3. Agent 调 get_product_details → 网关路由到 Inventory
  4. Agent 调 get_order_status → 网关路由到 Orders Service
  • 结果 :伙伴 Agent 只有一个简单工具;我们保持完全内部控制和解耦------单一、安全、可管理的入口

#mermaid-svg-KrlCmyKab0V3vnh5{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-KrlCmyKab0V3vnh5 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-KrlCmyKab0V3vnh5 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-KrlCmyKab0V3vnh5 .error-icon{fill:#552222;}#mermaid-svg-KrlCmyKab0V3vnh5 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-KrlCmyKab0V3vnh5 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-KrlCmyKab0V3vnh5 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-KrlCmyKab0V3vnh5 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-KrlCmyKab0V3vnh5 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-KrlCmyKab0V3vnh5 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-KrlCmyKab0V3vnh5 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-KrlCmyKab0V3vnh5 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-KrlCmyKab0V3vnh5 .marker.cross{stroke:#333333;}#mermaid-svg-KrlCmyKab0V3vnh5 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-KrlCmyKab0V3vnh5 p{margin:0;}#mermaid-svg-KrlCmyKab0V3vnh5 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-KrlCmyKab0V3vnh5 .cluster-label text{fill:#333;}#mermaid-svg-KrlCmyKab0V3vnh5 .cluster-label span{color:#333;}#mermaid-svg-KrlCmyKab0V3vnh5 .cluster-label span p{background-color:transparent;}#mermaid-svg-KrlCmyKab0V3vnh5 .label text,#mermaid-svg-KrlCmyKab0V3vnh5 span{fill:#333;color:#333;}#mermaid-svg-KrlCmyKab0V3vnh5 .node rect,#mermaid-svg-KrlCmyKab0V3vnh5 .node circle,#mermaid-svg-KrlCmyKab0V3vnh5 .node ellipse,#mermaid-svg-KrlCmyKab0V3vnh5 .node polygon,#mermaid-svg-KrlCmyKab0V3vnh5 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-KrlCmyKab0V3vnh5 .rough-node .label text,#mermaid-svg-KrlCmyKab0V3vnh5 .node .label text,#mermaid-svg-KrlCmyKab0V3vnh5 .image-shape .label,#mermaid-svg-KrlCmyKab0V3vnh5 .icon-shape .label{text-anchor:middle;}#mermaid-svg-KrlCmyKab0V3vnh5 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-KrlCmyKab0V3vnh5 .rough-node .label,#mermaid-svg-KrlCmyKab0V3vnh5 .node .label,#mermaid-svg-KrlCmyKab0V3vnh5 .image-shape .label,#mermaid-svg-KrlCmyKab0V3vnh5 .icon-shape .label{text-align:center;}#mermaid-svg-KrlCmyKab0V3vnh5 .node.clickable{cursor:pointer;}#mermaid-svg-KrlCmyKab0V3vnh5 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-KrlCmyKab0V3vnh5 .arrowheadPath{fill:#333333;}#mermaid-svg-KrlCmyKab0V3vnh5 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-KrlCmyKab0V3vnh5 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-KrlCmyKab0V3vnh5 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-KrlCmyKab0V3vnh5 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-KrlCmyKab0V3vnh5 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-KrlCmyKab0V3vnh5 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-KrlCmyKab0V3vnh5 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-KrlCmyKab0V3vnh5 .cluster text{fill:#333;}#mermaid-svg-KrlCmyKab0V3vnh5 .cluster span{color:#333;}#mermaid-svg-KrlCmyKab0V3vnh5 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-KrlCmyKab0V3vnh5 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-KrlCmyKab0V3vnh5 rect.text{fill:none;stroke-width:0;}#mermaid-svg-KrlCmyKab0V3vnh5 .icon-shape,#mermaid-svg-KrlCmyKab0V3vnh5 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-KrlCmyKab0V3vnh5 .icon-shape p,#mermaid-svg-KrlCmyKab0V3vnh5 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-KrlCmyKab0V3vnh5 .icon-shape .label rect,#mermaid-svg-KrlCmyKab0V3vnh5 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-KrlCmyKab0V3vnh5 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-KrlCmyKab0V3vnh5 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-KrlCmyKab0V3vnh5 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 一个 MCP 网关
get_product_details
get_order_status
合作伙伴的 Support Agent
MCP Gateway

api.my-eshop.com

manifest 定义两个工具
Inventory 库存服务
Orders 订单服务

小结:从理论到蓝图
  • Adapter 模式 :有一个遗留系统要暴露 → "翻译"调用给一个特定系统
  • Gateway 模式 :有很多微服务 → "路由"调用到许多不同系统

📌 本段核心收获(一句话版)

  1. MCP = 解耦标准:企业最紧迫的集成问题,防止供应商锁定。
  2. 4 层拓扑 (架构师最核心概念, 1 Host→多 Client→多 Server→多数据源扇出图):Client(大脑,发起)/ Protocol(标准语言 JSON-RPC,Stdio/SSE)/ Server(适配器,翻译,无 LLM 确定性 )/ Data Source(现实,API Key 藏在 Server 侧)------线性管道。
  3. 规范两大支柱 :发现(manifest.json + /.mcp/ 知名路径)+ 执行(call 端点 JSON in/out)。
  4. 四大核心概念/.mcp/ 路径(Agent 界的 robots.txt 前门)/ manifest.json(LLM 用户手册, 完整 JSON 示例)/ call 端点(执行)/ 安全(复用标准 Authorization 头, Bearer 验证流程)。
  5. 生命周期 4 步握手 ( 各步请求示例):敲门(发现)→ 菜单(读 manifest 注入上下文)→ 点单(Agent 按 schema 自动写 JSON body)→ 上菜(返回 JSON 进循环)。
  6. MCP vs OpenAPI :OpenAPI = 5,000 行技术蓝图(给人),MCP = 精选语义菜单(给 LLM)------不替代,是门面(Facade)
  7. 两大模式( 电源适配器类比图 + 网关路由图):Adapter(1 个遗留系统,翻译)/ Gateway(50 个微服务,路由)。
  8. E-Shop 案例:一个 MCP 网关同时暴露库存+订单工具,伙伴 Agent 只需一个工具,内部完全解耦。
  9. 下一段预告Context Engineering(上下文工程)------Prompt 工程 → Context 工程的范式转移、5 种上下文类型、上下文窗口管理策略。

第 11 篇


从 Prompt 工程到 Context 工程(范式转移)

什么是"上下文"?(不只是提示词)

上下文窗口组成图:五个信息方块------System Prompt(身份与规则)、Chat History(情景记忆)、Tool Schemas(JSON 定义)、Retrieved Data(RAG 数据)等,全部塞进 LLM 的有限注意力。

  • Agent 的"上下文"= 它有限注意力范围内的所有东西 ------每轮都发送给 LLM 的整个信息载荷
  • 所有这些都要塞进一个有限的上下文窗口
什么是"工程"?(不只是"写作")
"写作"(Writing) "工程"(Engineering)
方式 手动、静态、一次性(写一个好 System Prompt) 系统化、动态、程序化
内涵 文字工匠精心写一条静态指令 设计、构建、管理持续运转且高效的系统------架构、权衡、扩展、优化
定义与架构师使命
  • Context Engineering = 设计、构建、动态管理 Agent 用来感知、推理、行动的全部信息载荷的架构性学科
  • 架构师使命 :LLM 引擎(GPT-4o/Claude/Llama)正变成商品 ;框架(LangChain/MAF)是开源的------你的 AI 应用真正可防御、专有的价值不是 LLM,而是你构建的"动态获取、排序、工程化喂给 LLM 的独特上下文"的系统
Prompt Engineering vs Context Engineering
维度 Prompt Engineering(旧路) Context Engineering(新路)
产物 静态字符串 动态系统
焦点 指令("魔法词") 信息流(数据)
过程 手动 & 静态 程序化 & 动态
范围 单个提示词 整个上下文窗口(Prompt + RAG + Tools + Memory)
目标 无状态 LLM 调用(生成式 AI) 有状态 Agentic 循环(Agentic AI)
角色 提示词写手 信息架构师

关键转移:从"写提示词"到"架构信息流"------从"写手"到"架构师"


上下文解剖:5 种类型

框架图:中心圆圈 "AGENT'S TOTAL CONTEXT PAYLOAD(Agent 总上下文载荷)" 向五个方向辐射箭头,指向五个彩色方块(Stateful 红 / Dynamic 绿 / Episodic 橙 / ...)------5 类上下文汇成总载荷。

作为"上下文架构师",第一份工作:理解手头的"材料"------把 Agentic 上下文系统化分类成 5 类

# 类型 昵称 是什么 实例
1 Static 静态 "灵魂" 固定、很少变化 Persona:"Helpful E-Shop Assistant";Rules:"Never refund > $100";Tool Schemas(固定 JSON)
2 Dynamic 动态 "触发器" 发起智能体循环的即时新信息 用户最新查询("I need new shoes")、API 响应、新传感器读数
3 Episodic 情景 "短期记忆" 当前交互的历史 聊天记录最近 10 条消息------会增长,必须管理防溢出(Memory Management / Managed History)
4 Retrieved 检索 "外部知识" 即时从外部拉取 RAG 文档、API 调用结果、网页搜索结果
5 Stateful 有状态 "长期记忆" 从永久外部数据库拉取的关于用户或状态的信息 用户画像:姓名 Mehmet、偏好跑步鞋、鞋码 44、3 次历史订单、Agent 状态(上次尝试订航班)→ True Personalization
架构师的工作:构建"上下文装配器(Context Assembler)"

每个循环都要执行的代码:

  1. 抓取 Static(人格)
  2. 接收 Dynamic(查询)
  3. 获取并截断 Episodic(历史)
  4. 跑 RAG 获取 Retrieved(文档)
  5. 查数据库获取 Stateful (画像)
    装配全部 5 类成最终优化载荷发给 LLM

#mermaid-svg-jmd5o827s0A0FAGh{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-jmd5o827s0A0FAGh .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-jmd5o827s0A0FAGh .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-jmd5o827s0A0FAGh .error-icon{fill:#552222;}#mermaid-svg-jmd5o827s0A0FAGh .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-jmd5o827s0A0FAGh .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-jmd5o827s0A0FAGh .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-jmd5o827s0A0FAGh .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-jmd5o827s0A0FAGh .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-jmd5o827s0A0FAGh .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-jmd5o827s0A0FAGh .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-jmd5o827s0A0FAGh .marker{fill:#333333;stroke:#333333;}#mermaid-svg-jmd5o827s0A0FAGh .marker.cross{stroke:#333333;}#mermaid-svg-jmd5o827s0A0FAGh svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-jmd5o827s0A0FAGh p{margin:0;}#mermaid-svg-jmd5o827s0A0FAGh .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-jmd5o827s0A0FAGh .cluster-label text{fill:#333;}#mermaid-svg-jmd5o827s0A0FAGh .cluster-label span{color:#333;}#mermaid-svg-jmd5o827s0A0FAGh .cluster-label span p{background-color:transparent;}#mermaid-svg-jmd5o827s0A0FAGh .label text,#mermaid-svg-jmd5o827s0A0FAGh span{fill:#333;color:#333;}#mermaid-svg-jmd5o827s0A0FAGh .node rect,#mermaid-svg-jmd5o827s0A0FAGh .node circle,#mermaid-svg-jmd5o827s0A0FAGh .node ellipse,#mermaid-svg-jmd5o827s0A0FAGh .node polygon,#mermaid-svg-jmd5o827s0A0FAGh .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-jmd5o827s0A0FAGh .rough-node .label text,#mermaid-svg-jmd5o827s0A0FAGh .node .label text,#mermaid-svg-jmd5o827s0A0FAGh .image-shape .label,#mermaid-svg-jmd5o827s0A0FAGh .icon-shape .label{text-anchor:middle;}#mermaid-svg-jmd5o827s0A0FAGh .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-jmd5o827s0A0FAGh .rough-node .label,#mermaid-svg-jmd5o827s0A0FAGh .node .label,#mermaid-svg-jmd5o827s0A0FAGh .image-shape .label,#mermaid-svg-jmd5o827s0A0FAGh .icon-shape .label{text-align:center;}#mermaid-svg-jmd5o827s0A0FAGh .node.clickable{cursor:pointer;}#mermaid-svg-jmd5o827s0A0FAGh .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-jmd5o827s0A0FAGh .arrowheadPath{fill:#333333;}#mermaid-svg-jmd5o827s0A0FAGh .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-jmd5o827s0A0FAGh .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-jmd5o827s0A0FAGh .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-jmd5o827s0A0FAGh .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-jmd5o827s0A0FAGh .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-jmd5o827s0A0FAGh .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-jmd5o827s0A0FAGh .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-jmd5o827s0A0FAGh .cluster text{fill:#333;}#mermaid-svg-jmd5o827s0A0FAGh .cluster span{color:#333;}#mermaid-svg-jmd5o827s0A0FAGh 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-jmd5o827s0A0FAGh .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-jmd5o827s0A0FAGh rect.text{fill:none;stroke-width:0;}#mermaid-svg-jmd5o827s0A0FAGh .icon-shape,#mermaid-svg-jmd5o827s0A0FAGh .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-jmd5o827s0A0FAGh .icon-shape p,#mermaid-svg-jmd5o827s0A0FAGh .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-jmd5o827s0A0FAGh .icon-shape .label rect,#mermaid-svg-jmd5o827s0A0FAGh .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-jmd5o827s0A0FAGh .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-jmd5o827s0A0FAGh .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-jmd5o827s0A0FAGh :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Static 静态

人格/规则/工具schema
Context Assembler

上下文装配器
Dynamic 动态

用户查询
Episodic 情景

聊天历史(截断)
Retrieved 检索

RAG 文档
Stateful 有状态

用户画像(查库)
LLM 上下文窗口


4 大管理策略(有限窗口的实时优化)

约束问题 :5 种上下文类型 = 信息的海洋;上下文窗口 = 一个桶(8k/128k...)------目标:对每个任务程序化地挑选并装配最有价值的信息进桶 。这不是"塞数据",是复杂的实时优化问题

# 策略 解决什么问题 方法
1 溢出管理(Overflow Management) 情景上下文(聊天历史)太长 滑动窗口 + 摘要
2 压缩(Compression) 10,000 token 提示词 vs 8,000 窗口 用专门的小型 LLM "压缩"数据(工具如 LLMLingua
3 重排序(Re-ranking) LLM 的 **"Lost-in-the-Middle"(迷失在中间)**问题 程序化把最相关文档移到上下文最末尾(紧贴用户查询前)
4 范围化(Contextual Scoping) 企业 Agent 有 200 个工具但任务只需要 3 个 动态只选择任务需要的工具(最"Agentic"的策略)

策略 1 细节( ):

  • 滑动窗口 :✅ 快、便宜、简单;❌ 失去早期对话(长期记忆丢失)
  • 摘要 :独立 LLM 调用 → 段落摘要,✅ 保留大意(Gist)

策略 2 细节 ( ):Large Prompt(10,000 tokens)→ 专用 LLM 压缩器(如 LLMLingua) → 有限窗口(8k tokens)

策略 3 细节 ( ):注意力曲线图------LLM 注意力在 System Prompt 和 User Query 两端最高 ,中间标注 "LOST IN THE MIDDLE" ;BEFORE:Doc A(中相关)Doc B(高相关)... → AFTER:程序化重排,把高相关文档移到末尾紧贴用户查询

策略 4 细节 ( ):用户查询("What's the status of order #123?")→ 分类器(小型/快速 LLM) → 智能上下文装配器 → 从 200+ 工具中动态选 3 个相关工具 → 缩放后的上下文------最"Agentic"的策略

工具箱总结
  1. 溢出管理:滑动窗口 + 摘要(管历史)
  2. 压缩:用 LLMLingua 等工具缩小上下文
  3. 重排序:对抗 RAG 的"迷失在中间"
  4. 范围化:动态选择显示什么(如工具)

两大用例(为什么要这么费劲?)

用例 1:超个性化(Hyper-Personalization)------

  • 目标:认识用户的 Agent------从通用"聊天机器人"变成真正的"个人助理"
  • 实现:工程化 Stateful Context(用户画像)

用例 2:动态"专家"Agent------

  • 目标:单个中央 Agent 处理多个不同专家领域(法律、金融、HR)
  • 实现:工程化 Contextual Scoping(动态切换人格、工具和 RAG 索引)
总结:架构 > 提示词
  • 这些用例不是"魔法提示词"的结果------是深思熟虑的信息架构的结果
  • 超个性化 = 工程化有状态上下文(用户画像)
  • 动态专家 = 工程化范围化(换人格/工具/RAG 索引)

这才是 Context Engineering 的真正力量与目的


📌 本段核心收获(一句话版)

  1. 上下文 = 每轮发给 LLM 的整个信息载荷( 五方块组成图)------必须塞进有限窗口。
  2. 写作 vs 工程:手动静态一次性 vs 系统化动态程序化------从"文字工匠"到"系统架构师"。
  3. 架构师使命 :LLM 是商品、框架是开源------你的核心竞争力是"上下文装配系统"
  4. Prompt vs Context 六维对比:字符串 vs 系统 / 指令 vs 信息流 / 手动 vs 程序化 / 单提示词 vs 整个窗口 / 无状态 vs 有状态循环 / 写手 vs 信息架构师。
  5. 5 种上下文类型 ( 中心辐射图 + 每类实例):静态(灵魂)/ 动态(触发器)/ 情景(短期记忆,会增长要管理)/ 检索(RAG 外部知识)/ 有状态(长期记忆画像,最强大最工程化, Mehmet 用户画像示例)。
  6. Context Assembler:每循环装配 5 类上下文成优化载荷------架构师的核心工件。
  7. 4 大策略 :溢出管理(滑动窗口✅快❌丢早期对话 / 摘要✅留大意)/ 压缩(小型 LLM,LLMLingua)/ 重排序( 注意力曲线:对抗 Lost-in-the-Middle,高相关文档移到末尾)/ 范围化( 分类器从 200+ 工具动态选 3 个,最 Agentic)
  8. 两大用例:超个性化(Stateful 画像)+ 动态专家(Scoping 换人格/工具/RAG 索引)。
  9. 核心论断:架构 > 提示词------魔法来自信息架构,不是魔法词。
  10. 下一段预告ADLC(Agent 开发生命周期)------概率性软件 vs 确定性软件、7 阶段、评估挑战、AgentOps、LLM 护栏、参考架构。

第 12 篇(收官)


ADLC:Agent 开发生命周期(7 阶段)

什么是 AI Agent 开发 + 概率性转变
  • AI Agent 开发不是"提示词工程"或"模型训练" ------是构建、测试、治理、管理自主目标驱动软件系统的正式工程学科
  • 核心挑战:概率性转变(Probabilistic Shift)( 左右对比图):
  • 旧路(确定性 SDLC):Input X → f(x) → Output Yf(5) 永远返回 10,返回 11 就是 bug------测试二元正确性(Pass/Fail)
  • 新路(概率性 ADLC):Goal → Agent(Goal + Context) → Result,可能返回结果 A 或 B,两者都可能是有效的 ------天生非确定性,这改变了一切开发和 QA 方式
为什么传统 QA/DevOps 失效 → ADLC
  • 传统工具测不了"推理"、监控不了"困惑"
  • ADLC = SDLC + MLOps + 新的"认知"实践------为管理概率性软件而生的新正式流程
7 阶段总览

ADLC 迭代循环图(右上角:目标设定→...→部署监控的循环流程)。

  1. Goal Setting & Scoping(目标设定与范围):定义 Agent 做什么、不做什么------目标会成为 System Prompt 的技术部分
  2. Design(设计)
  3. Framework, Model & Tool Selection(框架/模型/工具选型)
  4. Build(构建)
  5. Training(训练,可选)
  6. Evaluation(评估 = 新的"测试")
  7. Deployment & Monitoring(部署与监控 = "AgentOps")
最难的部分
  • ADLC 是管理概率性软件的 7 步迭代流程
  • 最难的 = 两个新阶段:Phase 6 评估 (怎么测?)+ Phase 7 AgentOps(怎么监控?)

#mermaid-svg-ufamCaBGnzRYYRIT{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-ufamCaBGnzRYYRIT .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-ufamCaBGnzRYYRIT .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-ufamCaBGnzRYYRIT .error-icon{fill:#552222;}#mermaid-svg-ufamCaBGnzRYYRIT .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-ufamCaBGnzRYYRIT .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-ufamCaBGnzRYYRIT .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-ufamCaBGnzRYYRIT .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-ufamCaBGnzRYYRIT .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-ufamCaBGnzRYYRIT .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-ufamCaBGnzRYYRIT .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-ufamCaBGnzRYYRIT .marker{fill:#333333;stroke:#333333;}#mermaid-svg-ufamCaBGnzRYYRIT .marker.cross{stroke:#333333;}#mermaid-svg-ufamCaBGnzRYYRIT svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-ufamCaBGnzRYYRIT p{margin:0;}#mermaid-svg-ufamCaBGnzRYYRIT .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-ufamCaBGnzRYYRIT .cluster-label text{fill:#333;}#mermaid-svg-ufamCaBGnzRYYRIT .cluster-label span{color:#333;}#mermaid-svg-ufamCaBGnzRYYRIT .cluster-label span p{background-color:transparent;}#mermaid-svg-ufamCaBGnzRYYRIT .label text,#mermaid-svg-ufamCaBGnzRYYRIT span{fill:#333;color:#333;}#mermaid-svg-ufamCaBGnzRYYRIT .node rect,#mermaid-svg-ufamCaBGnzRYYRIT .node circle,#mermaid-svg-ufamCaBGnzRYYRIT .node ellipse,#mermaid-svg-ufamCaBGnzRYYRIT .node polygon,#mermaid-svg-ufamCaBGnzRYYRIT .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-ufamCaBGnzRYYRIT .rough-node .label text,#mermaid-svg-ufamCaBGnzRYYRIT .node .label text,#mermaid-svg-ufamCaBGnzRYYRIT .image-shape .label,#mermaid-svg-ufamCaBGnzRYYRIT .icon-shape .label{text-anchor:middle;}#mermaid-svg-ufamCaBGnzRYYRIT .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-ufamCaBGnzRYYRIT .rough-node .label,#mermaid-svg-ufamCaBGnzRYYRIT .node .label,#mermaid-svg-ufamCaBGnzRYYRIT .image-shape .label,#mermaid-svg-ufamCaBGnzRYYRIT .icon-shape .label{text-align:center;}#mermaid-svg-ufamCaBGnzRYYRIT .node.clickable{cursor:pointer;}#mermaid-svg-ufamCaBGnzRYYRIT .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-ufamCaBGnzRYYRIT .arrowheadPath{fill:#333333;}#mermaid-svg-ufamCaBGnzRYYRIT .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-ufamCaBGnzRYYRIT .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-ufamCaBGnzRYYRIT .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-ufamCaBGnzRYYRIT .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-ufamCaBGnzRYYRIT .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-ufamCaBGnzRYYRIT .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-ufamCaBGnzRYYRIT .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-ufamCaBGnzRYYRIT .cluster text{fill:#333;}#mermaid-svg-ufamCaBGnzRYYRIT .cluster span{color:#333;}#mermaid-svg-ufamCaBGnzRYYRIT 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-ufamCaBGnzRYYRIT .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-ufamCaBGnzRYYRIT rect.text{fill:none;stroke-width:0;}#mermaid-svg-ufamCaBGnzRYYRIT .icon-shape,#mermaid-svg-ufamCaBGnzRYYRIT .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-ufamCaBGnzRYYRIT .icon-shape p,#mermaid-svg-ufamCaBGnzRYYRIT .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-ufamCaBGnzRYYRIT .icon-shape .label rect,#mermaid-svg-ufamCaBGnzRYYRIT .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-ufamCaBGnzRYYRIT .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-ufamCaBGnzRYYRIT .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-ufamCaBGnzRYYRIT :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 迭代

  1. 目标与范围
  2. 设计
  3. 框架/模型/工具选型
  4. 构建
  5. 训练(可选)
  6. 评估
  7. 部署与监控 AgentOps

深潜:评估(新的"测试")

为什么传统单元测试失败
  • 无法预测输出 → 传统单元测试(断言精确输出)对 Agent 无效
  • 新范式:测试"过程"而非"输出"( 左右对比图):
  • 测输出(The "What"):机器人给精确答案("42")→ 检查表(质量/一致性/安全性)→ "这是个好答案吗?"→ 绿勾
  • 测过程(The "How"):用户问"你有墙板吗?"→ 思维导图展示 Agent 推理轨迹 (工具调用 get_inventory → 数据库响应"Yes, 5 units"→ 事实错误)→ "Agent 思考得对吗?"→ 需要新技术评估过程
技术 1:创建"测试数据集"
  • 你的新"测试套件"不再是 .py 文件,而是 "黄金集(golden set)"------50/100/1000 个真实世界场景
  • 这个数据集成为 Agent 所有未来版本的基准
技术 2:LLM-as-a-Judge(LLM 当裁判)

三步流程:①被测 Agent (Scenario #1 Input → Agent Answer 非确定性)→ ②Judge LLM (输入 JUDGE PROMPT → 输出 JSON,如 {"Helpfulness": 9, "Polite": 10, "Rules": "Y"})→ ③自动化测试结果(结构化分数 JSON)

  • 问题:100 个场景,谁给 100 个非确定性答案打分?
  • 方案:用另一个更强大的 LLM 当"裁判"------这就是自动化"质量"测试的方法
新 QA 管道
  1. 单元测试(确定性) :测工具(你的 add(2,2) 函数仍然要有单元测试)
  2. 评估管道(概率性) :测试数据集(黄金集)→ Agent 跑全量数据集 → LLM-as-a-Judge 给质量打分 → 轨迹分析(Trace Analysis):"白盒"测过程确保工具使用正确

这就是 Agent 的新 CI/CD 管道


深潜:AgentOps(可观测性与监控)

什么是 AgentOps
  • "Agent 的 DevOps"------管理、监控、确保生产环境中 AI Agent 的性能、质量和成本的实践与工具集
  • DevOps vs AgentOps 对比图 :左(传统 DevOps)监控系统健康("身体") ------服务器/CPU/内存监控、API 健康检查(200 OK)、错误日志;右(新 AgentOps)监控认知健康("心智") ------思维混乱、规则守卫、思维链(Chain of Thought)
基础:可追溯性(Traceability)
  • "500 错误"容易记日志------怎么记录"困惑"?
  • 方案:必须记录 Agent 的整个推理轨迹(reasoning trace)------没有它,其他所有指标都无法调试
关键指标 + 新仪表盘

仪表盘界面:系统健康 + 认知健康双栏。

  • 硬指标(性能与成本):成本、延迟、工具调用次数等
  • 认知指标(质量与安全):工具失败、用户情绪、幻觉
  • 新仪表盘 = 系统健康 + 认知健康
  • 基于可追溯性(记录"想法")
  • 新增指标:成本、工具失败、用户情绪、幻觉

LLM 护栏(Guardrails)

新威胁模型:概率性风险
  • 传统安全 100% 必要,但不再充分------有了新的"概率性"攻击向量和风险(注入 Injection、滥用 Abuse、泄漏 Leakage)
定义 LLM 护栏
  • LLM Guardrails = 围绕 LLM 程序化强制实施的一组预定义规则、过滤器、策略
  • 目标:约束非确定性"大脑"输出特定格式/上下文,并验证它的每个响应
  • 强制:结构 (输出必须是合法 JSON)、类型 (不得含毒语言)、质量(必须事实核查来源)

它们是 Agent "心智"的防火墙

护栏工作方式:输入 vs 输出

时间轴图:Chat message → Guardrail input validation(输入护栏校验) → LLM text generation → Guardrail output validation(输出护栏校验) → Chat response。

输入护栏(左,保护 Agent 免受攻击):阻止提示注入(Prompt Injection)、清理 PII、过滤内容 ;输出护栏(右,保护用户免受 Agent 攻击):验证工具调用(JSON)、检查幻觉、确保品牌安全

  • 架构上护栏可放在数据流 2 个位置:输入护栏 (检查进来的用户输入)和输出护栏(检查出去的 Agent 响应)
两个安全模式
  1. HITL :输出护栏检查"高风险"动作------能移动资金或修改关键数据的不可协商模式
  2. Ejection & Secure Tooling(MCP):弹出 + 安全工具化
架构师的答案(治理与责任)
  • 可追溯性就是我们的防御 :AgentOps 是关键------不可变、可审计的完整推理轨迹日志------能证明 Agent 为什么做某个决定、通过了哪些护栏
  • 没有可观测性就没有治理(Governance is impossible without Observability)
  • 大问题(C 级/法律/合规):Agent 犯下数百万美元错误时谁负责?
  • 总结:新威胁模型(注入/滥用/泄漏)→ LLM 护栏层(输入&输出)→ 安全模式(HITL/Ejection/MCP)→ 用治理和可追溯性管理风险

工具生命周期:管理 MCP Server

manifest.json = "API 契约" + 新的"破坏性变更"
  • Agent 只是方程的一半,另一半是工具(MCP Servers = 企业 API,有自己的开发/部署/管理生命周期)------"工具的 DevOps"
  • 从人类可读契约到机器可读契约的转变带来危险新影响:
  • 问题 :被提示词和训练"教导"理解旧描述的 Agent,面对新描述可能"困惑"、概率性地不再选这个工具
  • 关键洞察:manifest.json 里一个善意的文字修改 = P0 级生产崩溃 bug
最佳实践
  1. 严格版本化(非协商) :v1 Agent 继续工作,v2 Agent 用"改进"的新工具------"DevOps 101"纪律。永远不要改一个已发布的 manifest
  2. 安全与部署:像保护任何关键任务微服务一样保护和监控 MCP Server
  • 小结:MCP Servers 是服务 AI 的企业 API,它们本身不是 AI ;manifest 是脆弱的破坏性契约;严格版本化不可协商

参考架构:Agentic AI 平台蓝图(收官)

3 万英尺视角:设计时 vs 运行时

双区域图:左蓝 Design-Time「Agent Factory」 (开发者图标+笔记本+工具、数据库+测试数据评估、ADLC Build & Evaluation Steps);右绿 Run-Time「Agent Grid」 (云、火箭发射/部署、负载均衡器、监控、ADLC Deployment & Monitoring Steps);中间蓝绿色道路 = Bridge: Deployment Pipeline (CI/CD)

四大支柱组件

# 组件 区域 目标
1 Agent Factory(Agent 工厂) 设计时 产出经过验证、版本化、可部署的 Agent------输出:"版本化 Agent 包"(Docker 容器)
2 Agent Runtime(Agent 运行时) 运行时 执行、扩展、保护------"K8s for Agents"
3 Tool Server(工具服务器) 集成层 提供到企业系统的单一、安全、稳定桥梁------解耦 Agent Runtime 与企业后端
4 AgentOps Platform(监控平台) 监控 全平台整体可观测性 ------整个系统的"反馈回路"

AgentOps 平台:AgentRuntime(齿轮云)+ ToolServer(心形=延迟&错误)→ Trace Logging("想法")+ System Logging("身体")→ Data Processing & Storage(统一日志库)→ Metrics & Cost Dashboard(单面玻璃);Feedback Loop 反馈回路回到 AgentRuntime。

完整蓝图(白板图)+ 四支柱总结

白板架构图:

  • Design-Time:Agent Factory(Agent 代码和模型、评估框架 CI/CD + LLM-as-a-Judge、验证和打包)
  • Run-Time :Agent Runtime(有状态实例 K8s Pods、Guardrails HITL/Ejection)
  • Integration :Tool Server(MCP Gateway:MCP API 网关、数据库、Legacy APIs、微服务、企业数据&API)
  • Monitoring :AgentOps Platform(Trace Logs 想法、System Logs 身体、Metrics Dashboard、Governance & Liability 治理与责任
  • 箭头从左到右 + Optimization Loop 优化反馈环
支柱 关键词
1. Factory 工厂 设计、构建、评估
2. Runtime 运行时 执行、扩展、安全
3. Gateway 网关 集成、解耦、管理
4. Monitor 监控 观察、追踪、治理

有了这个蓝图,你可以分析任何厂商的产品,或构建自己的

课程结束

Thank you so much for being with me on this journey.(感谢你陪我走过这段旅程)------作者 Mehmet Ozkaya
#mermaid-svg-2OUqfMiXiXshNq43{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-2OUqfMiXiXshNq43 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-2OUqfMiXiXshNq43 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-2OUqfMiXiXshNq43 .error-icon{fill:#552222;}#mermaid-svg-2OUqfMiXiXshNq43 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-2OUqfMiXiXshNq43 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-2OUqfMiXiXshNq43 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-2OUqfMiXiXshNq43 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-2OUqfMiXiXshNq43 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-2OUqfMiXiXshNq43 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-2OUqfMiXiXshNq43 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-2OUqfMiXiXshNq43 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-2OUqfMiXiXshNq43 .marker.cross{stroke:#333333;}#mermaid-svg-2OUqfMiXiXshNq43 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-2OUqfMiXiXshNq43 p{margin:0;}#mermaid-svg-2OUqfMiXiXshNq43 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-2OUqfMiXiXshNq43 .cluster-label text{fill:#333;}#mermaid-svg-2OUqfMiXiXshNq43 .cluster-label span{color:#333;}#mermaid-svg-2OUqfMiXiXshNq43 .cluster-label span p{background-color:transparent;}#mermaid-svg-2OUqfMiXiXshNq43 .label text,#mermaid-svg-2OUqfMiXiXshNq43 span{fill:#333;color:#333;}#mermaid-svg-2OUqfMiXiXshNq43 .node rect,#mermaid-svg-2OUqfMiXiXshNq43 .node circle,#mermaid-svg-2OUqfMiXiXshNq43 .node ellipse,#mermaid-svg-2OUqfMiXiXshNq43 .node polygon,#mermaid-svg-2OUqfMiXiXshNq43 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-2OUqfMiXiXshNq43 .rough-node .label text,#mermaid-svg-2OUqfMiXiXshNq43 .node .label text,#mermaid-svg-2OUqfMiXiXshNq43 .image-shape .label,#mermaid-svg-2OUqfMiXiXshNq43 .icon-shape .label{text-anchor:middle;}#mermaid-svg-2OUqfMiXiXshNq43 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-2OUqfMiXiXshNq43 .rough-node .label,#mermaid-svg-2OUqfMiXiXshNq43 .node .label,#mermaid-svg-2OUqfMiXiXshNq43 .image-shape .label,#mermaid-svg-2OUqfMiXiXshNq43 .icon-shape .label{text-align:center;}#mermaid-svg-2OUqfMiXiXshNq43 .node.clickable{cursor:pointer;}#mermaid-svg-2OUqfMiXiXshNq43 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-2OUqfMiXiXshNq43 .arrowheadPath{fill:#333333;}#mermaid-svg-2OUqfMiXiXshNq43 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-2OUqfMiXiXshNq43 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-2OUqfMiXiXshNq43 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-2OUqfMiXiXshNq43 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-2OUqfMiXiXshNq43 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-2OUqfMiXiXshNq43 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-2OUqfMiXiXshNq43 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-2OUqfMiXiXshNq43 .cluster text{fill:#333;}#mermaid-svg-2OUqfMiXiXshNq43 .cluster span{color:#333;}#mermaid-svg-2OUqfMiXiXshNq43 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-2OUqfMiXiXshNq43 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-2OUqfMiXiXshNq43 rect.text{fill:none;stroke-width:0;}#mermaid-svg-2OUqfMiXiXshNq43 .icon-shape,#mermaid-svg-2OUqfMiXiXshNq43 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-2OUqfMiXiXshNq43 .icon-shape p,#mermaid-svg-2OUqfMiXiXshNq43 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-2OUqfMiXiXshNq43 .icon-shape .label rect,#mermaid-svg-2OUqfMiXiXshNq43 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-2OUqfMiXiXshNq43 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-2OUqfMiXiXshNq43 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-2OUqfMiXiXshNq43 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 运行时 Run-Time
设计时 Design-Time
Bridge: CI/CD 部署管道
监控/反馈
① Agent Factory

设计/构建/评估

输出:版本化 Agent 包(Docker)
② Agent Runtime

执行/扩展/安全(K8s for Agents)
③ Tool Server

集成/解耦/管理

(MCP 网关→企业系统)
④ AgentOps Platform

观察/追踪/治理

(反馈回路)


📌 本段核心收获(一句话版)

  1. 概率性转变 ( 对比图):确定性软件(f(5) 恒等于 10)→ 概率性软件(Agent 可能返回 A 或 B 都有效)------改变一切开发与 QA
  2. ADLC = SDLC + MLOps + 认知实践 :7 步迭代(目标→设计→选型→构建→训练→评估AgentOps)------最难的是两个新阶段。
  3. 评估 = 新测试 ( What vs How 对比图):不测输出测过程 ;黄金测试数据集 + LLM-as-a-Judge ( JSON 评分示例)+ 轨迹分析 = Agent 的 CI/CD;单元测试仍管工具。
  4. AgentOps = Agent 的 DevOps ( 身体 vs 心智对比图):管认知健康 不只系统健康;基础是可追溯性(记录整个推理轨迹);新指标:成本/工具失败/用户情绪/幻觉。
  5. 新威胁模型:注入/滥用/泄漏------传统安全必要但不再充分。
  6. LLM 护栏 = 心智防火墙( 输入/输出时间轴图):输入护栏(防提示注入/清 PII/滤内容)+ 输出护栏(验证工具调用/查幻觉/品牌安全);HITL 与 Ejection/MCP 是落地模式。
  7. 治理靠可观测性:不可变可审计的推理日志------"没有可观测性就没有治理";责任问题(谁为百万美元错误负责)是 C 级议题。
  8. 工具也有生命周期 :manifest.json 是机器可读契约 ------一个善意文字修改 = P0 崩溃;严格版本化不可协商,永不改已发布 manifest。
  9. 参考架构四支柱 ( 白板图 + 双区域图):Factory(设计/构建/评估)→ Runtime(执行/扩展/安全)→ Gateway(集成/解耦/管理)→ Monitor(观察/追踪/治理)------可分析任何厂商产品或自建
  10. 🎉 课程完结:全部学完------从"什么是 Agent"到"企业级 Agentic AI 平台蓝图"。

🏆 整门课总结(全景)

模块 页数 核心
导论 + 进化 1--63 GenAI → AI Agent → Agentic AI(顾问→工人→工厂)
组件解剖 64--172 7 部件 + PRAL 循环 + Research Assistant 实战
多智能体系统 173--217 Orchestration vs Choreography + MAS 四大挑战
Agentic 工作流 218--253 State/Nodes/Edges + 四大编排模式 + LangGraph
框架全景 254--291 三分类:通用/专才/托管 + Build vs Buy
设计模式 292--394 四原则 + 四核心模式 + 四协作模式 + 安全模式
Agentic RAG 395--430 主动研究员循环
通信协议 431--463 ACP / A2A / AG-UI / MCP
MCP 深潜 464--512 4 层拓扑 + 生命周期 + 设计模式
Context 工程 513--542 5 种上下文 + 4 大策略
ADLC 工程化 543--595 评估 + AgentOps + 护栏 + 参考架构

相关推荐
阿图灵1 小时前
Agentic AI 架构入门(十二·完结):ADLC、AgentOps 与企业级平台蓝图
人工智能·架构·ai agent·智能体·agentops·agentic ai·adlc
安逸sgr4 小时前
激活函数有什么用?Sigmoid、Tanh、ReLU 到底怎么选?
人工智能·ai·大模型·agent·智能体
小田学Python14 小时前
100行Python代码,搭一个能干活的AI Agent
python·langchain·大模型·ai agent
jufeng130720 小时前
【系列:手搓自主 AI Agent:Hermes 架构原理剖析 · 第 6 篇】
python·ai agent·记忆系统
鱼日先生1 天前
办公聊天软件接入 Hermes Agent 实录(一):企业微信 WebSocket 长连接 + Dify 知识库问答
企业微信·dify·ai agent·大模型应用·hermes agent
安逸sgr1 天前
RAG 检索到了正确内容,但模型回答仍然错误,可能是什么原因?
人工智能·ai·大模型·agent·智能体
安逸sgr1 天前
神经网络是怎么工作的?从神经元到多层感知机
人工智能·ai·大模型·agent·智能体
FIT2CLOUD飞致云1 天前
学习笔记丨MaxKB原生工作流实现AI PPT生成
人工智能·ai·开源·智能体·maxkb
AI Dog1 天前
MathHub:数学建模学习社区,内置数学建模智能体Modulus
学习·数学建模·智能体·modulus·数学建模智能体