一、为什么需要 RAG?
单纯的大模型(如 GPT)有几个天然问题:
知识有截止时间(训练后发生的新信息不知道)
不能直接访问你的私有数据(文档、数据库、公司内部资料)
容易“胡编”(hallucination)
RAG 的目的就是:
用“可控、可更新、可追溯”的外部知识,约束并增强大模型的回答。
二、RAG 的基本工作流程(非常重要)
经典 RAG = 4 个步骤
1️⃣ 文档准备(Indexing)
把资料切成 chunk(例如 500~1000 tokens)
用 Embedding 模型转成向量
存入 向量数据库
常见向量库:
FAISS
Milvus
Pinecone
Weaviate
OpenSearch / Elasticsearch(向量模式)
2️⃣ 用户提问
“加拿大魁省的 Welcome Tax 是怎么计算的?”
3️⃣ 检索(Retrieval)
把用户问题也转成向量
在向量库里找 语义最相近的文档片段
通常取 Top-k(如 3~10 段)
⚠️ 不是关键词搜索,是语义搜索
4️⃣ 生成(Generation)
把检索结果 + 用户问题,一起喂给 LLM:
【已知资料】
- 文档1:……
- 文档2:……
【问题】
……
【请基于以上资料回答】
➡️ 模型只能“照着资料说”,而不是凭空发挥。
三、RAG ≠ 微调(Fine-tuning)
这是一个非常常见的误区:
| 对比 | RAG | 微调 |
|---|---|---|
| 是否改模型参数 | ❌ 不改 | ✅ 改 |
| 数据更新 | ✅ 随时更新 | ❌ 重新训练 |
| 私有数据 | ✅ 非常适合 | ⚠️ 成本高 |
| 幻觉风险 | 低 | 仍可能 |
| 成本 | 低 | 高 |
现实项目中:90% 用 RAG,10% 才需要微调
四、RAG 特别适合什么场景?
结合你的背景,其实你已经“非常适合 RAG”
✅ 典型应用
企业 / 项目文档问答
技术文档(AWS / Angular / Java / Keycloak)
五、一个非常直观的比喻
LLM = 会写作文的学生
RAG = 给他一本开卷考试的资料
不开卷 → 靠记忆 → 容易瞎写
开卷 → 查资料 → 有据可依
六、工程视角:一个最小 RAG 架构
[用户问题]↓[Embedding]↓[VectorDB]——>Top-k 文档 ↓[Prompt 拼接]↓[LLM生成答案]七、RAG 的进阶玩法(你后面一定会用到)
Hybrid Search:向量 + 关键词(BM25)
Re-ranking:再用模型重新排序
Metadata Filter:按国家 / 时间 / 来源过滤
Multi-step RAG:先拆问题再检索
Agent + RAG:自动决定查什么