📚 目录

  1. 什么是 RAG?
  2. RAG 的系统架构图解
  3. 构建流程概览
  4. 核心模块详解
    • 文档预处理与嵌入
    • 向量数据库(Retriever)
    • 检索器设计
    • 语言模型与 Prompt 构造
  5. 技术选型推荐
  6. 实战:用 LangChain + OpenAI 构建 RAG
  7. 扩展能力(多模态 / 多轮对话 / 实时抓取)
  8. 常见问题与优化策略
  9. 出站链接与参考资料

1️⃣ 什么是 RAG?

RAG 是一种让大语言模型(如 GPT)结合外部知识库进行生成的技术。它的关键目标是:回答时不完全依赖模型内部参数,而是先查询资料、再作答

优点:

  • 可访问外部信息(时效性强)
  • 不易“幻觉”编造信息
  • 支持自定义知识库(如公司内网、文档集)

2️⃣ RAG 的系统架构图解

         ┌────────────┐
         │  用户查询   │
         └────┬───────┘
              ↓
     ┌────────────────────┐
     │ Query Embedding     │ ← 编码输入查询
     └────────────────────┘
              ↓
     ┌────────────────────┐
     │ 向量数据库(如 FAISS)│ ← 检索相似文档
     └────────────────────┘
              ↓
     ┌────────────────────┐
     │ 文档上下文拼接 Prompt│ ← 构造上下文提示
     └────────────────────┘
              ↓
     ┌────────────────────┐
     │ 语言模型(如 GPT)   │ ← 生成答案
     └────────────────────┘
              ↓
         ┌────────────┐
         │  返回答案   │
         └────────────┘

3️⃣ 构建流程概览

  1. 准备知识库(PDF、网页、数据库等)
  2. 拆分文档(chunking)
  3. 将文档嵌入为向量(embedding)
  4. 将向量存入向量数据库(如 FAISS、Milvus)
  5. 用户查询向量化后检索相关 chunk
  6. 构造 prompt + 检索结果作为上下文
  7. 调用大语言模型生成答案

4️⃣ 核心模块详解

🔹 a. 文档预处理与 Chunking

  • 文档格式支持:PDF、Markdown、HTML、TXT、Word
  • 工具推荐:langchain.document_loadersunstructuredpdfplumber
  • Chunk 策略:按字数 or 按句子滑动窗口(常见如 500 token + 100 重叠)

🔹 b. 向量数据库(Retriever)

功能: 存储和检索文档 embedding 向量

向量库特点
FAISS本地部署轻量级,适合中小项目
Milvus高性能分布式,适合企业级
Weaviate内置 REST API,支持元数据过滤
Qdrant实时向量插入,适合增量更新

🔹 c. 文本嵌入(Embedding)

将文本转成高维向量以供检索

常见模型:

  • OpenAI 的 text-embedding-3-small
  • Cohere
  • BGE (bge-large-zh,中文推荐)
  • HuggingFace 模型如 sentence-transformers

🔹 d. Prompt 构造与语言模型调用

Prompt 模板示例:

已知以下资料,请用中文简洁回答用户问题。
资料:
{{ context }}
问题:
{{ question }}

常用模型接口:

  • OpenAI GPT-4 / GPT-3.5
  • Claude(Anthropic)
  • 本地模型(如 ChatGLM、Mistral)

5️⃣ 技术选型推荐

模块工具/模型
文档解析Unstructured、LangChain
Chunk 切片LangChain TextSplitter
嵌入模型OpenAI Embedding、BGE
向量数据库FAISS(轻量)或 Qdrant
检索策略Top-k + 相似度阈值
语言模型GPT-4 / Claude / 本地 LLM
应用框架LangChain、LlamaIndex

6️⃣ 实战:LangChain + OpenAI 构建一个简易 RAG 系统

from langchain.vectorstores import FAISS
from langchain.embeddings import OpenAIEmbeddings
from langchain.chains import RetrievalQA
from langchain.llms import OpenAI
from langchain.document_loaders import TextLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter

# 加载文档
loader = TextLoader("your-doc.txt")
docs = loader.load()

# 切片
splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
chunks = splitter.split_documents(docs)

# 嵌入 & 存入 FAISS
embedding_model = OpenAIEmbeddings()
db = FAISS.from_documents(chunks, embedding_model)

# 检索 + QA Chain
qa = RetrievalQA.from_chain_type(
    llm=OpenAI(),
    retriever=db.as_retriever(),
    return_source_documents=True
)

# 提问
qa.run("请解释什么是RAG?")

7️⃣ 扩展能力

扩展方向描述
多轮对话记忆LangChain 的 ConversationBuffer
多模态支持图文检索,结合 CLIP 或 Gemini
实时抓取接入搜索引擎或自定义爬虫接口
权限控制检索时按用户权限过滤文档

8️⃣ 常见问题与优化策略

问题解决方式
检索结果无关 / 不准训练自定义 embedding、改进 chunk 切割策略
上下文太长 LLM 报错使用 Token Trimmer 截断远离主题内容
响应慢本地化模型、前置缓存 embedding
中文理解差用 bge-large-zh、Chinese-LLaMA 等中文模型

9️⃣ 出站链接与参考资料


如果你需要构建一个企业内部文档问答系统、法律文献问答工具、产品知识库助理,我可以根据你的业务类型进一步定制构建方案,包括数据预处理模板、向量库部署建议、本地大模型适配等。需要的话请继续告诉我。