5. 索引构建
5.1 向量嵌入
向量嵌入(Embedding):将复杂数据对象(文本、图像等)转换为低维稠密数值向量的技术。核心原则是语义相似的对象在向量空间中距离更近,常用余弦相似度、点积、欧氏距离衡量相似度。
在 RAG 中的作用:
- 语义检索基础:离线将文档块向量化存入向量库,在线将用户问题向量化,通过相似度计算召回 Top-K 相关文档块
- 决定检索质量:Embedding 质量直接影响召回内容的准确性和相关性,劣质模型会"污染"上下文导致答案质量下降
技术发展:
- 静态词嵌入(Word2Vec、GloVe):固定向量,无法处理一词多义
- 动态上下文嵌入(BERT):基于 Transformer 编码器,同一词在不同语境生成不同向量
- RAG 新要求:领域自适应、多粒度多模态支持、检索效率与混合检索
训练原理:
- 自监督学习:MLM(掩码语言模型)学习词元与上下文关系,NSP(下一句预测)学习句子间逻辑关系
- 效果增强:度量学习优化相似度排序,对比学习通过三元组(Anchor-Positive-Negative)拉近相似样本、推远不相似样本
选型指南:
- 参考 MTEB 排行榜:关注 Retrieval 任务排名、语言支持、模型大小、向量维度、最大 Token 数
- 迭代测试:构建私有评测集,对比多个候选模型在真实业务场景下的表现,结合成本考虑最终选择
5.2 多模态嵌入
多模态嵌入(Multimodal Embedding):将不同类型数据(图像、文本、音频等)映射到同一个共享向量空间的技术,打破传统文本嵌入的"模态墙",实现跨模态语义对齐。
为什么需要:现实信息是多模态的,传统文本嵌入无法理解"那张有红色汽车的图片"这类查询,因为文本向量和图像向量处于隔离空间。多模态嵌入通过跨模态对齐(Cross-modal Alignment)解决这一问题。
CLIP 模型:
- 架构:双编码器(图像编码器 + 文本编码器),分别将图文映射到共享向量空间
- 训练策略:对比学习,最大化正确图文对相似度,最小化错误配对相似度
- 核心能力:零样本识别,将分类任务转化为图文检索问题,无需微调即可泛化
BGE-M3 特性("M3"):
- 多语言性:支持 100+ 种语言的图文处理,实现跨语言检索
- 多功能性:同时支持密集检索、多向量检索、稀疏检索
- 多粒度性:处理短句到 8192 token 的长文档
- 技术亮点:采用网格嵌入(Grid-Based Embeddings),将图像分割为网格单元独立编码,提升局部细节捕捉能力
应用场景:多模态知识检索、组合图像检索、多模态查询的知识检索等 RAG 场景。
5.3 向量数据库
向量数据库(Vector Database):专门设计用于高效存储、管理和查询高维向量的数据库系统,是 RAG 系统中连接数据与大语言模型的关键桥梁。
主要功能:
- 高效相似性搜索:利用 HNSW、IVF 等索引技术,在数十亿级向量中实现毫秒级 ANN(近似最近邻)查询
- 高维数据管理:优化存储高维向量(通常数百到数千维),支持增删改查操作
- 丰富查询能力:支持标量字段过滤、范围查询、聚类分析等
- 可扩展与高可用:分布式架构,水平扩展,容错性强
- 生态集成:与 LangChain、LlamaIndex 等 AI 框架无缝集成
vs 传统数据库:
- 核心差异:向量数据库专注于相似性搜索(ANN),传统数据库专注于精确匹配
- 索引机制:向量数据库使用 HNSW、LSH、IVF 等 ANN 索引,传统数据库使用 B-Tree、Hash Index
- 应用场景:向量数据库适用于 AI 应用、RAG、推荐系统;传统数据库适用于业务系统、金融交易
- 互补关系:两者结合使用,传统数据库存储业务元数据,向量数据库处理 AI 向量数据
工作原理:采用四层架构(存储层、索引层、查询层、服务层),主要技术包括基于树的方法(Annoy)、基于哈希的方法(LSH)、基于图的方法(HNSW)、基于量化的方法(IVF、PQ)。
主流产品:
- Pinecone:完全托管 Serverless 服务,企业级特性,适合生产环境
- Milvus:开源分布式,支持 GPU 加速,适合大规模部署
- Qdrant:Rust 开发,高性能(RPS>4000),适合性能敏感应用
- Weaviate:支持 GraphQL,20+ AI 模块,适合 AI 开发和多模态处理
- Chroma:轻量级本地优先,零配置,适合原型开发和小规模应用
本地向量存储(FAISS):Facebook AI Research 开发的高性能库,将索引保存为本地文件(.faiss + .pkl),轻量高效,适合快速原型设计和中小型应用。
5.4 Milvus介绍及多模态检索实践
Milvus:开源的分布式向量数据库,专为大规模向量相似性搜索设计,采用云原生架构,具备高可用、高性能、易扩展特性,能处理十亿级甚至更大规模向量数据,适合生产环境。
核心组件:
-
Collection(集合):类似关系型数据库的表,是数据组织的基本单位
- Schema:定义数据结构,包含主键字段、向量字段、标量字段
- Partition(分区):逻辑划分,提升查询性能,最多 1024 个分区
- Alias(别名):为 Collection 提供"昵称",实现数据更新时的无缝切换,代码解耦
-
Index(索引):加速检索的数据结构
- FLAT:暴力搜索,100% 召回率,适合小规模数据
- IVF 系列:倒排文件索引,通过聚类缩小搜索范围,性能与效果平衡
- HNSW:基于多层图的索引,检索速度快、召回率高,内存占用大
- DiskANN:基于磁盘的图索引,支持超大规模数据(十亿级+)
-
检索功能:
- 基础 ANN 检索:近似最近邻搜索,核心功能
- 过滤检索:结合向量相似性检索与标量字段过滤
- 范围检索:返回相似度在特定范围内的所有结果
- 多向量混合检索:同时检索多个向量字段,使用 Reranker 融合结果
- 分组检索:确保结果多样性,每个组只出现指定次数
多模态检索实践:使用 Visualized-BGE 模型和 Milvus 构建图文检索引擎,流程包括:初始化编码器 → 创建 Collection(定义 Schema) → 插入数据(图像向量化) → 创建索引(HNSW) → 执行多模态检索(图文组合查询) → 可视化结果。
5.5 索引优化
索引优化目标:在检索精确性和生成质量之间取得平衡,提升大规模知识库场景下的检索效率和准确性。
上下文扩展(句子窗口检索):
- 核心思想:为检索精确性而索引小块,为上下文丰富性而检索大块
- 工作流程:
- 索引阶段:将文档分割成单个句子作为独立节点,每个节点在元数据中存储前后 N 个句子的上下文窗口
- 检索阶段:在单一句子节点上执行相似度搜索,精确定位核心信息
- 后处理阶段:使用
MetadataReplacementPostProcessor将检索到的句子替换为完整的上下文窗口 - 生成阶段:将包含丰富上下文的节点传递给 LLM 生成答案
- 优势:结合小块检索的精确性和大块上下文的丰富性,生成更详尽、连贯的答案
结构化索引:
- 原理:为文本块附加结构化元数据(文件名、日期、章节、作者等),实现"先过滤,再搜索"策略
- 元数据过滤:结合元数据预过滤和向量搜索,缩小检索范围,提升效率和准确性
- 递归检索:实现"路由"功能,先将查询引导至正确的知识来源,再在该来源内部执行精确查询
- 实现方式:创建顶层摘要索引(IndexNode)用于路由,子层查询引擎(如 PandasQueryEngine)用于具体查询
- 安全改进:分离路由和检索,使用元数据过滤器替代代码执行,避免安全风险
- 应用场景:大规模知识库、多数据源查询、结构化数据检索

评论(没有评论)