小白也能懂的 RAG 原理 —— 从检索到生成的完整指南

3 阅读3分钟

本文首发于 Zyentor(智元界) —— AI 开发者社区
原文链接:www.zyentor.com/news/3160


为什么需要 RAG?

大语言模型(LLM)虽然强大,但有两个硬伤:

知识截止日期:训练完成后就不再更新,不知道最新发生的事情。比如你问 GPT-4 "昨天 OpenAI 发布了什么",它答不上来。

幻觉问题:不懂的问题也会编造答案,看起来有模有样但其实在胡说。这在企业场景下是不可接受的。

RAG(Retrieval-Augmented Generation,检索增强生成)就是解决这两个问题的标准方案。

RAG 的核心流程

一句话概括:让模型在回答问题前,先去知识库里查一下相关资料,再根据查到的资料来回答。

整个流程分三步:

第一步:索引(Indexing)—— 把知识库准备好

把文档(PDF、Wiki、数据库记录等)拆成小块(Chunk),每一块用 Embedding 模型转成向量(一串数字),存入向量数据库。

比如 "什么是 RAG?" 这句话会被向量化成类似 [0.023, -0.154, 0.672, ...] 这样一串数字,然后存入 Milvus 或 Qdrant 这样的向量数据库。

第二步:检索(Retrieval)—— 找到相关内容

用户提问时,把问题也转成向量,去向量数据库里找最相似的 Top-K 个片段。

举个例子:用户问 "RAG怎么减少幻觉?",系统会:

  1. 把问题向量化
  2. 在知识库里找到最相关的 3 个片段(比如讲 RAG 原理、讲幻觉成因、讲知识库质量的片段)

第三步:生成(Generation)—— 基于资料回答

把检索到的片段和用户问题一起拼成 Prompt,交给 LLM 生成最终答案。这样 LLM 就有了参考资料,不会凭空编造。

关键细节

Chunk 策略

切块是 RAG 效果的基础。常见的切法:

  • 固定长度:256/512 tokens 一段,简单但可能切断语义
  • 语义切分:按段落、句子边界切,效果更好
  • 递归切分:先按段落切,太大的再按句子切

经验值:中文场景下,512 tokens 左右 + 128 tokens 重叠是比较稳妥的配置。

Embedding 选型

中文场景首选中文 Embedding 模型,英文模型的 tokenizer 对中文不友好,检索效果会差一截:

  • BAAI/bge-large-zh-v1.5(1024 维,中文场景推荐)
  • stella-base-zh-v3(768 维,轻量级)
  • M3E-base(768 维,国产通用)

混合检索(Hybrid Search)

向量检索擅长语义匹配("苹果"→"iPhone"),但可能忽略精确关键词。实际生产中推荐混合检索:向量检索加上关键词检索(BM25),结果用 RRF 算法合并排序。

Re-ranking

检索到的 Top-K 结果用 Cross-Encoder 重排序,可以大幅提升最终效果。推荐 BAAI 的 bge-reranker-v2-m3(免费)或 Cohere 的 rerank-multilingual-v3(付费)。

进阶方向

  • Agentic RAG:让 Agent 决定什么时候去查知识库、查什么、查多少次
  • Graph RAG:用知识图谱代替向量库,适合需要多跳推理的场景(微软开源的 GraphRAG)
  • Multi-modal RAG:同时检索文本+图片,适合文档问答
  • Query 改写:把用户问题改写后再检索,效果往往比直接搜好

常用工具

  • LangChain / LlamaIndex:RAG 编排框架
  • Milvus / Qdrant / Chroma:向量数据库
  • Unstructured.io:文档解析

总结

RAG 并不神秘,本质就是"先查资料再回答"。做好 RAG 的核心在于三个环节:

  1. 切好块(Chunking)
  2. 找得准(Retrieval)
  3. 回答好(Generation)

每个环节都有很多优化空间,但从最简单的实现开始,跑通流程,再逐步优化,是最高效的学习路径。


本文首发于 Zyentor(智元界) —— AI 开发者社区,聚合 AI 资讯、AI 工具导航、大模型资源、技术论坛和开发者资源下载,助力 AI 开发者成长。
原文链接:www.zyentor.com/news/3160