Agent 参考架构
定位 :将
05-architecture/architecture-views六视图方法论 扩展为 Agent 系统的 七视图 (业务 / 应用 / 数据 / 部署 / 安全 / 集成 / 演进),供 Staff / Architect 白板、评审与落地对齐。
0. 面试前 30 分钟 Checklist(Staff / Architect)
| 时间盒 | 动作 | 产出 |
|---|---|---|
| 5 min | 背 七视图一句话(§1.2) | 能按序点名 7 张图 |
| 5 min | 白板 应用视图 七块(§3) | 控制面/数据面/护栏/观测/记忆/工具/路由 |
| 5 min | 画 演进阶梯(§8) | 单 Agent → 多 Agent → +Workflow → Mesh |
| 5 min | 口述 集成三板斧(§7) | API 同步 + Kafka 异步 + Outbox 写副作用 |
| 5 min | 准备 1 个 STAR-M-P(§12) | 含 M(机制修复)与 P(指标) |
| 5 min | 过 Master P0(§13)标红 3 项 | 知道回哪篇补课 |
开场金句(90s):
「Agent 不是 Chatbot 加长上下文,而是 带副作用的多步控制器 。我会用 七视图 讲清楚:业务上解决什么能力、应用上控制面与数据面怎么分、数据上 checkpoint 与向量库怎么分、部署上模型 Serving 与 Agent Runtime 怎么扩、安全上四层防御横切、集成上怎么接微服务与 Saga/Outbox、演进上从单 Agent 到 Agent Mesh 怎么分期。」
1. 七视图方法论与六视图映射
1.1 为什么 Agent 需要第七视图「演进」
传统 architecture-views 六视图描述 稳态系统 ;Agent 在 2024--2026 快速迭代------框架、MCP、多 Agent、低代码 Workflow、未来 AI Gateway 并存。演进视图 单独回答:
- 现在 跑什么形态(单循环 / 图 / 多角色)?
- 下一季 迁移路径与兼容契约?
- 技术债 如何量化(prompt 版本、tool schema 漂移、eval 回归)?
其余六视图与 TOGAF Phase C/D 对齐;安全视图横切 所有视图(同母版 §6)。
1.2 七视图一句话速记
| # | 视图 | 核心问题 | Agent 特化关键词 |
|---|---|---|---|
| 1 | 业务 | 做什么、价值在哪 | 能力域、HITL 边界、可验收任务 |
| 2 | 应用 | 谁来做、怎么组合 | 控制面/数据面、Planner、Tool Router |
| 3 | 数据 | 存什么、怎么流 | Checkpoint、向量库、Artifact、Audit |
| 4 | 部署 | 怎么跑、怎么扩 | Runtime Pod、vLLM、GPU/CPU 池、多租户 |
| 5 | 安全 | 怎么防、怎么审 | 注入、工具滥用、PII、策略即代码 |
| 6 | 集成 | 怎么接存量系统 | BFF、Mesh、Outbox、Saga、IDP |
| 7 | 演进 | 怎么分期上 | 单 Agent → 多 Agent → Workflow → Mesh |
1.3 视图依赖关系(总图)
#mermaid-svg-kH9vMXWCOvExmUWk{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-kH9vMXWCOvExmUWk .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-kH9vMXWCOvExmUWk .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-kH9vMXWCOvExmUWk .error-icon{fill:#552222;}#mermaid-svg-kH9vMXWCOvExmUWk .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-kH9vMXWCOvExmUWk .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-kH9vMXWCOvExmUWk .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-kH9vMXWCOvExmUWk .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-kH9vMXWCOvExmUWk .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-kH9vMXWCOvExmUWk .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-kH9vMXWCOvExmUWk .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-kH9vMXWCOvExmUWk .marker{fill:#333333;stroke:#333333;}#mermaid-svg-kH9vMXWCOvExmUWk .marker.cross{stroke:#333333;}#mermaid-svg-kH9vMXWCOvExmUWk svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-kH9vMXWCOvExmUWk p{margin:0;}#mermaid-svg-kH9vMXWCOvExmUWk .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-kH9vMXWCOvExmUWk .cluster-label text{fill:#333;}#mermaid-svg-kH9vMXWCOvExmUWk .cluster-label span{color:#333;}#mermaid-svg-kH9vMXWCOvExmUWk .cluster-label span p{background-color:transparent;}#mermaid-svg-kH9vMXWCOvExmUWk .label text,#mermaid-svg-kH9vMXWCOvExmUWk span{fill:#333;color:#333;}#mermaid-svg-kH9vMXWCOvExmUWk .node rect,#mermaid-svg-kH9vMXWCOvExmUWk .node circle,#mermaid-svg-kH9vMXWCOvExmUWk .node ellipse,#mermaid-svg-kH9vMXWCOvExmUWk .node polygon,#mermaid-svg-kH9vMXWCOvExmUWk .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-kH9vMXWCOvExmUWk .rough-node .label text,#mermaid-svg-kH9vMXWCOvExmUWk .node .label text,#mermaid-svg-kH9vMXWCOvExmUWk .image-shape .label,#mermaid-svg-kH9vMXWCOvExmUWk .icon-shape .label{text-anchor:middle;}#mermaid-svg-kH9vMXWCOvExmUWk .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-kH9vMXWCOvExmUWk .rough-node .label,#mermaid-svg-kH9vMXWCOvExmUWk .node .label,#mermaid-svg-kH9vMXWCOvExmUWk .image-shape .label,#mermaid-svg-kH9vMXWCOvExmUWk .icon-shape .label{text-align:center;}#mermaid-svg-kH9vMXWCOvExmUWk .node.clickable{cursor:pointer;}#mermaid-svg-kH9vMXWCOvExmUWk .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-kH9vMXWCOvExmUWk .arrowheadPath{fill:#333333;}#mermaid-svg-kH9vMXWCOvExmUWk .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-kH9vMXWCOvExmUWk .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-kH9vMXWCOvExmUWk .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-kH9vMXWCOvExmUWk .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-kH9vMXWCOvExmUWk .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-kH9vMXWCOvExmUWk .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-kH9vMXWCOvExmUWk .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-kH9vMXWCOvExmUWk .cluster text{fill:#333;}#mermaid-svg-kH9vMXWCOvExmUWk .cluster span{color:#333;}#mermaid-svg-kH9vMXWCOvExmUWk 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-kH9vMXWCOvExmUWk .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-kH9vMXWCOvExmUWk rect.text{fill:none;stroke-width:0;}#mermaid-svg-kH9vMXWCOvExmUWk .icon-shape,#mermaid-svg-kH9vMXWCOvExmUWk .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-kH9vMXWCOvExmUWk .icon-shape p,#mermaid-svg-kH9vMXWCOvExmUWk .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-kH9vMXWCOvExmUWk .icon-shape .label rect,#mermaid-svg-kH9vMXWCOvExmUWk .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-kH9vMXWCOvExmUWk .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-kH9vMXWCOvExmUWk .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-kH9vMXWCOvExmUWk :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 约束迁移
约束迁移
约束迁移
贯穿
贯穿
贯穿
贯穿
贯穿
贯穿
业务视图
能力 / 价值流 / 验收
应用视图
控制面 + 数据面
数据视图
Checkpoint / RAG / Audit
部署视图
Runtime + Serving
集成视图
微服务 / MQ / Gateway
演进视图
分期 / 兼容 / 技术债
安全视图
横切 STRIDE + Guardrails
Staff 画法顺序(45min 白板推荐):业务(5m) → 应用(10m) → 数据(5m) → 集成(8m) → 部署(5m) → 安全(5m) → 演进(5m) → 风险收尾(2m)。
2. 业务视图(Business View)
2.1 能力地图 L1--L3(Agent 平台视角)
#mermaid-svg-nfUETCjyT5x1ntJl{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-nfUETCjyT5x1ntJl .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-nfUETCjyT5x1ntJl .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-nfUETCjyT5x1ntJl .error-icon{fill:#552222;}#mermaid-svg-nfUETCjyT5x1ntJl .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-nfUETCjyT5x1ntJl .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-nfUETCjyT5x1ntJl .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-nfUETCjyT5x1ntJl .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-nfUETCjyT5x1ntJl .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-nfUETCjyT5x1ntJl .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-nfUETCjyT5x1ntJl .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-nfUETCjyT5x1ntJl .marker{fill:#333333;stroke:#333333;}#mermaid-svg-nfUETCjyT5x1ntJl .marker.cross{stroke:#333333;}#mermaid-svg-nfUETCjyT5x1ntJl svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-nfUETCjyT5x1ntJl p{margin:0;}#mermaid-svg-nfUETCjyT5x1ntJl .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-nfUETCjyT5x1ntJl .cluster-label text{fill:#333;}#mermaid-svg-nfUETCjyT5x1ntJl .cluster-label span{color:#333;}#mermaid-svg-nfUETCjyT5x1ntJl .cluster-label span p{background-color:transparent;}#mermaid-svg-nfUETCjyT5x1ntJl .label text,#mermaid-svg-nfUETCjyT5x1ntJl span{fill:#333;color:#333;}#mermaid-svg-nfUETCjyT5x1ntJl .node rect,#mermaid-svg-nfUETCjyT5x1ntJl .node circle,#mermaid-svg-nfUETCjyT5x1ntJl .node ellipse,#mermaid-svg-nfUETCjyT5x1ntJl .node polygon,#mermaid-svg-nfUETCjyT5x1ntJl .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-nfUETCjyT5x1ntJl .rough-node .label text,#mermaid-svg-nfUETCjyT5x1ntJl .node .label text,#mermaid-svg-nfUETCjyT5x1ntJl .image-shape .label,#mermaid-svg-nfUETCjyT5x1ntJl .icon-shape .label{text-anchor:middle;}#mermaid-svg-nfUETCjyT5x1ntJl .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-nfUETCjyT5x1ntJl .rough-node .label,#mermaid-svg-nfUETCjyT5x1ntJl .node .label,#mermaid-svg-nfUETCjyT5x1ntJl .image-shape .label,#mermaid-svg-nfUETCjyT5x1ntJl .icon-shape .label{text-align:center;}#mermaid-svg-nfUETCjyT5x1ntJl .node.clickable{cursor:pointer;}#mermaid-svg-nfUETCjyT5x1ntJl .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-nfUETCjyT5x1ntJl .arrowheadPath{fill:#333333;}#mermaid-svg-nfUETCjyT5x1ntJl .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-nfUETCjyT5x1ntJl .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-nfUETCjyT5x1ntJl .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-nfUETCjyT5x1ntJl .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-nfUETCjyT5x1ntJl .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-nfUETCjyT5x1ntJl .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-nfUETCjyT5x1ntJl .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-nfUETCjyT5x1ntJl .cluster text{fill:#333;}#mermaid-svg-nfUETCjyT5x1ntJl .cluster span{color:#333;}#mermaid-svg-nfUETCjyT5x1ntJl 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-nfUETCjyT5x1ntJl .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-nfUETCjyT5x1ntJl rect.text{fill:none;stroke-width:0;}#mermaid-svg-nfUETCjyT5x1ntJl .icon-shape,#mermaid-svg-nfUETCjyT5x1ntJl .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-nfUETCjyT5x1ntJl .icon-shape p,#mermaid-svg-nfUETCjyT5x1ntJl .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-nfUETCjyT5x1ntJl .icon-shape .label rect,#mermaid-svg-nfUETCjyT5x1ntJl .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-nfUETCjyT5x1ntJl .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-nfUETCjyT5x1ntJl .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-nfUETCjyT5x1ntJl :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} L3 支撑能力
L2 核心 Agent 能力
L1 战略能力
客户体验智能化
运营与风控智能化
工程效能智能化
客服 / 商家助手
告警 Triage / SRE
Buy / 导购 / 定价建议
数据迁移 / 报表生成
策略与合规
评估与红队
观测与 FinOps
| L2 能力 | 典型用户 | 副作用级别 | 默认 HITL | 深链 |
|---|---|---|---|---|
| 客服问答 | C 端 / 商家 | 低(只读为主) | 写操作必审 | 18 §场景 CS |
| 告警 Triage | On-call | 中(ack/resolve) | critical resolve 必审 | 13 §20 |
| Buy 导购 | 店员 / App | 中(券/库存读) | 定价/支付禁自动 | 18 |
| 离线批处理 | 数据平台 | 高(DDL/DML) | 全批准入 + checkpoint | 21 §6 |
2.2 价值流与验收标准
价值流(客服 Agent 示例):
人工坐席 RAG/订单API Agent 用户 人工坐席 RAG/订单API Agent 用户 #mermaid-svg-VYTEQHjWsf9FoKz9{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-VYTEQHjWsf9FoKz9 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-VYTEQHjWsf9FoKz9 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-VYTEQHjWsf9FoKz9 .error-icon{fill:#552222;}#mermaid-svg-VYTEQHjWsf9FoKz9 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-VYTEQHjWsf9FoKz9 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-VYTEQHjWsf9FoKz9 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-VYTEQHjWsf9FoKz9 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-VYTEQHjWsf9FoKz9 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-VYTEQHjWsf9FoKz9 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-VYTEQHjWsf9FoKz9 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-VYTEQHjWsf9FoKz9 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-VYTEQHjWsf9FoKz9 .marker.cross{stroke:#333333;}#mermaid-svg-VYTEQHjWsf9FoKz9 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-VYTEQHjWsf9FoKz9 p{margin:0;}#mermaid-svg-VYTEQHjWsf9FoKz9 .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-VYTEQHjWsf9FoKz9 text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-VYTEQHjWsf9FoKz9 .actor-line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-VYTEQHjWsf9FoKz9 .innerArc{stroke-width:1.5;stroke-dasharray:none;}#mermaid-svg-VYTEQHjWsf9FoKz9 .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-VYTEQHjWsf9FoKz9 .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-VYTEQHjWsf9FoKz9 #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-VYTEQHjWsf9FoKz9 .sequenceNumber{fill:white;}#mermaid-svg-VYTEQHjWsf9FoKz9 #sequencenumber{fill:#333;}#mermaid-svg-VYTEQHjWsf9FoKz9 #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-VYTEQHjWsf9FoKz9 .messageText{fill:#333;stroke:none;}#mermaid-svg-VYTEQHjWsf9FoKz9 .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-VYTEQHjWsf9FoKz9 .labelText,#mermaid-svg-VYTEQHjWsf9FoKz9 .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-VYTEQHjWsf9FoKz9 .loopText,#mermaid-svg-VYTEQHjWsf9FoKz9 .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-VYTEQHjWsf9FoKz9 .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-VYTEQHjWsf9FoKz9 .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-VYTEQHjWsf9FoKz9 .noteText,#mermaid-svg-VYTEQHjWsf9FoKz9 .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-VYTEQHjWsf9FoKz9 .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-VYTEQHjWsf9FoKz9 .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-VYTEQHjWsf9FoKz9 .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-VYTEQHjWsf9FoKz9 .actorPopupMenu{position:absolute;}#mermaid-svg-VYTEQHjWsf9FoKz9 .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-VYTEQHjWsf9FoKz9 .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-VYTEQHjWsf9FoKz9 .actor-man circle,#mermaid-svg-VYTEQHjWsf9FoKz9 line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-VYTEQHjWsf9FoKz9 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} alt 需写操作 只读可答 意图(退款进度) 只读 tool 查订单 observation 生成工单草案 + 证据 人审后执行 带引用回答
| 验收维度 | 机器可验 | 人工可验 | 反模式 |
|---|---|---|---|
| 任务完成 | success_criteria 全绿 |
抽检对话 | 「感觉答完了」无标准 |
| 业务正确 | tool JSON 与回答一致 | 政策抽检 | 模型编造金额 |
| 合规 | Guardrails pass | 审计日志 | 仅靠 system prompt |
| 成本 | $/task ≤ 预算 |
FinOps 周报 | 无 token 上限 |
2.3 业务视图反模式
| 反模式 | 现象 | 正确做法 |
|---|---|---|
| 万物 Agent | FAQ 也上 ReAct | RAG + 模板;固定流用 Workflow |
| 无 Owner 能力 | 谁都能加一个 tool | 能力域注册表 + ADR |
| 验收不可测 | 「用户满意」无指标 | completion_rate + citation_rate |
| 忽视人工链路 | Agent 直接改生产 | HITL 分级写入控制面 |
3. 应用视图(Application View)
核心 :应用视图是 Staff 面试 停留时间最长 的视图。必须能画 控制面 / 数据面 / 护栏 / 观测 / 记忆 / 工具 / 路由 七组件及 组件契约、SLA、降级。
3.1 参考架构总图
#mermaid-svg-XpxuBpfM6Opt375I{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-XpxuBpfM6Opt375I .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-XpxuBpfM6Opt375I .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-XpxuBpfM6Opt375I .error-icon{fill:#552222;}#mermaid-svg-XpxuBpfM6Opt375I .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-XpxuBpfM6Opt375I .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-XpxuBpfM6Opt375I .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-XpxuBpfM6Opt375I .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-XpxuBpfM6Opt375I .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-XpxuBpfM6Opt375I .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-XpxuBpfM6Opt375I .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-XpxuBpfM6Opt375I .marker{fill:#333333;stroke:#333333;}#mermaid-svg-XpxuBpfM6Opt375I .marker.cross{stroke:#333333;}#mermaid-svg-XpxuBpfM6Opt375I svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-XpxuBpfM6Opt375I p{margin:0;}#mermaid-svg-XpxuBpfM6Opt375I .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-XpxuBpfM6Opt375I .cluster-label text{fill:#333;}#mermaid-svg-XpxuBpfM6Opt375I .cluster-label span{color:#333;}#mermaid-svg-XpxuBpfM6Opt375I .cluster-label span p{background-color:transparent;}#mermaid-svg-XpxuBpfM6Opt375I .label text,#mermaid-svg-XpxuBpfM6Opt375I span{fill:#333;color:#333;}#mermaid-svg-XpxuBpfM6Opt375I .node rect,#mermaid-svg-XpxuBpfM6Opt375I .node circle,#mermaid-svg-XpxuBpfM6Opt375I .node ellipse,#mermaid-svg-XpxuBpfM6Opt375I .node polygon,#mermaid-svg-XpxuBpfM6Opt375I .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-XpxuBpfM6Opt375I .rough-node .label text,#mermaid-svg-XpxuBpfM6Opt375I .node .label text,#mermaid-svg-XpxuBpfM6Opt375I .image-shape .label,#mermaid-svg-XpxuBpfM6Opt375I .icon-shape .label{text-anchor:middle;}#mermaid-svg-XpxuBpfM6Opt375I .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-XpxuBpfM6Opt375I .rough-node .label,#mermaid-svg-XpxuBpfM6Opt375I .node .label,#mermaid-svg-XpxuBpfM6Opt375I .image-shape .label,#mermaid-svg-XpxuBpfM6Opt375I .icon-shape .label{text-align:center;}#mermaid-svg-XpxuBpfM6Opt375I .node.clickable{cursor:pointer;}#mermaid-svg-XpxuBpfM6Opt375I .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-XpxuBpfM6Opt375I .arrowheadPath{fill:#333333;}#mermaid-svg-XpxuBpfM6Opt375I .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-XpxuBpfM6Opt375I .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-XpxuBpfM6Opt375I .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-XpxuBpfM6Opt375I .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-XpxuBpfM6Opt375I .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-XpxuBpfM6Opt375I .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-XpxuBpfM6Opt375I .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-XpxuBpfM6Opt375I .cluster text{fill:#333;}#mermaid-svg-XpxuBpfM6Opt375I .cluster span{color:#333;}#mermaid-svg-XpxuBpfM6Opt375I 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-XpxuBpfM6Opt375I .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-XpxuBpfM6Opt375I rect.text{fill:none;stroke-width:0;}#mermaid-svg-XpxuBpfM6Opt375I .icon-shape,#mermaid-svg-XpxuBpfM6Opt375I .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-XpxuBpfM6Opt375I .icon-shape p,#mermaid-svg-XpxuBpfM6Opt375I .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-XpxuBpfM6Opt375I .icon-shape .label rect,#mermaid-svg-XpxuBpfM6Opt375I .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-XpxuBpfM6Opt375I .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-XpxuBpfM6Opt375I .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-XpxuBpfM6Opt375I :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 横切
数据面 Data Plane
控制面 Control Plane
接入
API Gateway / BFF
Webhook / Cron
身份 / 租户
Policy / OPA
预算 / 熔断
HITL 审批队列
幂等 / 任务登记
Agent Runtime
LangGraph / Spring AI
Planner
Executor
Tool Router
LLM Router
LiteLLM
Guardrails 输出/输入
Observability
Trace / Metrics / Audit
Memory Service
RAG Service
3.2 组件契约与 SLA
| 组件 | 职责边界 | 可用性 SLA | 延迟 SLA | 降级策略 | 反模式 |
|---|---|---|---|---|---|
| 控制面 Control Plane | AUTH+POL+BUD+HITL+IDEM | 99.99% | p99 <50ms | 拒绝未授权/超预算任务入队 | 策略放 prompt;无幂等登记 |
| Agent Runtime | RT | 99.9% | 单任务 wall p99 <120s | 队列积压→降级为只读 FAQ | 与 LLM 同进程无隔离 |
| Planner | PL | 99.5% | plan 生成 <8s | 超时→固定 SOP 模板 plan | 一次生成 50 步大 plan |
| Executor | EX | 99.9% | 单步 tool p99 <3s | 步级 verify 失败→replan≤2 | 无 verify 闸门 |
| Tool Router | TR | 99.95% | 路由 <20ms | tool 不可用→备选 tool/缓存 | 任意 tool 无 schema 校验 |
| LLM Router | LLM | 99.5% | TTFT p99 <2s | 降级小模型/缩短上下文 | 无 model fallback |
| Guardrails | GR | 99.99% | 校验 <100ms | block→模板拒答+工单 | 仅 system prompt |
| Observability | OBS | 99.9% | trace 完整率 >99% | 采样降档不断 trace_id | 无 step 级 replay |
| Memory | MEM | 99.9% | 读 p99 <50ms | 向量超时→跳过长期记忆 | checkpoint 放 Pod 内存 |
| RAG | RAG | 99.5% | 检索 p99 <200ms | 超时→关键词检索 | 与 checkpoint 混表 |
3.3 控制面 · 工程细节
| 能力 | 实现要点 | 与 21 对齐 |
|---|---|---|
| 身份/租户 | JWT + tenant_id 贯穿 trace |
§3.1 Gateway |
| Policy-as-Code | OPA/Rego:risk_level(write) → HITL |
17 §5 |
| 预算 | max_steps / max_cost_usd / token cap |
13 §2.2 |
| 幂等 | idempotency_key = entity:op:generation |
21 §4.2 |
| HITL | 队列 + 超时升级;审批写回 checkpoint | 13 §8 |
#mermaid-svg-5Q1DUB7U6JCOqg46{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-5Q1DUB7U6JCOqg46 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-5Q1DUB7U6JCOqg46 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-5Q1DUB7U6JCOqg46 .error-icon{fill:#552222;}#mermaid-svg-5Q1DUB7U6JCOqg46 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-5Q1DUB7U6JCOqg46 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-5Q1DUB7U6JCOqg46 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-5Q1DUB7U6JCOqg46 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-5Q1DUB7U6JCOqg46 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-5Q1DUB7U6JCOqg46 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-5Q1DUB7U6JCOqg46 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-5Q1DUB7U6JCOqg46 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-5Q1DUB7U6JCOqg46 .marker.cross{stroke:#333333;}#mermaid-svg-5Q1DUB7U6JCOqg46 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-5Q1DUB7U6JCOqg46 p{margin:0;}#mermaid-svg-5Q1DUB7U6JCOqg46 defs #statediagram-barbEnd{fill:#333333;stroke:#333333;}#mermaid-svg-5Q1DUB7U6JCOqg46 g.stateGroup text{fill:#9370DB;stroke:none;font-size:10px;}#mermaid-svg-5Q1DUB7U6JCOqg46 g.stateGroup text{fill:#333;stroke:none;font-size:10px;}#mermaid-svg-5Q1DUB7U6JCOqg46 g.stateGroup .state-title{font-weight:bolder;fill:#131300;}#mermaid-svg-5Q1DUB7U6JCOqg46 g.stateGroup rect{fill:#ECECFF;stroke:#9370DB;}#mermaid-svg-5Q1DUB7U6JCOqg46 g.stateGroup line{stroke:#333333;stroke-width:1;}#mermaid-svg-5Q1DUB7U6JCOqg46 .transition{stroke:#333333;stroke-width:1;fill:none;}#mermaid-svg-5Q1DUB7U6JCOqg46 .stateGroup .composit{fill:white;border-bottom:1px;}#mermaid-svg-5Q1DUB7U6JCOqg46 .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px;}#mermaid-svg-5Q1DUB7U6JCOqg46 .state-note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-5Q1DUB7U6JCOqg46 .state-note text{fill:black;stroke:none;font-size:10px;}#mermaid-svg-5Q1DUB7U6JCOqg46 .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5;}#mermaid-svg-5Q1DUB7U6JCOqg46 .edgeLabel .label rect{fill:#ECECFF;opacity:0.5;}#mermaid-svg-5Q1DUB7U6JCOqg46 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-5Q1DUB7U6JCOqg46 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-5Q1DUB7U6JCOqg46 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-5Q1DUB7U6JCOqg46 .edgeLabel .label text{fill:#333;}#mermaid-svg-5Q1DUB7U6JCOqg46 .label div .edgeLabel{color:#333;}#mermaid-svg-5Q1DUB7U6JCOqg46 .stateLabel text{fill:#131300;font-size:10px;font-weight:bold;}#mermaid-svg-5Q1DUB7U6JCOqg46 .node circle.state-start{fill:#333333;stroke:#333333;}#mermaid-svg-5Q1DUB7U6JCOqg46 .node .fork-join{fill:#333333;stroke:#333333;}#mermaid-svg-5Q1DUB7U6JCOqg46 .node circle.state-end{fill:#9370DB;stroke:white;stroke-width:1.5;}#mermaid-svg-5Q1DUB7U6JCOqg46 .end-state-inner{fill:white;stroke-width:1.5;}#mermaid-svg-5Q1DUB7U6JCOqg46 .node rect{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-5Q1DUB7U6JCOqg46 .node polygon{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-5Q1DUB7U6JCOqg46 #statediagram-barbEnd{fill:#333333;}#mermaid-svg-5Q1DUB7U6JCOqg46 .statediagram-cluster rect{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-5Q1DUB7U6JCOqg46 .cluster-label,#mermaid-svg-5Q1DUB7U6JCOqg46 .nodeLabel{color:#131300;}#mermaid-svg-5Q1DUB7U6JCOqg46 .statediagram-cluster rect.outer{rx:5px;ry:5px;}#mermaid-svg-5Q1DUB7U6JCOqg46 .statediagram-state .divider{stroke:#9370DB;}#mermaid-svg-5Q1DUB7U6JCOqg46 .statediagram-state .title-state{rx:5px;ry:5px;}#mermaid-svg-5Q1DUB7U6JCOqg46 .statediagram-cluster.statediagram-cluster .inner{fill:white;}#mermaid-svg-5Q1DUB7U6JCOqg46 .statediagram-cluster.statediagram-cluster-alt .inner{fill:#f0f0f0;}#mermaid-svg-5Q1DUB7U6JCOqg46 .statediagram-cluster .inner{rx:0;ry:0;}#mermaid-svg-5Q1DUB7U6JCOqg46 .statediagram-state rect.basic{rx:5px;ry:5px;}#mermaid-svg-5Q1DUB7U6JCOqg46 .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#f0f0f0;}#mermaid-svg-5Q1DUB7U6JCOqg46 .note-edge{stroke-dasharray:5;}#mermaid-svg-5Q1DUB7U6JCOqg46 .statediagram-note rect{fill:#fff5ad;stroke:#aaaa33;stroke-width:1px;rx:0;ry:0;}#mermaid-svg-5Q1DUB7U6JCOqg46 .statediagram-note rect{fill:#fff5ad;stroke:#aaaa33;stroke-width:1px;rx:0;ry:0;}#mermaid-svg-5Q1DUB7U6JCOqg46 .statediagram-note text{fill:black;}#mermaid-svg-5Q1DUB7U6JCOqg46 .statediagram-note .nodeLabel{color:black;}#mermaid-svg-5Q1DUB7U6JCOqg46 .statediagram .edgeLabel{color:red;}#mermaid-svg-5Q1DUB7U6JCOqg46 #dependencyStart,#mermaid-svg-5Q1DUB7U6JCOqg46 #dependencyEnd{fill:#333333;stroke:#333333;stroke-width:1;}#mermaid-svg-5Q1DUB7U6JCOqg46 .statediagramTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-5Q1DUB7U6JCOqg46 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} pass auth
deny
pass
budget OK
write+risk
approved
success_criteria
budget exhausted
unrecoverable
Submitted
PolicyCheck
Rejected
Queued
Running
WaitingHITL
Completed
Degraded
Failed
3.4 数据面 · Planner / Executor / 有界循环
推荐生产默认:DAG 骨架 + 局部 ReAct(非纯 ReAct 无限循环)。
| 模式 | 状态机 | 适用 | 见 |
|---|---|---|---|
| ReAct | 单环 Think→Act→Observe | 探索型 PoC | 04 §4 |
| Plan-Execute | plan 一次→逐步执行 | 步骤稳定 | 13 §2 |
| DAG+有界环 | 阶段 DAG;阶段内 ≤N 步 | 生产默认 | 本篇 + 21 §6 |
Executor 契约(每步):
text
Input: { step_id, tool_name, args, context_digest, version_pin }
Output: { observation, status, verify_result, artifacts?, error? }
Invariant:
- 同 (tool,args) 连续失败 ≥3 → circuit_break
- verify 失败 → replan 或 HITL(按 risk)
- 写操作必须带 idempotency_key(控制面签发)
3.5 工具平面 Tool Router + MCP
#mermaid-svg-v5gPIKb5hizgxARj{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-v5gPIKb5hizgxARj .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-v5gPIKb5hizgxARj .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-v5gPIKb5hizgxARj .error-icon{fill:#552222;}#mermaid-svg-v5gPIKb5hizgxARj .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-v5gPIKb5hizgxARj .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-v5gPIKb5hizgxARj .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-v5gPIKb5hizgxARj .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-v5gPIKb5hizgxARj .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-v5gPIKb5hizgxARj .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-v5gPIKb5hizgxARj .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-v5gPIKb5hizgxARj .marker{fill:#333333;stroke:#333333;}#mermaid-svg-v5gPIKb5hizgxARj .marker.cross{stroke:#333333;}#mermaid-svg-v5gPIKb5hizgxARj svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-v5gPIKb5hizgxARj p{margin:0;}#mermaid-svg-v5gPIKb5hizgxARj .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-v5gPIKb5hizgxARj .cluster-label text{fill:#333;}#mermaid-svg-v5gPIKb5hizgxARj .cluster-label span{color:#333;}#mermaid-svg-v5gPIKb5hizgxARj .cluster-label span p{background-color:transparent;}#mermaid-svg-v5gPIKb5hizgxARj .label text,#mermaid-svg-v5gPIKb5hizgxARj span{fill:#333;color:#333;}#mermaid-svg-v5gPIKb5hizgxARj .node rect,#mermaid-svg-v5gPIKb5hizgxARj .node circle,#mermaid-svg-v5gPIKb5hizgxARj .node ellipse,#mermaid-svg-v5gPIKb5hizgxARj .node polygon,#mermaid-svg-v5gPIKb5hizgxARj .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-v5gPIKb5hizgxARj .rough-node .label text,#mermaid-svg-v5gPIKb5hizgxARj .node .label text,#mermaid-svg-v5gPIKb5hizgxARj .image-shape .label,#mermaid-svg-v5gPIKb5hizgxARj .icon-shape .label{text-anchor:middle;}#mermaid-svg-v5gPIKb5hizgxARj .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-v5gPIKb5hizgxARj .rough-node .label,#mermaid-svg-v5gPIKb5hizgxARj .node .label,#mermaid-svg-v5gPIKb5hizgxARj .image-shape .label,#mermaid-svg-v5gPIKb5hizgxARj .icon-shape .label{text-align:center;}#mermaid-svg-v5gPIKb5hizgxARj .node.clickable{cursor:pointer;}#mermaid-svg-v5gPIKb5hizgxARj .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-v5gPIKb5hizgxARj .arrowheadPath{fill:#333333;}#mermaid-svg-v5gPIKb5hizgxARj .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-v5gPIKb5hizgxARj .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-v5gPIKb5hizgxARj .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-v5gPIKb5hizgxARj .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-v5gPIKb5hizgxARj .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-v5gPIKb5hizgxARj .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-v5gPIKb5hizgxARj .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-v5gPIKb5hizgxARj .cluster text{fill:#333;}#mermaid-svg-v5gPIKb5hizgxARj .cluster span{color:#333;}#mermaid-svg-v5gPIKb5hizgxARj 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-v5gPIKb5hizgxARj .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-v5gPIKb5hizgxARj rect.text{fill:none;stroke-width:0;}#mermaid-svg-v5gPIKb5hizgxARj .icon-shape,#mermaid-svg-v5gPIKb5hizgxARj .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-v5gPIKb5hizgxARj .icon-shape p,#mermaid-svg-v5gPIKb5hizgxARj .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-v5gPIKb5hizgxARj .icon-shape .label rect,#mermaid-svg-v5gPIKb5hizgxARj .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-v5gPIKb5hizgxARj .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-v5gPIKb5hizgxARj .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-v5gPIKb5hizgxARj :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Executor
Tool Router
同步 REST/gRPC
MCP Server 池
代码沙箱
人类工具 HITL
订单 MCP
监控 MCP
知识库 MCP
| 契约项 | 要求 |
|---|---|
| Schema | OpenAPI / JSON Schema 版本化 tool_schema_rev |
| 分类 | read / write / admin 标签;write 走 HITL |
| 超时 | 读 3s / 写 10s;可配置 per tool |
| 结果大小 | >32KB → Artifact Store URI 引用 |
| 审计 | 参数摘要入 Audit(非全量 PII) |
→ MCP/A2A 详见 04 §12。
3.6 记忆平面 Memory
| 类型 | 存储 | 生命周期 | 禁止 |
|---|---|---|---|
| Working | Runtime state | 单任务 | 把整段 history 塞 prompt |
| Checkpoint | PostgreSQL | 任务级持久 | 用 trace_id 当写幂等键 |
| Session | Redis | 24h TTL | 跨租户共享 key |
| Semantic | pgvector | 长期 | 与 checkpoint 混表 |
| Episodic | Redis + PG 摘要 | 30d | 无版本的政策 chunk |
→ Context Engineering 详见 04 §13、13 §3。
3.7 路由平面 LLM Router
| 路由维度 | 策略 | 配置源 |
|---|---|---|
| 任务类型 | 分类用小模型 → 路由大模型 | LiteLLM alias |
| 成本 | 超预算 → 降级 Haiku 级 | 07 §10 |
| 延迟 | TTFT 恶化 → 缩短 max_tokens | Serving 指标 |
| 合规 | 区域数据 → 指定 endpoint | 控制面 tenant policy |
降级矩阵:
| 级别 | 触发 | 行为 |
|---|---|---|
| L0 正常 | --- | 全功能 |
| L1 成本 | 80% 日预算 | 禁 Multi-Agent 并行 |
| L2 延迟 | TTFT p99>3s | 强制短上下文 + 小模型 |
| L3 依赖 | LLM 5xx | 模板 FAQ + 人工排队 |
| L4 事故 | Guardrails 大规模 fail | 只读模式全局开关 |
3.8 护栏 Guardrails
| 阶段 | 检查 | 失败动作 |
|---|---|---|
| 输入 | 注入检测、PII 扫描 | 拒答 / 脱敏 |
| 工具前 | 参数 schema + 风险 | block write |
| 输出 | JSON schema、引用、citation | 重试一次 → 拒答 |
| 事后 | 抽检 + 红队 | 版本回滚 |
→ 技术栈 17 §4;Spring AI Advisor 18 §0.2。
3.9 可观测 Observability
| 信号 | 最小字段 | SLO |
|---|---|---|
| Trace | trace_id, task_id, step_id, tool, model_rev |
99% 完整 |
| Metrics | $/task, steps, tool_errors, completion_rate |
仪表盘 24h |
| Audit | 谁批准 HITL、写了什么实体 | 7 年留存(合规域) |
| Eval | 版本对比 golden set | 发布门禁 |
#mermaid-svg-oMSTfsaCpPFGtY3P{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-oMSTfsaCpPFGtY3P .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-oMSTfsaCpPFGtY3P .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-oMSTfsaCpPFGtY3P .error-icon{fill:#552222;}#mermaid-svg-oMSTfsaCpPFGtY3P .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-oMSTfsaCpPFGtY3P .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-oMSTfsaCpPFGtY3P .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-oMSTfsaCpPFGtY3P .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-oMSTfsaCpPFGtY3P .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-oMSTfsaCpPFGtY3P .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-oMSTfsaCpPFGtY3P .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-oMSTfsaCpPFGtY3P .marker{fill:#333333;stroke:#333333;}#mermaid-svg-oMSTfsaCpPFGtY3P .marker.cross{stroke:#333333;}#mermaid-svg-oMSTfsaCpPFGtY3P svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-oMSTfsaCpPFGtY3P p{margin:0;}#mermaid-svg-oMSTfsaCpPFGtY3P .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-oMSTfsaCpPFGtY3P .cluster-label text{fill:#333;}#mermaid-svg-oMSTfsaCpPFGtY3P .cluster-label span{color:#333;}#mermaid-svg-oMSTfsaCpPFGtY3P .cluster-label span p{background-color:transparent;}#mermaid-svg-oMSTfsaCpPFGtY3P .label text,#mermaid-svg-oMSTfsaCpPFGtY3P span{fill:#333;color:#333;}#mermaid-svg-oMSTfsaCpPFGtY3P .node rect,#mermaid-svg-oMSTfsaCpPFGtY3P .node circle,#mermaid-svg-oMSTfsaCpPFGtY3P .node ellipse,#mermaid-svg-oMSTfsaCpPFGtY3P .node polygon,#mermaid-svg-oMSTfsaCpPFGtY3P .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-oMSTfsaCpPFGtY3P .rough-node .label text,#mermaid-svg-oMSTfsaCpPFGtY3P .node .label text,#mermaid-svg-oMSTfsaCpPFGtY3P .image-shape .label,#mermaid-svg-oMSTfsaCpPFGtY3P .icon-shape .label{text-anchor:middle;}#mermaid-svg-oMSTfsaCpPFGtY3P .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-oMSTfsaCpPFGtY3P .rough-node .label,#mermaid-svg-oMSTfsaCpPFGtY3P .node .label,#mermaid-svg-oMSTfsaCpPFGtY3P .image-shape .label,#mermaid-svg-oMSTfsaCpPFGtY3P .icon-shape .label{text-align:center;}#mermaid-svg-oMSTfsaCpPFGtY3P .node.clickable{cursor:pointer;}#mermaid-svg-oMSTfsaCpPFGtY3P .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-oMSTfsaCpPFGtY3P .arrowheadPath{fill:#333333;}#mermaid-svg-oMSTfsaCpPFGtY3P .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-oMSTfsaCpPFGtY3P .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-oMSTfsaCpPFGtY3P .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-oMSTfsaCpPFGtY3P .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-oMSTfsaCpPFGtY3P .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-oMSTfsaCpPFGtY3P .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-oMSTfsaCpPFGtY3P .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-oMSTfsaCpPFGtY3P .cluster text{fill:#333;}#mermaid-svg-oMSTfsaCpPFGtY3P .cluster span{color:#333;}#mermaid-svg-oMSTfsaCpPFGtY3P 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-oMSTfsaCpPFGtY3P .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-oMSTfsaCpPFGtY3P rect.text{fill:none;stroke-width:0;}#mermaid-svg-oMSTfsaCpPFGtY3P .icon-shape,#mermaid-svg-oMSTfsaCpPFGtY3P .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-oMSTfsaCpPFGtY3P .icon-shape p,#mermaid-svg-oMSTfsaCpPFGtY3P .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-oMSTfsaCpPFGtY3P .icon-shape .label rect,#mermaid-svg-oMSTfsaCpPFGtY3P .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-oMSTfsaCpPFGtY3P .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-oMSTfsaCpPFGtY3P .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-oMSTfsaCpPFGtY3P :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Runtime
OpenTelemetry
Tempo/Jaeger
Prometheus
Loki
Dashboard $/task
Step Replay UI
3.10 应用视图反模式
| 反模式 | 风险 | 修复 |
|---|---|---|
| 控制面空心化 | prompt 里写「不要退款」 | Policy + tool 标签 + HITL |
| 数据面有状态 Pod | 重启丢进度 | Checkpoint 外置 PG |
| 护栏后置 | 有害内容已返回用户 | 输出 schema 校验 |
| 观测只有日志 | 无法 replay 第 N 步 | step 级 span |
| 工具无版本 | schema 漂移导致参数幻觉 | version_pin |
4. 数据视图(Data View)
4.1 逻辑数据模型
#mermaid-svg-VqYxjAYwAQM7uRMY{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-VqYxjAYwAQM7uRMY .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-VqYxjAYwAQM7uRMY .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-VqYxjAYwAQM7uRMY .error-icon{fill:#552222;}#mermaid-svg-VqYxjAYwAQM7uRMY .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-VqYxjAYwAQM7uRMY .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-VqYxjAYwAQM7uRMY .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-VqYxjAYwAQM7uRMY .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-VqYxjAYwAQM7uRMY .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-VqYxjAYwAQM7uRMY .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-VqYxjAYwAQM7uRMY .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-VqYxjAYwAQM7uRMY .marker{fill:#333333;stroke:#333333;}#mermaid-svg-VqYxjAYwAQM7uRMY .marker.cross{stroke:#333333;}#mermaid-svg-VqYxjAYwAQM7uRMY svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-VqYxjAYwAQM7uRMY p{margin:0;}#mermaid-svg-VqYxjAYwAQM7uRMY .entityBox{fill:#ECECFF;stroke:#9370DB;}#mermaid-svg-VqYxjAYwAQM7uRMY .relationshipLabelBox{fill:hsl(80, 100%, 96.2745098039%);opacity:0.7;background-color:hsl(80, 100%, 96.2745098039%);}#mermaid-svg-VqYxjAYwAQM7uRMY .relationshipLabelBox rect{opacity:0.5;}#mermaid-svg-VqYxjAYwAQM7uRMY .labelBkg{background-color:rgba(248.6666666666, 255, 235.9999999999, 0.5);}#mermaid-svg-VqYxjAYwAQM7uRMY .edgeLabel .label{fill:#9370DB;font-size:14px;}#mermaid-svg-VqYxjAYwAQM7uRMY .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-VqYxjAYwAQM7uRMY .edge-pattern-dashed{stroke-dasharray:8,8;}#mermaid-svg-VqYxjAYwAQM7uRMY .node rect,#mermaid-svg-VqYxjAYwAQM7uRMY .node circle,#mermaid-svg-VqYxjAYwAQM7uRMY .node ellipse,#mermaid-svg-VqYxjAYwAQM7uRMY .node polygon{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-VqYxjAYwAQM7uRMY .relationshipLine{stroke:#333333;stroke-width:1;fill:none;}#mermaid-svg-VqYxjAYwAQM7uRMY .marker{fill:none!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-VqYxjAYwAQM7uRMY .edgeLabel{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-VqYxjAYwAQM7uRMY .edgeLabel .label rect{fill:rgba(232,232,232, 0.8);}#mermaid-svg-VqYxjAYwAQM7uRMY .edgeLabel .label text{fill:#333;}#mermaid-svg-VqYxjAYwAQM7uRMY :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} has
contains
produces
belongs
summarizes
versioned
ephemeral
TASK
string
task_id
PK
string
trace_id
string
goal
json
success_criteria
string
status
CHECKPOINT
string
task_id
FK
int
rev
json
plan
json
completed_steps
json
version_pin
STEP_LOG
ARTIFACT
TENANT
TOOL_DIGEST
KB_INDEX
CHUNK
SESSION
MESSAGE
4.2 存储选型矩阵
| 数据类 | 技术 | 一致性 | 分区键 | 非 Agent 常见误区 |
|---|---|---|---|---|
| Checkpoint | PostgreSQL | 强一致 | task_id |
误用 Redis 无持久 |
| Artifact | S3/OSS | 最终 | task_id/step_id |
塞 PG BLOB |
| Session | Redis | 最终 | tenant:session |
无 TTL |
| 向量索引 | pgvector/Milvus | 最终 | tenant+kb |
无 kb_version |
| Audit | ClickHouse/ES | append | day+tenant |
与 trace 未关联 |
| Eval 集 | PG + 对象存储 | --- | suite_rev |
无版本 pin |
→ RAG 管线 03;checkpoint 字段 21 §4。
4.3 数据流(在线任务)
#mermaid-svg-8BDQgHgyjmcSVmmR{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-8BDQgHgyjmcSVmmR .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-8BDQgHgyjmcSVmmR .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-8BDQgHgyjmcSVmmR .error-icon{fill:#552222;}#mermaid-svg-8BDQgHgyjmcSVmmR .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-8BDQgHgyjmcSVmmR .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-8BDQgHgyjmcSVmmR .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-8BDQgHgyjmcSVmmR .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-8BDQgHgyjmcSVmmR .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-8BDQgHgyjmcSVmmR .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-8BDQgHgyjmcSVmmR .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-8BDQgHgyjmcSVmmR .marker{fill:#333333;stroke:#333333;}#mermaid-svg-8BDQgHgyjmcSVmmR .marker.cross{stroke:#333333;}#mermaid-svg-8BDQgHgyjmcSVmmR svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-8BDQgHgyjmcSVmmR p{margin:0;}#mermaid-svg-8BDQgHgyjmcSVmmR .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-8BDQgHgyjmcSVmmR .cluster-label text{fill:#333;}#mermaid-svg-8BDQgHgyjmcSVmmR .cluster-label span{color:#333;}#mermaid-svg-8BDQgHgyjmcSVmmR .cluster-label span p{background-color:transparent;}#mermaid-svg-8BDQgHgyjmcSVmmR .label text,#mermaid-svg-8BDQgHgyjmcSVmmR span{fill:#333;color:#333;}#mermaid-svg-8BDQgHgyjmcSVmmR .node rect,#mermaid-svg-8BDQgHgyjmcSVmmR .node circle,#mermaid-svg-8BDQgHgyjmcSVmmR .node ellipse,#mermaid-svg-8BDQgHgyjmcSVmmR .node polygon,#mermaid-svg-8BDQgHgyjmcSVmmR .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-8BDQgHgyjmcSVmmR .rough-node .label text,#mermaid-svg-8BDQgHgyjmcSVmmR .node .label text,#mermaid-svg-8BDQgHgyjmcSVmmR .image-shape .label,#mermaid-svg-8BDQgHgyjmcSVmmR .icon-shape .label{text-anchor:middle;}#mermaid-svg-8BDQgHgyjmcSVmmR .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-8BDQgHgyjmcSVmmR .rough-node .label,#mermaid-svg-8BDQgHgyjmcSVmmR .node .label,#mermaid-svg-8BDQgHgyjmcSVmmR .image-shape .label,#mermaid-svg-8BDQgHgyjmcSVmmR .icon-shape .label{text-align:center;}#mermaid-svg-8BDQgHgyjmcSVmmR .node.clickable{cursor:pointer;}#mermaid-svg-8BDQgHgyjmcSVmmR .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-8BDQgHgyjmcSVmmR .arrowheadPath{fill:#333333;}#mermaid-svg-8BDQgHgyjmcSVmmR .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-8BDQgHgyjmcSVmmR .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-8BDQgHgyjmcSVmmR .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-8BDQgHgyjmcSVmmR .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-8BDQgHgyjmcSVmmR .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-8BDQgHgyjmcSVmmR .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-8BDQgHgyjmcSVmmR .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-8BDQgHgyjmcSVmmR .cluster text{fill:#333;}#mermaid-svg-8BDQgHgyjmcSVmmR .cluster span{color:#333;}#mermaid-svg-8BDQgHgyjmcSVmmR 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-8BDQgHgyjmcSVmmR .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-8BDQgHgyjmcSVmmR rect.text{fill:none;stroke-width:0;}#mermaid-svg-8BDQgHgyjmcSVmmR .icon-shape,#mermaid-svg-8BDQgHgyjmcSVmmR .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-8BDQgHgyjmcSVmmR .icon-shape p,#mermaid-svg-8BDQgHgyjmcSVmmR .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-8BDQgHgyjmcSVmmR .icon-shape .label rect,#mermaid-svg-8BDQgHgyjmcSVmmR .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-8BDQgHgyjmcSVmmR .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-8BDQgHgyjmcSVmmR .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-8BDQgHgyjmcSVmmR :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 用户
Gateway
控制面登记 Task
Runtime 加载 Checkpoint
RAG 检索
Vector DB
LLM
Tools
微服务 API
Checkpoint PG
Artifact S3
Audit
写路径原则 :业务副作用 只通过 Tool 调微服务 ;Agent 侧 不直写业务库(防腐层)。
4.4 数据治理
| 维度 | Agent 特化要求 |
|---|---|
| 分类分级 | conversation=P2;audit=P3;tool 结果含 PII 脱敏 |
| 留存 | session 30d;audit 按合规;checkpoint 任务完成后 90d 归档 |
| 质量 | citation_rate, faithfulness 入质量仪表盘 |
| 血缘 | version_pin: prompt+model+kb+tool_schema |
| 删除权 | 用户删号 → 向量+session+checkpoint 级联擦除 |
反模式:向量库无租户隔离;checkpoint 存全量 tool JSON 撑爆 PG。
5. 部署视图(Deployment View)
5.1 部署拓扑
#mermaid-svg-jZhZJhxjPddRhIWc{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-jZhZJhxjPddRhIWc .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-jZhZJhxjPddRhIWc .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-jZhZJhxjPddRhIWc .error-icon{fill:#552222;}#mermaid-svg-jZhZJhxjPddRhIWc .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-jZhZJhxjPddRhIWc .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-jZhZJhxjPddRhIWc .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-jZhZJhxjPddRhIWc .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-jZhZJhxjPddRhIWc .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-jZhZJhxjPddRhIWc .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-jZhZJhxjPddRhIWc .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-jZhZJhxjPddRhIWc .marker{fill:#333333;stroke:#333333;}#mermaid-svg-jZhZJhxjPddRhIWc .marker.cross{stroke:#333333;}#mermaid-svg-jZhZJhxjPddRhIWc svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-jZhZJhxjPddRhIWc p{margin:0;}#mermaid-svg-jZhZJhxjPddRhIWc .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-jZhZJhxjPddRhIWc .cluster-label text{fill:#333;}#mermaid-svg-jZhZJhxjPddRhIWc .cluster-label span{color:#333;}#mermaid-svg-jZhZJhxjPddRhIWc .cluster-label span p{background-color:transparent;}#mermaid-svg-jZhZJhxjPddRhIWc .label text,#mermaid-svg-jZhZJhxjPddRhIWc span{fill:#333;color:#333;}#mermaid-svg-jZhZJhxjPddRhIWc .node rect,#mermaid-svg-jZhZJhxjPddRhIWc .node circle,#mermaid-svg-jZhZJhxjPddRhIWc .node ellipse,#mermaid-svg-jZhZJhxjPddRhIWc .node polygon,#mermaid-svg-jZhZJhxjPddRhIWc .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-jZhZJhxjPddRhIWc .rough-node .label text,#mermaid-svg-jZhZJhxjPddRhIWc .node .label text,#mermaid-svg-jZhZJhxjPddRhIWc .image-shape .label,#mermaid-svg-jZhZJhxjPddRhIWc .icon-shape .label{text-anchor:middle;}#mermaid-svg-jZhZJhxjPddRhIWc .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-jZhZJhxjPddRhIWc .rough-node .label,#mermaid-svg-jZhZJhxjPddRhIWc .node .label,#mermaid-svg-jZhZJhxjPddRhIWc .image-shape .label,#mermaid-svg-jZhZJhxjPddRhIWc .icon-shape .label{text-align:center;}#mermaid-svg-jZhZJhxjPddRhIWc .node.clickable{cursor:pointer;}#mermaid-svg-jZhZJhxjPddRhIWc .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-jZhZJhxjPddRhIWc .arrowheadPath{fill:#333333;}#mermaid-svg-jZhZJhxjPddRhIWc .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-jZhZJhxjPddRhIWc .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-jZhZJhxjPddRhIWc .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-jZhZJhxjPddRhIWc .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-jZhZJhxjPddRhIWc .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-jZhZJhxjPddRhIWc .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-jZhZJhxjPddRhIWc .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-jZhZJhxjPddRhIWc .cluster text{fill:#333;}#mermaid-svg-jZhZJhxjPddRhIWc .cluster span{color:#333;}#mermaid-svg-jZhZJhxjPddRhIWc 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-jZhZJhxjPddRhIWc .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-jZhZJhxjPddRhIWc rect.text{fill:none;stroke-width:0;}#mermaid-svg-jZhZJhxjPddRhIWc .icon-shape,#mermaid-svg-jZhZJhxjPddRhIWc .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-jZhZJhxjPddRhIWc .icon-shape p,#mermaid-svg-jZhZJhxjPddRhIWc .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-jZhZJhxjPddRhIWc .icon-shape .label rect,#mermaid-svg-jZhZJhxjPddRhIWc .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-jZhZJhxjPddRhIWc .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-jZhZJhxjPddRhIWc .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-jZhZJhxjPddRhIWc :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 模型层
数据层 Multi-AZ
EKS / 内网 K8s
AZ-b
AZ-a
Agent Gateway x3
Agent Runtime xN HPA
Agent Gateway x3
Agent Runtime xN HPA
RDS PG Checkpoint
Redis Session
pgvector
Artifact
LiteLLM Proxy
vLLM GPU Pool
| 组件 | 副本策略 | HPA 信号 | 见 |
|---|---|---|---|
| Gateway | min 3 跨 AZ | QPS / 429 | 07 |
| Runtime | CPU 60% 或队列深度 | 自定义 queue_depth |
21 §8 |
| LiteLLM | 无状态 2+ | 延迟 | 07 §10 |
| vLLM | GPU 占满率 | TTFT / KV 利用率 | 07 §3 |
5.2 环境策略
| 环境 | LLM | 数据 | 发布 |
|---|---|---|---|
| dev | 共享 cheap 模型 | 脱敏副本 | 任意 |
| staging | 生产同 schema 小流量 | 合成+抽样真数据 | eval gate |
| prod | 多模型路由 | 真数据分级 | 金丝雀 + prompt rev |
反模式 :staging 无 eval gate;prod 直接改 prompt 无 version_pin 回滚。
5.3 多租户与隔离
| 层级 | 隔离方式 |
|---|---|
| 网络 | Namespace per 大租户 / Mesh AuthorizationPolicy |
| 数据 | tenant_id 行级 + 向量 metadata 过滤 |
| 算力 | 预算配额 + 独立 queue |
| 模型 | LiteLLM key per tenant |
6. 安全视图(Security View · 横切)
6.1 STRIDE 映射(Agent 特化)
| STRIDE | Agent 威胁 | 控制 |
|---|---|---|
| S | 伪造 Webhook 触发任务 | mTLS + HMAC 签名 |
| T | 篡改 tool 响应 | TLS + 响应签名(高敏) |
| R | 普通用户提权调 admin tool | RBAC + OPA |
| I | 注入泄露其他租户 session | 租户隔离 + 最小上下文 |
| D | 疯狂调 LLM 打穿预算 | 限流 + 预算熔断 |
| E | 审计日志被删 | append-only + SIEM |
→ 四层防御 17 §2。
6.2 纵深防御(Agent 栈)
#mermaid-svg-MuK2IYOMxozEh64s{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-MuK2IYOMxozEh64s .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-MuK2IYOMxozEh64s .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-MuK2IYOMxozEh64s .error-icon{fill:#552222;}#mermaid-svg-MuK2IYOMxozEh64s .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-MuK2IYOMxozEh64s .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-MuK2IYOMxozEh64s .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-MuK2IYOMxozEh64s .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-MuK2IYOMxozEh64s .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-MuK2IYOMxozEh64s .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-MuK2IYOMxozEh64s .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-MuK2IYOMxozEh64s .marker{fill:#333333;stroke:#333333;}#mermaid-svg-MuK2IYOMxozEh64s .marker.cross{stroke:#333333;}#mermaid-svg-MuK2IYOMxozEh64s svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-MuK2IYOMxozEh64s p{margin:0;}#mermaid-svg-MuK2IYOMxozEh64s .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-MuK2IYOMxozEh64s .cluster-label text{fill:#333;}#mermaid-svg-MuK2IYOMxozEh64s .cluster-label span{color:#333;}#mermaid-svg-MuK2IYOMxozEh64s .cluster-label span p{background-color:transparent;}#mermaid-svg-MuK2IYOMxozEh64s .label text,#mermaid-svg-MuK2IYOMxozEh64s span{fill:#333;color:#333;}#mermaid-svg-MuK2IYOMxozEh64s .node rect,#mermaid-svg-MuK2IYOMxozEh64s .node circle,#mermaid-svg-MuK2IYOMxozEh64s .node ellipse,#mermaid-svg-MuK2IYOMxozEh64s .node polygon,#mermaid-svg-MuK2IYOMxozEh64s .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-MuK2IYOMxozEh64s .rough-node .label text,#mermaid-svg-MuK2IYOMxozEh64s .node .label text,#mermaid-svg-MuK2IYOMxozEh64s .image-shape .label,#mermaid-svg-MuK2IYOMxozEh64s .icon-shape .label{text-anchor:middle;}#mermaid-svg-MuK2IYOMxozEh64s .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-MuK2IYOMxozEh64s .rough-node .label,#mermaid-svg-MuK2IYOMxozEh64s .node .label,#mermaid-svg-MuK2IYOMxozEh64s .image-shape .label,#mermaid-svg-MuK2IYOMxozEh64s .icon-shape .label{text-align:center;}#mermaid-svg-MuK2IYOMxozEh64s .node.clickable{cursor:pointer;}#mermaid-svg-MuK2IYOMxozEh64s .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-MuK2IYOMxozEh64s .arrowheadPath{fill:#333333;}#mermaid-svg-MuK2IYOMxozEh64s .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-MuK2IYOMxozEh64s .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-MuK2IYOMxozEh64s .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-MuK2IYOMxozEh64s .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-MuK2IYOMxozEh64s .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-MuK2IYOMxozEh64s .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-MuK2IYOMxozEh64s .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-MuK2IYOMxozEh64s .cluster text{fill:#333;}#mermaid-svg-MuK2IYOMxozEh64s .cluster span{color:#333;}#mermaid-svg-MuK2IYOMxozEh64s 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-MuK2IYOMxozEh64s .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-MuK2IYOMxozEh64s rect.text{fill:none;stroke-width:0;}#mermaid-svg-MuK2IYOMxozEh64s .icon-shape,#mermaid-svg-MuK2IYOMxozEh64s .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-MuK2IYOMxozEh64s .icon-shape p,#mermaid-svg-MuK2IYOMxozEh64s .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-MuK2IYOMxozEh64s .icon-shape .label rect,#mermaid-svg-MuK2IYOMxozEh64s .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-MuK2IYOMxozEh64s .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-MuK2IYOMxozEh64s .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-MuK2IYOMxozEh64s :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 边界 WAF / Bot 检测
Gateway JWT / 限流
控制面 Policy / HITL
输入 Guardrails / 注入
Tool schema + 最小权限
输出 Guardrails / citation
Audit + 红队 + SIEM
| 层 | 必答面试点 |
|---|---|
| L3 | 写操作不能只在 prompt 禁止 |
| L5 | MCP server 也要鉴权 |
| L6 | 金额/库存必须来自 tool JSON |
6.3 安全视图反模式
| 反模式 | 案例锚点 |
|---|---|
| prompt 当防火墙 | 13 §15.1 误退款 |
| trace_id 幂等 | 04 §8 退款重试 |
| 工具过度授权 | 客服 Agent 带 admin_* tool |
7. 集成视图(Integration View)
7.1 与企业架构对齐
#mermaid-svg-56SmONAbF3BLt2Yq{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-56SmONAbF3BLt2Yq .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-56SmONAbF3BLt2Yq .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-56SmONAbF3BLt2Yq .error-icon{fill:#552222;}#mermaid-svg-56SmONAbF3BLt2Yq .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-56SmONAbF3BLt2Yq .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-56SmONAbF3BLt2Yq .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-56SmONAbF3BLt2Yq .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-56SmONAbF3BLt2Yq .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-56SmONAbF3BLt2Yq .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-56SmONAbF3BLt2Yq .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-56SmONAbF3BLt2Yq .marker{fill:#333333;stroke:#333333;}#mermaid-svg-56SmONAbF3BLt2Yq .marker.cross{stroke:#333333;}#mermaid-svg-56SmONAbF3BLt2Yq svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-56SmONAbF3BLt2Yq p{margin:0;}#mermaid-svg-56SmONAbF3BLt2Yq .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-56SmONAbF3BLt2Yq .cluster-label text{fill:#333;}#mermaid-svg-56SmONAbF3BLt2Yq .cluster-label span{color:#333;}#mermaid-svg-56SmONAbF3BLt2Yq .cluster-label span p{background-color:transparent;}#mermaid-svg-56SmONAbF3BLt2Yq .label text,#mermaid-svg-56SmONAbF3BLt2Yq span{fill:#333;color:#333;}#mermaid-svg-56SmONAbF3BLt2Yq .node rect,#mermaid-svg-56SmONAbF3BLt2Yq .node circle,#mermaid-svg-56SmONAbF3BLt2Yq .node ellipse,#mermaid-svg-56SmONAbF3BLt2Yq .node polygon,#mermaid-svg-56SmONAbF3BLt2Yq .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-56SmONAbF3BLt2Yq .rough-node .label text,#mermaid-svg-56SmONAbF3BLt2Yq .node .label text,#mermaid-svg-56SmONAbF3BLt2Yq .image-shape .label,#mermaid-svg-56SmONAbF3BLt2Yq .icon-shape .label{text-anchor:middle;}#mermaid-svg-56SmONAbF3BLt2Yq .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-56SmONAbF3BLt2Yq .rough-node .label,#mermaid-svg-56SmONAbF3BLt2Yq .node .label,#mermaid-svg-56SmONAbF3BLt2Yq .image-shape .label,#mermaid-svg-56SmONAbF3BLt2Yq .icon-shape .label{text-align:center;}#mermaid-svg-56SmONAbF3BLt2Yq .node.clickable{cursor:pointer;}#mermaid-svg-56SmONAbF3BLt2Yq .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-56SmONAbF3BLt2Yq .arrowheadPath{fill:#333333;}#mermaid-svg-56SmONAbF3BLt2Yq .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-56SmONAbF3BLt2Yq .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-56SmONAbF3BLt2Yq .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-56SmONAbF3BLt2Yq .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-56SmONAbF3BLt2Yq .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-56SmONAbF3BLt2Yq .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-56SmONAbF3BLt2Yq .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-56SmONAbF3BLt2Yq .cluster text{fill:#333;}#mermaid-svg-56SmONAbF3BLt2Yq .cluster span{color:#333;}#mermaid-svg-56SmONAbF3BLt2Yq 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-56SmONAbF3BLt2Yq .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-56SmONAbF3BLt2Yq rect.text{fill:none;stroke-width:0;}#mermaid-svg-56SmONAbF3BLt2Yq .icon-shape,#mermaid-svg-56SmONAbF3BLt2Yq .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-56SmONAbF3BLt2Yq .icon-shape p,#mermaid-svg-56SmONAbF3BLt2Yq .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-56SmONAbF3BLt2Yq .icon-shape .label rect,#mermaid-svg-56SmONAbF3BLt2Yq .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-56SmONAbF3BLt2Yq .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-56SmONAbF3BLt2Yq .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-56SmONAbF3BLt2Yq :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 演进预留
企业存量
Agent 平台
Channels
App / Web
Ops Webhook
AI BFF
Agent Platform
微服务域
Workflow Camunda/Temporal
Kafka
Istio Mesh
Internal Developer Platform
AI Gateway 24
| 集成模式 | 用于 | Agent 注意点 |
|---|---|---|
| 同步 API | 读多写少、低延迟 | 超时 + 熔断;缓存读 |
| 异步事件 | 状态通知、解耦 | 消费幂等;与 Agent 任务 id 关联 |
| Outbox | Agent 触发业务写 | 业务库与 outbox 同事务 |
| Saga | 多步写跨服务 | 补偿步骤人审或脚本 |
| Workflow | 固定审批链 | Agent 生成草案,Workflow 执行 |
7.2 微服务与 Service Mesh
| 能力 | Mesh 提供 | Agent 用法 |
|---|---|---|
| mTLS | 服务间加密 | Tool 调域内 gRPC |
| 流量 | 金丝雀 | Runtime 新版本 5% |
| 授权 | AuthorizationPolicy | 限制 Runtime→支付域 |
| 观测 | trace 传播 | 跨 Agent→订单服务 |
→ mesh、governance。
7.3 AI Gateway(规划 24)契约预留
| 能力 | 统一入口价值 | 本篇占位 |
|---|---|---|
| 模型路由 | 租户级 quota | Header X-Model-Route |
| Prompt 注册 | 版本化 | prompt_rev in version_pin |
| Tool 注册 | 中心化 schema | Tool Router 拉取 |
| 策略 | 全链路 Guardrails | 与 17 合并 |
7.4 IDP 与平台工程
| IDP 能力 | Agent 团队消费 |
|---|---|
| 模板仓库 | agent-service-springai golden path |
| 密钥 | Vault 注入 LITELLM_API_KEY |
| 观测 | 自动注册 dashboard |
| 发布 | ArgoCD + eval gate |
→ microservices-governance §07 IDP。
7.5 Saga + Outbox 与 Agent 写操作
原则 :Agent 不充当 分布式事务协调器;长事务用 Saga ,单服务写用 Outbox。
库存服务 Kafka Outbox 订单服务 Agent Executor 库存服务 Kafka Outbox 订单服务 Agent Executor #mermaid-svg-Rpy1i8R1U1lNtImT{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-Rpy1i8R1U1lNtImT .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-Rpy1i8R1U1lNtImT .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-Rpy1i8R1U1lNtImT .error-icon{fill:#552222;}#mermaid-svg-Rpy1i8R1U1lNtImT .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-Rpy1i8R1U1lNtImT .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-Rpy1i8R1U1lNtImT .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-Rpy1i8R1U1lNtImT .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-Rpy1i8R1U1lNtImT .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-Rpy1i8R1U1lNtImT .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-Rpy1i8R1U1lNtImT .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-Rpy1i8R1U1lNtImT .marker{fill:#333333;stroke:#333333;}#mermaid-svg-Rpy1i8R1U1lNtImT .marker.cross{stroke:#333333;}#mermaid-svg-Rpy1i8R1U1lNtImT svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-Rpy1i8R1U1lNtImT p{margin:0;}#mermaid-svg-Rpy1i8R1U1lNtImT .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-Rpy1i8R1U1lNtImT text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-Rpy1i8R1U1lNtImT .actor-line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-Rpy1i8R1U1lNtImT .innerArc{stroke-width:1.5;stroke-dasharray:none;}#mermaid-svg-Rpy1i8R1U1lNtImT .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-Rpy1i8R1U1lNtImT .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-Rpy1i8R1U1lNtImT #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-Rpy1i8R1U1lNtImT .sequenceNumber{fill:white;}#mermaid-svg-Rpy1i8R1U1lNtImT #sequencenumber{fill:#333;}#mermaid-svg-Rpy1i8R1U1lNtImT #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-Rpy1i8R1U1lNtImT .messageText{fill:#333;stroke:none;}#mermaid-svg-Rpy1i8R1U1lNtImT .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-Rpy1i8R1U1lNtImT .labelText,#mermaid-svg-Rpy1i8R1U1lNtImT .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-Rpy1i8R1U1lNtImT .loopText,#mermaid-svg-Rpy1i8R1U1lNtImT .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-Rpy1i8R1U1lNtImT .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-Rpy1i8R1U1lNtImT .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-Rpy1i8R1U1lNtImT .noteText,#mermaid-svg-Rpy1i8R1U1lNtImT .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-Rpy1i8R1U1lNtImT .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-Rpy1i8R1U1lNtImT .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-Rpy1i8R1U1lNtImT .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-Rpy1i8R1U1lNtImT .actorPopupMenu{position:absolute;}#mermaid-svg-Rpy1i8R1U1lNtImT .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-Rpy1i8R1U1lNtImT .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-Rpy1i8R1U1lNtImT .actor-man circle,#mermaid-svg-Rpy1i8R1U1lNtImT line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-Rpy1i8R1U1lNtImT :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 失败补偿由 Saga 定义,非 LLM 即兴 create_refund (idempotency_key) 业务表 + Outbox 同事务 202 accepted CDC 投递 RefundCreated 消费恢复库存
| 步骤 | 谁编排 | Agent 角色 |
|---|---|---|
| 提议退款 | Agent | 生成参数 + 证据 |
| 执行退款 | 订单服务 API | 调用一次;不循环重试乱改 key |
| 后续库存 | Saga 订阅者 | 不让 LLM 直接调库存写 |
反模式:Agent 逐步调 5 个写 API 无 Saga;Outbox 未用导致双写不一致。
7.6 集成视图反模式
| 反模式 | 后果 |
|---|---|
| Agent 直连核心库 | 绕过领域边界 |
| 无防腐层 | schema 变更击穿 prompt |
| 用 Chat 接口做批处理 | 无 checkpoint 巨贵 |
8. 演进视图(Evolution View · 第七视图)
8.1 四阶段 maturity ladder
#mermaid-svg-83aL6dDkCVcNbWNG{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-83aL6dDkCVcNbWNG .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-83aL6dDkCVcNbWNG .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-83aL6dDkCVcNbWNG .error-icon{fill:#552222;}#mermaid-svg-83aL6dDkCVcNbWNG .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-83aL6dDkCVcNbWNG .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-83aL6dDkCVcNbWNG .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-83aL6dDkCVcNbWNG .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-83aL6dDkCVcNbWNG .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-83aL6dDkCVcNbWNG .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-83aL6dDkCVcNbWNG .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-83aL6dDkCVcNbWNG .marker{fill:#333333;stroke:#333333;}#mermaid-svg-83aL6dDkCVcNbWNG .marker.cross{stroke:#333333;}#mermaid-svg-83aL6dDkCVcNbWNG svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-83aL6dDkCVcNbWNG p{margin:0;}#mermaid-svg-83aL6dDkCVcNbWNG .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-83aL6dDkCVcNbWNG .cluster-label text{fill:#333;}#mermaid-svg-83aL6dDkCVcNbWNG .cluster-label span{color:#333;}#mermaid-svg-83aL6dDkCVcNbWNG .cluster-label span p{background-color:transparent;}#mermaid-svg-83aL6dDkCVcNbWNG .label text,#mermaid-svg-83aL6dDkCVcNbWNG span{fill:#333;color:#333;}#mermaid-svg-83aL6dDkCVcNbWNG .node rect,#mermaid-svg-83aL6dDkCVcNbWNG .node circle,#mermaid-svg-83aL6dDkCVcNbWNG .node ellipse,#mermaid-svg-83aL6dDkCVcNbWNG .node polygon,#mermaid-svg-83aL6dDkCVcNbWNG .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-83aL6dDkCVcNbWNG .rough-node .label text,#mermaid-svg-83aL6dDkCVcNbWNG .node .label text,#mermaid-svg-83aL6dDkCVcNbWNG .image-shape .label,#mermaid-svg-83aL6dDkCVcNbWNG .icon-shape .label{text-anchor:middle;}#mermaid-svg-83aL6dDkCVcNbWNG .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-83aL6dDkCVcNbWNG .rough-node .label,#mermaid-svg-83aL6dDkCVcNbWNG .node .label,#mermaid-svg-83aL6dDkCVcNbWNG .image-shape .label,#mermaid-svg-83aL6dDkCVcNbWNG .icon-shape .label{text-align:center;}#mermaid-svg-83aL6dDkCVcNbWNG .node.clickable{cursor:pointer;}#mermaid-svg-83aL6dDkCVcNbWNG .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-83aL6dDkCVcNbWNG .arrowheadPath{fill:#333333;}#mermaid-svg-83aL6dDkCVcNbWNG .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-83aL6dDkCVcNbWNG .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-83aL6dDkCVcNbWNG .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-83aL6dDkCVcNbWNG .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-83aL6dDkCVcNbWNG .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-83aL6dDkCVcNbWNG .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-83aL6dDkCVcNbWNG .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-83aL6dDkCVcNbWNG .cluster text{fill:#333;}#mermaid-svg-83aL6dDkCVcNbWNG .cluster span{color:#333;}#mermaid-svg-83aL6dDkCVcNbWNG 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-83aL6dDkCVcNbWNG .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-83aL6dDkCVcNbWNG rect.text{fill:none;stroke-width:0;}#mermaid-svg-83aL6dDkCVcNbWNG .icon-shape,#mermaid-svg-83aL6dDkCVcNbWNG .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-83aL6dDkCVcNbWNG .icon-shape p,#mermaid-svg-83aL6dDkCVcNbWNG .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-83aL6dDkCVcNbWNG .icon-shape .label rect,#mermaid-svg-83aL6dDkCVcNbWNG .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-83aL6dDkCVcNbWNG .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-83aL6dDkCVcNbWNG .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-83aL6dDkCVcNbWNG :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} eval≥80% 再进
写操作 Saga 化
企业治理就绪
Stage 1
单 Agent 有界循环
Stage 2
多 Agent 角色分工
Stage 3
Agent + Workflow 混合
Stage 4
Agent Mesh 联邦
| 阶段 | 特征 | 准入门槛 | 典型技术债 |
|---|---|---|---|
| 1 单 Agent | 一个 Runtime;DAG+≤8 步 | 有 checkpoint+trace | prompt 散落代码 |
| 2 多 Agent | Planner+Worker+Verifier | 单 Agent completion≥80% | 协调者 token 爆炸 |
| 3 +Workflow | 固定段 Camunda;可变段 Agent | 写操作全 HITL 或 Saga | 双编排打架 |
| 4 Agent Mesh | 跨域 Agent 注册发现;策略联邦 | AI Gateway+统一 eval | 无租户策略 |
→ 分期与 16 原型到生产 对齐。
8.2 迁移策略(Strangler for Agent)
| 遗留 | 目标 | 手法 |
|---|---|---|
| 规则客服 | Agent 只读辅助 | 并行流量 5% shadow |
| 单体会话 | 独立 Agent Svc | BFF 路由切换 |
| Dify 工作流 | Spring AI | 导出 DAG → 代码化 |
| 直连 OpenAI | LiteLLM | 改 base-url |
#mermaid-svg-FhvqNuLeyx5G4Ykp{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-FhvqNuLeyx5G4Ykp .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-FhvqNuLeyx5G4Ykp .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-FhvqNuLeyx5G4Ykp .error-icon{fill:#552222;}#mermaid-svg-FhvqNuLeyx5G4Ykp .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-FhvqNuLeyx5G4Ykp .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-FhvqNuLeyx5G4Ykp .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-FhvqNuLeyx5G4Ykp .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-FhvqNuLeyx5G4Ykp .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-FhvqNuLeyx5G4Ykp .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-FhvqNuLeyx5G4Ykp .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-FhvqNuLeyx5G4Ykp .marker{fill:#333333;stroke:#333333;}#mermaid-svg-FhvqNuLeyx5G4Ykp .marker.cross{stroke:#333333;}#mermaid-svg-FhvqNuLeyx5G4Ykp svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-FhvqNuLeyx5G4Ykp p{margin:0;}#mermaid-svg-FhvqNuLeyx5G4Ykp .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-FhvqNuLeyx5G4Ykp .cluster-label text{fill:#333;}#mermaid-svg-FhvqNuLeyx5G4Ykp .cluster-label span{color:#333;}#mermaid-svg-FhvqNuLeyx5G4Ykp .cluster-label span p{background-color:transparent;}#mermaid-svg-FhvqNuLeyx5G4Ykp .label text,#mermaid-svg-FhvqNuLeyx5G4Ykp span{fill:#333;color:#333;}#mermaid-svg-FhvqNuLeyx5G4Ykp .node rect,#mermaid-svg-FhvqNuLeyx5G4Ykp .node circle,#mermaid-svg-FhvqNuLeyx5G4Ykp .node ellipse,#mermaid-svg-FhvqNuLeyx5G4Ykp .node polygon,#mermaid-svg-FhvqNuLeyx5G4Ykp .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-FhvqNuLeyx5G4Ykp .rough-node .label text,#mermaid-svg-FhvqNuLeyx5G4Ykp .node .label text,#mermaid-svg-FhvqNuLeyx5G4Ykp .image-shape .label,#mermaid-svg-FhvqNuLeyx5G4Ykp .icon-shape .label{text-anchor:middle;}#mermaid-svg-FhvqNuLeyx5G4Ykp .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-FhvqNuLeyx5G4Ykp .rough-node .label,#mermaid-svg-FhvqNuLeyx5G4Ykp .node .label,#mermaid-svg-FhvqNuLeyx5G4Ykp .image-shape .label,#mermaid-svg-FhvqNuLeyx5G4Ykp .icon-shape .label{text-align:center;}#mermaid-svg-FhvqNuLeyx5G4Ykp .node.clickable{cursor:pointer;}#mermaid-svg-FhvqNuLeyx5G4Ykp .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-FhvqNuLeyx5G4Ykp .arrowheadPath{fill:#333333;}#mermaid-svg-FhvqNuLeyx5G4Ykp .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-FhvqNuLeyx5G4Ykp .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-FhvqNuLeyx5G4Ykp .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-FhvqNuLeyx5G4Ykp .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-FhvqNuLeyx5G4Ykp .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-FhvqNuLeyx5G4Ykp .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-FhvqNuLeyx5G4Ykp .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-FhvqNuLeyx5G4Ykp .cluster text{fill:#333;}#mermaid-svg-FhvqNuLeyx5G4Ykp .cluster span{color:#333;}#mermaid-svg-FhvqNuLeyx5G4Ykp 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-FhvqNuLeyx5G4Ykp .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-FhvqNuLeyx5G4Ykp rect.text{fill:none;stroke-width:0;}#mermaid-svg-FhvqNuLeyx5G4Ykp .icon-shape,#mermaid-svg-FhvqNuLeyx5G4Ykp .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-FhvqNuLeyx5G4Ykp .icon-shape p,#mermaid-svg-FhvqNuLeyx5G4Ykp .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-FhvqNuLeyx5G4Ykp .icon-shape .label rect,#mermaid-svg-FhvqNuLeyx5G4Ykp .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-FhvqNuLeyx5G4Ykp .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-FhvqNuLeyx5G4Ykp .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-FhvqNuLeyx5G4Ykp :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 95%
5%
优于
用户
路由%
遗留 FAQ
Agent 只读
Eval 对比
扩量 30%
8.3 版本与兼容契约
| 工件 | 版本策略 | 破坏兼容时 |
|---|---|---|
prompt_rev |
semver | eval 回归才升 major |
tool_schema_rev |
并存 2 版 30d | Agent 路由旧 schema |
kb_index_rev |
蓝绿索引 | 双读验证 citation |
model_alias |
LiteLLM 配置 | 灰度 10% 流量 |
8.4 演进视图反模式
| 反模式 | 后果 |
|---|---|
| 跳 Stage 2 上 Multi-Agent | 成本翻倍、completion 下降 |
| 无 eval gate 全量 | 线上幻觉事故 |
| Mesh 前无统一 trace | 跨域不可追 |
9. 跨视图一致性矩阵
| 决策 | 业务 | 应用 | 数据 | 部署 | 安全 | 集成 | 演进 |
|---|---|---|---|---|---|---|---|
| 上线写操作 Agent | HITL 必审 | 控制面 policy | audit 全量 | 独立队列 | write tool 标签 | Saga | Stage≥2 |
| 只读 FAQ | 无 HITL | 可纯 RAG | 无 checkpoint | 小副本 | 标准护栏 | 同步读 API | Stage 1 |
| 多 Agent | 角色清晰 | Coordinator | 共享 checkpoint 租户隔离 | HPA 按队列 | 跨 Agent 策略 | 事件总线 | Stage 2+ |
10. 45 分钟白板模拟题 · 满分参考答案
10.1 题目(面试官念)
设计一套 企业级客服 + 订单查询 Agent 平台 ,支持 App 与商家后台;可读订单/物流;退款/改址必须可控;日活 500 万,峰值 QPS 2 万(含非 Agent 流量);要可观测、可审计、可渐进从 FAQ 演进到 Agent。45 分钟。
10.2 时间盒
#mermaid-svg-5iqDlOo7PWrQ1hI9{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-5iqDlOo7PWrQ1hI9 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-5iqDlOo7PWrQ1hI9 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-5iqDlOo7PWrQ1hI9 .error-icon{fill:#552222;}#mermaid-svg-5iqDlOo7PWrQ1hI9 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-5iqDlOo7PWrQ1hI9 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-5iqDlOo7PWrQ1hI9 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-5iqDlOo7PWrQ1hI9 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-5iqDlOo7PWrQ1hI9 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-5iqDlOo7PWrQ1hI9 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-5iqDlOo7PWrQ1hI9 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-5iqDlOo7PWrQ1hI9 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-5iqDlOo7PWrQ1hI9 .marker.cross{stroke:#333333;}#mermaid-svg-5iqDlOo7PWrQ1hI9 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-5iqDlOo7PWrQ1hI9 p{margin:0;}#mermaid-svg-5iqDlOo7PWrQ1hI9 .mermaid-main-font{font-family:"trebuchet ms",verdana,arial,sans-serif;}#mermaid-svg-5iqDlOo7PWrQ1hI9 .exclude-range{fill:#eeeeee;}#mermaid-svg-5iqDlOo7PWrQ1hI9 .section{stroke:none;opacity:0.2;}#mermaid-svg-5iqDlOo7PWrQ1hI9 .section0{fill:rgba(102, 102, 255, 0.49);}#mermaid-svg-5iqDlOo7PWrQ1hI9 .section2{fill:#fff400;}#mermaid-svg-5iqDlOo7PWrQ1hI9 .section1,#mermaid-svg-5iqDlOo7PWrQ1hI9 .section3{fill:white;opacity:0.2;}#mermaid-svg-5iqDlOo7PWrQ1hI9 .sectionTitle0{fill:#333;}#mermaid-svg-5iqDlOo7PWrQ1hI9 .sectionTitle1{fill:#333;}#mermaid-svg-5iqDlOo7PWrQ1hI9 .sectionTitle2{fill:#333;}#mermaid-svg-5iqDlOo7PWrQ1hI9 .sectionTitle3{fill:#333;}#mermaid-svg-5iqDlOo7PWrQ1hI9 .sectionTitle{text-anchor:start;font-family:"trebuchet ms",verdana,arial,sans-serif;}#mermaid-svg-5iqDlOo7PWrQ1hI9 .grid .tick{stroke:lightgrey;opacity:0.8;shape-rendering:crispEdges;}#mermaid-svg-5iqDlOo7PWrQ1hI9 .grid .tick text{font-family:"trebuchet ms",verdana,arial,sans-serif;fill:#333;}#mermaid-svg-5iqDlOo7PWrQ1hI9 .grid path{stroke-width:0;}#mermaid-svg-5iqDlOo7PWrQ1hI9 .today{fill:none;stroke:red;stroke-width:2px;}#mermaid-svg-5iqDlOo7PWrQ1hI9 .task{stroke-width:2;}#mermaid-svg-5iqDlOo7PWrQ1hI9 .taskText{text-anchor:middle;font-family:"trebuchet ms",verdana,arial,sans-serif;}#mermaid-svg-5iqDlOo7PWrQ1hI9 .taskTextOutsideRight{fill:black;text-anchor:start;font-family:"trebuchet ms",verdana,arial,sans-serif;}#mermaid-svg-5iqDlOo7PWrQ1hI9 .taskTextOutsideLeft{fill:black;text-anchor:end;}#mermaid-svg-5iqDlOo7PWrQ1hI9 .task.clickable{cursor:pointer;}#mermaid-svg-5iqDlOo7PWrQ1hI9 .taskText.clickable{cursor:pointer;fill:#003163!important;font-weight:bold;}#mermaid-svg-5iqDlOo7PWrQ1hI9 .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163!important;font-weight:bold;}#mermaid-svg-5iqDlOo7PWrQ1hI9 .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163!important;font-weight:bold;}#mermaid-svg-5iqDlOo7PWrQ1hI9 .taskText0,#mermaid-svg-5iqDlOo7PWrQ1hI9 .taskText1,#mermaid-svg-5iqDlOo7PWrQ1hI9 .taskText2,#mermaid-svg-5iqDlOo7PWrQ1hI9 .taskText3{fill:white;}#mermaid-svg-5iqDlOo7PWrQ1hI9 .task0,#mermaid-svg-5iqDlOo7PWrQ1hI9 .task1,#mermaid-svg-5iqDlOo7PWrQ1hI9 .task2,#mermaid-svg-5iqDlOo7PWrQ1hI9 .task3{fill:#8a90dd;stroke:#534fbc;}#mermaid-svg-5iqDlOo7PWrQ1hI9 .taskTextOutside0,#mermaid-svg-5iqDlOo7PWrQ1hI9 .taskTextOutside2{fill:black;}#mermaid-svg-5iqDlOo7PWrQ1hI9 .taskTextOutside1,#mermaid-svg-5iqDlOo7PWrQ1hI9 .taskTextOutside3{fill:black;}#mermaid-svg-5iqDlOo7PWrQ1hI9 .active0,#mermaid-svg-5iqDlOo7PWrQ1hI9 .active1,#mermaid-svg-5iqDlOo7PWrQ1hI9 .active2,#mermaid-svg-5iqDlOo7PWrQ1hI9 .active3{fill:#bfc7ff;stroke:#534fbc;}#mermaid-svg-5iqDlOo7PWrQ1hI9 .activeText0,#mermaid-svg-5iqDlOo7PWrQ1hI9 .activeText1,#mermaid-svg-5iqDlOo7PWrQ1hI9 .activeText2,#mermaid-svg-5iqDlOo7PWrQ1hI9 .activeText3{fill:black!important;}#mermaid-svg-5iqDlOo7PWrQ1hI9 .done0,#mermaid-svg-5iqDlOo7PWrQ1hI9 .done1,#mermaid-svg-5iqDlOo7PWrQ1hI9 .done2,#mermaid-svg-5iqDlOo7PWrQ1hI9 .done3{stroke:grey;fill:lightgrey;stroke-width:2;}#mermaid-svg-5iqDlOo7PWrQ1hI9 .doneText0,#mermaid-svg-5iqDlOo7PWrQ1hI9 .doneText1,#mermaid-svg-5iqDlOo7PWrQ1hI9 .doneText2,#mermaid-svg-5iqDlOo7PWrQ1hI9 .doneText3{fill:black!important;}#mermaid-svg-5iqDlOo7PWrQ1hI9 .doneText0.taskTextOutsideLeft,#mermaid-svg-5iqDlOo7PWrQ1hI9 .doneText0.taskTextOutsideRight,#mermaid-svg-5iqDlOo7PWrQ1hI9 .doneText1.taskTextOutsideLeft,#mermaid-svg-5iqDlOo7PWrQ1hI9 .doneText1.taskTextOutsideRight,#mermaid-svg-5iqDlOo7PWrQ1hI9 .doneText2.taskTextOutsideLeft,#mermaid-svg-5iqDlOo7PWrQ1hI9 .doneText2.taskTextOutsideRight,#mermaid-svg-5iqDlOo7PWrQ1hI9 .doneText3.taskTextOutsideLeft,#mermaid-svg-5iqDlOo7PWrQ1hI9 .doneText3.taskTextOutsideRight{fill:black!important;}#mermaid-svg-5iqDlOo7PWrQ1hI9 .crit0,#mermaid-svg-5iqDlOo7PWrQ1hI9 .crit1,#mermaid-svg-5iqDlOo7PWrQ1hI9 .crit2,#mermaid-svg-5iqDlOo7PWrQ1hI9 .crit3{stroke:#ff8888;fill:red;stroke-width:2;}#mermaid-svg-5iqDlOo7PWrQ1hI9 .activeCrit0,#mermaid-svg-5iqDlOo7PWrQ1hI9 .activeCrit1,#mermaid-svg-5iqDlOo7PWrQ1hI9 .activeCrit2,#mermaid-svg-5iqDlOo7PWrQ1hI9 .activeCrit3{stroke:#ff8888;fill:#bfc7ff;stroke-width:2;}#mermaid-svg-5iqDlOo7PWrQ1hI9 .doneCrit0,#mermaid-svg-5iqDlOo7PWrQ1hI9 .doneCrit1,#mermaid-svg-5iqDlOo7PWrQ1hI9 .doneCrit2,#mermaid-svg-5iqDlOo7PWrQ1hI9 .doneCrit3{stroke:#ff8888;fill:lightgrey;stroke-width:2;cursor:pointer;shape-rendering:crispEdges;}#mermaid-svg-5iqDlOo7PWrQ1hI9 .milestone{transform:rotate(45deg) scale(0.8,0.8);}#mermaid-svg-5iqDlOo7PWrQ1hI9 .milestoneText{font-style:italic;}#mermaid-svg-5iqDlOo7PWrQ1hI9 .doneCritText0,#mermaid-svg-5iqDlOo7PWrQ1hI9 .doneCritText1,#mermaid-svg-5iqDlOo7PWrQ1hI9 .doneCritText2,#mermaid-svg-5iqDlOo7PWrQ1hI9 .doneCritText3{fill:black!important;}#mermaid-svg-5iqDlOo7PWrQ1hI9 .doneCritText0.taskTextOutsideLeft,#mermaid-svg-5iqDlOo7PWrQ1hI9 .doneCritText0.taskTextOutsideRight,#mermaid-svg-5iqDlOo7PWrQ1hI9 .doneCritText1.taskTextOutsideLeft,#mermaid-svg-5iqDlOo7PWrQ1hI9 .doneCritText1.taskTextOutsideRight,#mermaid-svg-5iqDlOo7PWrQ1hI9 .doneCritText2.taskTextOutsideLeft,#mermaid-svg-5iqDlOo7PWrQ1hI9 .doneCritText2.taskTextOutsideRight,#mermaid-svg-5iqDlOo7PWrQ1hI9 .doneCritText3.taskTextOutsideLeft,#mermaid-svg-5iqDlOo7PWrQ1hI9 .doneCritText3.taskTextOutsideRight{fill:black!important;}#mermaid-svg-5iqDlOo7PWrQ1hI9 .vert{stroke:navy;}#mermaid-svg-5iqDlOo7PWrQ1hI9 .vertText{font-size:15px;text-anchor:middle;fill:navy!important;}#mermaid-svg-5iqDlOo7PWrQ1hI9 .activeCritText0,#mermaid-svg-5iqDlOo7PWrQ1hI9 .activeCritText1,#mermaid-svg-5iqDlOo7PWrQ1hI9 .activeCritText2,#mermaid-svg-5iqDlOo7PWrQ1hI9 .activeCritText3{fill:black!important;}#mermaid-svg-5iqDlOo7PWrQ1hI9 .titleText{text-anchor:middle;font-size:18px;fill:#333;font-family:"trebuchet ms",verdana,arial,sans-serif;}#mermaid-svg-5iqDlOo7PWrQ1hI9 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 00:00 05:00 10:00 15:00 20:00 25:00 30:00 35:00 40:00 45:00 需求与范围 业务+验收 应用架构 数据+集成 部署+安全 演进+风险 Agent 平台 45min
10.3 需求澄清(5 min)--- 必问
| 问题 | 假设(写下来) |
|---|---|
| Agent 流量占比? | 峰值 2k QPS Agent(10%) |
| 写操作? | 退款/改址 禁止自动执行 → HITL |
| 延迟? | 读链路 p99 <3s(含 RAG+1 次 tool) |
| 多租户? | 平台商家 + 自营;tenant_id 隔离 |
| 合规? | 对话留存 30d;audit 1y |
范围切割:做 Agent 平台 + BFF;不做订单核心重构;支付引用支付域 API。
10.4 满分答 · 业务视图(5 min)
L2 能力:查询 (订单/物流)、建议 (退款原因分析)、执行 (仅 HITL 后)。
价值流:意图识别 → 只读 tool → 带 citation 回答;写意图 → 工单 + 人工。
验收 :completion_rate;citation_rate≥80%;写操作 hitl_rate=100%。
10.5 满分答 · 应用视图(12 min)
画 §3.1 总图,强调:
- 控制面 :JWT、OPA、
max_cost_usd、幂等登记、HITL 队列。 - 数据面:LangGraph/Spring AI;DAG 骨架;Planner 滚动 3--5 步。
- Tool Router :订单/物流 read ;
suggest_refund只出草案;execute_refunddisabled 除非 HITL token。 - Guardrails:金额只信 tool JSON。
- Obs :
trace_idstep 级;$/task大盘。
口述 SLA:Gateway 99.99%;Runtime 99.9%;LLM 降级 L2/L3。
10.6 满分答 · 数据 + 集成(10 min)
- Checkpoint PG ;Session Redis ;向量 pgvector
kb_version。 - 集成:BFF → Mesh → 订单 gRPC;异步 Outbox 发
RefundRequested(非 Agent 直写库存)。 - Saga:退款编排由 订单域 消费事件驱动,Agent 不协调多写。
容量粗算:2000 QPS * 3k tokens * $0.003/1k ≈ $18/s 峰值 → 需缓存命中 + 小模型路由 + 预算熔断。
10.7 满分答 · 部署 + 安全 + 演进(13 min)
- 部署:K8s 双 AZ;Runtime HPA;LiteLLM → vLLM;staging eval gate。
- 安全:四层防御;STRIDE 表;客服 tool 最小权限。
- 演进:Stage1 只读 Agent 5% 流量 → eval 优于 FAQ 再扩;Stage3 退款走 Workflow+HITL。
收尾风险:LLM 超时、RAG 旧政策、tool 重试幂等 ------ 各给一条降级。
11. 高频口述题 · 60--90 秒满分答(12 题)
11.1 Agent 和 Chatbot 架构本质区别?
Q1:Agent 和 Chatbot 架构本质区别?
答(60--90s) :Chatbot 以 单轮生成 为中心,状态主要是会话历史;Agent 是 带副作用的多步控制器,必须有 tool、验收标准、checkpoint、控制面策略。生产上 Agent 需要 step 级 trace、幂等写、HITL,成本模型按 /task 而不是 /message。
11.2 控制面和数据面为什么要分?
Q2:控制面和数据面为什么要分?
答(60--90s) :控制面处理 能不能做 (身份、预算、风险、审批、幂等登记),要快、要确定性;数据面处理 怎么做(plan、LLM、tool),可以弹性扩缩。混在一起会导致策略散落 prompt、无法审计、无法对写操作做统一熔断。
11.3 生产默认为什么推荐 DAG+有界循环而不是纯 ReAct?
Q3:生产默认为什么推荐 DAG+有界循环而不是纯 ReAct?
答(60--90s) :纯 ReAct 容易 死循环、短视、成本不可控 ;DAG 把确定性业务流程固化,只在局部用 ReAct 处理观测异常。配合 max_steps、同 tool 熔断、verify 闸门,SLO 可签。见 13 §2。
11.4 Checkpoint 和向量库有什么区别?
Q4:Checkpoint 和向量库有什么区别?
答(60--90s) :Checkpoint 存 任务状态机 (plan、completed_steps、version_pin),PostgreSQL 强一致;向量库存 语义记忆和 RAG ,最终一致。混用会导致续跑失败或检索慢拖垮主路径。见 21 §3.2。
11.5 Agent 写操作为什么必须 HITL 或 Saga?
Q5:Agent 写操作为什么必须 HITL 或 Saga?
答(60--90s) :LLM 非确定性,不能作为分布式事务协调器。写操作要么 人审 (客服退款),要么 领域服务+Outbox/Saga (订单域编排)。Agent 只应提交 幂等、可审计 的一次请求。
11.6 如何定义和度量 Agent 完成率?
Q6:如何定义和度量 Agent 完成率?
答(60--90s) :先定义 success_criteria(机器可验优先),如「订单号已返回且状态=已发货」。指标:completion_rate、平均 steps、$/task、人工接手率。发布用 golden set + 回归 eval,见 06。
11.7 Multi-Agent 什么时候值得上?
Q7:Multi-Agent 什么时候值得上?
答(60--90s) :当 子任务可并行、上下文可隔离、角色 skill 差异大 且单 Agent completion<目标;否则 Coordinator token 开销会让成本上升。准入:单 Agent eval≥80%。见 04 §5。
11.8 Guardrails 和 system prompt 边界?
Q8:Guardrails 和 system prompt 边界?
答(60--90s) :system prompt 是 软约束 ,模型可能违反;Guardrails 是 硬校验 (schema、注入检测、PII、引用来源)。金额/库存/政策必须 tool JSON + citation ,失败拒答。见 17 §4。
11.9 Agent 平台怎么做多租户?
Q9:Agent 平台怎么做多租户?
答(60--90s) :链路贯穿 tenant_id:Gateway、checkpoint 行级、向量 metadata 过滤、LiteLLM key 配额、Mesh AuthorizationPolicy。删除权要级联擦除 session+向量+checkpoint。
11.10 和微服务集成时防腐层怎么画?
Q10:和微服务集成时防腐层怎么画?
答(60--90s) :Agent 只调 BFF/领域 API ,不直连库。API schema 版本进 version_pin;下游变更由适配层吸收,避免 prompt 里塞 SQL/表结构。
11.11 演进 Stage 1→2 的最大风险?
Q11:演进 Stage 1→2 的最大风险?
答(60--90s) :多 Agent 协调成本与一致性:重复规划、互相矛盾 observation。治理上要有单一 Coordinator、共享 checkpoint、统一 eval,否则 completion 和成本双恶化。
11.12 AI Gateway(24)上线后 Agent 架构怎么变?
Q12:AI Gateway(24)上线后 Agent 架构怎么变?
答(60--90s) :模型路由、prompt 注册、tool 注册、全局策略 外提到 Gateway;Runtime 变薄,专注编排与状态。迁移期双写路由头,灰度租户。
12. STAR-M-P 事故复盘:Agent 平台跨租户记忆泄漏
| 字段 | 内容 |
|---|---|
| S | 某多租户客服 Agent 上线 3 天后,商家 A 会话出现商家 B 的订单尾号与金额片段,客服截图外传,监管问询。 |
| T | 24h 内止血并证明影响面;7 天内修复机制防复发。 |
| A | 立即关闭跨 session 语义记忆召回;按 tenant_id 扫 audit 影响 127 会话;trace 显示 pgvector 检索 未带 tenant filter ,且 Mem0 同步 job 写入了错误 namespace;回滚 mem_sync job,热修 Router 强制 metadata filter;补 eval 用例「跨租户泄露」100 条。 |
| R | 0 新增泄漏 72h;对外公告影响 127 会话;商家补偿流程启动。 |
| P | cross_tenant_retrieval_rate 实时告警;周级红队;租户隔离纳入 P0 发布门禁。 |
| M | ① 向量检索 API 强制 tenant_id 入参,缺失则拒绝;② Checkpoint/Session key 加租户前缀;③ 记忆写入双写校验 namespace;④ CI 集成跨租户 eval。 |
根因链:应用视图 Memory 组件契约缺失 → 数据视图向量 metadata 未治理 → 安全视图 I 威胁未测。
13. Master Checklist(P0 / P1 / P2)
13.1 P0 --- 上线阻断(必须全绿)
- P0-01 控制面:写操作 risk 标签 + HITL/Policy
- P0-02 幂等:写 API 用 business idempotency_key(非 trace_id)
- P0-03 Checkpoint:PostgreSQL 外置,任务可 resume
- P0-04 护栏:输出 schema + 金额/库存仅 tool JSON
- P0-05 观测:trace_id + step 级 span 完整率>99%
- P0-06 租户:向量/ session / checkpoint 全链路 tenant_id
- P0-07 预算:max_steps + max_cost_usd 硬熔断
- P0-08 工具:schema 版本化;write tool 默认禁或 HITL
- P0-09 集成:不直连业务库;写走领域 API/Outbox
- P0-10 eval:发布门禁 golden set 无回归
- P0-11 安全:注入检测 + audit append-only
- P0-12 降级:LLM 5xx / RAG 超时 / tool 熔断有 L1--L3
13.2 P1 --- Staff 答辩强加分
- P1-01 能画七视图总图与依赖
- P1-02 能口述应用视图七组件 SLA
- P1-03 能讲 Stage1→4 演进与准入
- P1-04 能白板 Saga/Outbox 与 Agent 边界
- P1-05 有真实 $/task、completion_rate 数字
- P1-06 version_pin 含 prompt+model+kb+tool
- P1-07 Multi-Agent 有 Coordinator 与 eval 准入
- P1-08 Mesh mTLS + 授权策略示例
- P1-09 IDP golden path 与 eval gate
- P1-10 STAR-M-P 事故含 M 机制与 P 指标
13.3 P2 --- 架构卓越(可选)
- P2-01 AI Gateway 24 契约已评审
- P2-02 Agent Mesh 联邦策略草案
- P2-03 跨域统一 eval 平台
- P2-04 FinOps 模型路由自动优化
- P2-05 红队季度化 + 自动化注入集
- P2-06 GraphRAG 与 Agent 规划结合 POC
- P2-07 A2A 跨组织 Agent 互操作试点
14. 附录 A:应用组件接口草案(OpenAPI 片段)
yaml
# Agent Control Plane - Task Submit (concept)
post /v1/agent/tasks:
headers:
Authorization: Bearer
X-Tenant-Id: required
X-Idempotency-Key: required-for-write-intent
body:
goal: string
success_criteria: string[]
scene: enum [cs, ops, buy]
risk_profile: enum [read_only, suggest_write, execute_write]
responses:
202: { task_id, trace_id, status: queued }
403: policy_denied
429: budget_exceeded
15. 附录 B:数据表 DDL 摘要(Checkpoint)
sql
CREATE TABLE agent_checkpoint (
task_id VARCHAR(64) PRIMARY KEY,
tenant_id VARCHAR(32) NOT NULL,
rev INT NOT NULL DEFAULT 1,
trace_id VARCHAR(64) NOT NULL,
goal TEXT NOT NULL,
success_criteria JSONB NOT NULL,
plan JSONB,
completed_steps JSONB DEFAULT '[]',
version_pin JSONB NOT NULL,
status VARCHAR(24) NOT NULL,
wall_time_spent_s INT DEFAULT 0,
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
CREATE INDEX idx_checkpoint_tenant_updated ON agent_checkpoint(tenant_id, updated_at DESC);
16. 附录 C:与 05-architecture 六视图对照速查
| 05-architecture 视图 | 本篇 Agent 章节 | 增量 |
|---|---|---|
| 业务架构 01 | §2 | 验收标准、HITL 边界 |
| 应用架构 05 | §3 | 控制面/数据面七组件 |
| 数据架构 04 | §4 | Checkpoint vs 向量 |
| 部署架构 03 | §5 | Runtime + vLLM |
| 安全架构 06 | §6 | 注入/工具滥用 |
| 技术架构 02 | §3.7/§5 | LiteLLM/路由 |
| --- | §7 集成 | Outbox/Saga/Mesh/IDP |
| --- | §8 演进 | 四阶段 maturity |
17. 附录 D:七视图面试追问矩阵(35 格)
| 视图 | 追问维度 | 锚点章节 | 准备要点 |
|---|---|---|---|
| 业务 | 容量 | §2 | 准备 1 个数字或策略 |
| 业务 | 一致性 | §2 | 准备 1 个数字或策略 |
| 业务 | 失败 | §2 | 准备 1 个数字或策略 |
| 业务 | 成本 | §2 | 准备 1 个数字或策略 |
| 业务 | 合规 | §2 | 准备 1 个数字或策略 |
| 应用 | 容量 | §3 | 准备 1 个数字或策略 |
| 应用 | 一致性 | §3 | 准备 1 个数字或策略 |
| 应用 | 失败 | §3 | 准备 1 个数字或策略 |
| 应用 | 成本 | §3 | 准备 1 个数字或策略 |
| 应用 | 合规 | §3 | 准备 1 个数字或策略 |
| 数据 | 容量 | §4 | 准备 1 个数字或策略 |
| 数据 | 一致性 | §4 | 准备 1 个数字或策略 |
| 数据 | 失败 | §4 | 准备 1 个数字或策略 |
| 数据 | 成本 | §4 | 准备 1 个数字或策略 |
| 数据 | 合规 | §4 | 准备 1 个数字或策略 |
| 部署 | 容量 | §5 | 准备 1 个数字或策略 |
| 部署 | 一致性 | §5 | 准备 1 个数字或策略 |
| 部署 | 失败 | §5 | 准备 1 个数字或策略 |
| 部署 | 成本 | §5 | 准备 1 个数字或策略 |
| 部署 | 合规 | §5 | 准备 1 个数字或策略 |
| 安全 | 容量 | §6 | 准备 1 个数字或策略 |
| 安全 | 一致性 | §6 | 准备 1 个数字或策略 |
| 安全 | 失败 | §6 | 准备 1 个数字或策略 |
| 安全 | 成本 | §6 | 准备 1 个数字或策略 |
| 安全 | 合规 | §6 | 准备 1 个数字或策略 |
| 集成 | 容量 | §7 | 准备 1 个数字或策略 |
| 集成 | 一致性 | §7 | 准备 1 个数字或策略 |
| 集成 | 失败 | §7 | 准备 1 个数字或策略 |
| 集成 | 成本 | §7 | 准备 1 个数字或策略 |
| 集成 | 合规 | §7 | 准备 1 个数字或策略 |
| 演进 | 容量 | §8 | 准备 1 个数字或策略 |
| 演进 | 一致性 | §8 | 准备 1 个数字或策略 |
| 演进 | 失败 | §8 | 准备 1 个数字或策略 |
| 演进 | 成本 | §8 | 准备 1 个数字或策略 |
| 演进 | 合规 | §8 | 准备 1 个数字或策略 |
18. 附录 E:术语表(中英)
| 术语 | 定义 |
|---|---|
| Agent Runtime | 执行 Plan/Tool/LLM 的有状态或无状态运行时 |
| Control Plane | 策略、预算、审批、幂等登记 |
| Data Plane | 规划与工具执行面 |
| Checkpoint | 任务状态持久化点,非向量库 |
| version_pin | prompt/model/kb/tool 版本快照 |
| HITL | Human-in-the-loop 人工审批 |
| Guardrails | 硬校验护栏,非 prompt |
| Agent Mesh | 跨域 Agent 注册、发现、策略联邦 |
| Outbox | 业务与消息同事务可靠投递 |
| North Star | goal + success_criteria 锚点 |
19. 附录 F:深度阅读路径(按岗位)
| 岗位 | 本周 | 下周 |
|---|---|---|
| Applied AI | 本篇 §3+§4 + 13 | 04 |
| AI Infra | 本篇 §5+§7 + 07 | mesh |
| Java 架构 | 本篇 §3+§7 + 18 | 14 |
| 安全/合规 | 本篇 §6 + 17 | 红队 §6.2 |
99. 章节导航
| 章 | 内容 |
|---|---|
| §0 | 30 分钟 Checklist |
| §1 | 七视图方法论 |
| §2 | 业务视图 |
| §3 | 应用视图(核心) |
| §4 | 数据视图 |
| §5 | 部署视图 |
| §6 | 安全视图 |
| §7 | 集成视图 |
| §8 | 演进视图 |
| §9 | 跨视图矩阵 |
| §10 | 45min 白板满分答 |
| §11 | 12 道口述题 |
| §12 | STAR-M-P |
| §13 | Master P0/P1/P2 |
| §14--19 | 附录 |
| §99 | 导航 |
下一步 :若时间紧,先 §0 → §3 → §10 → §11 任选 5 题 → §13 P0 ;若冲 Architect,补 §7 Saga/Outbox + §8 演进 + 13 §19。
20. 附录 G:应用视图组件详表(扩展)
20.1 Gateway
| 属性 | Gateway 说明 |
|---|---|
| Owner | 平台团队 / 域团队 |
| SLA | 见 §3.2 |
| Scale | 水平扩展 |
| State | 无状态优先 |
| Failure | 熔断 + 降级 |
| Metrics | RED + 业务 KPI |
| Dependency | 见深链章节 |
20.2 ControlPlane
| 属性 | ControlPlane 说明 |
|---|---|
| Owner | 平台团队 / 域团队 |
| SLA | 见 §3.2 |
| Scale | 水平扩展 |
| State | 无状态优先 |
| Failure | 熔断 + 降级 |
| Metrics | RED + 业务 KPI |
| Dependency | 见深链章节 |
20.3 Runtime
| 属性 | Runtime 说明 |
|---|---|
| Owner | 平台团队 / 域团队 |
| SLA | 见 §3.2 |
| Scale | 水平扩展 |
| State | 外置状态 |
| Failure | 熔断 + 降级 |
| Metrics | RED + 业务 KPI |
| Dependency | 见深链章节 |
20.4 Planner
| 属性 | Planner 说明 |
|---|---|
| Owner | 平台团队 / 域团队 |
| SLA | 见 §3.2 |
| Scale | 水平扩展 |
| State | 无状态优先 |
| Failure | 熔断 + 降级 |
| Metrics | RED + 业务 KPI |
| Dependency | 见深链章节 |
20.5 Executor
| 属性 | Executor 说明 |
|---|---|
| Owner | 平台团队 / 域团队 |
| SLA | 见 §3.2 |
| Scale | 水平扩展 |
| State | 无状态优先 |
| Failure | 熔断 + 降级 |
| Metrics | RED + 业务 KPI |
| Dependency | 见深链章节 |
20.6 ToolRouter
| 属性 | ToolRouter 说明 |
|---|---|
| Owner | 平台团队 / 域团队 |
| SLA | 见 §3.2 |
| Scale | 水平扩展 |
| State | 无状态优先 |
| Failure | 熔断 + 降级 |
| Metrics | RED + 业务 KPI |
| Dependency | 见深链章节 |
20.7 LLMRouter
| 属性 | LLMRouter 说明 |
|---|---|
| Owner | 平台团队 / 域团队 |
| SLA | 见 §3.2 |
| Scale | 水平扩展 |
| State | 无状态优先 |
| Failure | 熔断 + 降级 |
| Metrics | RED + 业务 KPI |
| Dependency | 见深链章节 |
20.8 Guardrails
| 属性 | Guardrails 说明 |
|---|---|
| Owner | 平台团队 / 域团队 |
| SLA | 见 §3.2 |
| Scale | 水平扩展 |
| State | 无状态优先 |
| Failure | 熔断 + 降级 |
| Metrics | RED + 业务 KPI |
| Dependency | 见深链章节 |
20.9 Memory
| 属性 | Memory 说明 |
|---|---|
| Owner | 平台团队 / 域团队 |
| SLA | 见 §3.2 |
| Scale | 水平扩展 |
| State | 外置状态 |
| Failure | 熔断 + 降级 |
| Metrics | RED + 业务 KPI |
| Dependency | 见深链章节 |
20.10 RAG
| 属性 | RAG 说明 |
|---|---|
| Owner | 平台团队 / 域团队 |
| SLA | 见 §3.2 |
| Scale | 水平扩展 |
| State | 无状态优先 |
| Failure | 熔断 + 降级 |
| Metrics | RED + 业务 KPI |
| Dependency | 见深链章节 |
20.11 Observability
| 属性 | Observability 说明 |
|---|---|
| Owner | 平台团队 / 域团队 |
| SLA | 见 §3.2 |
| Scale | 水平扩展 |
| State | 无状态优先 |
| Failure | 熔断 + 降级 |
| Metrics | RED + 业务 KPI |
| Dependency | 见深链章节 |
21. 附录 H:业务场景模式库(10 模式)
| 模式 | risk | 工具 | HITL |
|---|---|---|---|
| 客服只读 | read_only | RAG+订单查询 tool | 无 HITL |
| 客服建议写 | suggest_write | 生成工单草案 | 人执行 |
| SRE Triage | read+ack | MCP 监控 tool | critical resolve HITL |
| Buy 导购 | read | 商品/库存 read | 定价 tool 禁用 |
| 数据迁移 | batch_write | 分区 checkpoint | 全准入评审 |
| 代码助手 | sandbox | 隔离执行 | 无 prod 网络 |
| 报表生成 | read+export | Artifact S3 | 大数据外置 |
| 审批助手 | workflow | Camunda 衔接 | Agent 不执行写 |
| 多 Agent 研究 | internal | 并行 Worker | 无外部写 |
| Red Team | offline | 合成攻击集 | 隔离环境 |
22. 附录 I:七视图反模式全集(42 条)
- AP-01 业务 无验收标准
- AP-02 业务 万物 Agent
- AP-03 业务 能力无 Owner
- AP-04 业务 忽视合规场景
- AP-05 业务 ROI 无度量
- AP-06 业务 与 BPM 重复建设
- AP-07 应用 控制面空心
- AP-08 应用 纯 ReAct 在线
- AP-09 应用 无 verify 闸门
- AP-10 应用 Coordinator 过多
- AP-11 应用 护栏后置
- AP-12 应用 工具无 schema
- AP-13 数据 checkpoint 在 Pod
- AP-14 数据 向量无租户
- AP-15 数据 artifact 塞 PG
- AP-16 数据 无 version_pin
- AP-17 数据 audit 缺失
- AP-18 数据 eval 无版本
- AP-19 部署 单 AZ
- AP-20 部署 无 HPA
- AP-21 部署 staging 无 gate
- AP-22 部署 GPU 无利用率监控
- AP-23 部署 LLM 与 Runtime 同扩
- AP-24 部署 无降级开关
- AP-25 安全 prompt 防火墙
- AP-26 安全 工具过度授权
- AP-27 安全 无注入检测
- AP-28 安全 audit 可篡改
- AP-29 安全 密钥进 prompt
- AP-30 安全 跨租户 session
- AP-31 集成 直连数据库
- AP-32 集成 无 Outbox
- AP-33 集成 Agent 协调 Saga
- AP-34 集成 无防腐层
- AP-35 集成 Webhook 无签名
- AP-36 集成 批处理走 Chat
- AP-37 演进 跳阶段 Multi-Agent
- AP-38 演进 无 eval 扩量
- AP-39 演进 双编排打架
- AP-40 演进 无兼容期
- AP-41 演进 技术债无 ADR
- AP-42 演进 Mesh 前无 trace
23. 附录 J:容量估算公式(Agent 专用)
text
峰值 Agent QPS = 总峰值 QPS × Agent 流量占比
Token/s ≈ QPS × avg_tokens_per_task / avg_task_duration_s
$/hour ≈ Token/s × 3600 × blended_price_per_1k / 1000
Runtime 副本 ≈ ceil(峰值并发任务 / 每 Pod 并发任务数)
GPU 卡数 ≈ ceil(峰值 Token/s / 每卡 Token/s) # 见 07 Serving
Checkpoint 写 QPS ≈ 峰值任务 QPS × avg_steps × checkpoint_every_step
PG 连接池 ≥ Runtime 副本 × 每副本连接数
面试要带一个你自己的估算例子(替换数字即可)。
官方文档与源码(一级依据)
AI Engineering · 正文机制应来自下方 官方文档(L1) 与 官方源码仓库(L2) ;
禁止用教程站/博客充当机制依据。本章 QPS/延迟/STAR 为面试示意。
L1 · 官方文档
L2 · 官方源码
L3 · 论文 / 开放规范