Phase 5 · 最终交付目标

跟着一个请求,走完 5 层架构

不用代码,不用方框——用一个真实场景(帮用户规划京都旅行)走完整个 Agent 系统的每一层。 看完你就理解大型 Agent 系统是怎么"组装"出来的。

核心教学

跟着一个请求,走完所有层

讲架构最有效的方式 —— 不是讲概念,而是盯着一个具体请求,看它在每层发生了什么。

🌸

虚构场景

用户问 Agent:"帮我规划一个 4 月去京都赏樱的 3 天行程"

我们跟着这个问题走过整个 Agent 系统。 你会看到 5 层架构的每一层、每个环节实际在做什么。

1
第 1 层 · 用户体验

💬 用户在聊天框打字

用户在 Gradio / Web 界面输入请求。前端做基础工作:消息排版、Markdown 渲染、流式显示。

用户文本 下一层
第 2 层 · 编排

🧭 拆解成可执行步骤

编排层(LangGraph)把这个模糊请求拆成子任务:
① 查京都 4 月樱花花期 → ② 规划 3 天路线 → ③ 推荐住宿 → ④ 计算预算

子任务 1 子任务 2 子任务 3 子任务 4
2
3
第 3 层 · Agents

👥 多个 Agent 分工合作

专业 Agent 各自接活儿:
📅 行程 Agent 算时间 · 💰 预算 Agent 算钱 · 🏨 住宿 Agent 找酒店 · 🌸 攻略 Agent 查樱花情报

行程 Agent 预算 Agent 住宿 Agent
第 4 层 · 工具与记忆

🧰 Agent 调用工具、查记忆

每个 Agent 需要数据时调用工具:
🔍 搜索工具查樱花时间 · 🌤️ 天气工具查 4 月天气 · 💾 记忆系统查用户偏好(上次说喜欢民宿)

🔍 搜索 🌤️ API 💾 向量DB
4
5
第 5 层 · 基础设施

🧠 真正调用 LLM 思考 + 记录一切

每条工具结果 → 喂给 GPT-4 / Claude / DeepSeek。
LangFuse 记录每一步:第几个 token、温度多少、调用哪个工具,方便后续调试。

🤖 LLM API 📊 可观测 💾 Postgres
🎯 最终返回

📋 用户看到一份完整行程

所有 Agent 的结果汇集 → 编排层组织成报告 → 回流到第 1 层 → 用户看到一份包含行程、住宿、预算、樱花提示的完整方案。

✨ 渲染 流式输出

💡 看到了吗?

没有一行代码,你也理解了 5 层各自干什么。
接下来,每层展开细看它在工程上由什么构成 —— 仍然少用代码,多用图示。

分层详解

每一层的职责可视化

每层用一张可视化图形讲清它的角色 —— 由什么组成、对外提供什么、能解决什么问题。

💬

第 1 层 · 用户体验

用户唯一直接接触到的层。它最简单,但最容易因为"丑/卡顿"被吐槽。

agent.example.com 帮我规划 4 月京都樱花旅行 ✈️ 樱花季 4 天路线建议 D1 抵达 → D2 清水寺 → D3 岚山 → D4 返回 预计花费 ¥6,500 · 推荐民宿 3 家 →

🎯 它主要解决 3 件事

💬
用户交互
聊天框、流式输出、Markdown 渲染
📤
输入输出
文本/图片/文件 接收并格式化
🔐
权限和登录
用户身份、会话历史、付费控制

🧰 选什么技术搭建

Web 用户
Gradio / Streamlit / 自己写 FastAPI
CLI 用户
终端 / Slack Bot / 飞书机器人
🧭

第 2 层 · 编排

系统的"调度中心"。把模糊请求拆成清晰步骤,决定下一步该让谁做什么。

接收 理解请求 抽意图 规划 拆任务 DAG 需工具? 决策 执行子任务 调 Agent / 工具 最终回复 理解 规划 不要

🎯 它主要解决 3 件事

🧩
任务分解
把模糊请求拆成可执行子任务
🔀
状态管理
记录执行到哪里、可中断可恢复
🤝
调度
决定下一步交给哪个 Agent
为什么不直接让 LLM 调度?

LLM 的判断力 ≈ "灵感",不可控、不易复现。
编排层把"灵感"落到"确定的状态机"上 —— 每一步明确、可追踪、可中断,出错了能从断点恢复。

🤖

第 3 层 · Agents

