Skip to main content
SAP HANA Cloud Vector Engine 是一个完全集成在 SAP HANA Cloud 数据库中的向量存储。

设置

安装 langchain-hana 外部集成包以及本笔记本中使用的其他包。

凭证

确保您的SAP HANA实例正在运行。从环境变量加载数据库凭据并创建连接:
Learn more about SAP HANA in What is SAP HANA?.

初始化

初始化 HanaDB 向量存储需要数据库连接和嵌入实例。SAP HANA Cloud Vector Engine支持外部和内部嵌入。
  • 使用外部嵌入

  • 使用内部嵌入

Alternatively,您可以直接在SAP HANA中通过其原生 VECTOR_EMBEDDING() 函数计算嵌入。要启用此功能,创建一个使用 HanaInternalEmbeddings 内部模型ID的实例,并将其传递给 HanaDB。请注意, HanaInternalEmbeddings 实例专门设计用于与 HanaDB 配合使用,不适用于其他向量存储实现。如需了解更多关于内部嵌入的信息,请参考SAP HANA VECTOR_EMBEDDING Function。
Caution: 请确保您的SAP HANA Cloud实例已启用NLP功能。
在获得连接和嵌入实例后,通过 HanaDB 创建向量存储,并传入存储向量的表名:

管理向量存储

在创建向量存储后,我们可以通过添加和删除不同项目与之交互。

向向量存储添加项

我们可通过 add_documents 函数向向量存储添加项目。
添加带元数据的文档。
添加带map merge插入的文档。
Note use_map_merge 仅作为关键字参数接受,且仅适用于 HanaInternalEmbeddings 实例。

从向量存储删除项

查询向量存储

直接查询

相似度搜索

可通过以下方式执行带元数据过滤的简单相似度搜索:

MMR 搜索

可通过以下方式执行带元数据过滤的Maximal Marginal Relevance(MMR)搜索:

将向量存储转换为检索器

您可以将向量存储转换为检索器以更轻松地将其集成到您的链中。

距离相似性算法

HanaDB 支持以下距离相似性算法:
  • 余弦相似度(默认)
  • 欧氏距离(L2)
您可以通过使用 distance_strategy 参数在初始化 HanaDB 实例时指定距离策略。

创建 HNSW 索引

向量索引可显著加速向量 top-k 最近邻查询。用户可通过 create_hnsw_index 函数创建分层导航小世界(HNSW)向量索引。 对于数据库层面的索引创建说明,请参考 官方文档。
若未指定其他参数,将使用默认值 默认值:m=64, ef_construction=128, ef_search=200 默认索引名称为:<TABLE_NAME>_idx

高级过滤

除基础值过滤功能外,还支持更复杂的过滤操作。 下表列出了可用过滤运算符。
使用 $ne, $gt, $gte, $lt, $lte 进行过滤
使用 $between, $in, $nin 进行过滤
使用 $like 进行文本过滤
使用 $contains 进行文本过滤
使用 $and, $or 进行组合过滤

检索增强生成(RAG)应用

关于如何使用此向量存储实现检索增强生成(RAG),请参考以下章节:

结果重排序

可通过向 similarity_search 方法传递 rerank_config 字典对相似度搜索结果进行重排序。重排序使用 SAP HANA 的 CROSS_ENCODE 函数及跨编码模型实现。 rerank_config 字典支持以下字段:
  • query (str, 必填) — 用于重排序的查询文本。未提供时使用原始相似度搜索查询。
  • model_id (str, 必填) — 跨编码模型ID
  • top_n (int, 可选) — 重排序后返回的顶部结果数(默认3)
  • rank_fields (list[str], 可选) — 需包含在重排序中的元数据字段列表
注意:确保您的SAP HANA Cloud实例已启用NLP功能以使用重排序功能。更多详情请见 SAP HANA数据库附加功能。

基础重排序

使用 rerank_config 参数执行相似度搜索并重排序:

带元数据的重排序

通过 rank_fields 在重排序过程中包含元数据。当元数据包含应影响排名的相关信息时,此功能非常有用:

带分数的重排序

使用 similarity_search_with_score 获取与文档一同返回的重排序分数:

独立重排序使用 HanaReranker

若需对重排序过程进行更精细控制,可直接使用 HanaReranker 类作为文档压缩器。此方法适用于从任意来源而非仅相似度搜索结果中重排序文档:

标准表与”自定义”向量数据表

默认情况下,嵌入表包含以下三列:
  • 一列 VEC_TEXT,存储文档的文本内容
  • 一列 VEC_META,存储文档的元数据
  • 一列 VEC_VECTOR,存储文档文本的嵌入向量
显示 ‘LANGCHAIN_DEMO_NEW_TABLE’ 表中的列
显示插入文档在三个列中的值 由于 HANA 的数据库 API 驱动默认将向量列输出为 fvecs 字节对象,我们将创建辅助函数将其转换为数值列表。
自定义表必须至少包含三列以匹配标准表的语义:
  • 一列用于嵌入的文本/上下文(类型 NCLOB 或 NVARCHAR)
  • 一列用于元数据(类型 NCLOB 或 NVARCHAR)
  • 一列用于嵌入向量(类型 REAL_VECTOR 或 HALF_VECTOR)
表可包含额外列。当新文档插入表时,这些额外列必须允许 NULL 值。
向自定义表添加另一文档并执行相似度搜索。

自定义列性能优化

为支持灵活的元数据值,默认将所有元数据存储为元数据列的 JSON。若已知部分元数据键及其值类型,可通过在 HanaDB 构造函数中传递 specific_metadata_columns 列表指定目标表结构。插入文档时,匹配的元数据键会复制到特殊列。过滤器将优先使用特殊列而非元数据 JSON 列(针对 specific_metadata_columns 列表中的键)。
特殊列对 LangChain 接口完全透明。所有原有功能均保持不变,但性能有所提升。

简单示例

加载样本文档 “state_of_the_union.txt” 并生成文本块。
langchain-community包已不再维护。从langchain_community导入的示例可能过时或无法使用。请谨慎使用。
将加载的文档块插入表。本示例会删除表内可能存在的先前内容(来自之前运行的残留数据)。
对前一步插入的文档块执行查询,获取匹配度最高的两个文档块。默认使用余弦相似度作为搜索指标。
使用欧氏距离重新执行相同查询。结果应与余弦相似度查询一致。

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

Maximal marginal relevance 优化查询与文档的相似度 AND 文档间的多样性。首先从数据库获取前 20(fetch_k)条结果,MMR 算法将从中选出最佳 2(k)条匹配项。

创建 HNSW 向量索引

使用 create_hnsw_index 函数创建分层导航小世界(HNSW)向量索引,可显著加速向量查询的 top-k 最近邻搜索。
关键点:
  • 相似度函数:索引默认使用余弦相似度。若需使用其他相似度函数(如 L2 距离),需在 HanaDB 实例初始化时指定。
  • 默认参数:在 create_hnsw_index 函数中,若未提供 m、ef_construction 或 ef_search 等参数的定制值,将自动使用 m=64、ef_construction=128、ef_search=200 等默认值。这些值确保索引在合理性能下无需用户干预即可创建。

官方原文:src/oss/python/integrations/vectorstores/sap_hanavector.mdx · 非官方翻译,译文由 AI 生成,以英文原文为准。
Last modified on November 3, 2026