链载Ai

标题: RAG 检索四件套全解析:模型、向量库、检索方式、排序器,一文选型不踩坑 [打印本页]

作者: 链载Ai    时间: 2 小时前
标题: RAG 检索四件套全解析:模型、向量库、检索方式、排序器,一文选型不踩坑

想做智能客服、企业知识库、RAG 应用?你绕不开的问题是:该用什么向量模型?用什么?用什么排序器?本篇一次讲清

一、向量模型

向量模型是整个语义检索链路的第一步,选错模型,后面再怎么优化都救不回来。

1.什么是向量模型?核心关注点有哪些?

一个文本 embedding 模型的核心目标是:

把文本映射成一个能表达语义的向量,供向量库做检索、排序或相似度计算。

我们选模型时,主要看这几个维度:

指标
说明
语义表达能力(semantic fidelity)
能否区分语义细微差别,比如“关闭灯”和“打开灯”之间
压缩率(是否能低维表达)
像 GTE 模型只有 384 维,而 BGE 有 1024 维,但效果不一定差
领域适应性
是通用模型还是特定领域的(如医疗、法律)?
中英文支持
有些模型只适合英文,如 OpenAI ada v2,有些是多语言
模型大小/部署难度
能不能本地部署?资源占用大不大?
是否能用于 rerank
有些模型能用于排序(如 BGE-Reranker),有些只能做检索

2.常见向量模型选型建议(中文语境为主)

模型
维度
优点
适用场景
HuggingFace ID
BGE-M3
1024
强大通用语义表达能力,中英皆可
检索 + rerank
BAAI/bge-m3
BGE-small-zh
384
小模型,适合中文场景,本地部署轻量
ToC 向量检索
BAAI/bge-small-zh
text2vec-base-chinese
768
中文文本匹配效果稳定,兼容 clip 图文对齐
中文项目、图文混合场景
shibing624/text2vec-base-chinese
GTE-base
768
OpenAI 替代品,多语言支持好
通用任务、跨语言
thenlper/gte-base
E5 系列
768
英文表现强、也有中英多语言版
多语言语义搜索
intfloat/multilingual-e5-base
Cohere embed-multilingual-v3
1024
商用强、支持 100 多种语言
国际化产品、长文本召回
需用 API

📌简单选型建议:


3.向量维度 ≠ 精度,二者的区别?

很多人以为维度高 = 精度高,其实不对,这两个概念要分开:

概念
说明
维度(Dimension)
向量的长度,比如是 384、768 还是 1024 维。它影响的是“表达能力上限”。维度越高,模型有更多空间表达复杂语义关系。但也可能引入噪声。
精度(Precision)
通常指模型在特定任务上的检索准确率,比如 Top-1 命中率、MRR(Mean Reciprocal Rank)、Recall@K。它取决于训练数据、目标任务是否匹配,而不是维度本身。
举个例子
一个 384 维的模型可能在法律领域比 1024 维的通用模型效果还好(因为数据更贴近)

二、向量库

有了好向量,还要有好仓库,否则查得慢、存得乱、删不掉。

1.什么是向量库?为什么不能直接用 list 存向量?

向量库的主要功能就是:

快速存储 + 检索向量,支持近似最近邻搜索(ANN)。

为什么不用列表存呢?比如你有 100 万条文档,每条都是 768 维的向量,用户来一个 Query,你不能每次都和所有向量算一遍余弦距离,太慢了。所以你需要专业的向量库,用各种**加速算法(如 IVF、HNSW)**来快速找到最接近的 K 条向量。


📚 2.主流向量库差异对比

向量库
语言
特点
是否推荐本地部署
是否支持多字段搜索(metadata)
FAISS
C++/Python
Meta 出品,轻量、快,适合本地测试
✅ 强烈推荐
❌(基础功能不支持 metadata)
Milvus
C++/Go
全功能、工业级、支持结构化 + 非结构化混合检索
✅ 推荐部署服务端
✅ 支持结构化字段过滤
Qdrant
Rust
快速、多功能、支持 REST/gRPC、embedding 版本管理很方便
✅ 强烈推荐
✅ 强支持(可对 metadata 索引)
Weaviate
Go
自带 RAG 特性,支持 hybrid 检索和 GraphQL 查询
✅ 中大型项目推荐
ElasticSearch
Java
老牌搜索引擎,加了 dense_vector 向量功能
✅(但安装复杂)
✅ 强大(传统搜索引擎转向量)
Chroma
Python
本地开发神器,零依赖,LangChain 默认集成
✅ 轻量开发推荐
✅(但性能有限)

