一、 RAG底层核心:索引与检索
在讨论代际演变前,所有 RAG 系统都共享一套底层的数据向量化逻辑。 数据预处理: 文档通过 Chunker(切片器)按照语义或固定长度切分。 向量化(Embedding): 通过 Embedding 模型(如 bge-m3)将文本映射到高维空间向量 。 存储: 存入 Vector Database(如 Milvus),建立索引(如 HNSW 或 IVF)。
二、RAG的演进逻辑与技术实现
第一代:基础 RAG (Naive RAG) —— “按方抓药的学徒”
- 场景模拟: 你走进医馆说:“我头痛”。学徒转身在电脑里搜索“头痛”,搜到了 3 条包含这个词的方子,直接打印出来递给你,不管你是着凉了还是撞到了。
- 技术流程: Query Embedding Vector Search (Top-K) Prompt LLM。
- 工作过程:
- 系统将“头痛”转为向量。
- 在库里找相似度最高的 3 个文本块(Chunks)。
- 把这 3 块文字塞给大模型,让它总结。 局限: 语义匹配太死板,容易找回一大堆不相关的“噪音”。
第二代:高级 RAG (Advanced RAG) —— “细心的分拣员”
- 场景模拟: 你说“头痛”。学徒先想了想:“头痛可能是感冒,也可能是高血压”。他搜了更多关键词,抱回 20 本书,然后在桌子上仔细对比,最后只把最对症的 2 本给你。
- 核心组件: Query Rewriter (重写器)、Hybrid Search (混合搜索)、Reranker (重排序模型)。
- 工作过程:
- 检索前优化: 利用 LLM 将“头痛”扩展为“偏头痛、外感头痛、内伤头痛”。
- 混合检索: 同时进行“语义检索”和“关键词检索(BM25)”,防止漏掉生僻的药名。
- 重排序: 检索回来的 50 条结果交给 Reranker 深度打分,剔除掉那些虽然有“头痛”二字但实际在讲“脚痛医头”的干扰项。 提升: 准确率大幅提升,不再“胡乱抓药”。
第三代:模块化 RAG (Modular RAG) —— “挂号处与专家图谱”
- 场景模拟: 你进门,前台(Router)先问:“你是看病还是查账?”看病就去诊室。医生脑子里有一张知识地图:他知道“麻黄”和“桂枝”常一起用,“感冒”和“季节”有关系。他能顺着关系链想到你可能是因为昨晚淋雨受寒了。
- 核心组件: Semantic Router (语义路由)、Knowledge Graph (图数据库如 Neo4j)。
- 工作过程:
- 路由: Router 判断 Query 类型。如果是问价格,去 SQL 库;如果是问病理,去知识库。
- 图检索(GraphRAG): 不只搜文字。通过实体识别发现“头痛”和“恶寒”有连线,系统自动把“风寒束表证”的所有关联知识全部提取出来。 提升: 解决了“知识断层”,能处理跨文档、跨实体的复杂逻辑。
第四代:智能体 RAG (Agentic RAG) —— “全能名医”
- 场景模拟: 医生听完你的主诉,先查了方子,发现不对劲,又问了你的脉象(主动追问),发现现有方子都不行,于是决定去查阅最新的医学论文(调用外部工具),最后反复推敲给你开了一副私人订制的药。
- 核心组件: Planner (规划器)、Tool Use (工具调用)、Self-Reflection (自反思环)。
- 工作过程:
- 任务规划: Agent 思考:“我需要先查病因,再查药性,最后做配伍。”
- 迭代检索: 搜一次发现资料不足,Agent 会自动修改搜索词再搜一次。
- 自反思: Self-RAG 模块会评估:“我找的这些方子真的能治他的病吗?”如果觉得不行,它会打回重做。
- 动态执行: 如果需要,它会调用 API 去查实时天气或你的电子病历。 提升: 拥有了逻辑闭环,能处理极高复杂度的个性化问题。