系统的"工人"。每个 Agent 是一种角色,擅长某个领域,有自己的 Prompt 和工具。

Master 总控 调度 · 分工 · 整合 📅 行程 Agent 路线 · 时间 💰 预算 Agent 花费 · 性价比 🏨 住宿 Agent 酒店 · 民宿 🌸 攻略 Agent 花期 · 情报

🎯 Agent 的关键设计原则

🎯
单一职责
一个 Agent 只擅长一件事,不试图万能
🧰
独立工具集
每个 Agent 有自己的工具,不能乱调
💬
专属 Prompt
每个 Agent 有量身定做的 System Prompt
🧪
独立可测
可单独评估、可替换、可复用
🔧

第 4 层 · 工具与记忆

Agent 的"手脚"和"长期记忆"。它让 Agent 不再只靠 LLM 的训练知识,而能触达真实世界的数据。

🧰 工具集 🔍 搜索 实时数据 🗄 数据库 结构化 💻 代码 计算/执行 📧 邮件 发/读 📁 文件 读写文件 🌐 API 对接系统 💾 记忆系统 ⚡ 短期记忆 当下对话上下文 几轮内的对话 🧠 长期记忆 向量数据库 (ChromaDB) 语义检索历史偏好 ⚙️ 程序化记忆 学会的"技能" 调用方式 / 习惯

🎯 它主要解决 3 件事

🌍
连接真实世界
让 Agent 能查到训练数据之外的信息
📌
记住过去
长期记忆让 Agent 越用越懂用户
🔒
安全边界
工具白名单机制防止 Agent 乱来
🏗

第 5 层 · 基础设施

系统的"幕后"。没人直接操作,但没有它一切都跑不起来。

🧠 大脑 (LLM API) GPT-4o OpenAI Claude 3.5 Sonnet DS DeepSeek 📊 可观测 LangFuse 追踪 + 评估 LangSmith 官方 tracing 💾 持久化存储 Postgres 结构化 Redis 缓存 S3 对象 📐 评估 Pipeline RAGAS / DeepEval 离线测评数据集

🎯 它主要解决 3 件事

🧠
推理能力
调用真正的大模型 API 做"思考"
🔍
可观测性
出问题能回溯到具体某次调用
📊
离线评估
用基准数据集量化质量
目录结构

代码落地:5 层 → 文件夹

可视化讲完每层后,用最简单的目录对应起来 —— 一个文件夹对应一层。

📂 一层对应一个文件夹

📁 src/ → 全部源代码
  📁 agents/ → 第 3 层 (Master + Specialist)
    master.py → 总控 Agent
    researcher.py → 攻略 Agent
  📁 orchestration/ → 第 2 层 (编排)
    graph.py → LangGraph 状态机定义
    state.py → 全局状态 schema
  📁 tools/ → 第 4 层的一部分 (工具)
    registry.py → 工具注册中心
  📁 memory/ → 第 4 层的一部分 (记忆)
    long_term.py → 向量数据库
📁 llm/ → 第 5 层 (模型调用)
📁 observability/ → 第 5 层 (监控)
📁 ui/ → 第 1 层 (Gradio)

🎯 这种组织的 3 个好处

📍
看了目录就懂架构
新人看 src/ 结构就知道这是 5 层 Agent 系统
🔄
每层可独立测试
不必启动整个系统就能测某一层
🔁
可替换某一层
想换一个 LLM? 只动 llm/ 一个文件夹
为什么不用模块化过度的"clean architecture"

5 阶段学习后,从 0 到 1阶段用直观的 5 层目录已经够清晰。
过度分层(端口适配器、六边形)会让你在第一次搭项目时就把 60% 时间花在文件夹结构上

部署

最后一步:让 Agent 上线

🖥 本地原型

最快的反馈循环。单用户、单 Agent。

  • python main.py
  • ▸ Gradio → localhost:7860
  • ▸ 无需考虑并发

🐳 Docker

一致环境、易分发。团队 / 小型生产。

  • docker-compose up -d
  • ▸ 端口 80 一键启动
  • ▸ 需要 HTTPS 时挂证书

☁️ 云端部署

可扩展、高可用。生产环境。

  • ▸ Railway / Fly.io: 简单
  • ▸ Modal / Replicate: GPU 推理
  • ▸ AWS / GCP: 完全控制

现在你已经看清了整个大图。 开始动手吧

接下来: 实战工坊里有可运行的最小 Agent。蓝图页有空时再回来看。

进入实战工坊 →