向量数据库

APOC 提供了这组过程,利用 Rest API 与向量数据库交互。

  • apoc.vectordb.qdrant.*(与 Qdrant 交互)

  • apoc.vectordb.chroma.*(与 Chroma 交互)

  • apoc.vectordb.weaviate.*(与 Weaviate 交互)

  • apoc.vectordb.custom.*(与其他向量数据库交互)。

  • apoc.vectordb.configure(将主机、凭据和映射存储到系统数据库中)

apoc.vectordb.configure之外的所有过程都可以将一个配置映射作为最后一个参数,其中包含以下可选参数。

表 1. 配置参数

描述

headers

其他 HTTP 标头

method

HTTP 方法

endpoint

端点键,可用于覆盖通过过程的第一个参数创建的默认端点,以处理潜在的端点更改。

body

HTTP 请求体

jsonPath

自定义 JSONPath 响应解析。默认值为null

除了上述配置之外,apoc.vectordb.<type>.getapoc.vectordb.<type>.query 过程可以具有以下其他参数。

表 2. embeddingConfig 参数

描述

mapping

用于获取关联的实体并可选地创建它们。请参阅下面的示例。

allResults

如果为真,则返回向量、元数据和文本(如果存在),否则为这些列返回 null 值。

vectorKey, metadataKey, scoreKey, textKey

apoc.vectordb.custom.get过程一起使用。为了让过程知道restAPI中的哪个键(如果存在)对应于应分别填充为向量/元数据/分数/文本结果的键。默认值为“vector”、“metadata”、“score”、“text”。请参见下面的示例。

字段

要返回的字段列表,必须为apoc.vectordb.weaviate.queryapoc.vectordb.milvus.getapoc.vectordb.milvus.query指定。

除了在fields参数中指定的字段之外,mapping配置中定义的metadataKey中存在的键也将被添加。如果fields参数不存在,则过程将返回mapping配置中定义的metadataKey中指定的字段。

如果fieldsmetadataKey参数都缺失或为空,则上述过程将返回错误。

临时过程

有关特定向量数据库过程的更多详细信息,请参阅以下页面

存储向量数据库信息(即apoc.vectordb.configure

我们可以在系统数据库中保存一些信息以供以后重用,即主机、登录凭据和映射,这些信息将在*.get.*query过程中使用,但apoc.vectordb.custom.get除外。

因此,要存储向量信息,我们可以执行CALL apoc.vectordb.configure(vectorName, keyConfig, databaseName, $configMap),其中vectorName可以是“QDRANT”、“CHROMA”、“PINECONE”、“MILVUS”或“WEAVIATE”,分别表示要由apoc.vectordb.qdrant.apoc.vectordb.chroma.apoc.vectordb.weaviate.*重用的信息。

然后keyConfig是配置名称,databaseName是将设置配置的数据库,

最后是configMap,它可以包含

  • host是主机基本名称

  • credentialsValue是API密钥

  • mapping是一个映射,可由apoc.vectordb.*.getAndUpdateapoc.vectordb.*.queryAndUpdate过程使用

    注意

    此过程仅可由具有管理员权限的用户针对系统数据库执行

例如

// -- within the system database or using the Cypher clause `USE SYSTEM ..` as a prefix
CALL apoc.vectordb.configure('QDRANT', 'qdrant-config-test', 'neo4j',
  {
    mapping: { embeddingKey: "vect", nodeLabel: "Test", entityKey: "myId", metadataKey: "foo" },
    host: 'custom-host-name',
    credentials: '<apiKey>'
}
)

然后我们可以执行例如以下过程(在neo4j数据库中)

CALL apoc.vectordb.qdrant.query('qdrant-config-test', 'test_collection', [0.2, 0.1, 0.9, 0.7], {}, 5)

而不是

CALL apoc.vectordb.qdrant.query($host, 'test_collection', [0.2, 0.1, 0.9, 0.7], {}, 5,
{ mapping: {
    embeddingKey: "vect",
    nodeLabel: "Test",
    entityKey: "myId",
    metadataKey: "foo"
  },
  headers: {Authorization: 'Bearer <apiKey>'},
  endpoint: 'custom-host-name'
})