文本生成与聊天
基于提示词生成文本引入于 2025.11
函数 ai.text.completion 可用于根据文本提示生成内容。这类似于向大语言模型(LLM)提交提示词。
使用 CALL ai.text.completion.providers()(参见 参考文档)查看支持的提供商及其配置选项。 |
语法 |
|
||
描述 |
根据提供的提示词生成文本输出。 |
||
输入 |
名称 |
类型 |
描述 |
|
|
文本提示词。 |
|
|
|
第三方 AI 提供商的名称,参见 提供商。 |
|
|
|
提供商特定的配置,参见 提供商。 |
|
返回 |
|
基于所提供提示词生成的文本。 |
|
下面的示例选取了 5 部评分最高的电影,将它们的标题和剧情连接成一个由换行符分隔的字符串,并要求外部 AI 提供商从中选出最适合儿童观看的一部。
MATCH (n:Movie) WHERE n.imdbRating IS NOT NULL
ORDER BY n.imdbRating DESC LIMIT 50 (1)
WITH n.title + ': ' + n.plot AS movie (2)
WITH
reduce(acc = '', item IN collect(movie) | acc + item + '\n') AS movies, (3)
{
token: $openaiToken,
model: 'gpt-5-nano',
vendorOptions: {
instructions: 'Be short.'
}
} AS config (4)
RETURN ai.text.completion(
'Here is a list of movies with their titles and plots. Recommend the most child-friendly one.\n\n' + movies, (5)
'openai',
config
) AS result
| 1 | 选取 50 部评分最高的电影。 |
| 2 | 将标题和剧情连接为 <title>: <plot>。 |
| 3 | 将所有电影连接成一个由换行符分隔的单一字符串。 |
| 4 | 提供商特定的配置,参见 提供商 → OpenAI。 |
| 5 | AI 模型的提示词。 |
| 结果 |
|---|
"《宇宙时空之旅》(Cosmos)。这是一部关于宇宙的科普纪录片,画面不血腥,是这里最适合儿童观看的选择(建议家长陪同较年幼的孩子观看)。" |
下面的示例选取了 5 部评分最高的电影,将它们的标题和剧情连接成一个由换行符分隔的字符串,并要求外部 AI 提供商从中选出最适合儿童观看的一部。
MATCH (n:Movie) WHERE n.imdbRating IS NOT NULL
ORDER BY n.imdbRating DESC LIMIT 50 (1)
WITH n.title + ': ' + n.plot AS movie (2)
WITH
reduce(acc = '', item IN collect(movie) | acc + item + '\n') AS movies, (3)
{
token: $azureOpenaiToken,
resource: '<azure-openai-resource>',
model: 'gpt-5-nano',
vendorOptions: {
instructions: 'Be short.'
}
} AS config (4)
RETURN ai.text.completion(
'Here is a list of movies with their titles and plots. Recommend the most child-friendly one.\n\n' + movies, (5)
'azure-openai',
config
) AS result
| 1 | 选取 50 部评分最高的电影。 |
| 2 | 将标题和剧情连接为 <title>: <plot>。 |
| 3 | 将所有电影连接成一个由换行符分隔的单一字符串。 |
| 4 | 提供商特定的配置,参见 提供商 → Azure OpenAI。 |
| 5 | AI 模型的提示词。 |
| 结果 |
|---|
"《宇宙时空之旅》(Cosmos)。这是一部关于宇宙的科普纪录片,画面不血腥,是这里最适合儿童观看的选择(建议家长陪同较年幼的孩子观看)。" |
下面的示例选取了 5 部评分最高的电影,将它们的标题和剧情连接成一个由换行符分隔的字符串,并要求外部 AI 提供商从中选出最适合儿童观看的一部。
MATCH (n:Movie) WHERE n.imdbRating IS NOT NULL
ORDER BY n.imdbRating DESC LIMIT 50 (1)
WITH n.title + ': ' + n.plot AS movie (2)
WITH
reduce(acc = '', item IN collect(movie) | acc + item + '\n') AS movies, (3)
{
token: $vertexaiToken,
model: 'gemini-2.5-flash-lite',
publisher: 'google',
project: '<google-cloud-project>',
region: '<gcp-region>',
vendorOptions: {
systemInstruction: 'Be short.'
}
} AS config (4)
RETURN ai.text.completion(
'Here is a list of movies with their titles and plots. Recommend the most child-friendly one.\n\n' + movies, (5)
'vertexai',
config
) AS result
| 1 | 选取 50 部评分最高的电影。 |
| 2 | 将标题和剧情连接为 <title>: <plot>。 |
| 3 | 将所有电影连接成一个由换行符分隔的单一字符串。 |
| 4 | 提供商特定的配置,参见 提供商 → VertexAI。 |
| 5 | AI 模型的提示词。 |
| 结果 |
|---|
"最适合儿童观看的电影是《宇宙时空之旅》。 这是一部关于太空的科普纪录片,没有其他选项中的暴力或成人主题。 您想了解《宇宙时空之旅》的建议观看年龄范围吗?" |
下面的示例选取了 5 部评分最高的电影,将它们的标题和剧情连接成一个由换行符分隔的字符串,并要求外部 AI 提供商从中选出最适合儿童观看的一部。
MATCH (n:Movie) WHERE n.imdbRating IS NOT NULL
ORDER BY n.imdbRating DESC LIMIT 50 (1)
WITH n.title + ': ' + n.plot AS movie (2)
WITH
reduce(acc = '', item IN collect(movie) | acc + item + '\n') AS movies, (3)
{
accessKeyId: $awsAccessKeyId,
secretAccessKey: $secretAccessKey,
model: 'amazon.nova-micro-v1:0',
region: '<region>',
vendorOptions: {
system: [{ text: 'Be short' }]
}
} AS config (4)
RETURN ai.text.completion(
'Here is a list of movies with their titles and plots. Recommend the most child-friendly one.\n\n' + movies, (5)
'bedrock-nova',
config
) AS result
| 1 | 选取 50 部评分最高的电影。 |
| 2 | 将标题和剧情连接为 <title>: <plot>。 |
| 3 | 将所有电影连接成一个由换行符分隔的单一字符串。 |
| 4 | 提供商特定的配置,参见 提供商 → Amazon Bedrock。 |
| 5 | AI 模型的提示词。 |
| 结果 |
|---|
"《宇宙时空之旅》最适合儿童观看。这是一部关于太空和科学的教育系列片,非常适合年轻的头脑。" |
为多个值生成文本在 2026.03 中引入
函数 ai.text.aggregateCompletion 可用于根据文本提示为多个输入生成文本。它类似于对提供的每个值分别向 LLM 提交相同的提示词。
语法 |
|
||
描述 |
一种聚合函数,用于跨分组行从指定提示词生成文本。 |
||
输入参数 |
名称 |
类型 |
描述 |
|
|
要进行聚合的值。 |
|
|
|
用于生成文本的提示词。 |
|
|
|
提供商标识符:'Azure-OpenAI', 'Bedrock', 'Bedrock-Nova', 'Bedrock-Titan', 'OpenAI', 'VertexAI'。 |
|
|
|
提供商特定的配置,请使用 |
|
返回 |
|
基于所提供提示词生成的文本。 |
|
下面的示例按产品类别聚合了产品描述,并要求外部 AI 提供商将关键主题总结为简短的要点列表。
MATCH (p:Product)
WITH p, {
token: $openaiToken,
model: 'gpt-5-nano'
} AS config
RETURN p.category AS category,
ai.text.aggregateCompletion(
p.description, (1)
'Summarize the key themes in these product descriptions as a short bullet list.',
'openai',
config
) AS category_summary (2)
ORDER BY category;
| 1 | value 参数表示正在聚合的表达式(例如组内变化的列)。它必须是 STRING 类型——请使用 Cypher 的 toString() 函数将非字符串值进行转换。 |
| 2 | 该函数为每个组生成一个 STRING。 |
| category | category_summary |
|---|---|
"书籍" |
"- 富有想象力的叙事\n- 深刻的人物发展\n- 关于友谊与冒险的主题" |
"电子产品" |
"- 电池续航和快速充电\n- 摄像头质量\n- 性价比" |
下面的示例按产品类别聚合了产品描述,并要求外部 AI 提供商将关键主题总结为简短的要点列表。
MATCH (p:Product)
WITH p, {
token: $azureOpenaiToken,
resource: '<azure-openai-resource>',
model: 'gpt-5-nano'
} AS config
RETURN p.category AS category,
ai.text.aggregateCompletion(
p.description, (1)
'Summarize the key themes in these product descriptions as a short bullet list.',
'azure-openai',
config
) AS category_summary (2)
ORDER BY category;
| 1 | value 参数表示正在聚合的表达式(例如组内变化的列)。它必须是 STRING 类型——请使用 Cypher 的 toString() 函数将非字符串值进行转换。 |
| 2 | 该函数为每个组生成一个 STRING。 |
| category | category_summary |
|---|---|
"书籍" |
"- 引人入胜的情节\n- 易产生共鸣的角色\n- 励志信息" |
"电子产品" |
"- 性能和速度\n- 显示质量\n- 价格与功能比" |
下面的示例按产品类别聚合了产品描述,并要求外部 AI 提供商将关键主题总结为简短的要点列表。
MATCH (p:Product)
WITH p, {
token: $vertexaiToken,
model: 'gemini-2.5-flash-lite',
publisher: 'google',
project: '<google-cloud-project>',
region: '<gcp-region>'
} AS conf
RETURN p.category AS category,
ai.text.aggregateCompletion(
p.description, (1)
'Summarize the key themes in these product descriptions as a short bullet list.',
'vertexai',
conf
) AS category_summary (2)
ORDER BY category;
| 1 | value 参数表示正在聚合的表达式(例如组内变化的列)。它必须是 STRING 类型——请使用 Cypher 的 toString() 函数将非字符串值进行转换。 |
| 2 | 该函数为每个组生成一个 STRING。 |
| category | category_summary |
|---|---|
"书籍" |
"- 奇幻与科幻视角\n- 英雄成长轨迹\n- 友谊与探索" |
"电子产品" |
"- 电池寿命\n- 摄像头与屏幕\n- 价值" |
下面的示例按产品类别聚合了产品描述,并要求外部 AI 提供商将关键主题总结为简短的要点列表。
MATCH (p:Product)
WITH p, {
accessKeyId: $awsAccessKeyId,
secretAccessKey: $secretAccessKey,
model: 'amazon.nova-micro-v1:0',
region: '<aws-region>'
} AS conf
RETURN p.category AS category,
ai.text.aggregateCompletion(
p.description, (1)
'Summarize the key themes in these product descriptions as a short bullet list.',
'bedrock-nova',
conf
) AS category_summary (2)
ORDER BY category;
| 1 | value 参数表示正在聚合的表达式(例如组内变化的列)。它必须是 STRING 类型——请使用 Cypher 的 toString() 函数将非字符串值进行转换。 |
| 2 | 该函数为每个组生成一个 STRING。 |
| category | category_summary |
|---|---|
"书籍" |
"- 冒险与奇迹\n- 角色成长\n- 积极的基调" |
"电子产品" |
"- 性能\n- 电池\n- 价格" |
适当地使用分组键:所有未聚合的内容必须包含在 RETURN 分组中。 |
| 聚合可能涉及每组多行数据,因此请从简洁的提示词开始并进行迭代。 |
上下文聊天引入于 2025.12
函数 ai.text.chat 允许您作为单个会话的一部分与 LLM 交换多条消息。
聊天仅支持 OpenAI 和 Azure-OpenAI。使用 CALL ai.text.chat.providers()(参见 参考文档)查看支持的提供商及其配置选项。 |
语法 |
|
||
描述 |
基于指定提示词进行聊天,可选择继续之前的交互。 |
||
输入 |
名称 |
类型 |
描述 |
|
|
要发送的用户消息。 |
|
|
|
用于继续对话的前一个聊天 ID。如果这是对话中的第一条消息,请将其设置为 |
|
|
|
提供商标识符: |
|
|
|
提供商特定的选项。参见 提供商。 |
|
返回 |
|
包含 |
|
开始新聊天
下面的示例选取了 5 部评分最高的电影,将它们的标题和剧情连接成一个由换行符分隔的字符串,并要求外部 AI 提供商推荐一部好的纪录片。
MATCH (n:Movie) WHERE n.imdbRating IS NOT NULL
ORDER BY n.imdbRating DESC LIMIT 50 (1)
WITH n.title + ': ' + n.plot AS movie (2)
WITH
reduce(acc = '', item IN collect(movie) | acc + item + '\n') AS movies, (3)
{
token: $openaiToken,
model: 'gpt-5-nano',
vendorOptions: {
instructions: 'Be short.'
}
} AS config (4)
RETURN ai.text.chat(
'Here is a list of movies with their titles and plots. I like space documentaries. Any recommendations?\n\n' + movies, (5)
null, (6)
'openai',
config
) AS result
| 1 | 选取 50 部评分最高的电影。 |
| 2 | 将标题和剧情连接为 <title>: <plot>。 |
| 3 | 将所有电影连接成一个由换行符分隔的单一字符串。 |
| 4 | 提供商特定的配置,参见 提供商 → OpenAI。 |
| 5 | AI 模型的提示词。 |
| 6 | 将 chatId 设置为 null 以开始新对话。
|
| 结果 |
|---|
|
MATCH (n:Movie) WHERE n.imdbRating IS NOT NULL
ORDER BY n.imdbRating DESC LIMIT 50 (1)
WITH n.title + ': ' + n.plot AS movie (2)
WITH
reduce(acc = '', item IN collect(movie) | acc + item + '\n') AS movies, (3)
{
token: $azureOpenaiToken,
resource: '<azure-openai-resource>',
model: 'gpt-5-nano',
vendorOptions: {
instructions: 'Be short.'
}
} AS config (4)
RETURN ai.text.chat(
'Here is a list of movies with their titles and plots. I like space documentaries. Any recommendations?\n\n' + movies, (5)
null, (6)
'azure-openai',
config
) AS result
| 1 | 选取 50 部评分最高的电影。 |
| 2 | 将标题和剧情连接为 <title>: <plot>。 |
| 3 | 将所有电影连接成一个由换行符分隔的单一字符串。 |
| 4 | 提供商特定的配置,参见 提供商 → OpenAI。 |
| 5 | AI 模型的提示词。 |
| 6 | 将 chatId 设置为 null 以开始新对话。
|
| 结果 |
|---|
|
使用现有聊天 ID 继续聊天
下面的示例继续上一个示例的聊天,要求推荐特定类别的纪录片。
| 返回的聊天 ID 每次调用都不一样,因此如果您希望模型始终保持整个聊天的上下文,则需要在每次请求时更新它。每个请求都允许您通过分叉(fork)到目前为止提供的上下文来开启一个新的线程。 |
即使聊天 ID 被限制在生成它们的 API 令牌范围内,也应将它们视为敏感信息,因为后续消息可能会要求披露之前提供的信息(例如:我最初的要求是什么?)。 |
WITH
{
token: $openaiToken,
model: 'gpt-5-nano',
vendorOptions: {
instructions: 'Be short.'
}
} AS config
RETURN ai.text.chat(
'Could you suggest something more animal oriented?', (1)
$chatId, (2)
'openai',
config
) AS result
| 1 | 要发送的下一条提示词。 |
| 2 | 重复使用来自之前响应的聊天 ID 以继续对话。例如,通过参数传递它。 |
| 结果 |
|---|
|
WITH
{
token: $azureOpenaiToken,
resource: '<azure-openai-resource>',
model: 'gpt-5-nano',
vendorOptions: {
instructions: 'Be short.'
}
} AS config
RETURN ai.text.chat(
'Could you suggest something more animal oriented?', (1)
$chatId, (2)
'azure-openai',
config
) AS result
| 1 | 要发送的下一条提示词。 |
| 2 | 重复使用来自之前响应的聊天 ID 以继续对话。例如,通过参数传递它。 |
| 结果 |
|---|
|
并行运行多个请求
要并行运行多个提示词的文本补全,您有两种选择
-
使用
CALL {…} IN CONCURRENT TRANSACTIONS,每事务一行WITH ['Name a movie', 'Name a book'] AS prompts UNWIND prompts AS prompt CALL(prompt) { WITH { token: $openaiToken, model: 'gpt-5-nano' } AS config RETURN ai.text.completion(prompt, 'openai', config) AS response } IN CONCURRENT TRANSACTIONS OF 1 ROW RETURN response -
使用 Cypher 的并行运行时:企业版
CYPHER runtime=parallel WITH { token: $openaiToken, model: 'gpt-5-nano' } AS config, ['Name a movie', 'Name a book'] AS prompts UNWIND prompts AS prompt RETURN ai.text.completion(prompt, 'openai', config) AS result
提供商
您可以通过以下提供商生成文本
-
OpenAI (
openai) -
Azure OpenAI (
azure-openai) -
Google Vertex AI (
vertexai) -
Amazon Bedrock Nova 模型 (
bedrock-nova)
OpenAI
| 名称 | 类型 | 默认 | 描述 |
|---|---|---|---|
|
|
- |
模型 ID(参见 OpenAI → 模型)。 |
|
|
- |
OpenAI API 密钥(参见 OpenAI → API 密钥)。 |
|
|
|
可选的对话历史记录,用于向模型提供上下文。传递一个
|
|
|
|
可选的供应商选项,将按原样传递给 OpenAI 的请求(参见 OpenAI → 创建模型响应)。 |
WITH
{
token: $openaiToken,
model: 'gpt-5-nano',
vendorOptions: {
instructions: 'Be short.'
},
chatHistory: [
{
role: "user",
content: "My favorite movies are in the Fantasy or Sci-fi genre."
},
{
role: "assistant",
content: "Nice! fantasy and sci-fi have great vibes. Want tailored recs?"
}
]
} AS conf
RETURN ai.text.completion('Yes, please recommend a movie to me', 'openai', conf) AS result
您可以通过 genai.openai.baseurl 设置更改 OpenAI 的基础 URL(默认:https://api.openai.com)。该更改适用于所有使用 OpenAI 的 ai.text.* 调用。参见 配置设置 → genai.openai.baseurl。 |
Azure OpenAI
| 名称 | 类型 | 默认 | 描述 |
|---|---|---|---|
|
|
- |
模型 ID(参见 Azure → Azure OpenAI Foundry 模型)。 |
|
|
- |
Azure 资源名称。 |
|
|
- |
Azure OAuth2 持有者令牌 (bearer token)。 |
|
|
|
可选的对话历史记录,用于向模型提供上下文。传递一个
|
|
|
|
可选的供应商选项,将按原样传递给 Azure 的请求。 |
WITH
{
token: $azureToken,
resource: 'my-azure-openai-resource',
model: 'gpt-5-nano',
vendorOptions: {
instructions: 'Be short.'
},
chatHistory: [
{
role: "user",
content: "My favorite movies are in the Fantasy or Sci-fi genre."
},
{
role: "assistant",
content: "Nice! fantasy and sci-fi have great vibes. Want tailored recs?"
}
]
} AS conf
RETURN ai.text.completion('Yes, please recommend a movie to me', 'azure-openai', conf) AS result
Google VertexAI
| 名称 | 类型 | 默认 | 描述 |
|---|---|---|---|
|
|
- |
模型资源名称(参见 Vertex AI → 模型库 (Model Garden))。 |
|
|
- |
Google Cloud 项目 ID。 |
|
|
- |
Google Cloud 区域(参见 Vertex AI → 地点)。 |
|
|
'google' |
模型发布者。 |
|
|
- |
Vertex AI API 密钥。 |
|
|
- |
Vertex API 访问令牌。 |
|
|
|
可选的对话历史记录,用于向模型提供上下文。传递一个
|
|
|
|
可选的供应商选项,将按原样传递给 VertexAI 的请求(参见 Vertex AI → 方法: models.generateContent)。 |
必须提供 apiKey 或 token 中的其中一个。 |
WITH
{
token: $vertexaiApiAccessKey,
model: 'gemini-2.5-flash-lite',
publisher: 'google',
project: 'my-google-cloud-project',
region: 'asia-northeast1',
vendorOptions: {
systemInstruction: 'Be short.'
},
chatHistory: [
{
role: "user",
parts: [
{ text: "My favorite movies are in the Fantasy or Sci-fi genre." }
]
},
{
role: "model",
parts: [
{ text: "Nice! fantasy and sci-fi have great vibes. Want tailored recs?" }
]
}
]
} AS conf
RETURN ai.text.completion('Yes, please recommend a movie to me', 'vertexai', conf) AS result
Amazon Bedrock 模型
该提供商支持大多数 Bedrock 模型,并遵循 Converse API。
| 名称 | 类型 | 默认 | 描述 |
|---|---|---|---|
|
|
- |
模型 ID 或其 ARN。 |
|
|
- |
Amazon 区域(参见 Amazon Bedrock → 模型支持)。 |
|
|
- |
Amazon 访问密钥 ID。 |
|
|
- |
Amazon 私有访问密钥。 |
|
|
|
可选的对话历史记录,用于向模型提供上下文。传递一个
|
|
|
|
可选的供应商选项,将按原样传递给 Bedrock 的请求(参见 Amazon Bedrock → 推理请求参数和响应字段)。 |
WITH
{
accessKeyId: $awsAccessKeyId,
secretAccessKey: $secretAccessKey,
model: 'amazon.nova-micro-v1:0',
region: 'eu-west-2',
vendorOptions: {
system: [{ text: 'Be short' }],
inferenceConfig: { maxTokens: 1024 }
},
chatHistory: [
{
role: "user",
content: [
{ text: "My favorite movies are in the Fantasy or Sci-fi genre." }
]
},
{
role: "assistant",
content: [
{ text: "Nice! fantasy and sci-fi have great vibes. Want tailored recs?" }
]
}
]
} AS conf
RETURN ai.text.completion('Yes, please recommend a movie to me', 'bedrock-nova', conf) AS result
Amazon Bedrock Nova 模型
该提供商支持所有使用与 Nova 文本模型相同请求参数和响应字段的模型。
| 名称 | 类型 | 默认 | 描述 |
|---|---|---|---|
|
|
- |
模型 ID 或其 ARN。 |
|
|
- |
Amazon 区域(参见 Amazon Bedrock → 模型支持)。 |
|
|
- |
Amazon 访问密钥 ID。 |
|
|
- |
Amazon 私有访问密钥。 |
|
|
|
可选的对话历史记录,用于向模型提供上下文。传递一个
|
|
|
|
可选的供应商选项,将按原样传递给 Bedrock 的请求(参见 Amazon Bedrock → 推理请求参数和响应字段)。 |
WITH
{
accessKeyId: $awsAccessKeyId,
secretAccessKey: $secretAccessKey,
model: 'amazon.nova-micro-v1:0',
region: 'eu-west-2',
vendorOptions: {
system: [{ text: 'Be short' }],
inferenceConfig: { maxTokens: 1024 }
},
chatHistory: [
{
role: "user",
content: [
{ text: "My favorite movies are in the Fantasy or Sci-fi genre." }
]
},
{
role: "assistant",
content: [
{ text: "Nice! fantasy and sci-fi have great vibes. Want tailored recs?" }
]
}
]
} AS conf
RETURN ai.text.completion('Yes, please recommend a movie to me', 'bedrock-nova', conf) AS result
Amazon Bedrock Titan 模型
AWS 已停止为文本生成提供 Amazon Bedrock Titan。
该提供商支持所有使用与 Titan 文本模型相同请求参数和响应字段的模型。配置和用法类似于 Bedrock Nova 模型,但不支持 chatHistory。
Titan 模型具有不同的 vendorOptions,参见 Amazon Bedrock → Titan 文本模型。
| AWS 已停止为文本生成提供 Amazon Bedrock Titan。 |
该提供商支持所有使用与 Titan 文本模型相同请求参数和响应字段的模型。配置和用法类似于 Bedrock Nova 模型,但不支持 chatHistory。
Titan 模型具有不同的 vendorOptions,参见 Amazon Bedrock → Titan 文本模型。
|