Skip to main content
Databricks 向量搜索 是一个无服务器的相似性搜索引擎,允许您将数据的向量表示(包括元数据)存储在向量数据库中。通过向量搜索,您可以从 Unity Catalog 管理的 Delta 表创建自动更新的向量搜索索引,并使用简单的 API 进行查询,以返回最相似的向量。 本笔记本展示了如何将 LangChain 与 Databricks 向量搜索结合使用。

设置

要访问 Databricks 模型,您需要创建一个 Databricks 帐户、设置凭据(仅当您在 Databricks 工作区外部时),并安装所需的包。

凭据(仅当您在 Databricks 外部时)

如果您在 Databricks 内部运行 LangChain 应用程序,可以跳过此步骤。 否则,您需要手动将 Databricks 工作区主机名和个人访问令牌分别设置为 DATABRICKS_HOSTDATABRICKS_TOKEN 环境变量。有关如何获取访问令牌,请参阅身份验证文档

安装

LangChain Databricks 集成包含在 databricks-langchain 包中。

创建向量搜索端点和索引(如果尚未创建)

在本节中,我们将使用客户端 SDK 创建一个 Databricks 向量搜索端点和一个索引。 如果您已经拥有端点和索引,可以跳过本节,直接转到“实例化”部分。 首先,实例化 Databricks VectorSearch 客户端:
接下来,我们将创建一个新的 VectorSearch 端点。
最后,我们将创建一个可以在端点上查询的索引。Databricks 向量搜索中有两种类型的索引,DatabricksVectorSearch 类支持这两种用例。
  • Delta 同步索引 自动与源 Delta 表同步,当 Delta 表中的底层数据发生变化时,自动并增量地更新索引。
  • 直接向量访问索引 支持直接读写向量和元数据。用户负责使用 REST API 或 Python SDK 更新此表。
此外,对于 Delta 同步索引,您可以选择使用 Databricks 管理的嵌入或自管理嵌入(通过 LangChain 嵌入类)。 以下代码创建一个直接访问索引。有关创建其他类型索引的说明,请参阅 Databricks 文档

实例化

DatabricksVectorSearch 的实例化方式略有不同,具体取决于您的索引是使用 Databricks 管理的嵌入还是自管理嵌入(即您选择的 LangChain 嵌入对象)。 如果您使用的是带有 Databricks 管理嵌入的 Delta 同步索引:
如果您使用的是直接访问索引或带有自管理嵌入的 Delta 同步索引, 您还需要提供嵌入模型和源表中用于嵌入的文本列:

管理向量存储

向向量存储添加项目

注意:通过 add_documents 方法向向量存储添加项目仅支持直接访问索引。

从向量存储中删除项目

注意:通过 delete 方法从向量存储中删除项目仅支持直接访问索引。

查询向量存储

一旦您的向量存储已创建并添加了相关文档,您很可能希望在链或代理运行期间对其进行查询。

直接查询

执行简单的相似性搜索可以按如下方式进行:
注意:默认情况下,相似性搜索仅返回主键和文本列。如果您想检索与文档关联的自定义元数据,请在初始化向量存储时在 columns 参数中传递额外的列。
如果您想执行相似性搜索并接收相应的分数,可以运行:

通过转换为检索器进行查询

您也可以将向量存储转换为检索器,以便在链中更轻松地使用。

用于检索增强生成的用法

有关如何将此向量存储用于检索增强生成 (RAG) 的指南,请参阅以下部分:

API 参考

有关所有 DatabricksVectorSearch 功能和配置的详细文档,请访问 API 参考:api-docs.databricks.com/python/databricks-ai-bridge/latest/databricks_langchain.html#databricks_langchain.DatabricksVectorSearch