Skip to content

问答节点

问答节点用于在工作流执行到中间步骤时主动向用户提问,并等待用户提交回答后继续运行。它适合补充缺失信息、让用户确认处理方向,或在有限选项中选择后续分支。

问答节点不是普通的文本输出节点。节点第一次执行时会产生一条待回答问题并暂停当前执行;调用端展示问题、收集回答,再携带本次问题的上下文恢复执行。若运行入口不能展示问题或不能提交恢复数据,工作流会停在此节点,无法自动越过。

与旧文档的核对结果

旧文档中“直接回答”“固定选项”“动态选项”“从回复中提取字段”和“其他”兜底分支仍适用于当前系统。以下内容应以当前实现为准:

  • 当前节点必须选择模型,但只有直接回答开启“从回复中提取字段”时才会调用模型完成结构化抽取和追问;普通直接回答与选项回答只负责中断、收集和恢复。
  • 当前固定选项最多 26 个,按 AZ 生成选项标识;选项内容不能为空,界面会提示重复选项。
  • 当前动态选项必须绑定 Array<String> 变量,运行时过滤空内容并最多取前 26 项。
  • 旧文档提到的特定渠道限制和固定 24 小时等待期限未在当前节点定义、前端配置或执行器中出现,因此不沿用。实际可等待多久由承载工作流的运行入口和任务生命周期决定。

节点执行过程

问答节点按以下过程运行:

  1. 渲染问题文本;问题中可以引用已配置输入。
  2. 直接回答模式生成文本问题;选项回答模式同时生成候选项。
  3. 节点进入等待用户输入状态,后续节点暂不执行。
  4. 调用端提交回答并携带本次问答消息恢复节点。
  5. 节点生成固定输出;直接回答若开启字段抽取,还会调用模型抽取字段或生成下一轮追问。
  6. 回答有效后,工作流从对应端口继续执行。

问答节点等待用户选择后继续试运行

IMPORTANT

定时任务、纯批处理、无人值守调用或只支持一次请求响应的调用端不适合直接使用问答节点。此类场景应把必要信息改为开始节点输入、使用默认值,或由调用端实现问题展示与恢复执行能力。

通用配置

配置必填说明
模型当前发布校验要求选择模型。模型参数主要用于直接回答的字段抽取和追问。
输入为问题模板准备固定值或上游变量。问题中使用 {{变量名}} 引用。
问题展示给用户的提问内容,不能为空。
回答类型支持“直接回答”和“选项回答”。切换类型时,固定输出和可用分支会随之改变。

问题应一次表达一个明确目标。若需要收集多个字段,应说明所需信息,并为抽取字段配置有意义的变量名、类型和描述。

直接回答

直接回答用于收集用户的自由文本。例如询问故障现象、联系人信息、业务需求或补充说明。

不提取字段

关闭“从回复中提取字段”时,节点不会调用模型分析回答,用户提交的整段文本直接写入 USER_RESPONSE。这种方式适合下游直接展示、保存原文,或由其他节点继续处理。

从回复中提取字段

开启“从回复中提取字段”后,可以在固定输出之外声明结构化字段。当前界面允许的抽取类型为 String、Integer、Number、Boolean、Time 和 Array&lt;Time>。

直接回答与结构化字段抽取配置

配置说明
字段名称下游引用的变量名,应使用清晰且唯一的英文名称,例如 contact_name
字段类型用于提示模型按目标类型返回数据。
必填模型判断回答中缺少必填信息时,可生成下一轮追问。
字段描述说明字段语义、格式和边界,减少同名概念或格式歧义。
最大对话轮数支持 1~5,默认 3;达到上限仍需追问时,节点以超出最大回答次数结束。
系统提示词为抽取与追问补充角色、格式和语气要求,不应替代字段描述。

开启抽取后必须至少添加一个自定义输出字段。节点会把模型返回的字段合并到固定输出中;声明字段没有提取到值时可能为 null。必填表示模型应继续询问的业务要求,不应替代下游对空值的防御性处理。

直接回答输出

输出类型说明
USER_RESPONSEString用户最后一次提交的直接回答原文。
QUESTION_DATAArray&lt;Object>完整问答消息列表;每项包含 content_typecontent。首次问题为 text,用户回答为 answer,继续追问时按顺序追加。
自定义抽取字段所配置类型仅开启字段抽取时存在,例如 contact_namecontact_phone

选项回答

选项回答用于让用户在明确候选项中选择,适合服务分类、流程确认、优先级选择和互动路径。

固定选项、其他分支与选项回答输出

固定内容

