在 RAG(检索增强生成)系统中,向量数据库是核心组件之一。它负责存储文档的向量表示,并快速检索与用户查询最相关的内容,为大模型提供外部知识。下面详细介绍向量数据库的认识、常见产品及其应用
向量数据库是一种专门用于存储、索引和查询高维向量数据的数据库。在 RAG 中,文档被切分成片段,通过嵌入模型(如 OpenAI Embeddings、BERT 等)转换为固定长度的向量,存入向量数据库。当用户提问时,同样将问题向量化,然后通过向量数据库进行相似性搜索(如余弦相似度、欧氏距离),返回最相关的文档片段,作为上下文提供给大模型。
核心作用:
语义检索:不依赖关键词匹配,而是理解语义,即使查询词与文档用词不同,也能召回相关内容。
高效查询:借助近似最近邻(ANN)算法(如 HNSW、IVF),能在海量向量中快速检索。
| 产品 | 类型 | 特点 | 适用场景 |
|---|---|---|---|
| FAISS | 本地库(非服务) | Facebook 开源,高效、轻量,支持 GPU 加速,但需自行集成和管理。 | 本地开发、小规模部署、需深度定制。 |
| Pinecone | 托管云服务 | 全托管,自动扩展,支持元数据过滤,提供 REST API,上手快。 | 生产环境,希望快速搭建、无需运维。 |
| Weaviate | 开源+云服务 | 支持混合搜索(向量+标量),内置模块化,与多种模型集成。 | 需要灵活部署(自托管或云),兼顾向量与结构化查询。 |
| Qdrant | 开源+云服务 | 使用 Rust 编写,高性能,支持过滤、有效负载存储,API 友好。 | 高并发、低延迟场景,如实时推荐。 |
| Milvus | 开源+云服务(Zilliz) | 专为大规模向量检索设计,支持分布式,功能丰富。 | 大规模数据(亿级向量),企业级应用。 |
| Chroma | 开源嵌入式库 | 轻量、易于使用,与 LangChain 深度集成,适合快速原型。 | 开发测试、小型项目。 |
| Elasticsearch | 开源搜索引擎 | 8.0 后支持向量搜索,可与全文检索结合。 | 已有 ES 技术栈,需同时支持传统搜索。 |
RAG 的整体流程如下:
数据准备
收集文档(PDF、网页、数据库等),切分为适当大小的片段(如 500 字)。
用嵌入模型生成每个片段的向量。
将向量及对应文本(或元数据)存入向量数据库。
查询处理
用户输入问题,用相同嵌入模型生成查询向量。
向量数据库执行相似性搜索,返回 top-k 最相似的文档片段(通常 k=3~5)。
生成回答
将检索到的片段拼接成上下文,与用户问题一起构造 Prompt 发送给大模型。
大模型基于上下文生成最终答案。
假设我们要构建一个内部 IT 支持问答机器人,知识库包含产品手册、故障处理文档。
选择向量数据库:考虑数据量中等(几万份文档)、需要快速上线,选用 Pinecone 或 Weaviate Cloud。
实现步骤:
文档加载与分块:使用 LangChain 的 RecursiveCharacterTextSplitter 将每个文档切成 500 字符的片段,避免跨主题。
向量化:调用 OpenAI text-embedding-ada-002 生成 1536 维向量。
存入 Pinecone:创建索引,将向量和原始文本(作为 payload)上传。
检索:用户问“如何重置密码?”,生成查询向量,Pinecone 返回最相关的 3 个片段(如“密码重置步骤”、“常见问题-密码”)。
生成:构造 Prompt,例如:“基于以下信息:... 请回答:如何重置密码?” 调用 GPT-4 得到答案。
分块策略:块大小影响检索粒度。过小丢失上下文,过大包含噪声。通常 200~1000 字符,可重叠。
嵌入模型:选择领域匹配的模型,如多语言场景用 multilingual-e5。
索引算法:HNSW(Hierarchical Navigable Small World)是目前流行的高效 ANN 算法,多数数据库默认支持。
元数据过滤:结合标量过滤(如日期、分类)可提升准确性,例如只检索特定产品的文档。
混合搜索:有些场景(如代码搜索)需要结合关键词和向量,Elasticsearch 和 Weaviate 支持混合搜索。
向量数据库是 RAG 系统的“记忆体”,决定了检索的质量和速度。选择合适的向量数据库需综合考虑数据规模、性能要求、运维成本和团队技术栈。在实际应用中,通过合理的分块、向量化和检索策略,可以显著提升大模型回答的准确性和时效性。