LangChain教程:向量存储 作者:马育民 • 2026-02-28 20:48 • 阅读:10010 # 介绍 向量搜索是 LangChain 实现 RAG(检索增强生成)的核心环节,本质是: 1. 将文本片段(如拆分后的企业报告)转为「向量嵌入」(数值向量),存入向量数据库; 2. 用户提问时,先将问题转为向量,在向量库中「检索语义相似的文本片段」; 3. 将相似片段作为上下文传给大模型,生成精准回答(避免大模型“胡说”)。 # RAG流程 1. **文档处理(预处理+向量化)**:将你的私有文档(PDF、TXT、Word等)切割成小片段(避免文本过长),再通过嵌入模型(Embedding)转换成一串数字(向量)——向量是大模型“理解”文本语义的核心,语义越相似,向量越接近; [](https://www.malaoshi.top/upload/0/0/1GW2pCbNBiGA.png) 2. **检索(语义匹配)**:用户提问后,同样将问题转换成向量,然后在向量数据库中,快速检索出和问题向量最相似的N个文档片段(这一步是RAG的核心,检索的准确性直接决定回答质量); [](https://www.malaoshi.top/upload/0/0/1GW2pCbxgoJE.png) [](https://www.malaoshi.top/upload/0/0/1GW2pCcFsiQH.png) 3. **生成(大模型整合)**:将“用户问题+检索到的文档片段”拼接成Prompt,发给大模型,大模型基于这些真实信息,生成准确、无幻觉的回答,最后返回给用户。 [](https://www.malaoshi.top/upload/0/0/1GW2pCcapqJK.png) 补充:整个流程中,**向量数据库**负责存储向量、实现快速检索,**框架工具**(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 向量搜索的核心流程(无代码) 1. **数据入库**: - 用文件加载器(如 `Docx2txtLoader`)加载文档 → 文本分割器拆分片段; - 嵌入模型将每个片段转为向量 → 存入向量库(关联文本/元数据)。 2. **检索问答**: - 用户提问 → 嵌入模型将问题转为向量; - 检索器调用向量库,按「余弦相似度」检索最相似的 `k` 个片段; - 将问题+相似片段传给大模型 → 生成回答。 # 常见问题 | 问题 | 核心原因 | 解决方案 | |---------------------|---------------------------|-----------------------------------| | 检索结果不相关 | 嵌入模型语义偏差/拆分过粗 | 换中文嵌入模型+缩小chunk_size | | 检索结果过多/冗余 | k值过大/无相似度阈值 | 降低k值+设置score_threshold | | 中文检索偏差大 | 用了英文嵌入模型 | 切换为text2vec-base-chinese | | 检索速度慢 | 向量库未索引/数据量过大 | FAISS建索引/换Milvus/Pinecone | # 总结 1. **核心逻辑**:LangChain 向量搜索 = 嵌入模型(文本转向量) + 向量库(存向量) + 检索器(搜向量),是 RAG 的核心; 2. **选型原则**:轻量场景用 FAISS/Chroma + 中文开源嵌入模型,企业级用 Pinecone/Milvus + 闭源嵌入模型; 原文出处:http://malaoshi.top/show_1GW2rUkHAzhw.html