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 应用
课程内容地图
将要学习:
- What are AI Agents?(Agent vs. Agentic AI)
- Agent 的组件组成
- Agentic Loop(感知 Perception、推理 Reasoning、行动 Action、学习 Learning)
- Agentic 架构在系统层面如何工作
- 多智能体协作
- Agentic 工作流:Orchestration(编排)vs. Choreography(编舞)
- 框架:LangChain、LlamaIndex、Microsoft Agent Framework
- 设计模式: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 协同处理复杂任务 → 输出结果
人类介入从"全程参与"变为"只给目标"。
📌 本段核心收获(一句话版)
- 整门课在讲一件事:怎么把"你问它答"的 AI,升级成"能自己干活、多角色协作"的智能体系统。
- 主线案例:E-Shop 电商微服务 → 加一层 Agentic Layer,让用户"说目标"而不是"点按钮"。
- 三个阶段的记忆钩子:顾问(被动问答)→ 工人(有了手和笔记本)→ 工厂(多员工协作)。
- 进化方向:人工干预越来越少(More → Less Human Intervention),系统自主性越来越强。
- 预告了全部核心模式:Router & Specialist、Tool Use、HITL、ReAct、Reflection、Handoff、Agentic RAG、Context Engineering、MCP------后面 500 多页逐一展开。
- 后续预告:进入正题------"什么是 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 = 不断重复三步循环:
- **感知(Perceive)**其环境
- **推理(Reason)**做决策
- 行动(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(绿灯)
- 开放式、定义不明确的问题
- 多步骤、多工具流程
- 动态环境
- 需要随时间改进
- 对话式、协作式界面
深潜:两类典型问题
- 开放式问题:步骤序列事先未知,传统代码无法硬编码工作流;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 的判断结构。
- 任务简单且确定?→ 脚本/函数
- 任务复杂但步骤明确?→ 工作流(Workflow)
- 任务复杂、开放式、动态环境?→ 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 任务:不是简单问答,需要两步:
- 获取外部数据(天气)
- 基于数据推理(是否带伞的建议)
架构:组件如何连接(本段最重要的图)
#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 任务的最小单元。
📌 本段核心收获(一句话版)
- Agent 的定义 :数字员工 = 感知→推理→行动 的循环(Agentic Loop),由目标驱动而非指令。
- 4 原则记忆钩子:目标驱动 + 自主 + 反应 + 主动(Goal、Autonomy、Reactivity、Pro-activeness)。
- 生成式 AI vs Agentic AI:被动回答 vs 主动追求目标;LLM 从"骨干"变成"推理引擎";人类从"每步在场"到"只给目标"。
- 选择框架 :简单确定→脚本;复杂但步骤明确→工作流;复杂开放动态→Agent 。自问:"我是在敲钉子,还是造书架?"
- Agent 三件套首次同框:LLM + Tools + Memory------后面逐组件深挖的预告。
- 五大挑战 = 架构师的五大职责:非确定性、安全护栏、成本延迟、可观测性、幻觉------它们像标签一样压在同一个核心架构上。
- Weather Agent:取数(工具)+ 推理(LLM)= Agentic 任务最小单元,是后面所有实战的原型。
- 下一个里程碑:逐个深挖 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(聊天):文本处理器清洗 → "my new shirt has a hole in it"
- 感知2(图片):视觉处理器分析 → "一张蓝色 T 恤照片,左袖有 2 英寸裂口"
- 输出给大脑的干净文本:用户的新衬衫有个洞 + 具体描述
📐 |组件 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。
- 告诉 LLM 有哪些工具:把 schema(函数列表)放进 prompt
- LLM 计划一次调用:输出匹配 schema 的结构化 JSON
- 我们的系统执行:应用代码收到 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 观察
查看结果
最终回答
- 大脑(LLM):计划"我需要天气"→ 生成 JSON
{"call": "get_weather", "location": "Paris"} - 行动模块(调度器):接住 JSON,"大脑想要工具"
- 行动模块(手):执行真实函数
get_weather("Paris") - 工具:返回
{"temp": "15C", "condition": "Cloudy"} - 行动模块(手):把结果作为"感知"喂回 LLM
- 大脑(LLM):巴黎 15°C 多云------现在可以回答用户了
架构总图
与同款架构图:User → Reasoning → Final Answer;中间 Weather Agent(LLM + Tools)→ Tool Call → Weather Data。七组件装配在同一张架构上。
安全与护栏(本模块最重要主题)
噩梦场景 :目标"清理测试库的旧用户"→ Agent 的"合理"计划是 DELETE /users → 结果误删了生产库!
配图:红白相间路障图案(安全屏障的视觉隐喻)+ 人类图标(HITL)。
三大护栏:
- 最小权限原则:绝不给"万能钥匙"(如 run_python_script);天气 Agent 只该有 get_weather
- 读优先 vs 写:强烈倾向读工具;对写工具(send_email、delete_record)极度谨慎
- 人类介入确认(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 返回错误、销售邮件无人回复
更新机制(由浅入深)
- 更新记忆(LTM) :反馈"这个事实错了" →
vector_db.delete(fact_id) - 更新规划:反馈"这个 5 步计划失败了" → 在 LTM 存 memo"别再试这个计划"
- 更新效用函数(最先进 = 强化学习):反馈"用户讨厌最快但收费的路线" → 给"收费路"调高负权重
垃圾邮件过滤器实例:
- 演员规则:IF 主题含 "report" THEN 放收件箱
- 结果:垃圾邮件主题"Free Report on Drugs"被放行了
- 反馈:你标记为垃圾 → 学习元素分析邮件文本
- 更新:规则变成
IF ("report") AND NOT ("Drugs") THEN 收件箱
🗣️ |组件 7:声音------Agent 通信
听众问题:两种通信
右上角示意图:两个软件 Agent 之间用结构化数据通信。
| Agent→人类 (A2H) | Agent→Agent (A2A) | |
|---|---|---|
| 听众 | 终端用户 | 另一个软件 Agent |
| 格式 | 非结构化自然语言 | 结构化无歧义数据 (JSON) |
| 目标 | 有帮助、共情、易懂 | 精确、机器可读、高效 |
A2H 深潜
这是推理循环的最后一步 = 一次"综合(Synthesis)"调用:
- 工具循环已完成;内部状态:
{"goal": "订巴黎机票", "result": {"id": "TK-123", "status": "CONFIRMED"}} - 综合提示词:"你是友好旅行助手,内部系统刚完成用户的请求,请用友好自然的方式告知"
- 最终声音:"好消息!您的巴黎航班已订好,确认号 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;} 再搜索
- 灵魂 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。
- 定义"灵魂"(System Prompt)
- 选"大脑"(LLM)
- 定义"手"(web_search 工具)
- 架构"记忆"(短期 scratchpad)
- 写"循环"(编排代码)
逐步实现
- 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 的"操作系统/心跳":
- Perception 感知:"网关"------如何感知世界
- Reasoning 推理:"大脑"------如何思考规划
- Action 行动:"手"------如何影响世界
- 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 感知病人数据流/用病史+专业搜索推理/用开检查单+推荐治疗行动。
📌 本段核心收获(一句话版)
- Agent = 7 部件:🧠大脑 → 👁️感官 → 📐军师 → 📓笔记本 → 🖐️手 → 🔄反馈环 → 🗣️声音,逐个可独立设计。
- 大脑:LLM = CPU;System Prompt = 操作系统;CoT/ReAct 让"预测下一个词"变成"推理";选型三角 = 能力×成本×速度。
- 感官:世界是混乱多模态的,感知模块是"翻译官"------归一化成干净文本(第一次数据变换)。
- 军师 :复杂目标要分解成计划;Plan = 工具调用序列的数据结构;CoT 静态规划 vs ReAct 动态规划;"想"与"做"分离是核心原则。
- 笔记本 :STM(上下文窗口)最贵最有限;LTM(数据库)解决"土拨鼠之日";RAG = STM↔LTM 的桥;向量库存"语义"。
- 手 :工具 = 聊天机器人与 Agent 的分水岭;函数调用 = 大脑↔手的桥梁;安全三原则:最小权限、读优先、HITL 确认------护栏不是附加品,是核心设计。
- 反馈环:双循环(性能环+学习环);Critic 评估 + Learner 更新;从更新记忆→更新计划→强化学习逐级进阶。
- 声音:对人对 Agent 要"说不同的语言"------A2H 自然语言(综合提示词),A2A 结构化 JSON(协议如 MCP)。
- Research Assistant 五步配方:灵魂→大脑→手→记忆→循环,就是"从零建 Agent"的通用流程。
- PRAL = Agent 的心跳 :感知(归一化)→推理(出 JSON 计划)→行动(执行+闭合循环)→学习(复盘改进);ChatGPT 与医疗两个案例证明它在数字域和物理域同样适用------医疗案例里最终决策必须 HITL(医生批准)。
- 下一段预告:多智能体时代------单 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 系统很难:
- 可扩展性:怎么管理 10,000 个并发运行的 Agent?
- 可靠性与韧性:Agent 任务中途失败怎么办?系统怎么恢复?
- 可管理性与治理:怎么监控、调试、保护非确定性 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 + 并行)------
- 场景:伦敦地震后协调应急服务;目标:评估损毁、定位受害者、高效派遣援助
- 编排流程:
- 事件:检测到地震
- Coordinator_Agent 计划:评估损毁/找受害者/预测风险/派遣援助
- 并行委派:Satellite_Agent.analyze_imagery + Social_Media_Agent.scan_feeds + Simulation_Agent.predict_aftershocks
- 接收综合:更新共享态势图(记忆)
- 优先级判定:找最危急区域 → 委派 Logistics_Agent.dispatch_unit("ambulance", ...)
- 循环:持续监控专才更新并重新排序
- 要点: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。
总结:系统本身就是挑战
- 可观测性:调试分布式思维
- 涌现:管理不可预测的系统行为
- 通信:确保可靠的 Agent 间消息
- 冲突:处理资源争用与目标冲突
解决这四大问题 = 设计健壮 Agentic AI 架构的核心
📌 本段核心收获(一句话版)
- 视角升级 :从"Agent 心理学"(单 Agent 怎么想)到"Agent 社会学"(多 Agent 怎么协作)。
- 定义:AI Agent = 组件(工人/自由职业者);Agentic AI = 系统(工厂/软件公司);MAS = 多专才大脑 + 共享环境 + 共同目标。 一图看懂:单个机器人 vs 一群机器人。
- Agent-as-a-Service:把 Agent 当长期运行、有状态、有端点的微服务------进入微服务世界的一等公民。
- 两大协调模式:Orchestration(经理,集中控制,简单但单点故障)vs Choreography(事件总线,去中心化,灵活但难调试)。选型看:是否需要中央控制与综合?→ 编排;是否去中心化事件驱动?→ 编舞。
- 三个真实案例:E-Shop(编排:客服 Agent 串起库存/折扣/下单)、救灾(编排+并行:卫星/社媒/模拟三路并行)、供应链(编舞:事件链 ORDER_CONFIRMED → STOCK_LEVEL_UPDATED → SHIPMENT_SCHEDULED)。
- MAS 四大挑战:可观测性、涌现行为、通信失败、目标冲突------都是"系统级"新问题,不是单 Agent 问题的放大。
- 下一段预告: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 工作流三大特性
- 有状态(Stateful) :维护"状态/草稿本"(记忆)在步骤间传递,如
{"user_query": "...", "research_data": "..."} - LLM 驱动(推理):路由/逻辑不是静态 if/else 块,而是 LLM 调用------推理当前状态选下一步
- 非确定性(自适应) :因为 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 Agent → Summary Agent → Finish(粉色圆圈)------节点间箭头标注 Edge。
- Start:工作流收到查询 → 填入 State
- Edge(路由器):经理 LLM 看 State → "这需要研究" → 路由到 ResearchNode
- Node(工人) :ResearchAgent 从 State 读查询 → 跑工具 → 把
research_data写回 State - Edge(路由器):经理 LLM 再看 State → "现在有数据了,需要总结" → 路由到 SummaryNode
- Node(工人) :SummaryAgent 读
research_data→ 运行 → 把summary写回 State - 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 Search → Joiner(合并器) → 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 Manager → Writer Agent ↔ Critic Agent ↔ Formatter Agent(互相循环)→ Result
- 适用:高质量生成、复杂问题求解、自我纠正
模式总结(选型)
| 模式 | 适用 |
|---|---|
| 顺序交接 | 简单、线性、可预测任务 |
| 并发/并行 | 独立任务要速度效率 |
| 磁性路由 | 灵活、自适应、有状态的单 Agent 工作流 |
| 群聊/辩论 | 高级、协作、迭代的多 Agent 任务 |
架构师的关键洞察:你会组合使用这些模式来构建应用
代码优先框架:LangGraph
为什么不直接写 Python?
状态图比看起来难:
- 管理状态:怎么可靠地在步骤间传递"草稿本"并保持同步?
- 处理循环 :磁性路由和群聊是循环的,简单 if/while 会变成深层嵌套的脆弱代码("意大利面条代码")
- 非确定性: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"(名字+指令+工具),平台管状态和路由 |
为什么架构师选低代码
- 上市速度:几小时交付可用原型,而非几周
- 可及性与赋能:非开发者能自建自测自维护,释放资深工程资源
- 减少基础设施负担:平台管服务器、扩展、运行时
- 强制最佳实践:平台强制模块化图设计,防"意大利面条代码"
低代码的隐藏成本
- 灵活性与表达力受限:想要自定义"群聊/辩论"模式?只能用平台给的节点和模式
- 供应商锁定:整个业务逻辑被平台拥有,迁移 = 完全手动重写
- "黑箱"问题:坏了你能调试吗?对状态、提示词、错误处理控制更少
- 规模成本:大规模下自运维的 code-first 几乎总比 SaaS 按次付费便宜
架构师决策框架
底部四个产品 logo:Zapier、Make、n8n、Langflow(低代码阵营代表)。
用 LOW-CODE(n8n、Flowise、GPTs)当:
- 快速验证想法(还没投入工程资源)
- 自动化非关键业务流程
- 任务可预测、符合"顺序交接"模式
用 CODE-FIRST(LangGraph、Autogen)当:
- 逻辑是你的知识产权
- 需要"磁性路由"或"群聊"模式
- 需要完全掌控优化和基础设施成本
📌 本段核心收获(一句话版)
- 传统 vs Agentic 工作流 :人类预定义路径(静态流程图,遇歧义就崩)vs LLM 运行时决定路径(自适应项目经理)。 三图并排:自动化流水线 / 单次问答 / 计划-执行-反思循环。
- 工作流三要素(任何框架通用) :State (草稿本=唯一事实来源,JSON 示例一目了然)+ Nodes (无状态模块化工人们)+ Edges(LLM 驱动的路由器=项目经理)。 全局状态图:所有节点共享读写一个 State。
- 工作流核心循环 :Start→Edge 判断→Node 干活写回 State→Edge 再看→...→Finish------State 就是连接所有步骤的记忆。
- 四大编排模式 ( 各配流程图):流水线(顺序交接,Research→Summary→Email)/ 多任务者(并行分叉 Web/DB/文档搜索→Joiner 合并)/ 磁性路由(每步后中央 LLM 经理重新路由 + Task Complete 判断,最常用)/ 会议桌(Group Manager + Writer/Critic/Formatter 循环,自我纠正)。
- LangGraph:专为有状态、循环工作流设计的 Python 库(State→StateGraph、Nodes→add_node、Edges→add_edge)------是"工作流框架"不是"Agent 框架"。
- 低代码三阵营:传统自动化(n8n/Zapier/Make)、可视化图构建(Flowise/Langflow)、一站式 Agent 构建(GPTs)。 决策框架页列了四个 logo。
- 选型:快速验证/非关键/顺序模式→低代码;知识产权/磁性路由/群聊/成本控制→Code-First。
- 下一段预告:AI Agent 框架全景------LangChain/LangGraph、LlamaIndex、微软 Agent 框架、云平台(Bedrock/Azure/Google)、Build vs Buy。
第 6 篇
框架全景与三分类地图
为什么需要框架?
- 裸调 LLM API、手动解析 JSON、手工搭状态机------不可维护
- 要了解框架版图,为业务选对地基
样板代码问题(Boilerplate Problem)
"一个 Agent 就是简单循环......直到你加上'管道(plumbing)'":
- 工具调用与解析:格式化工具 schema;解析 LLM 非确定性的 JSON 输出;处理调用失败
- 状态管理:可靠地在循环迭代间传递聊天历史/草稿本
- RAG 管道:连接数据、切块、嵌入、存储、检索文档
- 提示词管理:模板化、管理、链式组合复杂提示词
架构师地图:工具三大类
三分类 + 底部 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 的两大关键组件
- 工具装饰器(@tool):一个装饰器把任意 Python 函数变成 LLM 可调用的"工具",自动处理复杂 JSON schema 生成
- 预构建"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 库、再综合结果怎么办?
LlamaIndex vs LangChain( 左右 logo 对比)
| 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
三大云平台( "Agents in the Cloud" logo + 三云 logo)
| 厂商 | 产品 | 特点 |
|---|---|---|
| Amazon | Bedrock Agents | 深度集成 Lambda/S3/DynamoDB,用 Bedrock 模型库 |
| Microsoft | Azure AI Foundry | 构建/管理/部署 Agentic 应用,集成 Azure Functions、AI Search |
| Cloud Agent Builder(Vertex AI) | 统一平台,连接 Google 生态 |
它们的目标:把你留在它们的生态里
5 步配方回顾( 流程图:灵魂/大脑/手/记忆/循环)
与同款:System Prompt(灵魂)→ LLM(大脑)→ web_search(手/工具)→ Memory(记忆)→ Loop(循环)。
PROS(买的好处)
- 全托管 + 自动扩展:零基础设施负担(第一业务驱动力)
- 深度云集成:最容易让 Agent 访问现有云资源(S3/DynamoDB/Azure Functions),自动处理 IAM 权限和凭证
- 上市速度:几小时搭好简单、稳健、安全的 Agent
- 安全合规:自带父云的内置日志/监控/合规(HIPAA、SOC 2)
CONS(买的代价)
- "黑箱"推理 (关键缺点):看不到/控制不了 Agent 如何推理(它的 ReAct 提示词);不能定制错误处理和重试;调试"卡住"的 Agent 几乎不可能
- 极端供应商锁定:Agent 是特定云的 API,不可迁移
- 有限灵活性 :建不了我们学的高级模式(群聊、磁性路由)------你被限制在它们定义的简单单循环 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)
- 通用类(LangChain):最大灵活性和自定义"自己造"逻辑
- 专才类(LlamaIndex、MAF):预构建方案解决特定难题(最佳 RAG / 最佳多智能体协作)
- 托管类(Bedrock、Azure、Google):买成品,配置即用(简单、快速、全托管)
📌 本段核心收获(一句话版)
- 框架存在的理由:样板代码(工具解析/状态管理/RAG 管道/提示词管理)太多,裸写不可维护。
- 三分类地图(Mermaid 决策图):通用工具箱(车间)/ 专才框架(高端机器)/ 托管平台(全包工厂)。
- LangChain = 可组合车间 :LCEL 管道胶水 + @tool 装饰器 + 预构建执行器;LangGraph = 白箱工作台:State/Nodes/Edges 全显式------解决执行器黑箱问题。
- LlamaIndex = 数据优先 :连接器+智能索引+查询引擎+RAG 管道;Agentic RAG = 把多个查询引擎当工具的 Agent(Mermaid 图:先 SQL 后 PDF 再综合)。
- MAF = AutoGen(多智能体模式)+ Semantic Kernel(企业级)合体(Mermaid 合并图):图工作流、类型化路由、检查点、HITL、MCP 一等公民。
- 托管平台三巨头 :Bedrock / Azure AI Foundry / Vertex AI------全托管+云集成+合规,但黑箱推理+供应商锁定+灵活性受限。
- Build vs Buy 口诀(Mermaid 决策树):简单内部任务→买;复杂自定义/多智能体/逻辑是核心竞争力/要多云→建。
- 下一段预告: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。
- Schema(工具说明书) :JSON 描述------①
name:函数名(get_weather)②description:最重要 ,清晰自然语言描述工具做什么("获取指定城市当前天气")③parameters:参数描述(city: string, "城市名,如 London") - LLM(选择者) :推理------"目标关于天气,get_weather 的描述匹配;目标指定城市 London,工具需要 city 参数"→ 输出结构化 JSON:
{"tool_call": {"name": "get_weather", "arguments": {"city": "London"}}} - Orchestrator(执行者,我们的代码) :①收 JSON ②解析(name/arguments)③映射到真实 Python 函数 ④执行
get_weather(city="London")⑤把结果("25°C")返回 LLM 进入下一循环
架构含义
- 工具描述就是提示工程:描述质量决定工具会不会被用------坏描述 = 工具永远不会被调用
- 安全与校验 :Orchestrator 必须是安全门------验证 LLM 的所有参数,绝不直接信任 LLM 输出(防 SQL 注入)
- 错误处理: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(内部自我改进循环,用户看到前已迭代)
架构含义与小结
- 贵:每个反思循环至少多一次 LLM 调用------成本和时间可能翻倍或三倍
- 需要循环编排:线性 chain 实现不了------这正是 LangGraph 存在的意义
- 提示词"人格":要维护两个不同 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 是让所有其他模式协同工作的引擎
架构含义
- 高延迟高成本(最大代价):每步都是完整 LLM 调用,5 步任务 = 5-6 次调用
- 自适应稳健(最大收益):搜索失败,下一循环就知道并重新规划("搜索失败,换一个查询词")
- 复杂编排: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"
架构含义
- 可维护性与模块化(微服务模式) :加 Billing 部门?只需新建隔离的 BillingAgent + 更新 Router 提示词的列表------其他 Agent 完全不受影响(巨大胜利)
- 性能与成本 :Router 调用又快又便宜 (简单分类,不是复杂 ReAct 循环);只有被选中的那个专才做昂贵的多步工作------不在无关工具/提示词上浪费 token
- 可测试性:每个专才完全隔离测试
- 小结:委派的根本模式,直接实现"专业化"原则------复杂多功能 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(校对语法和语气,输出终稿)
架构含义
- 高可靠高确定(最大收益):LLM 调用序列完全已知、无意外------完美适合自动化已知业务流程
- 简单可测:失败时精确知道哪段交接断了(如 B→C 链)
- 僵硬脆弱(最大代价):链条固定,不能适应意外------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 们都沉默,从不互相说话
- 复杂问题、最佳方案未知、需要讨论批判发现 → "数字会议室"
- 三大组件:
- Specialist Agents(参会者):熟悉的工人(Researcher/Writer/Critic)
- 共享聊天历史(State) :会议室的"白板"------每个 Agent 都能看到所有人的所有消息(共享上下文)
- 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 决定何时求助,由我们定义检查点:
- Agent 规划:Reason 阶段生成计划(如 call_tool('refund_customer', amount=10000))
- Orchestrator 拦截:执行前拦截该计划
- 确定性规则:检查硬编码规则
IF tool_name == 'refund_customer' AND amount > 1000: - 暂停等待:命中 → 转入 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 正常循环
(感知→推理→行动)
📌 本段核心收获(一句话版)
- 模式 vs 框架 :框架是工具(How),模式是蓝图(What & Why)------模式与框架无关,任何框架都能实现。
- 四大设计原则 :目标驱动(为什么)+ 反应性(现在怎么办)+ 有状态(之前发生了什么)→ 自主性(怎么做)------Agent 与普通程序的分界线。
- 四大核心模式递进 :Tool Use (给手)→ Planning (给内心独白)→ Reflection (给内心评论家)→ ReAct(手+独白+循环复合,观察喂回思考 = 自适应)。 每个模式都配了完整工作流图。
- 超级 Agent 是反模式 (提示词渗漏/上下文窗口吃光/单点故障)→ 建"数字团队":专业化 + 并行化 + 辩论批判 三大力量。
- 四大协作模式:Router & Specialist(交警分类派活,默认首选)/ Handoff(固定流水线,可靠但僵硬)/ Group Chat(会议室,质量最高最贵)/ Swarm(蜂群 MapReduce,海量并行,Worker 间不能通信)。
- 非确定性是架构师噩梦 → 护栏不是笼子:要"安全自主"。
- HITL :"你确定吗?"------检查点拦截 + 确定性规则 + 人类审批;阈值是核心业务决策;Agent 建议,人类决定。 退款工作流全程图示。
- Ejection :"红色停止按钮"------预检过滤器(在感知之前、绝不能放提示词里)检测停止词/违规(含 "human" 就转实时聊天)→ 确定性覆盖。
- 下一段预告: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 生成]
- 用户查询:"我们 Q3 营收多少?"
- 嵌入:查询转成向量(数字列表)
- 搜索:用向量找向量库中 Top-K(前5) 最相似的文本块
- 塞入:原始文本块"塞"进 LLM 的提示上下文
- 生成:LLM 只用给定文本回答
核心问题:RAG "被动又笨"
右侧流程图:Unstructured Data → Embedding Model → Vector DB → Knowledge Base(数据单向流动,无反馈回路)。
管道不能自己思考:
- 单次检索(One-Shot):只搜一次------Top-K 结果差或无关,整个过程就失败
- 不能自我纠正:LLM 不能"顶嘴"检索器------不能说"这些搜索结果没用,换个查询词再搜"
- 复杂多步问题直接失败:查询"对比我们 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?
查询需要以下三要素之一:
- 分解(Decomposition):复杂查询要拆成多部分("对比 X、Y、Z")
- 策略(Strategy):模糊查询要翻译成具体计划("分析情绪...")
- 反思(Reflection):多步过程需要自我纠正("总结共识...")
📌 本段核心收获(一句话版)
- 传统 RAG = 单向链条 :Query→Embed→Search→Stuff→Generate,每步一次------被动、笨、脆弱(第一步检索失败就全盘崩)。 两条管道图(文档处理链 + 查询链)。
- 三大缺陷:单次检索 / 不能自我纠正 / 复杂多步问题失败------只能做"查表",不能做"研究"。
- Agentic RAG = 主动循环 :LLM 从链条末端变成总编排者 ------Reason→Act→Perceive→Reflect 循环 = ReAct 应用到研究。 Answer Before? 决策 + 子查询分解工作流。
- 三大超能力对症下药:多步检索(解单次)、反思自纠(解笨)、自主规划(解复杂)。
- 对比三连:过程(链 vs 环)、智能(笨 vs 反思, 左右对比图:LLM No Choice vs Reflection+Critique)、权衡(快便宜简单 vs 慢贵复杂)------经典"看情况"。
- ** 笨助理 vs 资深研究员**:取最先 5 本就递过去走人 vs 主动研究分析------一张图记住两者区别。
- 选型:查表任务(PTO 政策问答)→ 传统 RAG;研究任务(对比/情绪分析)→ Agentic RAG。
- 主动研究员循环实例 :先搜"已知的未知"(发布日期)→ 用新知识做更聪明的第二次搜索 → 综合答案------循环 2 的查询只可能来自循环 1 的收获。
- 三大用例:对比研究(分解)、尽职调查(策略制定)、文献综述(反思)------需要分解/策略/反思时就用 Agentic RAG。
- 下一段预告: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"......每个服务说着自己的语言,混乱不堪。
- 短期修复,长期架构债务巨大。结果:
- 供应商锁定:OpenAI 的 Agent 被锁进 OpenAI 生态
- N 平方问题 :连接 100 个 Agent 需要约 5,000 个自定义集成
- 根本上不可扩展:无法扩展到全球 Agent 网络
解决方案:什么是"Agent 协议"?
- 正式规范("共同语言"/"社会契约"),定义自主 Agent 和工具如何:
- 发现彼此(Discover)
- 描述能力("这是我的工具和它们做什么")
- 通信("请帮我跑这个任务")
- 交换上下文(状态、记忆、用户 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 实际定义了什么规则?
四大规则板块:
- Task Management(任务管理):标准定义"任务/子任务/目标"
- State Synchronization(状态同步) :标准方式报告任务状态(Pending 待处理 / Running 运行中 / Completed 已完成 / Failed 失败)
- Discovery & Capabilities(发现与能力):标准 "manifest" 宣传工具/技能
- 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 开始
完整协议栈
三层结构(完整架构需要全部三层):
- BACKEND(A2A)(绿色):内部协作与编排
- INTEGRATION LAYER(MCP)(橙色):连接企业数据与服务
- 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)
📌 本段核心收获(一句话版)
- 协议问题 :没有共同语言 → "巴别塔"------ 各服务说着自己的"方言"(Function-calling dialect / MAF dialect / Custom REST API)→ 供应商锁定 + N² 问题(100 Agent 要 5,000 集成)+ 不可扩展。
- Agent 协议 = "社会契约":发现彼此 / 描述能力 / 通信 / 交换上下文------目标互操作性、解耦大脑与功能。
- 四大协议各管一段:ACP(一切,重量级)/ A2A(Agent 对话,轻量)/ AG-UI(Agent 到人界面)/ MCP(Agent 到工具集成)。
- ACP 四大规则():任务管理(任务/子任务/目标)+ 状态同步(Pending/Running/Completed/Failed)+ 发现与能力(manifest)+ 工件与数据交换------覆盖 A2A/A2T/A2E/A2H。
- A2A :"Agent 的邮件"------ 消息 schema(sender/recipient/session/content)+ 言语行为(REQUEST/INFORM/PROPOSE),专为群聊/交接/反思协作;能建联邦式系统。
- AG-UI :"智能体时代的 HTML"------生成式 UI: Agent 声明"我需要一个按钮",卡片在 Teams/Slack/Web/Mobile 各自渲染(平台无关);对 HITL 安全和体验至关重要。
- MCP :"Agent 的 OpenAPI"------manifest.json 工具发现;企业集成的解耦关键。
- 协议地图():协作问题(A2A)+ 集成问题(A2T)= 两个不同问题;ACP 是"超集"两者都解决。
- 决策矩阵 :让 API 被任何 Agent 消费→MCP ;自家团队协作→A2A 内部标准;从零建生态→ACP。大多数企业从 MCP 开始。
- 完整协议栈三层():BACKEND(A2A 协作)+ INTEGRATION(MCP 工具)+ FRONTEND(AG-UI 界面)------现代 Agentic 系统三件套。
- 下一段预告 :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)
小结:规范四件套
/.mcp/路径:可发现的前门- manifest.json:LLM 的用户手册(定义做什么和怎么做)
- call 端点:执行机制(JSON in, JSON out)
- 安全:复用标准 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?)
两个问题
- 噪音与 token 成本 :你的 E-Shop OpenAPI 规范可能有 5,000 行------全塞进 LLM 上下文太贵
- "开发者语言" 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 规范,指望它都集成
- ✅ 正确做法(网关模式):
- 建一个 MCP 网关 server :
https://api.my-eshop.com - 它的 manifest.json 同时定义
get_product_details和get_order_status - Agent 调
get_product_details→ 网关路由到 Inventory - 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
manifest 定义两个工具
Inventory 库存服务
Orders 订单服务
小结:从理论到蓝图
- Adapter 模式 :有一个遗留系统要暴露 → "翻译"调用给一个特定系统
- Gateway 模式 :有很多微服务 → "路由"调用到许多不同系统
📌 本段核心收获(一句话版)
- MCP = 解耦标准:企业最紧迫的集成问题,防止供应商锁定。
- 4 层拓扑 (架构师最核心概念, 1 Host→多 Client→多 Server→多数据源扇出图):Client(大脑,发起)/ Protocol(标准语言 JSON-RPC,Stdio/SSE)/ Server(适配器,翻译,无 LLM 确定性 )/ Data Source(现实,API Key 藏在 Server 侧)------线性管道。
- 规范两大支柱 :发现(manifest.json +
/.mcp/知名路径)+ 执行(call 端点 JSON in/out)。 - 四大核心概念 :
/.mcp/路径(Agent 界的 robots.txt 前门)/ manifest.json(LLM 用户手册, 完整 JSON 示例)/ call 端点(执行)/ 安全(复用标准 Authorization 头, Bearer 验证流程)。 - 生命周期 4 步握手 ( 各步请求示例):敲门(发现)→ 菜单(读 manifest 注入上下文)→ 点单(Agent 按 schema 自动写 JSON body)→ 上菜(返回 JSON 进循环)。
- MCP vs OpenAPI :OpenAPI = 5,000 行技术蓝图(给人),MCP = 精选语义菜单(给 LLM)------不替代,是门面(Facade)。
- 两大模式( 电源适配器类比图 + 网关路由图):Adapter(1 个遗留系统,翻译)/ Gateway(50 个微服务,路由)。
- E-Shop 案例:一个 MCP 网关同时暴露库存+订单工具,伙伴 Agent 只需一个工具,内部完全解耦。
- 下一段预告 :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)"
每个循环都要执行的代码:
- 抓取 Static(人格)
- 接收 Dynamic(查询)
- 获取并截断 Episodic(历史)
- 跑 RAG 获取 Retrieved(文档)
- 查数据库获取 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"的策略
工具箱总结
- 溢出管理:滑动窗口 + 摘要(管历史)
- 压缩:用 LLMLingua 等工具缩小上下文
- 重排序:对抗 RAG 的"迷失在中间"
- 范围化:动态选择显示什么(如工具)
两大用例(为什么要这么费劲?)
用例 1:超个性化(Hyper-Personalization)------
- 目标:认识用户的 Agent------从通用"聊天机器人"变成真正的"个人助理"
- 实现:工程化 Stateful Context(用户画像)
用例 2:动态"专家"Agent------
- 目标:单个中央 Agent 处理多个不同专家领域(法律、金融、HR)
- 实现:工程化 Contextual Scoping(动态切换人格、工具和 RAG 索引)
总结:架构 > 提示词
- 这些用例不是"魔法提示词"的结果------是深思熟虑的信息架构的结果
- 超个性化 = 工程化有状态上下文(用户画像)
- 动态专家 = 工程化范围化(换人格/工具/RAG 索引)
这才是 Context Engineering 的真正力量与目的
📌 本段核心收获(一句话版)
- 上下文 = 每轮发给 LLM 的整个信息载荷( 五方块组成图)------必须塞进有限窗口。
- 写作 vs 工程:手动静态一次性 vs 系统化动态程序化------从"文字工匠"到"系统架构师"。
- 架构师使命 :LLM 是商品、框架是开源------你的核心竞争力是"上下文装配系统"。
- Prompt vs Context 六维对比:字符串 vs 系统 / 指令 vs 信息流 / 手动 vs 程序化 / 单提示词 vs 整个窗口 / 无状态 vs 有状态循环 / 写手 vs 信息架构师。
- 5 种上下文类型 ( 中心辐射图 + 每类实例):静态(灵魂)/ 动态(触发器)/ 情景(短期记忆,会增长要管理)/ 检索(RAG 外部知识)/ 有状态(长期记忆画像,最强大最工程化, Mehmet 用户画像示例)。
- Context Assembler:每循环装配 5 类上下文成优化载荷------架构师的核心工件。
- 4 大策略 :溢出管理(滑动窗口✅快❌丢早期对话 / 摘要✅留大意)/ 压缩(小型 LLM,LLMLingua)/ 重排序( 注意力曲线:对抗 Lost-in-the-Middle,高相关文档移到末尾)/ 范围化( 分类器从 200+ 工具动态选 3 个,最 Agentic)。
- 两大用例:超个性化(Stateful 画像)+ 动态专家(Scoping 换人格/工具/RAG 索引)。
- 核心论断:架构 > 提示词------魔法来自信息架构,不是魔法词。
- 下一段预告 :ADLC(Agent 开发生命周期)------概率性软件 vs 确定性软件、7 阶段、评估挑战、AgentOps、LLM 护栏、参考架构。
第 12 篇(收官)
ADLC:Agent 开发生命周期(7 阶段)
什么是 AI Agent 开发 + 概率性转变
- AI Agent 开发不是"提示词工程"或"模型训练" ------是构建、测试、治理、管理自主目标驱动软件系统的正式工程学科
- 核心挑战:概率性转变(Probabilistic Shift)( 左右对比图):
- 旧路(确定性 SDLC):
Input X → f(x) → Output Y,f(5) 永远返回 10,返回 11 就是 bug------测试二元正确性(Pass/Fail) - 新路(概率性 ADLC):
Goal → Agent(Goal + Context) → Result,可能返回结果 A 或 B,两者都可能是有效的 ------天生非确定性,这改变了一切开发和 QA 方式
为什么传统 QA/DevOps 失效 → ADLC
- 传统工具测不了"推理"、监控不了"困惑"
- ADLC = SDLC + MLOps + 新的"认知"实践------为管理概率性软件而生的新正式流程
7 阶段总览
ADLC 迭代循环图(右上角:目标设定→...→部署监控的循环流程)。
- Goal Setting & Scoping(目标设定与范围):定义 Agent 做什么、不做什么------目标会成为 System Prompt 的技术部分
- Design(设计)
- Framework, Model & Tool Selection(框架/模型/工具选型)
- Build(构建)
- Training(训练,可选)
- Evaluation(评估 = 新的"测试")
- 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;} 迭代
- 目标与范围
- 设计
- 框架/模型/工具选型
- 构建
- 训练(可选)
- 评估
- 部署与监控 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 管道
- 单元测试(确定性) :测工具(你的
add(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 响应)
两个安全模式
- HITL :输出护栏检查"高风险"动作------能移动资金或修改关键数据的不可协商模式
- 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
最佳实践
- 严格版本化(非协商) :v1 Agent 继续工作,v2 Agent 用"改进"的新工具------"DevOps 101"纪律。永远不要改一个已发布的 manifest
- 安全与部署:像保护任何关键任务微服务一样保护和监控 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
观察/追踪/治理
(反馈回路)
📌 本段核心收获(一句话版)
- 概率性转变 ( 对比图):确定性软件(f(5) 恒等于 10)→ 概率性软件(Agent 可能返回 A 或 B 都有效)------改变一切开发与 QA。
- ADLC = SDLC + MLOps + 认知实践 :7 步迭代(目标→设计→选型→构建→训练→评估 →AgentOps)------最难的是两个新阶段。
- 评估 = 新测试 ( What vs How 对比图):不测输出测过程 ;黄金测试数据集 + LLM-as-a-Judge ( JSON 评分示例)+ 轨迹分析 = Agent 的 CI/CD;单元测试仍管工具。
- AgentOps = Agent 的 DevOps ( 身体 vs 心智对比图):管认知健康 不只系统健康;基础是可追溯性(记录整个推理轨迹);新指标:成本/工具失败/用户情绪/幻觉。
- 新威胁模型:注入/滥用/泄漏------传统安全必要但不再充分。
- LLM 护栏 = 心智防火墙( 输入/输出时间轴图):输入护栏(防提示注入/清 PII/滤内容)+ 输出护栏(验证工具调用/查幻觉/品牌安全);HITL 与 Ejection/MCP 是落地模式。
- 治理靠可观测性:不可变可审计的推理日志------"没有可观测性就没有治理";责任问题(谁为百万美元错误负责)是 C 级议题。
- 工具也有生命周期 :manifest.json 是机器可读契约 ------一个善意文字修改 = P0 崩溃;严格版本化不可协商,永不改已发布 manifest。
- 参考架构四支柱 ( 白板图 + 双区域图):Factory(设计/构建/评估)→ Runtime(执行/扩展/安全)→ Gateway(集成/解耦/管理)→ Monitor(观察/追踪/治理)------可分析任何厂商产品或自建。
- 🎉 课程完结:全部学完------从"什么是 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 + 护栏 + 参考架构 |