智能体工程化话术优化
状态:进行中 | 范围:各 subagent 的工程化回复话术 | 来源:Dify 库
dify| 方式:独立 sub agent 盲评 + Dify 编排核查
通用规范
人设基调:不使用「您好」;第一人称「我」、称呼用户「您」;口吻亲和自然,语气词适度不堆砌;语音 TTS 友好。
一、会议预定
来源:Dify 主应用「会议预定」最新 draft(2026-09-21)| 覆盖 4 个含话术节点共 18 条;另 3 个子流程(查询已预定 / 获取可用 / 取消)无用户话术。
| 节点 | 是否需优化 | 原文 | 建议修改 | 原因 |
|---|---|---|---|---|
| 时间不合规追问 | ✅ | 您好,您选择的预约时间已为过去时间,无法预订,请选择未来时间。 | 这个时间已经过去了,请选择一个未来的时间。 | 仅需去问候、语气中性化 |
| 时间不合规追问 | ❌ | 您好,未识别到会议开始时间,请补充会议开始时间后重新预约。 | 请问会议几点开始呢? | 逻辑错误:尚未预订,谈何"重新预约";追问比指令自然 |
| 时间不合规追问 | ❌ | 您好,您预约的时间不在会议室可预约工作时段内,暂时无法预订哦。 | 这个时间不在会议室可预约时段内,暂时无法预订(可预约时段 {work_hours})。 | 应给出时段边界用户才能自纠;时段须取自节点内配置(当前 work_hours=[] 即全天 00:00–23:59,故该分支实际不可达),不可另写死 |
| 时间不合规追问 | ❌ | 您好,您说的时间未明确上下午,当前上午和下午均可预约,请补充说明~ | 请问是上午还是下午呢? | "请补充说明~"生硬带波浪号,改追问更自然 |
| 时间不合规追问 | ❌ | 您好,未识别到有效的预约日期,请用「明天」「20260101」这类说法补充日期。 | 我没听清日期,可以用「明天」「下周一」「10月8日」这样的说法告诉我。 | 示例不可模仿(紧凑数字串);现状**示例日期为写死的 20260101**,会随时间失效 |
| 时间不合规追问 | ✅ | 您好,未识别到有效的预约时间,请用「下午两点」「14:00」这类说法补充时间。 | 我没听清时间,可以用「下午两点」「14:00」这样的说法告诉我。 | 仅需去问候;示例本身可模仿 |
| 时间不合规追问 | ❌ | 您好,预约时间解析失败,请用「明天下午两点」这类说法重试。 | 抱歉,我没能听懂您说的时间,请用「明天下午两点」这样的说法再说一次。 | 暴露实现细节:"解析失败"是工程词 |
| 时间不合规追问 | ❌ | 您好,预约处理异常,请稍后重试。 | 抱歉,会议预订服务暂时不可用,请稍后再试。 | 并入统一异常话术,清除"处理异常"等工程术语 |
| 空间未匹配澄清 | ❌ | 您好,您选择的会议室名称未查询到,暂时无法完成预订,请更换其他会议室后重试。 | 没有找到这个名字的会议室,您换个名称试试。 | "重试"是系统动作而非用户动作;"未查询到"工程感偏重 |
| 空间未匹配澄清 | ❌ | 您好,会议室解析异常,请稍后重试。 | 抱歉,会议预订服务暂时不可用,请稍后再试。 | 暴露实现细节,且与他处兜底重复,应合并 |
| 输出可用会议室 | ✅ | 您好,已为您筛选出符合需求的会议室: | 为您找到这些合适的会议室: | 仅需去问候、精简措辞 |
| 输出可用会议室 | ✅ | 您好,暂时未能找到匹配您全部需求的会议室,为您挑选了以下可供选择的会议室: | 没有完全匹配您的要求,挑选了以下可供选择的会议室: | 仅需去问候、精简措辞 |
| 输出可用会议室 | ❌ | 不好意思,未能匹配到满足您要求的会议室,您可以修改预定条件再次尝试。 | 您指定的会议室在这个时间不可用,可以换个时间,或换一间会议室。 | 纠错信息不足:没点明哪条条件不满足 |
| 输出可用会议室 | ❌ | 会议服务暂时不可用,请稍后再试 | 抱歉,会议预订服务暂时不可用,请稍后再试。 | 重复硬编码,与统一异常话术保持一致 |
| 格式化已预约会议 | ❌ | 您的会议预定 | 以下是您已预订的会议: | 不成句、缺冒号,与"输出可用会议室"句式不齐 |
| 格式化已预约会议 | ❌ | 当前时段暂无已预约会议,换个时间查查呢~ | 当前时段没有已预订的会议,可以换个时间查询。 | 唯一半角逗号(应改全角) |
| 格式化已预约会议 | ❌ | 会议服务暂时不可用,请稍后再试 | 抱歉,会议预订服务暂时不可用,请稍后再试。 | 重复硬编码,与统一异常话术保持一致 |
全局统一项(本模块)
- 术语:混用"预定 / 预订 / 预约",统一为「预订」+「会议」。
- 标点:杜绝半角逗号,中文语境统一全角。
- 异常类:统一用"抱歉"开头。
- 异常话术单一化:现有三套("解析失败 / 解析异常 / 服务不可用")合并为一句「抱歉,会议预订服务暂时不可用,请稍后再试。」
二、设备控制
来源:Dify 主应用「设备控制」最新 draft(2026-09-22)| 覆盖 6 个含话术节点共 17 条;另 3 个子流程(读取逻辑信号属性值 / 写入逻辑信号属性值 / 自然语言获取设备列表)无用户话术。内部常量
请按照step调整仅作控制 LLM 输入,不进前端result_list,不面向用户。
| 节点 | 是否需优化 | 原文 | 建议修改 | 原因 |
|---|---|---|---|---|
| 位置及设备名称提取判断 | ❌ | 您好,暂时无法理解您的请求,能再描述的具体一些吗? | 没太理解您的意思,能再具体描述一下吗? | 去问候;"暂时无法理解"工程腔;"描述的"应为"描述得" |
| 位置及设备名称提取判断 | ✅ | 您好,能再提供一下具体地点吗? | 能再提供一下具体地点吗? | 仅需去问候 |
| 位置及设备名称提取判断 | ✅ | 您好,请问您想对 {space} 的哪个设备执行操作? | 请问您想对 {space} 的哪个设备操作? | 仅需去问候 +「执行操作」略书面 |
| 位置及设备名称提取判断 | ✅ | 您好,能再提供一下具体地点吗? | 能再提供一下具体地点吗? | 与上一处完全重复(control / query 两条常量同文案),可合并为一处 |
| 位置及设备名称提取判断 | ❌ | 您好,暂未识别当前操作类型,请重新描述。 | 没识别出您想做什么,麻烦再说一次。 | 去问候;"暂未识别当前操作类型"工程腔 |
| 空间实体判断 | ❌ | 您好,无法找到{space_label}对应的空间,能再描述的具体一些吗? | 没有找到{space_label},能再说得具体一点吗? | 去问候;"的"应为"得";"对应的空间"冗余 |
| 设备控制查询结果转换 | ❌ | 您好,{target_space}的{target_named}是监测类设备,仅支持查询状态,暂不支持控制操作哦。 | {target_space}的{target_named}是监测类设备,只能查看状态,暂不支持控制。 | 去问候;"仅支持查询状态"偏书面 |
| 设备控制查询结果转换 | ❌ | 您好,{target_space}下无法找到{target}设备,能再描述的具体一些吗? | 在{target_space}下没有找到{target}设备,能再说得具体一点吗? | 去问候;"的"应为"得" |
| 合并LLM与API结果 | ✅ | 您好,未找到满足要求的可控设备。 | 没有找到符合条件的可控设备。 | 仅需去问候 |
| 合并LLM与API结果 | ✅ | 您好,暂无可用状态数据的设备。 | 没有可用的设备状态数据。 | 仅需去问候;"暂无"稍书面 |
| 合并查询与API结果 | ✅ | 您好,无法找到对应的设备,能再描述得具体一些吗? | 没有找到对应的设备,能再说得具体一点吗? | 仅需去问候 |
| 合并查询与API结果 | ✅ | 您好,暂无可用状态数据的设备。 | 没有可用的设备状态数据。 | 与「合并LLM与API结果」重复硬编码,可合并为一处常量 |
| 面板设备查询结果转换 | ❌ | HTTP错误: | 抱歉,控制面板服务暂时不可用。 | 暴露技术细节(HTTP 错误码直接抛给用户) |
| 面板设备查询结果转换 | ❌ | 获取群控面板失败 | 抱歉,控制面板服务暂时不可用。 | 工程词"失败";"群控面板"是内部术语,且与上下两条重复 |
| 面板设备查询结果转换 | ❌ | 群控面板数据解析失败 | 抱歉,控制面板服务暂时不可用。 | 暴露实现细节"解析失败";内部术语"群控面板" |
| 面板设备查询结果转换 | ✅ | 抱歉,当前空间暂未配置快捷控制面板 | 当前空间还没有配置快捷控制面板。 | 信息明确,仅需微调("暂未配置"稍书面) |
成功时各节点
reply=""(结果由卡片承载)——控制成功没有任何文字反馈,是否需补一句成功话术待定。
全局统一项(本模块)
- 异常话术单一化:
HTTP错误: {code}/获取群控面板失败/群控面板数据解析失败三条合并为一句「抱歉,控制面板服务暂时不可用,请稍后再试。」 - 去工程词:清除"失败 / 解析失败 / 操作类型"等实现语言。
- "的 / 得" 校勘:多处"描述的具体一些"应为"描述得具体一些"。
- 重复常量合并:
暂无可用状态数据的设备(2 处)、能再提供一下具体地点吗(2 处)各自并为一个常量。 - 占位符命名统一:
{space}/{target_space}/{space_label}混用,统一命名。
三、主动整备
来源:Dify 主应用「空间智能整备」最新 draft(2026-09-22)| 全流程 13 节点,真正面向用户的固定文案仅 1 条(
NO_CHANGE_SUMMARY),另有 1 条 LLM 生成正文受 prompt 约束;「空间智能整备(生产 Webhook)」版 6 个 code 节点与主版逐字节一致,结论对两版通用。
定性:本模块无reply / clarify / artifacts结构,是 Hub 触发的「会前整备」后台流;用户可见的整备说明由 LLM 的planned_summary承载,为空时才落兜底常量NO_CHANGE_SUMMARY。人设统一的重心在 LLM prompt,而非常量。
| 节点 | 是否需优化 | 原文 | 建议修改 | 原因 |
|---|---|---|---|---|
解析 Recipes 校验(常量 NO_CHANGE_SUMMARY) | ✅ | 现状已达标,无需调整 | 当前环境已是最佳状态,无需调整 | 无问候、全角标点,语义正确;「达标」偏考核/工程口径,改后更口语、TTS 更顺 |
全局统一项(本模块)
- 人设重心在 LLM 而非常量:须同时约束 LLM prompt 与该常量,二者措辞保持一致(「无需调整」当前两处一致,可保留为统一句)。
- 补 LLM prompt 人设约束:在「LLM 推理整备计划」system prompt 的
## plannedSummary段追加人称、语气、工程词、标点、字数要求。 - 兜底常量改口语:
NO_CHANGE_SUMMARY→ 「当前环境已是最佳状态,无需调整」。 - 堵住空汇总:prompt 由「1–2 条可省略」改为「任何条数均必填 plannedSummary」,或由前端兜底——否则用户会「有卡片无说明」。
- 杜绝工程码外泄:
declineReason(llm_no_recipes等)不得直出用户,统一映射为中性中文(如「当前环境暂无可调整项」)——落点在 Hub / 前端,需前端确认。 - 常量外置与去重:
_COOLING_MONTHS、int32 占位阈值、projectId默认 UUID 改为 env / 子流程。
四、一键诊断
来源:Dify 主应用「FA一键诊断」最新 draft(2026-09-21,32 节点)| 覆盖 1 个含用户可见固定文案的 LLM 节点(「诊断报告」,9 条)。
定性:本应用不含任何reply / action / artifacts结构化话术(全图 0 处),也无「您好」类交互话术。它是工单触发的一次性报告生成(Start 入参repair_work_order_id),报告正文 100% 由 LLM 生成,调用方是门户 / Hub 后端而非 Dify 会话——故首轮问候天然不在本模块。本应用无子流程。
另:多个 code 节点会把(无实时信号)、HTTP {status}等串拼进喂给 LLM 的上下文,不直接展示给用户,本表不计入、暂不处理。
| 节点 | 是否需优化 | 原文 | 建议修改 | 原因 |
|---|---|---|---|---|
| 诊断报告(LLM system)·二级标题组 | ✅ | ## 故障概述、## 工况与指标、## 告警、## 可能原因、## 排查步骤、## 安全提示、## 需现场核实 | 保持;仅「## 需现场核实」→ ## 建议现场核实 | 「需现场核实」祈使句缺主语 |
| 诊断报告(LLM system)·无数据占位 | ❌ | 无任何遥测才可省略或一行「无数据」。 | …或一行「暂未获取到实时数据」。 | 「无数据」是日志式表达,偏报错感 |
| 诊断报告(LLM system)·无告警规则 | ❌ | 无则整节省略,禁止「无告警记录」占位。 | 保留规则,并把示例词改为「暂未获取到告警记录」 | 规则本身正确,备选词仍是日志式;统一为「暂未获取到…」句式 |
全局统一项(本模块)
- 占位词统一为「暂未获取到…」句式,清除
无数据、无告警记录这类日志式表达。 - 补一条兜底话术:
repair_case=unknown(工单解析失败 / 工单不存在)时仍会走「仅知识库上下文」直接产出报告,等于信息缺失下给出诊断。建议该分支增加引导语(如未获取到该工单的报修信息,以下为基于故障描述的一般性建议。),而非静默生成。
五、问答对话
来源:Dify 主应用「问答工作流」最新 draft(2026-09-22)| 覆盖 3 个含硬编码话术节点 + 2 个 answer 拼接节点,共 7 条;另附「问答工作流-大屏」差异 4 条。
定性:该应用绝大多数"话术"是 LLM 自由生成(寒暄应答、能力边界拒答、通用知识回答),真正硬编码的固定文案只有下列这些。
| 节点 | 是否需优化 | 原文 | 建议修改 | 原因 |
|---|---|---|---|---|
code「解析天气结果」常量 SERVICE_BUSY | ❌ | 不好意思,天气服务暂时不可用,请稍后再试 | 抱歉,我暂时取不到天气信息,您可以稍后再问我。 | 「服务不可用」是工程词;该文案经 Answer「直接回复」逐字透出给用户。触发条件:天气接口非 200 / 解析失败 |
code「引用结构化」常量 FALLBACK_REPLY | ❌ | 抱歉,我可能理解偏了。您能换个说法再讲一次吗?这样我能更好地帮您。 | 抱歉,我这边出了点问题,请稍后再试。 | 触发条件:LLM 返回空(超时 / 异常 / 空串)。空回复属系统侧问题,原文却归因成用户表达问题("您换个说法")——把锅甩给用户;应改为系统致歉 + 稍后重试 |
| llm「LLM」system prompt 规则 5 | ❌ | 根据现有资料无法确定 | 抱歉,这个问题我暂时答不上来。 | 唯一的知识缺失兜底话术,会被 LLM 逐字输出;现文案书面、冷硬。触发条件:检索到的片段全都答不上来 |
「问答工作流-大屏」差异(2026-09-22)
| 节点 | 是否需优化 | 原文 | 建议修改 | 原因 |
|---|---|---|---|---|
| 工具工作流「获取室外天气-最近7天」(大屏专用,主应用不用) | ❌ | 当前查询服务忙,请稍后再试(2 处分支) | 抱歉,我暂时取不到天气信息,您可以稍后再问我。 | 与主应用同一场景文案不一致(主应用写"不好意思,天气服务暂时不可用…")——重复硬编码、口径分裂;「服务忙」是工程词;该值经「天气回复」LLM 转述,LLM 被要求"严格基于天气数据",很可能原样透出 |
| 同上 | ❌ | 未查到指定区域天气,请确认后再次输入 | 我没有查到您所在区域的天气,您可以确认一下城市再问我。 | 「未查到」书面感强、像系统报错 |
同上(输出字段 erMessage,未进用户话术链) | — | f"HTTP请求异常,状态码:{status_code}" | 建议移除或改为中性描述 | 典型工程词("HTTP""状态码")。当前编排未把该字段接入 answer,需前端确认是否展示 |
| llm「LLM」system prompt(大屏) | ❌ | 你是欧爪宝,智能写字楼的 AI 助理。 | 与主应用对齐为:你是欧爪宝,一栋智能写字楼的 AI 助理,为楼内员工和访客提供帮助。 | 同一智能体两套人设描述:大屏缺"一栋"与"为楼内员工和访客提供帮助",能力边界描述也不同;跨端人设口径应统一 |
全局统一项(本模块)
- 天气类文案跨端统一:同一"天气取不到"场景在三处写了三套完全不同的句子(主应用
不好意思,天气服务暂时不可用,请稍后再试/ 大屏当前查询服务忙,请稍后再试/未查到指定区域天气,请确认后再次输入),需收敛为 1–2 条统一文案。 - 去工程词:
服务不可用、服务忙、HTTP请求异常、状态码等技术表述不得出现在用户可见文案里,统一改为第一人称口语。 - 补人称:本模块固定文案统一「我 / 您」结构;全文标点已为全角,仅
来源 {cid}的半角空格需修。 - 知识缺失兜底统一:
根据现有资料无法确定是目前唯一的知识缺失固定话术,改口语短句后,主应用与大屏应共用同一句。 - 缺固定拒答话术:能力边界拒答(开关灯、调空调、订会议室、查能耗)目前完全靠 LLM 即兴生成,建议补固定文案并写入 prompt。
- 寒暄重复应答风险:两版 prompt 都要求 LLM 自然回应"你好 / 谢谢 / 再见",与"首轮问候归主 agent"的分工可能重复,建议由主 agent 前置拦截(需前端确认)。
六、一键工单
来源:Dify 主应用「一键工单」最新 draft(2026-09-22)| 覆盖 2 个含话术节点共 6 条;另 2 个子流程(获取可发起的流程列表 / 获取流程表单字段)无用户话术,且全库无任何节点引用这两个子流程(疑为遗留,待确认)。
| 节点 | 是否需优化 | 原文 | 建议修改 | 原因 |
|---|---|---|---|---|
| 提取工单词槽后置格式处理(成功分支) | ❌ | 您好,已为您选择工单模板:【{flow_name}】 | 已为您匹配工单模板:【{flow_name}】,请补全下方信息后提交。 | 去「您好」;「选择」→「匹配」更贴合系统行为;须补出下一步动作——现在只说"已选好"却没说用户要做什么。该句被资产 / 位置解析失败分支原样复用(资产未解析到时 reply 直取上游、位置未解析到时经聚合器回落到本句),必须拆开 |
| 提取工单词槽后置格式处理(未匹配分支) | ❌ | 未匹配到合适的工单类型,麻烦再描述下需求 | 我没找到合适的工单模板,您再说说具体要办什么事可以吗? | 「麻烦」偏随意;句末缺全角标点;术语「工单类型」与前文「工单模板」不一致;该 result 的 action 仍硬编码为 "done",文案在追问、动作却在结束本轮 |
| 提取工单词槽后置格式处理(注释态) | ❌ | # else "未识别到有效表单内容,请补充描述" | 删除,或恢复为可达分支的追问文案 | 已被注释的死字符串;has_valid_fill 算完即弃用,导致"模板匹配上但一个字段都没填出"时用户仍只看到「已为您选择工单模板」 |
| 统一异常处理(可用模板数 = 0) | ❌ | 当前您暂无工单操作权限,暂时无法发起工单,请联系管理员开通权限后重试。 | 您当前没有可发起的工单,请联系管理员确认工单权限。 | 编排只能证明「可用工单模板数 = 0」,推不出「无操作权限」——也可能是没配模板,接口故障时子流程静默返回空表也会走到这里;「暂无…暂时」语义重复;「重试」是工程词 |
| 统一异常处理(LLM 未匹配) | ✅ | 暂时没找到对应的工单分类,您可以多说一点具体情况,我重新帮您匹配。 | 我没找到匹配的工单模板,您多描述一下具体情况,我再帮您匹配。 | 语义正确,套全局项即可:去冗余「暂时」、术语「工单分类」统一为「工单模板」 |
| 统一异常处理(else 兜底) | ❌ | 工单处理异常,请稍后重试或换一种描述方式。 | 删除该分支,或改为:这条工单我没能处理,您换个说法再试一次。 | 编排查证为死分支(两条入边均不满足该条件);且「处理」「异常」「重试」三个工程词同时出现 |
全局统一项(本模块)
- 去「您好」:唯一一处「您好,已为您选择工单模板」→「已为您匹配工单模板…」。
- 术语统一:全模块统一说「工单模板」,停用「工单分类」「工单类型」。
- 去工程词:话术内不得出现「异常」「重试」「处理」(现命中 2 处)。
- 标点补齐:全部话术句末补全角句号 / 问号。
- 语气中性化:删冗余口语与时间限定词(「麻烦」「暂时」)。
- 失败态必须有独立文案:位置未解析、资产未解析、字段全空三种"部分成功"不得复用成功文案——本模块最大缺陷(1 句成功文案覆盖 4 种结局)。
- action 与文案语义对齐:追问 →
clarify,确认完成 →done;当前 2 处追问文案被标成done。