固定内容由开发者在节点中直接维护:

  • 每个选项按显示顺序对应 AZ 标识和一个独立输出端口。
  • 用户选择匹配项后,从该选项端口继续执行。
  • “其他”不会展示给用户;回答没有精确命中任何选项内容时,节点输出 optionId=other,并从“其他”端口继续。
  • 调整选项顺序会同步调整分支端口,删除选项会移除对应端口及其连线;调整后应重新检查画布连线。

固定选项应互斥、简短,并让用户能直接判断差异。不要使用多个含义重叠的选项,也不要把“其他”端口留空。

动态内容

动态内容引用上游 Array<String> 变量,在运行时把数组元素依次转换为 AZ 选项。它适合候选设备、查询结果或模型生成的有限列表。

当前动态选项只有一个命中分支和一个“其他”分支,而不是为运行时每个数组元素生成独立画布端口。后续节点应读取 optionIdoptionContent 再处理选择结果。

动态数组应在上游完成去重、排序和数量限制。运行时会忽略空字符串并最多保留前 26 项;如果解析后没有有效选项,用户将没有可选内容。

选项回答输出

输出类型说明
optionIdString命中选项的 AZ 标识;未命中时为 other
optionContentString命中选项的内容;未命中时保留用户原始回答。
QUESTION_DATAObject包含问题 titleoptions 列表;每个选项对象包含 name

选项匹配以用户回答内容和候选项内容为依据。若调用端展示按钮,应提交按钮对应的选项内容;若允许用户手工输入,应保留“其他”分支处理无法匹配的回答。

调用端要求

问答节点首次执行时会返回待回答状态,其中包含问题类型、问题文本、选项和问答消息。恢复时需要提交:

  • 当前问答节点的标识;
  • 用户本次回答;
  • 首次中断返回的消息列表,继续追问时还要保留之前所有问题与回答。

平台工作流试运行面板已经实现了该过程:节点显示“等待用户输入”,用户点击选项或输入文本后再恢复执行。自研 API、SDK、聊天窗口或第三方渠道必须实现同等的中断展示与恢复协议,不能只重新调用整个工作流。

典型用法

收集联系人信息

  1. 选择直接回答,问题要求用户提供姓名和联系电话。
  2. 开启字段抽取,声明 contact_namecontact_phone,并按业务要求设为必填。
  3. 设置最大对话轮数和追问语气。
  4. 下游先校验字段非空,再写入数据库或发起后续流程。

服务分类

  1. 选择选项回答和固定内容。
  2. 配置“产品咨询”“技术支持”“转人工服务”等互斥选项。
  3. 为每个选项连接对应处理节点。
  4. 将“其他”连接到重新提示、通用咨询或人工服务。

从候选列表选择设备

  1. 上游查询设备,整理为去重后的 Array<String>
  2. 选择选项回答和动态内容,绑定该数组。
  3. 下游读取 optionContent 获取用户选中的设备名称。
  4. “其他”分支处理列表为空或用户输入不匹配的情况。

发布前检查

  • 已选择模型,问题内容不为空。
  • 直接回答开启抽取时,至少有一个自定义字段,字段名、类型、必填和描述正确。
  • 最大对话轮数在 1~5 之间,下游能处理抽取字段为 null 的情况。
  • 固定选项非空、无重复且不超过 26 个,每个端口和“其他”端口都已连接。
  • 动态选项绑定 Array<String>,上游已处理空值、重复项、顺序和数量。
  • 运行入口支持展示问题、提交回答和恢复同一次执行。
  • 已分别验证命中选项、未命中选项、直接回答完整信息和缺少必填信息的场景。

常见问题

为什么试运行停在问答节点?

这是节点的正常行为。请在试运行面板回答问题;调用端若没有回答入口,则需要补充中断恢复能力,或将交互改成开始节点输入。

为什么开启字段抽取后无法发布?

确认已选择模型,并至少添加一个自定义抽取字段。固定的 USER_RESPONSEQUESTION_DATA 不算自定义抽取字段。

为什么用户已经回答,节点仍继续追问?

模型可能无法确定必填字段。检查字段描述、问题文本、目标类型和用户回答格式;如果字段并非真正必需,应取消必填。达到配置的最大对话轮数后,节点不会无限追问。

选项外的回答会怎样?

固定或动态选项未命中时,optionIdotheroptionContent 保留用户原始回答,并从“其他”端口继续。务必为该端口配置处理节点。

为什么动态选项只有一个命中端口?

动态候选项只有运行时才能确定,画布无法预先为每个元素生成固定端口。使用同一命中端口继续处理,并通过 optionIdoptionContent 判断选择结果。