You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Neo4j中使用Cypher将字符串属性转换为embedding向量

Neo4j 内部通过Cypher实现字符串属性转嵌入向量的方案

前置依赖说明

  • 推荐使用Neo4j 5.10及以上版本,该版本开始内置genai向量生成相关函数,企业版、社区版(5.13+)均支持
  • 可选择三种嵌入生成对接方式:官方内置对接OpenAI/Hugging Face端点、本地部署的ONNX模型、自定义外部嵌入服务
  • 若使用APOC扩展函数,需要提前完成APOC插件安装

步骤1:识别所有字符串类型属性

你可以手动枚举已知的字符串属性(比如示例中的name、last_name、city),也可以通过Cypher批量筛选所有节点的字符串属性,避免遗漏:

// 批量获取全量节点的字符串属性名列表
MATCH (n)
WITH DISTINCT keys(n) AS all_keys, n
UNWIND all_keys AS key
WITH DISTINCT key WHERE apoc.meta.type(n[key]) = "STRING"
RETURN collect(DISTINCT key) AS string_property_keys

步骤2:批量生成嵌入并写入节点

方案1:使用内置genai函数生成(推荐)

以下示例对接OpenAI嵌入模型,你可以替换为自己配置的本地模型名:

// 分批处理避免事务过大,1000个节点为一批,可按需调整
CALL apoc.periodic.iterate(
  'MATCH (n) RETURN n',
  'UNWIND ["name", "last_name", "city"] AS string_key
   WITH n, string_key, n[string_key] AS str_value
   // 替换第二个参数为你注册的模型名,第三方模型需要提前配置API密钥
   CALL genai.vector.encode(str_value, "OpenAI", {model: "text-embedding-3-small"}) YIELD vector
   // 嵌入向量以 原属性名_embedding 格式存储为新属性
   SET n[toString(string_key) + "_embedding"] = vector',
  {batchSize: 1000, parallel: false}
) YIELD batches, total
RETURN batches, total

方案2:对接自定义外部嵌入服务

如果使用自研的嵌入模型无法通过genai直接对接,可以调用apoc.ml.rest访问外部服务生成向量:

CALL apoc.periodic.iterate(
  'MATCH (n) RETURN n',
  'UNWIND ["name", "last_name", "city"] AS string_key
   WITH n, string_key, n[string_key] AS str_value
   // 替换为你自己的嵌入服务接口地址和请求参数
   CALL apoc.ml.rest.post("http://your-embedding-service/api/encode", {text: str_value}) YIELD value
   SET n[toString(string_key) + "_embedding"] = value.vector',
  {batchSize: 1000, parallel: false}
) YIELD batches, total
RETURN batches, total

注意事项

  • 节点量级较大时必须分批处理,避免单次事务占用内存过高导致数据库崩溃
  • 可以加判断逻辑跳过已经生成过嵌入的属性,避免重复计算:WHERE n[string_key + "_embedding"] IS NULL
  • 生成的向量维度需要和后续创建向量索引的配置维度保持一致

内容的提问来源于stack exchange,提问作者SteveS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 17:15:04