在WITH语句中调用apoc.ml.openai.embedding函数报错求助
解决APOC OpenAI嵌入函数在WITH子句中报错的问题
问题原因
apoc.ml.openai.embedding是存储过程(Procedure),而非可在表达式中直接调用的函数(Function)。这类过程必须通过CALL语句执行并通过YIELD获取返回结果,不能像普通函数一样直接在WITH、SET等子句中作为表达式使用。
解决方案
将过程调用放在独立的CALL语句中,通过YIELD接收嵌入结果后,再与节点数据一起传递到后续的WITH子句中。示例代码如下:
MATCH (movie:Movie) WHERE movie.tagline IS NOT NULL // 调用OpenAI嵌入过程,传递单个tagline组成的数组,YIELD获取embedding结果 CALL apoc.ml.openai.embedding([movie.tagline], { apiKey: "你的OpenAI密钥", model: "text-embedding-ada-002" }) YIELD embedding // 将movie节点和对应的embedding一起传递到后续逻辑 WITH movie, embedding // 示例:将embedding存储到节点属性 SET movie.embedding = embedding RETURN movie.title, movie.tagline, embedding
关键注意点
- 确保传递给
apoc.ml.openai.embedding的第一个参数是文本数组,即使是单个文本也要用[movie.tagline]的形式包裹,与直接调用CALL时的参数格式保持一致。 - 所有APOC的机器学习类工具(
apoc.ml.*)基本都是存储过程,必须遵循CALL ... YIELD的调用范式。
内容的提问来源于stack exchange,提问作者bAN
相关产品推荐
相关产品推荐

