RAG 与知识库 2026/6/1
RAG 入门:让 AI 读懂你的数据
RAG入门到精通:向量检索、Embedding、知识图谱等核心技术原理与实战部署指南。
A
AGISeed Team
AGISeed 作者
RAG 入门:让 AI 读懂你的数据
编者按:AI 什么都知道,但不知道你公司内部的最新数据。RAG(检索增强生成)就是解决这个问题的”瑞士军刀”。这篇文章基于 LangChain 官方文档、腾讯云 2026 RAG 全景分析、AWS 技术白皮书,带你从原理到代码,30 分钟搭建第一个 RAG 系统。
一、为什么需要 RAG?
LLM 有三大硬伤:
| 问题 | 例子 | RAG 如何解决 |
|---|---|---|
| 知识截止 | GPT 不知道你公司上周的财报 | 把最新数据放进外部知识库 |
| 幻觉 | AI 编了一个不存在的研究 | 强制 AI 先查资料再回答 |
| 私有数据 | 不能把内部文档发给 OpenAI | 数据存在你的向量数据库里 |
二、RAG 的核心原理
%%{init: {'theme': 'dark', 'themeVariables': {'primaryColor': '#4a9eff', 'lineColor': '#888'}}}%%
flowchart TB
subgraph Offline["📥 离线阶段(建索引,一次性的)"]
A["📄 文档/PDF/数据库"] --> B["✂️ 文本分块<br/>Chunking"]
B --> C["🔢 Embedding<br/>文字→向量"]
C --> D["💾 存入向量数据库<br/>ChromaDB/Qdrant/Pinecone"]
end
subgraph Online["📤 在线阶段(每次查询)"]
E["❓ 用户提问"] --> F["🔢 问题 → 向量"]
F --> G["🔍 相似度搜索<br/>找最相关的 N 段"]
G --> H["📎 组装上下文<br/>问题 + 检索结果"]
H --> I["🤖 LLM 生成回答<br/>基于上下文回答"]
end
style G fill:#e74c3c,color:#fff
style I fill:#2ecc71,color:#fff
三、动手实践:30 分钟搭建第一个 RAG
环境准备
# pip install langchain chromadb openai python-dotenv
from langchain.document_loaders import TextLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Chroma
from langchain.chains import RetrievalQA
from langchain.llms import OpenAI
# 1. 加载文档
loader = TextLoader("./my_document.txt")
documents = loader.load()
# 2. 文本分块
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=500, # 每块 500 字符
chunk_overlap=50, # 块之间重叠 50 字符
separators=["\n\n", "\n", "。", ".", " ", ""]
)
chunks = text_splitter.split_documents(documents)
# 3. 创建向量数据库
embeddings = OpenAIEmbeddings()
vectorstore = Chroma.from_documents(
documents=chunks,
embedding=embeddings,
persist_directory="./chroma_db"
)
# 4. 创建问答链
qa_chain = RetrievalQA.from_chain_type(
llm=OpenAI(temperature=0), # temperature=0 让回答更确定
chain_type="stuff", # 把检索结果"塞"进 Prompt
retriever=vectorstore.as_retriever(search_kwargs={"k": 3}) # 每次检索 3 段
)
# 5. 提问
response = qa_chain.run("你的问题")
print(response)
四、RAG 的 5 个关键参数
| 参数 | 建议值 | 影响 |
|---|---|---|
| chunk_size | 200-1000 | 太小→语义不完整;太大→检索不精准 |
| chunk_overlap | chunk_size 的 10%-20% | 防止关键信息正好在两块之间被切断 |
| top_k | 3-10 | 检索太少→信息不足;太多→噪音干扰 LLM |
| temperature | 0-0.3 | RAG 场景建议 0(确定性回答,减少幻觉) |
| embedding 模型 | text-embedding-3-small | 便宜、效果好、1536 维 |
五、进阶:RAG 的三个优化阶段
阶段 1:Naive RAG(基础版)
文档 → 分块 → 向量检索 → LLM 生成
问题:检索不准、分块策略简陋
阶段 2:Advanced RAG(进阶版)
文档 → 智能分块 → 混合检索(向量 + 关键词) → 重排序 → LLM 生成
新增能力:
%%{init: {'theme': 'dark', 'themeVariables': {'primaryColor': '#4a9eff', 'lineColor': '#888'}}}%%
flowchart LR
Q["❓ 用户提问"] --> QR["🔄 查询改写<br/>Query Rewriting"]
QR --> HR["🔍 混合检索<br/>向量 + BM25"]
HR --> RR["📊 重排序<br/>Reranking"]
RR --> G["🤖 LLM 生成"]
style HR fill:#e74c3c,color:#fff
style RR fill:#f39c12,color:#fff
- 查询改写:把用户口语化的提问改成更精确的检索语句
- 混合检索:向量语义搜索 + BM25 关键词搜索 → 互补
- 重排序(Reranking):二次筛选,提高精准度
阶段 3:Agentic RAG(智能版)
用户提问 → Agent 自动拆步骤 → 多轮检索 → 多源融合 → LLM 生成
Agent 能自己判断”需要查几次”、“去哪个数据库查”、“要不要联网搜索”。
六、向量数据库选型
| 数据库 | 优势 | 劣势 | 推荐场景 |
|---|---|---|---|
| ChromaDB | 轻量、免费、Python原生 | 不支持分布式 | 个人项目、Demo |
| FAISS | Meta 开源,速度快 | 无持久化(需手动存) | 研究、离线计算 |
| Qdrant | Rust 实现,性能好 | 社区版功能受限 | 生产环境 |
| Pinecone | 全托管,零运维 | 贵,数据在美国 | 不想运维 |
| Milvus | 国产,企业级 | 部署复杂 | 大规模企业 |
建议:入门用 ChromaDB,上生产用 Qdrant。
七、避坑指南
| 常见错误 | 正确做法 |
|---|---|
| 整篇文档塞一个 chunk | 根据文档结构分块(按段落/章节) |
| 只用向量检索 | 加 BM25 关键词检索作为补充 |
| 不设温度(默认 1.0) | RAG 场景 temperature=0,避免 AI 自由发挥 |
| top_k 设为 1 | 至少设 3-5,给 AI 足够上下文 |
| 不校验检索结果 | 打印检索到的文本,检查是否相关 |
八、延伸阅读
参考来源: