⚠️ Alpha内测版本警告:此为早期内部构建版本,尚不完整且可能存在错误,欢迎大家提Issue反馈问题或建议。
Skip to content

6.5 LLM 系统设计 ​

核心问题: 面对一个实际任务,如何选择技术路线?如何把 Prompt、RAG、微调、Agent 组合起来?

在线 Notebook

对应的交互式版本可在 Google Colab 打开,统一使用方式见 第0章说明。


四条路线的本质 ​

学完 6.1-6.4 后,你手里有四种工具:

工具本质改变了什么
Prompt 工程指令设计不改模型,改输入
微调参数更新改变模型行为
RAG检索增强扩展知识边界
Agent工具调用扩展行动能力

核心原则:先定位瓶颈,再选择最小充分方案。 Prompt 适合澄清任务;RAG、微调和 Agent 分别处理外部证据、稳定行为和动态行动,不构成固定升级顺序。


技术路线选择 ​

决策树 ​

你的任务是什么类型?
│
├─ 需要访问外部知识库或最新信息?
│   └─ YES → RAG
│       (知识会更新、数据量大、需要引用来源)
│
├─ 需要特定的输出格式、风格或专业领域行为?
│   └─ YES → 微调
│       (有足够标注数据、格式要求严格、通用模型效果差)
│
├─ 需要调用外部工具或执行多步骤操作?
│   └─ YES → Agent
│       (搜索、计算、API 调用、自动化任务)
│
└─ 任务通用,模型已有足够能力?
    └─ YES → Prompt 工程
        (快速验证、预算有限、任务多变)

常用方法对比 ​

维度Prompt 工程RAG微调Agent
启动成本通常较低,但受评估与上下文影响取决于语料、索引、权限和评估取决于数据、训练和模型运维取决于工具数量、权限和失败处理
知识更新依赖输入快(更新知识库)慢(需重新训练)依赖工具
可解释性中高(可追溯来源)低取决于日志和工具结果
主要风险指令不稳检索失败数据质量和过拟合错误累积、权限和成本
典型用例摘要、翻译企业知识库问答代码补全、特定风格自动化流程、工具操作

实践建议: 大多数项目应从 Prompt 工程开始,验证可行性后再考虑 RAG 或微调。过早引入复杂方案是常见的工程陷阱。


三种架构模式 ​

模式一:简单问答 ​

适用: 通用对话、客服机器人、内容生成

用户输入
    │
    ▼
[Prompt 构建]
(System Prompt + 历史对话 + 用户输入)
    │
    ▼
[LLM 推理]
    │
    ▼
模型输出 → 用户

特点: 架构简单,延迟低,适合快速上线。主要挑战是 Prompt 工程和对话历史管理。

模式二:RAG 问答 ​

适用: 企业知识库、文档问答、需要引用来源的场景

用户输入
    │
    ├──→ [Embedding 模型] → 查询向量
    │                           │
    │                    [向量数据库检索]
    │                           │
    │                    相关文档片段
    │                           │
    ▼                           ▼
[Prompt 构建] ←─────────────────┘
(System Prompt + 检索内容 + 用户输入)
    │
    ▼
[LLM 推理] → 带引用的回答 → 用户

特点: 知识可更新,回答可溯源。主要挑战是检索质量和上下文长度管理。

模式三:Agent 工作流 ​

适用: 多步骤推理、调用外部工具、自动化任务执行

用户输入
    │
    ▼
[LLM 规划](分析任务,决定调用哪些工具)
    │
    ├──→ 工具调用 1(搜索、计算、API...)→ 结果 1
    │
    ├──→ 工具调用 2(基于结果 1 决策)→ 结果 2
    │
    ▼
[LLM 整合](综合所有工具结果)
    │
    ▼
最终回答 → 用户

特点: 能力强,可完成复杂任务。主要挑战是可靠性、成本(多轮 LLM 调用)和延迟。


实战案例 ​

案例1:企业客服机器人 ​

需求: 回答客户问题,需要查询订单状态和政策文档。

方案: RAG + Agent 组合

