09RAG优化链路与方向

alex
1
2026-01-30

1、前言

今天主要讲一讲rag系统的优化这块的内容,其实如果单从编码的角度来看构建一个rag实际上是一个相对来说比较简单和轻松的工作,无论说是基于现有的框架比如说UltraRAG、RAGgraph还是说组件库langchain亦或是说一些新兴的低代码平台Coze,Dify,n8n等等都可以轻松实现。但是实现一个稳定、可靠、准确的RAG系统其实才是最哪的。

2、难点

但是难点到底在哪里呢。其实本质上除了在系统稳定性和准确性上的外在表现外。难点是与RAG的构成模块所强相关的。总而言之RAG的优化需要从数据处理,检索匹配,召回以及生成四个核心模块分别提升。下面比较全面的优化方向可以参考:

解决方向

📊 RAG 全链路优化点归总

核心模块

关键优化点

核心策略与选择

1. 数据处理

数据清洗

去无关字符、标准化格式、纠正错别字、去重。

分块策略

按固定长度、按句/段、按标记符、递归分块、滑动窗口。核心:避免语义割裂,匹配查询粒度。

元数据处理

提取并存储标题、来源、日期、章节等,用于后置过滤和增强Prompt。

2. 检索

Embedding模型

选型:通用模型(text-embedding-ada-002) vs. 领域微调模型。核心:模型与任务的相关性。

向量维度

通常由所选模型固定(如384、768、1536维)。确保与向量数据库兼容。

向量数据库

选型:Pinecone, Weaviate, Qdrant, Milvus, PGVector。考量:性能、成本、过滤能力、托管服务。

索引策略

HNSW(快、内存大) vs. IVF(平衡) vs. Flat(准、慢)。根据数据规模和查询延迟选择。

检索策略

纯向量检索 vs. 混合检索(向量+关键词如BM25)。后者可缓解术语不匹配问题。

3. 召回

召回数量 (Top-K)

初始召回数K:设置一个较大的值(如20),为重排序提供充足候选。需平衡召回率与噪声。

Reranker模型

选型:交叉编码器(如bge-reranker)比双编码器更精准。考量:速度与精度的权衡。

混合检索得分归一化

方法:Min-Max, Z-Score, 或分数融合(如RRF)。确保不同检索系统的分数可比。

重排参数设定

最终返回数量:在重排后,选择Top-N(如3-5个)最相关片段输入LLM。

4. 生成

Prompt工程

指令设计:明确要求“基于上下文”,设定回答格式,处理“未知”。上下文编排:合理安排片段顺序与分隔符。以及COT的Prompt设计

动物装饰