✅ 推荐选型策略(看你是哪类项目)

使用场景
推荐库
原因
本地轻量测试
FAISS / Chroma
快、简单、集成方便
中型项目(多用户、多字段)
Qdrant / Milvus
高性能 + 支持 metadata + 支持 REST/gRPC
想做 hybrid 检索(关键词 + 向量)
Weaviate / ElasticSearch
有结构化 + semantic 搜索能力
有中文大数据、需要稳定上线
Milvus(Zilliz 出品)
生态全、企业支持强

🔧 3.插入 / 删除 / 更新文档时,如何管理向量?

这一点很重要,但很多人忽略,尤其是在做“文档知识库问答”时:

✅ 插入:

✅ 删除:

✅ 更新:

不要直接覆盖!

✍️ 补充技巧:


三、检索

检索 = 信息命中的关键策略,关键词 vs 向量 vs 混合,各有千秋,选错方法可能“差之毫厘谬以千里”。

🎯 1.常见检索方式总览

检索方式
技术基础
优点
缺点
应用场景示例
关键词检索
BM25、TF-IDF
快速、解释性强
不懂语义,无法容错
FAQ 检索、搜索引擎
向量检索
Embedding + Faiss / Milvus 等
语义相关性强,能理解语言的含义
不懂结构、不精确、不透明
RAG 问答、智能客服、推荐系统
混合检索
向量 + 关键词 + rerank
结合语义与关键词,效果更好
实现复杂
高要求的智能搜索系统

🔍 2.关键词检索(Keyword-based Retrieval)

1. 原理

2. 关键词检索优点

3. 常用工具


🧠 3.向量检索

1. 原理

2. 向量检索优点

3. 缺点


⚖️ 4.混合检索(Hybrid Retrieval)

通常是以下结构:

1. 问题 -> Embedding 向量
2. 向量检索召回 Top-K 文档(广撒网)
3. + BM25/关键词命中过滤(精准查找)
4. + Reranker 精排打分(语义判断)

适合高精度场景,比如医疗、法律文档检索。


🏷️ 5.元数据过滤(Metadata Filtering)

在检索过程中,可以结合结构化的元数据做“筛选”:

元数据存储在哪里?

通常写在切片的时候,或者嵌入的时候一起加入向量库中,比如:

{
"content":"XXXX",
"metadata": {
"source":"合同A.pdf",
"type":"付款条款",
"page":12,
"created_at":"2023-10-01"
}
}

这时候你就可以在检索前,先用 metadata 做「结构化过滤」。


四、排序

🧠 1.什么是 TopK?

TopK是一个很常见的术语,意思是:

从所有候选结果中,取出相关性最高的前 K 个文档。

比如:

所以:


🧠 2.TopK 背后的“相关性”是怎么判断的?

这取决于你使用的检索方法,不同方式的评分函数不同:

检索方式
相似度/相关性分数是怎么来的?
BM25
基于词频+逆文档频率(TF-IDF)+词位信息
向量检索
计算 Query 和文档向量的余弦相似度
语义 rerank
用更大的 LLM 比较语义相关性(例如 bge-reranker)

总结:不同的检索方法,用不同的“评分机制”来判断文档是否 relevant


⚔️ 3.召回(Recall) vs 精排(Rerank)

这是现代大模型知识检索系统里的一个经典两阶段流程:

✅ 1. 召回(Recall)

✅ 2. 精排(Rerank)

这就像在面试筛选简历一样:先粗筛(召回)→再精排打分。


五、数据清洗 & 🪓 切片策略(别忽视!)

在 embedding 之前,清洗和切片是影响效果的“隐性关键因素”,但很多人忽略了它们的重要性。

1.数据清洗建议:

2.切片策略:

文档不是越长越好,也不是越短越强 ——切片策略=召回质量的下限






欢迎光临 链载Ai (https://www.lianzai.com/) Powered by Discuz! X3.5