用户问题
    │
    ├──→ RAG 检索政策文档
    ├──→ Agent 调用订单查询 API
    │
    ▼
LLM 整合 → 回答

选择理由: 政策文档适合 RAG(知识量大、需要引用);订单状态来自实时 API。若查询路径固定,可使用确定性 API 工作流;只有处理路径需要随结果变化时才引入 Agent。

案例2:代码生成助手 ​

需求: 根据需求生成符合团队规范的代码。

方案: 微调 + RAG 组合

用户需求
    │
    ├──→ RAG 检索内部代码示例
    │
    ▼
微调后的模型(已学习团队代码风格)
    │
    ▼
符合规范的代码

选择理由: 代码风格和规范适合微调(格式固定、有大量样本);内部代码库适合 RAG(持续更新)。

案例3:数据分析助手 ​

需求: 用户提问,系统自动查询数据库并生成分析报告。

方案: Agent(主)+ Prompt 工程(辅)

用户问题
    │
    ▼
Agent 规划
    ├──→ 调用 SQL 查询工具
    ├──→ 调用数据分析工具
    │
    ▼
LLM 生成报告(Prompt 定义报告格式)

选择理由: 数据查询和分析需要工具,但不必天然采用 Agent。固定报表可用参数化 SQL 和确定性流水线;探索式问题需要根据中间结果选择查询时,再考虑 Agent。报告格式可先通过 Prompt 和 schema 约束控制。


模型选择框架 ​

不推荐具体模型(迭代快,推荐会过时),给出选择维度:

维度考量
任务复杂度简单分类/提取 → 小模型;多步推理/代码 → 大模型
延迟要求分别测量 TTFT、生成速度和端到端分位数,再选择模型与部署方式
数据隐私根据数据分类、保留策略、部署地域、访问控制和供应商协议判断
成本预算用真实输入/输出长度、并发、利用率和运维成本计算 API 与自部署的盈亏点

部署选项 ​

方案适合场景主要权衡
托管 API快速验证、请求量不稳定需核对数据处理边界、限额、价格和供应商可用性
云 GPU 自部署数据合规要求、规模大运维复杂,需要 MLOps 能力
混合方案按数据等级或任务路由路由、审计和故障处理更复杂;收益需按真实流量测量

决策检查清单 ​

在确定方案前,回答以下问题:

  • [ ] 是否先用最简单的方案(Prompt + API)验证了可行性?
  • [ ] 知识是否需要频繁更新?(是 → 优先 RAG,不是 → 考虑微调)
  • [ ] 标注数据是否覆盖目标输入、边界条件和失败场景,并留出独立验证集?
  • [ ] 数据是否有合规要求?(能否发送给第三方 API)
  • [ ] 团队是否有运维能力?(自部署需要 MLOps)
  • [ ] 月度预算上限是多少?
  • [ ] 失败时是否有降级、回退或人工接管路径?
  • [ ] 是否定义了质量、延迟、成本和安全指标?

本节小结 ​

  • 最小充分方案:先用 Prompt 澄清任务,再按外部证据、稳定行为或动态行动的实际瓶颈选择方案
  • RAG vs 微调:知识需要更新选 RAG,格式/风格要求严格选微调,两者不互斥
  • Agent 的代价:能扩展行动能力,但成本、延迟、可靠性都是挑战,不要过早引入
  • 部署选型:从 API 或托管服务开始验证,规模化后再评估自部署的必要性
  • 生产底线:上线前必须定义评估集、监控指标、回退策略和成本上限

扩展阅读: E6 推理部署优化

下一章: 第7章:多模态 LLM


代码实验 ​

LLM System Design

图6.5:基于一组显式教学假设的技术路线示意。左图和右图使用任意单位展示可能的能力与成本差异,不是实测排名;中图强调先定位瓶颈,并区分固定工具流程与需要动态决策的 Agent。

代码文件: code/ch06_llm_applications/system_design_demo.py
运行方式: python code/ch06_llm_applications/system_design_demo.py

本教程采用 CC BY-NC-SA 4.0 许可协议