跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI算法

LangChain 向量存储与检索器使用指南

LangChain 中向量存储和检索器的核心概念与使用方法。涵盖了文档对象的结构、基于 Chroma 的向量存储初始化与查询方式,以及通过 Retriever 集成到 LangChain 表达式语言(LCEL)的流程。最后展示了如何将检索结果与 LLM 结合构建简单的 RAG 应用。

GopherDev发布于 2025/2/7更新于 2026/10/2295 浏览
LangChain 向量存储与检索器使用指南

本文将介绍 LangChain 的向量存储和抽象检索器。支持从向量数据库和其他来源检索数据,并与大模型的工作流集成。这对于需要检索数据以进行推理的应用程序非常重要,例如检索增强生成(RAG)的情况。

概念

本指南专注于文本数据的检索流程,涵盖以下核心组件:

  • Documents:包含文本内容及元数据的文档对象。
  • Vector Stores:用于存储和检索向量数据的数据库。
  • Retrievers:标准化的检索接口,便于集成到工作流中。

环境准备

依赖安装

运行本教程需要安装以下 Python 包:

pip install langchain langchain-chroma langchain-openai
环境变量配置

为了启用 LangSmith 追踪,需设置环境变量。在终端中执行:

export LANGCHAIN_TRACING_V2="true"
export LANGCHAIN_API_KEY="your_api_key_here"

若在 Jupyter Notebook 中,可使用以下方式动态设置:

import getpass
import os
os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_API_KEY"] = getpass.getpass()

文档对象 (Documents)

LangChain 中的 Document 对象是处理文本的基本单元,它由两部分组成:

  1. page_content:字符串格式的实际文本内容。
  2. metadata:字典形式的元数据,可存储来源、作者、日期等信息。

单个文档通常代表较大文档的一个切片。以下是创建文档对象的示例:

from langchain_core.documents import Document

documents = [
    Document(
        page_content="Dogs are great companions, known for their loyalty and friendliness.",
        metadata={"source": "mammal-pets-doc", "type": "pet"},
    ),
    Document(
        page_content="Cats are independent pets that often enjoy their own space.",
        metadata={"source": "mammal-pets-doc", "type": "pet"},
    ),
    Document(
        page_content=,
        metadata={: , : },
    ),
    Document(
        page_content=,
        metadata={: , : },
    ),
    Document(
        page_content=,
        metadata={: , : },
    ),
]
"Goldfish are popular pets for beginners, requiring relatively simple care."
"source"
"fish-pets-doc"
"type"
"pet"
"Parrots are intelligent birds capable of mimicking human speech."
"source"
"bird-pets-doc"
"type"
"pet"
"Rabbits are social animals that need plenty of space to hop around."
"source"
"mammal-pets-doc"
"type"
"pet"

向量存储 (Vector Stores)

向量搜索是将非结构化文本转换为数值向量进行存储和检索的技术。通过嵌入模型(Embedding Model),文本被映射为高维空间中的向量。查询时,将问题也转化为向量,计算相似度以找到最相关的文档。

LangChain 提供了多种向量存储后端,包括内存型(如 Chroma)、云托管型及本地部署型。以下演示使用 Chroma 作为内存向量存储:

from langchain_chroma import Chroma
from langchain_openai import OpenAIEmbeddings

vectorstore = Chroma.from_documents(
    documents,
    embedding=OpenAIEmbeddings(),
)

实例化后,可通过多种方式查询:

  1. 相似性搜索:根据文本查询返回最相似的文档。
  2. 异步查询:支持非阻塞操作。
  3. 带分数查询:返回文档及其相似度得分。
  4. 向量查询:直接传入向量进行匹配。

示例代码:

# 字符串查询
results = vectorstore.similarity_search("cat")

# 异步查询
async_results = await vectorstore.asimilarity_search("cat")

# 带分数查询
results_with_score = vectorstore.similarity_search_with_score("cat")

# 向量查询
embedding = OpenAIEmbeddings().embed_query("cat")
vector_results = vectorstore.similarity_search_by_vector(embedding)

检索器 (Retrievers)

