如何在n8n中通过OpenAI获取带自定义提取字段的结构化JSON输出?
在n8n中用OpenAI提取结构化信息的实现方案
一、核心Prompt编写要点
Prompt必须明确任务规则、输出结构和异常处理逻辑,示例如下:
你需要从用户的消息中提取姓名(Name)、城市(City)信息,严格按照以下固定JSON格式返回结果: { "output": "给用户的回复语:信息不全时询问缺失字段,信息齐全时返回确认语", "custom_fields_values": [ { "field_name": "City", "values": [{ "value": "提取到的城市,无则为空字符串" }] }, { "field_name": "Name", "values": [{ "value": "提取到的姓名,无则为空字符串" }] } ] } 强制规则: 1. 必须严格遵循上述JSON结构,不得修改字段名、层级或格式 2. 只返回JSON内容,禁止添加任何解释、说明、注释或额外文本 3. 若用户消息中无对应信息,将该字段的value设为"",同时在output中询问用户补充该信息 4. 若所有信息已提取完整,output返回确认类语句,例如"已记录你的信息:姓名XX,城市XX"
可补充1-2个具体示例帮助模型理解场景:
示例1(信息齐全):
用户消息:我叫Ana,来自Curitiba
返回:
{
"output": "已记录你的信息:姓名Ana,城市Curitiba",
"custom_fields_values": [
{
"field_name": "City",
"values": [{ "value": "Curitiba" }]
},
{
"field_name": "Name",
"values": [{ "value": "Ana" }]
}
]
}
示例2(缺失城市):
用户消息:我叫Ana
返回:
{
"output": "请问你来自哪个城市?",
"custom_fields_values": [
{
"field_name": "City",
"values": [{ "value": "" }]
},
{
"field_name": "Name",
"values": [{ "value": "Ana" }]
}
]
}
二、n8n中OpenAI节点配置步骤
- 模型选择:优先选用
gpt-3.5-turbo-1106或gpt-4-1106-preview,这类版本原生支持JSON模式,结构化输出稳定性更高 - Prompt配置:
- 选择「Custom Prompt」类型
- 将编写好的Prompt粘贴到输入框,同时通过变量引入客户消息,例如
{{$json["customer_message"]}}(替换为你实际的消息字段路径)
- 开启JSON强制模式:
- 在节点的「Advanced Options」中,找到「JSON Mode」并勾选,强制模型仅输出合法JSON
- 调整温度参数:将「Temperature」设为
0或0.1,彻底降低输出随机性,保证格式一致性 - 响应解析:在OpenAI节点后添加「JSON Parse」节点,将模型返回的文本解析为JSON对象,方便后续流程调用
三、保证输出可靠的关键技巧
- 使用JSON模式:依赖模型原生的JSON输出约束,避免模型生成多余内容
- 函数调用增强(可选):若使用支持函数调用的模型,可定义提取信息的函数结构,让模型严格按照参数格式返回,示例函数定义:
在n8n节点中开启「Function Calling」并导入上述结构,模型会严格按照参数返回JSON{ "name": "extract_customer_info", "description": "提取用户消息中的姓名和城市信息", "parameters": { "type": "object", "properties": { "output": { "type": "string", "description": "给用户的回复语" }, "custom_fields_values": { "type": "array", "items": { "type": "object", "properties": { "field_name": { "type": "string", "enum": ["City", "Name"] }, "values": { "type": "array", "items": { "type": "object", "properties": { "value": { "type": "string" } } } } } } } }, "required": ["output", "custom_fields_values"] } } - 输出校验:在「JSON Parse」节点后添加错误处理逻辑,若解析失败(如模型输出非JSON内容),触发重试或抛出告警
- 重复强调规则:在Prompt中多次明确要求仅返回JSON,禁止任何额外内容,强化模型的输出约束
内容的提问来源于stack exchange,提问作者Marcus Vinícius Afixar
相关产品推荐
相关产品推荐

