回答节点
回答节点用于在工作流中向用户返回最终答案。它通常作为聊天流程或对话工作流的终点,将处理结果发送给用户。
使用场景
典型应用
- 聊天机器人回复 - 在对话工作流中返回 AI 生成的回复
- 问答系统 - 返回知识库检索或 LLM 生成的答案
- 表单处理反馈 - 向用户返回提交成功的确认信息
- 查询结果展示 - 显示数据查询或计算的结果
- 工作流状态通知 - 告知用户操作的执行状态
节点配置
基础设置(参数面板)
回答内容
要返回给用户的内容。这是唯一的必填参数。
字段属性:
- 必填字段
- 支持表达式
- 支持多行文本输入
- 支持 Markdown 格式
配置示例:
javascript
// 1. 直接输入文本
"感谢您的提交,我们会尽快处理。"
// 2. 引用 LLM 节点的输出
$('LLM').output
// 3. 组合多个节点的数据
`您好 ${$('聊天触发器').userName}!
根据您的查询,我们找到了以下信息:
${$('知识检索').result}
如需进一步帮助,请随时联系我们。`
// 4. 使用条件表达式
$('AI分类器').class === '紧急'
? '我们已将您的问题标记为紧急,客服将在 10 分钟内联系您。'
: '感谢您的反馈,我们会在 24 小时内回复。'
// 5. 格式化数据展示
`查询结果:
- 订单号:${$('HTTP请求').orderId}
- 状态:${$('HTTP请求').status}
- 金额:¥${$('HTTP请求').amount}
- 创建时间:${$('HTTP请求').createdAt}`高级设置(设置面板)
节点描述
为节点添加自定义描述,帮助团队成员理解节点用途。
yaml
nodeDescription: "返回订单查询结果给用户"输出数据
回答节点通常是工作流的终点,不会有后续节点。但在某些场景下,如果需要记录或处理返回的内容,可以访问其输出:
javascript
// 获取返回的答案内容
$('回答').answer工作流示例
示例 1: 简单问答机器人
聊天触发器
→ LLM 节点
系统提示词: "你是一个友好的客服助手"
用户提示词: $('聊天触发器').userMessage
→ 回答节点
回答: $('LLM').output示例 2: 知识库问答系统
聊天触发器
→ 知识检索
查询: $('聊天触发器').question
→ LLM 节点
系统提示词: "根据以下知识库内容回答用户问题"
上下文: $('知识检索').results
用户问题: $('聊天触发器').question
→ 回答节点
回答: $('LLM').output示例 3: 分类后的差异化回复
聊天触发器
→ AI 分类器
输入: $('聊天触发器').message
类别: ["技术问题", "账户问题", "一般咨询"]
→ 条件分支
→ [技术问题] → LLM(技术专家角色)→ 回答
→ [账户问题] → 知识检索(账户文档)→ LLM → 回答
→ [一般咨询] → LLM(客服角色)→ 回答示例 4: 多步骤任务完成通知
聊天触发器
→ HTTP 请求(创建订单)
→ HTTP 请求(发送确认邮件)
→ HTTP 请求(更新 CRM)
→ 回答节点
回答: `您的订单已创建成功!
订单详情:
- 订单号:${$('HTTP请求').orderId}
- 总金额:¥${$('HTTP请求').totalAmount}
- 预计送达:${$('HTTP请求').estimatedDelivery}
确认邮件已发送到您的邮箱。`示例 5: 错误处理和友好提示
聊天触发器
→ 条件分支(验证输入)
→ [有效] → 处理逻辑 → 回答(成功消息)
→ [无效] → 回答节点
回答: "抱歉,您的输入格式不正确。请提供有效的订单号(格式:ORD-XXXXXX)。"最佳实践
1. 内容清晰友好
使用结构化格式
javascript
// ✅ 好的回答 - 结构清晰
`查询完成!
您的账户信息:
- 用户名:${$('数据查询').username}
- 会员等级:${$('数据查询').level}
- 积分余额:${$('数据查询').points}
如需帮助,请输入 "帮助"`
// ❌ 不好的回答 - 信息堆砌
`${$('数据查询').username} ${$('数据查询').level} ${$('数据查询').points}`使用友好的语气
javascript
// ✅ 友好
"感谢您的耐心等待!我已经为您找到了相关信息..."
// ❌ 生硬
"查询结果如下:"2. 处理不同场景
成功和失败的不同反馈
javascript
$('HTTP请求').statusCode === 200
? `操作成功!您的请求已处理完成。`
: `操作失败:${$('HTTP请求').error.message}
请稍后重试,或联系客服获取帮助。`根据数据量调整回复
javascript
$('知识检索').results.length > 0
? `为您找到 ${$('知识检索').results.length} 条相关信息:
${$('知识检索').results.map(r => `- ${r.title}`).join('\n')}`
: `抱歉,没有找到相关信息。
您可以:
- 尝试使用其他关键词
- 联系人工客服
- 访问帮助中心`3. 保持简洁
避免过长的回复
javascript
// ✅ 简洁明了
`订单 ${$('查询').orderId} 状态:${$('查询').status}
预计 ${$('查询').eta} 送达。`
// ❌ 过于冗长
// 包含大量不必要的细节...使用分步引导
javascript
// 对于复杂操作,分步引导用户
`第一步完成!✓
接下来,请提供您的联系方式以继续下一步。`4. 支持多语言
javascript
// 根据用户语言返回不同内容
$('聊天触发器').language === 'zh'
? `您好!${$('LLM').output}`
: `Hello! ${$('LLM').output_en}`5. 添加后续引导
javascript
`${$('LLM').output}
---
💡 其他可能有用的命令:
- 输入 "菜单" 查看所有功能
- 输入 "客服" 联系人工支持
- 输入 "历史" 查看对话记录`常见问题
Q1: 回答节点和 LLM 节点有什么区别?
A:
- LLM 节点: 调用大语言模型生成内容,是中间处理步骤
- 回答节点: 将最终结果返回给用户,是工作流终点
典型用法:
LLM 节点(生成内容)→ 回答节点(返回给用户)Q2: 可以在一个工作流中使用多个回答节点吗?
A: 可以,在不同的条件分支中可以使用多个回答节点。
示例:
AI 分类器
→ 条件分支
→ [类型A] → 回答节点(回复A)
→ [类型B] → 回答节点(回复B)
→ [类型C] → 回答节点(回复C)只有实际执行的分支中的回答节点会生效。
Q3: 回答节点支持哪些格式?
A: 回答节点支持:
- 纯文本: 普通文字
- Markdown: 支持格式化文本(根据前端支持情况)
- 表达式: 动态内容和条件逻辑
- 多行文本: 使用模板字符串
Q4: 如何在回答中包含换行?
A: 使用模板字符串(反引号):
javascript
`第一行内容
第二行内容
第三行内容`或使用 \n:
javascript
"第一行内容\n第二行内容\n第三行内容"Q5: 回答内容过长会被截断吗?
A: 取决于前端展示的限制。建议:
- 将长内容分段
- 提供摘要 + 详情链接
- 使用分页或"查看更多"的方式
javascript
// 提供摘要
`找到 ${$('搜索').total} 条结果,以下是前 5 条:
${$('搜索').results.slice(0, 5).map(r => r.title).join('\n')}
输入 "更多" 查看完整列表`Q6: 如何处理回答中的特殊字符?
A: 在表达式中注意转义:
javascript
// 使用模板字符串避免转义问题
`价格:¥${$('产品').price}
折扣:${$('产品').discount}%
说明:${$('产品').description}`Q7: 可以在回答中嵌入链接或按钮吗?
A: 取决于前端的支持情况。如果支持 Markdown:
javascript
`操作成功!
[查看详情](https://example.com/order/${$('订单').id})
[联系客服](https://example.com/support)`如果不支持,可以使用纯文本链接:
javascript
`操作成功!
查看详情:https://example.com/order/${$('订单').id}
联系客服:https://example.com/support`