虽然 VectorStore 功能强大,但它不直接继承自 Runnables,难以直接融入 LangChain 表达式语言(LCEL)。Retriever 接口则标准化了检索行为,支持 invoke 和 batch 等操作,更适合链式调用。

可以通过包装 similarity_search 方法创建自定义检索器:

from typing import List
from langchain_core.runnables import RunnableLambda

retriever = RunnableLambda(vectorstore.similarity_search).bind(k=1)
result = retriever.batch(["cat", "shark"])

更推荐直接使用 as_retriever 方法,它封装了常见的搜索策略:

retriever = vectorstore.as_retriever(
    search_type="similarity",
    search_kwargs={"k": 1},
)

VectorStoreRetriever 支持多种搜索类型,包括默认相似度、最大边际相关性(MMR)以及基于分数的阈值过滤。这有助于在相关性和多样性之间取得平衡。

检索增强生成 (RAG) 集成

检索器可轻松整合到 RAG 应用中,将检索到的上下文与 LLM 提示词结合。以下是一个基于 LCEL 的最简 RAG 链示例:

from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnablePassthrough

# 初始化 LLM
llm = ChatOpenAI(model="gpt-3.5-turbo-0125")

# 定义提示模板
prompt = ChatPromptTemplate.from_messages([
    ("human", "Answer this question using the provided context only.\n{question}\nContext:\n{context}")
])

# 构建链
rag_chain = {"context": retriever, "question": RunnablePassthrough()} | prompt | llm

# 执行查询
response = rag_chain.invoke("tell me about cats")
print(response.content)

此流程首先通过检索器获取上下文,然后将其填入提示词,最后发送给 LLM 生成回答。这种模式显著提升了大模型回答的准确性和事实依据。

总结

本文详细讲解了 LangChain 中向量存储与检索器的核心用法。通过 Document 管理文本数据,利用 VectorStore 进行向量化存储与检索,并通过 Retriever 接口实现标准化调用。最终结合 LLM 构建了基础的 RAG 应用架构。掌握这些组件是开发高级检索增强应用的基础。

目录

  1. 概念
  2. 环境准备
  3. 依赖安装
  4. 环境变量配置
  5. 文档对象 (Documents)
  6. 向量存储 (Vector Stores)
  7. 字符串查询
  8. 异步查询
  9. 带分数查询
  10. 向量查询
  11. 检索器 (Retrievers)
  12. 检索增强生成 (RAG) 集成
  13. 初始化 LLM
  14. 定义提示模板
  15. 构建链
  16. 执行查询
  17. 总结

更多推荐文章

查看全部
  • FastapiAdmin V2.0.0 现代开源全栈中后台快速开发平台
  • AI 辅助定位并修复生产环境诡异 Bug 实战复盘
  • SDXL Prompt Styler:提示词风格化增强实战指南
  • OpenClaw 本地部署指南:WSL2 + Ubuntu + Node.js 22+ 环境搭建
  • Llama.cpp 框架入门与 C/C++ 编码实战
  • C++ 异常处理机制:异常捕获、自定义与实战应用
  • C++11 核心新特性详解:初始化、引用与移动语义
  • 免费 Trae 编辑器体验:i18n 任务排队与 AI 编程工具思考
  • C++ 实现 Java 风格 Stream API 的思路与代码
  • 使用 Obsidian 的 Git 插件将笔记同步到 GitHub 私有仓库
  • Nginx 部署前端 Vue 项目实战指南
  • 深入解析 LLaMA 架构:从零构建轻量级大语言模型
  • 无人机避障 Mid360+Fast-lio 感知建图+Ego-planner 运动规划
  • 2026 年 3 月 23 日 AI 产业要闻:脑机接口落地与算力竞赛
  • C++ 高并发内存池实战:ThreadCache 设计与实现
  • 法律领域自然语言处理(NLP)应用场景与实战
  • Android 开发工程师职业发展路径与行业现状深度解析
  • Unity-MCP 配置指南:实现 AI 驱动游戏开发
  • 人工智能应用工程师(高级)课程体系与实战路径解析
  • Kotti Next 调试记录:后端连通与前端轻量级重构方案

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online