LangChain教程:向量存储

介绍

向量搜索是 LangChain 实现 RAG(检索增强生成)的核心环节,本质是:

  1. 将文本片段(如拆分后的企业报告)转为「向量嵌入」(数值向量),存入向量数据库;
  2. 用户提问时,先将问题转为向量,在向量库中「检索语义相似的文本片段」;
  3. 将相似片段作为上下文传给大模型,生成精准回答(避免大模型“胡说”)。

RAG流程

  1. 文档处理(预处理+向量化):将你的私有文档(PDF、TXT、Word等)切割成小片段(避免文本过长),再通过嵌入模型(Embedding)转换成一串数字(向量)——向量是大模型“理解”文本语义的核心,语义越相似,向量越接近;

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

  3. 生成(大模型整合):将“用户问题+检索到的文档片段”拼接成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 向量搜索的核心流程(无代码)

  1. 数据入库:
    • 用文件加载器(如 Docx2txtLoader)加载文档 → 文本分割器拆分片段;
    • 嵌入模型将每个片段转为向量 → 存入向量库(关联文本/元数据)。
  2. 检索问答:
    • 用户提问 → 嵌入模型将问题转为向量;
    • 检索器调用向量库,按「余弦相似度」检索最相似的 k 个片段;
    • 将问题+相似片段传给大模型 → 生成回答。

常见问题

问题 核心原因 解决方案
检索结果不相关 嵌入模型语义偏差/拆分过粗 换中文嵌入模型+缩小chunk_size
检索结果过多/冗余 k值过大/无相似度阈值 降低k值+设置score_threshold
中文检索偏差大 用了英文嵌入模型 切换为text2vec-base-chinese
检索速度慢 向量库未索引/数据量过大 FAISS建索引/换Milvus/Pinecone

总结

  1. 核心逻辑:LangChain 向量搜索 = 嵌入模型(文本转向量) + 向量库(存向量) + 检索器(搜向量),是 RAG 的核心;
  2. 选型原则:轻量场景用 FAISS/Chroma + 中文开源嵌入模型,企业级用 Pinecone/Milvus + 闭源嵌入模型;

原文出处:/show_1GW2rUkHAzhw.html