介绍
向量搜索是 LangChain 实现 RAG(检索增强生成)的核心环节,本质是:
- 将文本片段(如拆分后的企业报告)转为「向量嵌入」(数值向量),存入向量数据库;
- 用户提问时,先将问题转为向量,在向量库中「检索语义相似的文本片段」;
- 将相似片段作为上下文传给大模型,生成精准回答(避免大模型“胡说”)。
RAG流程
文档处理(预处理+向量化):将你的私有文档(PDF、TXT、Word等)切割成小片段(避免文本过长),再通过嵌入模型(Embedding)转换成一串数字(向量)——向量是大模型“理解”文本语义的核心,语义越相似,向量越接近;

检索(语义匹配):用户提问后,同样将问题转换成向量,然后在向量数据库中,快速检索出和问题向量最相似的N个文档片段(这一步是RAG的核心,检索的准确性直接决定回答质量);


- 生成(大模型整合):将“用户问题+检索到的文档片段”拼接成Prompt,发给大模型,大模型基于这些真实信息,生成准确、无幻觉的回答,最后返回给用户。

补充:整个流程中,向量数据库负责存储向量、实现快速检索,框架工具(LangChain)负责串联整个流程,大模型负责最终生成回答,三者缺一不可。
1. 嵌入模型(Embeddings)- 文本转向量
将文本(问题/文档片段)转为固定长度的数值向量,是向量搜索的基础;
常用选型:
- 开源:
SentenceTransformerEmbeddings(适配中文的all-MiniLM-L6-v2/text2vec-base-chinese); - 闭源:
OpenAIEmbeddings(text-embedding-3-small)、BaiduERNIEEmbeddings(文心一言);
注意:中文场景优先选「中文专用嵌入模型」,避免英文模型的语义偏差。
2. 向量存储(Vector Stores)- 向量的“数据库”
存储向量嵌入+关联的文本片段/元数据,提供相似性检索能力;
常用选型(按场景):
| 向量库类型 | 代表组件 | 适用场景 |
|---|---|---|
| 轻量本地 | FAISS/Chroma |
原型开发、小数据量(万级片段) |
| 企业级部署 | Pinecone/Milvus |
大数据量(百万级)、高并发检索 |
| 数据库集成 | PGVector(PostgreSQL) |
需和业务数据库联动的场景 |
特点:LangChain 封装了统一的 API,切换向量库无需修改核心逻辑。
3. 检索器(Retrievers)- 向量搜索的“调度器”
封装向量搜索逻辑,提供标准化的检索接口,是连接向量库和大模型的关键;
常用类型:
VectorStoreRetriever:基础检索器,直接调用向量库的相似性搜索;BM25Retriever:关键词检索(补充向量搜索,提升精准度);EnsembleRetriever:融合向量+关键词检索(最优解);
核心配置:
k:每次检索返回的相似片段数(默认4-8,过多易导致上下文冗余);score_threshold:相似度阈值(过滤低相似度片段,如仅保留相似度>0.7的结果)。
三、LangChain 向量搜索的核心流程(无代码)
- 数据入库:
- 用文件加载器(如
Docx2txtLoader)加载文档 → 文本分割器拆分片段; - 嵌入模型将每个片段转为向量 → 存入向量库(关联文本/元数据)。
- 用文件加载器(如
- 检索问答:
- 用户提问 → 嵌入模型将问题转为向量;
- 检索器调用向量库,按「余弦相似度」检索最相似的
k个片段; - 将问题+相似片段传给大模型 → 生成回答。
常见问题
| 问题 | 核心原因 | 解决方案 |
|---|---|---|
| 检索结果不相关 | 嵌入模型语义偏差/拆分过粗 | 换中文嵌入模型+缩小chunk_size |
| 检索结果过多/冗余 | k值过大/无相似度阈值 | 降低k值+设置score_threshold |
| 中文检索偏差大 | 用了英文嵌入模型 | 切换为text2vec-base-chinese |
| 检索速度慢 | 向量库未索引/数据量过大 | FAISS建索引/换Milvus/Pinecone |
总结
- 核心逻辑:LangChain 向量搜索 = 嵌入模型(文本转向量) + 向量库(存向量) + 检索器(搜向量),是 RAG 的核心;
- 选型原则:轻量场景用 FAISS/Chroma + 中文开源嵌入模型,企业级用 Pinecone/Milvus + 闭源嵌入模型;