Docs · App Dev Guide

大模型应用开发

从 Prompt 工程到 AI Agent,一站式覆盖大模型应用开发全链路 —— 让你能在 1 周内跑出生产级 MVP。

RAG · 概览与典型场景

RAG(Retrieval-Augmented Generation)= 检索增强生成。这是 LLM 应用中工程难度最高、效果差距最大、最值得深入的一个模块。

一句话理解 RAG

回答前先去查资料。把外部知识库里相关的片段拼到 prompt 里,让模型基于这些资料回答而非凭记忆瞎编。

用户问题
         ↓
      [ 检索 ]  从知识库找相关片段
         ↓
      [ 拼接 ]  片段 + 问题一起喂给 LLM
         ↓
      [ 生成 ]  模型基于片段作答
         ↓
      准确回答(且能引用来源)

RAG 解决什么问题

问题没有 RAG有 RAG
知识截止"我不知道 2025 年的新闻"从最新文档库查实时信息
私域知识"我不知道你公司的政策"查内部文档库
幻觉经常编造看似合理的错误基于引用的事实回答,幻觉率↓80%
可解释性答案凭空出现能指出"答案来自文档 X 的第 N 段"
更新成本改答案要重训模型改文档库即时生效
数据隔离训练数据混在公共模型里私域数据独立存储

典型应用场景

场景 1:企业内部知识问答

  • 员工查 HR 政策、报销流程、技术文档
  • 客服查产品手册、常见问题
  • 律师查法规、案例、合同模板

场景 2:技术文档助手

  • API 文档智能问答(如 Stripe / Notion 自家产品)
  • 开源项目问答(用 LangChain 文档训自己的版本)
  • 代码库问答(基于公司 codebase)

场景 3:垂直领域专家

  • 医疗:基于最新论文 + 临床指南
  • 金融:基于研报 + 财报 + 监管文件
  • 学术:基于论文库的科研问答

场景 4:客户智能客服

  • 售前:基于产品手册 + 价目表
  • 售后:基于工单历史 + 解决方案库

RAG vs 长上下文(Long Context)

2024 后模型上下文越来越长(Gemini 2M、Claude 200K),很多人问:「直接把所有文档塞进 prompt 不就行了?」

维度长上下文RAG
数据量上限几十万 token(一本书)无限(亿级文档)
单次成本每次都付全 context 费用只付检索到的片段
延迟长 prompt 推理慢(10s+)快(1-2s)
准确性长 context 中间内容易丢失("lost in middle")精准定位相关片段
实时更新重新打包整个 prompt修改单篇文档即可
权限控制全部可见可按用户过滤检索范围

结论

  • 数据量小(< 50K token)+ 全量都可能相关 → 长上下文
  • 数据量大 + 只用少量相关片段 → RAG
  • 实际生产 90% 用 RAG

RAG 的「难度地图」

RAG 看起来简单,做好极难。难度按层次:

Level 1: Hello World 能跑
          ↓ 简单:30 行代码搞定
          
      Level 2: 单文档百问百答
          ↓ 中等:搞定 chunking + embedding
          
      Level 3: 多文档跨知识库
          ↓ 难:召回率优化
          
      Level 4: 千万级文档生产
          ↓ 很难:向量库选型 + 混合检索 + 重排
          
      Level 5: 准确率达标可上线
          ↓ 极难:评测 + 持续优化
          
      Level 6: 多模态 + 实时 + 个性化
          ↓ 顶级:行业最前沿

新手很容易在 Level 1 跑通后误以为完工,实际生产可能要 Level 4+。

RAG 的核心数据:检索质量

99% 的 RAG 问题不是 "LLM 不行",而是 "没检索到正确的片段"。

检索失败的常见原因:

  1. 切片不当:相关内容被切成两段,单独看都不完整
  2. Embedding 不准:语义相近但没召回
  3. Top-K 太小:相关片段在第 6 名,但只取前 5
  4. 没有 Rerank:向量检索召回的顺序不一定对
  5. 查询本身有歧义:用户问"价格",文档里说"售价"

改进 RAG = 改进检索。下面几节会详细讲。

RAG 全栈一览

完整 RAG 系统需要的所有组件:

┌──────────────────── 数据准备 ────────────────────┐
      │  文档源 (PDF/Word/Markdown/HTML/网页/数据库)        │
      │      ↓                                             │
      │  解析器 (unstructured / llamaparse / 自研)         │
      │      ↓                                             │
      │  切片器 (按字符/按 token/按语义/递归/Late chunking) │
      │      ↓                                             │
      │  Embedding 模型 (BGE / OpenAI / Voyage / Cohere)   │
      │      ↓                                             │
      │  向量数据库 (Qdrant / Weaviate / Milvus / pgvector)│
      │  + BM25 索引 (Elasticsearch / Tantivy)             │
      └────────────────────────────────────────────────┘
      
      ┌──────────────────── 查询时 ────────────────────┐
      │  用户 query                                       │
      │      ↓                                            │
      │  Query 改写 (HyDE / Multi-query / Step-back)      │
      │      ↓                                            │
      │  向量召回 + BM25 召回 (Hybrid Search)             │
      │      ↓                                            │
      │  Reranker (Cohere / BGE-reranker / Jina)         │
      │      ↓                                            │
      │  组装 Prompt (Top-K 片段 + 问题 + 系统指令)        │
      │      ↓                                            │
      │  LLM 生成                                         │
      │      ↓                                            │
      │  引用追溯 / 后处理 / 缓存                          │
      └────────────────────────────────────────────────┘
      
      ┌──────────────────── 持续优化 ────────────────────┐
      │  评测集 (人工标注 + LLM-as-Judge)                  │
      │  在线监控 (用户反馈 + bad case)                    │
      │  数据迭代 (清洗 / 补充 / 重新切片)                 │
      └────────────────────────────────────────────────┘

每个组件都有讲究。下面几节逐一深入。

学习路径

章节学完后能做什么
标准流水线跑通最小 RAG demo
切片策略设计合理切片,避免上下文割裂
Embedding 选型中英文场景挑对模型
向量数据库千万级数据下选对存储
混合检索 + Reranker把准确率从 70% 提到 90%
进阶模式跨文档推理、Self-RAG、GraphRAG

下一节:RAG 标准流水线 —— 跑通第一个 demo。