Skip to main content
本笔记本介绍如何在LangChain中使用Weaviate向量存储,需通过langchain-weaviate包实现。
Weaviate是开源向量数据库。它允许您存储您喜爱的机器学习模型的数据对象和向量嵌入,并无缝扩展至数十亿级数据对象。
使用此集成需已运行Weaviate数据库实例。

最小版本

本模块要求Weaviate 1.23.7或更高版本。但建议使用最新版Weaviate。

连接到weaviate

本笔记本假设您已运行本地Weaviate实例(http://localhost:8080端口50051开放gRPC流量),并通过以下方式连接:

其他部署选项

Weaviate支持多种部署方式,如Weaviate云服务(WCS)、Docker或Kubernetes。 若采用其他部署方式,可此处阅读更多了解连接方法。您可以使用不同辅助函数或创建自定义实例。
注意需要v4客户端API,将创建weaviate.WeaviateClient对象。

认证

部分Weaviate实例(如WCS部署)启用认证机制,如API密钥或用户名+密码认证。 请参考客户端认证指南及深度认证配置页面获取详细信息。

连接到现有集合(复用索引)

若本地Weaviate已创建集合,可直接连接:

安装

环境配置

本笔记本通过OpenAIEmbeddings调用OpenAI API。建议获取OpenAI API密钥并导出为环境变量OPENAI_API_KEY。 完成设置后,API密钥将自动读取。如不熟悉环境变量,可参考Python os.environ文档或此指南。

使用方法

按相似度查找对象

以下示例展示如何从数据导入到查询Weaviate实例的完整流程。

步骤1:数据导入

首先加载并分块长文本文件,向Weaviate添加数据。
langchain-community包已不再维护。从langchain_community导入的示例可能过时或无法使用。请谨慎使用。
现在可开始导入数据。 通过连接Weaviate实例并使用生成的weaviate_client对象实现导入。例如:

步骤2:执行搜索

现在可以执行相似度搜索。该操作将基于Weaviate中存储的嵌入向量以及从查询文本生成的等价嵌入向量,返回与查询文本最相似的最相关文档。
您还可以添加过滤条件,这些条件将决定结果是否包含或排除(参见更多过滤示例。)。
同时可以提供k,该参数表示返回结果的上限数量。

量化结果相似度

您可以选择性获取相关性”分数”。这是一个相对分数,用于衡量在所有搜索结果中该结果的相似度质量。 注意该分数是相对值,不应用于确定相关性阈值。但可用于比较整个搜索结果集中不同结果的相似度。

搜索机制

similarity_search使用Weaviate的混合搜索。 混合搜索结合向量搜索和关键词搜索,其中alpha作为向量搜索的权重。通过similarity_search函数可传入额外参数( kwargs)。详见此参考文档了解可用参数。 通过添加alpha=0可实现纯关键词搜索:

持久化

通过langchain-weaviate添加的数据将根据配置持久化存储。 例如,WCS实例会配置为永久存储数据,Docker实例可通过挂载卷实现数据持久化。更多详情请参见Weaviate持久化文档。

多租户

多租户允许单台Weaviate实例中创建大量隔离的数据集合,这些集合具有相同的集合配置。该特性适用于多用户环境(如构建SaaS应用),其中每个终端用户都将拥有独立的数据集合。 启用多租户时,向量存储需要感知tenant参数。 添加任何数据时,需提供tenant参数:
执行查询时也需提供tenant参数:

异步使用

langchain-weaviate支持Weaviate原生异步客户端。将WeaviateAsyncClient作为client_async参数(与同步的client参数一同)时,异步方法(afrom_texts、aadd_texts、asimilarity_search、asimilarity_search_with_score、amax_marginal_relevance_search及其变体)将直接使用该客户端,而非在线程池中运行同步客户端。
原生异步支持需要langchain-weaviate 0.0.8或更高版本。若未传入client_async参数,存储将退化为在执行器中运行同步客户端并记录警告(代码仍可运行但无法获得真正的异步I/O)。
与同步的connect_to_local()辅助函数不同,use_async_with_*辅助函数返回尚未连接的客户端——必须先await client.connect()再使用。同步的client仍需保留,因其用于集合/方案管理。
完成操作后需关闭两个客户端以释放连接:

检索器选项

Weaviate也可作为检索器使用

最大边际相关性搜索(MMR)

除使用retriever对象中的similaritysearch外,还可使用mmr。

与LangChain集成

已知大语言模型(LLM)的局限性在于其训练数据可能过时,或缺乏所需领域知识。
向量存储通过提供存储和检索相关信息的机制,补充大语言模型(LLMs)的能力。这使您能够结合大语言模型和向量存储的优势,通过利用大语言模型的推理和语言能力,结合向量存储检索相关信息的特性。 两个著名的结合大语言模型和向量存储的应用场景是:
  • 问题回答
  • 检索增强生成(RAG)

问题回答与来源

在LangChain中,通过使用向量存储可以增强问题回答功能。让我们看看如何实现这一点。 本节使用RetrievalQAWithSourcesChain,该组件负责从索引中查找文档。 首先,我们将文本再次分块并导入Weaviate向量存储中。
现在可以指定检索器构建链式流程:
然后运行链式流程以提出问题:

检索增强生成

另一个结合大语言模型和向量存储的流行应用是检索增强生成(RAG)。这是一种技术,使用检索器从向量存储中查找相关信息,然后基于检索到的数据和提示词使用大语言模型生成输出。 我们采用类似的初始配置:
需要为RAG模型构建模板,以便将检索到的信息填充到模板中。
运行单元格后,将得到非常相似的结果。
请注意,由于模板由您自行构建,您可以按需进行定制。

总结与资源

Weaviate是一个可扩展、生产就绪的向量存储。 该集成使Weaviate能够与LangChain结合,通过强大的数据存储增强大语言模型的性能。其可扩展性和生产就绪特性使其成为LangChain应用中非常理想的选择,并能够显著缩短您的生产部署时间。
官方原文:src/oss/python/integrations/vectorstores/weaviate.mdx · 非官方翻译,译文由 AI 生成,以英文原文为准。
Last modified on November 3, 2026