BigtableVectorStore
本指南介绍了使用 Google Cloud Bigtable 作为向量存储的BigtableVectorStore 集成。
Bigtable 是一种键值和宽列存储,适用于对结构化、半结构化或非结构化数据的快速访问。
概述
BigtableVectorStore 使用 Google Cloud Bigtable 存储文档及其向量嵌入,用于相似度搜索和检索。它支持强大的元数据过滤以精细化搜索结果。
集成详情
| 类 | 包 | 本地 | JS 支持 | 包下载量 | 最新版本 |
|---|---|---|---|---|---|
| BigtableVectorStore | langchain-google-bigtable | ❌ | ❌ |
设置
前提条件
要开始,您需要一个已启用 Bigtable 实例的 Google Cloud 项目。安装
集成在langchain-google-bigtable 包中。以下命令还安装了 langchain-google-vertexai 用于嵌入服务。
设置您的 Google Cloud 项目
设置您的 Google Cloud 项目,以便在此笔记本中使用 Google Cloud 资源。 如果您不知道项目 ID,请尝试以下方法:- 运行
gcloud config list。 - 运行
gcloud projects list。 - 查看支持页面:找到项目 ID。
🔐 身份验证
以登录此笔记本的 IAM 用户身份向 Google Cloud 进行身份验证,以便访问您的 Google Cloud 项目。- 如果您使用 Colab 运行此笔记本,请使用以下单元格并继续。
- 如果您使用 Vertex AI Workbench,请查看此处的设置说明。
初始化
初始化BigtableVectorStore 涉及三个步骤:设置嵌入服务、确保 Bigtable 表已创建以及配置存储参数。
1. 设置嵌入服务
首先,我们需要一个模型来为文档创建向量嵌入。本示例将使用 Vertex AI 模型。2. 初始化表
在创建BigtableVectorStore 之前,必须存在一个具有正确列族的表。init_vector_store_table 辅助函数是创建和配置表的推荐方式。如果表已存在,则不执行任何操作。
3. 配置向量存储
现在我们定义控制向量存储如何连接到 Bigtable 以及如何处理数据的参数。BigtableEngine
BigtableEngine 对象管理客户端和异步操作。强烈建议初始化单个引擎并在多个存储中复用它,以获得更好的性能和资源管理。
集合
collection 为单个 Bigtable 表中的文档提供逻辑命名空间。它用作行键的前缀,允许多个向量存储在同一表中共存而不相互干扰。
元数据配置
创建BigtableVectorStore 时,您有两个可选参数用于处理元数据:
metadata_mappings:这是一个VectorMetadataMapping对象列表。对于您希望在搜索查询中用于过滤的任何元数据键,您必须定义映射。每个映射指定元数据字段的数据类型(encoding),这对于正确过滤至关重要。metadata_as_json_column:这是一个可选的ColumnConfig,告诉存储将整个元数据字典作为单个 JSON 字符串保存在特定列中。这对于一次性高效检索文档的所有元数据非常有用,包括未在metadata_mappings中定义的字段。**注意:**仅存储在此 JSON 列中的字段不能用于过滤。
4. 创建 BigtableVectorStore 实例
管理向量存储
添加文档
您可以使用预定义的 ID 添加文档。如果Document 添加时没有 id 属性,向量存储将自动为其生成一个 uuid4 字符串。
更新文档
BigtableVectorStore 通过覆盖来处理更新。要更新文档,只需使用相同的 ID 但新的内容或元数据再次添加它。
删除文档
查询向量存储
搜索
带过滤器的搜索
在向量搜索运行之前应用过滤器。kNN 搜索算法与过滤
默认情况下,BigtableVectorStore 使用 **k 近邻(kNN)**搜索算法查找数据库中与查询向量最相似的 k 个向量。向量存储提供过滤功能,在 kNN 搜索执行之前缩小搜索空间,这可以使查询更快、更相关。
使用 QueryParameters 配置查询
所有搜索设置通过 QueryParameters 对象控制。该对象允许您不仅指定过滤器,还可以指定其他重要的搜索方面:
algorithm:要使用的搜索算法。默认为"kNN"。distance_strategy:用于比较的指标,如COSINE(默认)或EUCLIDEAN。vector_data_type:存储向量的数据类型,如FLOAT32或DOUBLE64。这应与嵌入的精度匹配。filters:定义要应用的过滤逻辑的字典。
理解编码
要在元数据字段上进行过滤,您必须在metadata_mappings 中使用正确的 encoding 定义它们,以便 Bigtable 可以正确解释数据。支持的编码包括:
- 字符串:用于基于文本的元数据的
UTF8、UTF16、ASCII。 - 数字:用于整数的
INT_BIG_ENDIAN或INT_LITTLE_ENDIAN,以及用于小数的FLOAT或DOUBLE。 - 布尔值:用于 true/false 值的
BOOL。
过滤支持表
| 过滤类别 | 键 / 运算符 | 含义 |
|---|---|---|
| 行键 | RowKeyFilter | 将搜索范围缩小到具有特定前缀的文档 ID。 |
| 元数据键 | ColumnQualifiers | 检查一个或多个确切元数据键是否存在。 |
ColumnQualifierPrefix | 检查元数据键是否以给定前缀开头。 | |
ColumnQualifierRegex | 检查元数据键是否与正则表达式匹配。 | |
| 元数据值 | ColumnValueFilter | 所有基于值的条件的容器。 |
== | 相等 | |
!= | 不等 | |
> | 大于 | |
< | 小于 | |
>= | 大于或等于 | |
<= | 小于或等于 | |
in | 值在列表中。 | |
nin | 值不在列表中。 | |
contains | 检查子字符串是否存在。 | |
like | 对字符串执行正则表达式匹配。 | |
| 逻辑 | ColumnValueChainFilter | 组合值条件的逻辑 AND。 |
ColumnValueUnionFilter | 组合值条件的逻辑 OR。 |
复杂过滤器示例
此示例使用多个嵌套逻辑过滤器。它搜索满足以下条件的文档:(category 为 ‘sci-fi’ 且 year 在 1970-2000 之间)或(author 为 ‘J.R.R. Tolkien’)或(rating > 4.5)。
带分数的搜索
您还可以在文档中检索距离分数。用作检索器
向量存储可以轻松地在 RAG 应用中用作检索器。您可以指定搜索类型(例如,similarity 或 mmr)并传递搜索时参数,如 k 和 query_parameters。
用于检索增强生成
有关如何将此向量存储用于检索增强生成(RAG)的指南,请参阅以下部分:API 参考
有关BigtableVectorStore 类的完整详情,请查看 GitHub 上的源代码。
Connect these docs to Claude, VSCode, and more via MCP for real-time answers.

