Skip to content

AI 工单(一键工单)- 设计实现偏差问题说明(现状 vs 产品预期) ​

版本:初版(V0.1,未经产品经理评审,待强哥 review 后修订) 状态:待评审 | 范围:对话端(Chatbot)一键工单 | 关联:6月一键工单方案、6月资产语义底座、7月多模态输入_多轮交互_组件优化_工单防重 | 实现依据:dify/主智能体.yml、dify/sub-agent/一键工单.yml | 问题定位:Dify 编排实现相对设计文档存在占位缺陷、防幻觉简化与功能缺失


0. 问题清单总览 ​

等级说明:由强哥手动维护优先级,P0(阻断/必须本期解决)> P1(本期应解决)> P2(后续版本/需求点)。未定级时留空。

#问题等级定性处理建议
1资产实体对齐 query 硬编码「空调」,未用提取的资产名P0功能缺陷(占位/接线错误)估计是对应 ahu012的后门, 不算问题吧?
2静态选项超集校验缺失,AI 非法选项未被置 missingP1防幻觉原则简化,依赖后端安检对齐后端安检后定(§3.2)
3工单模板切换(rematch)不保留旧卡片已填字段值P2功能缺失暂不处理
4资产解析 scoreThreshold=0.5,低于 PRD 约定 0.85P2阈值偏差,稳定性待实测暂不处理
5多模态视觉增强模块(压缩/OCR/CoT)未在 Dify 落地P1下沉 / 待确认对齐后端后定(§3.5)
6基础输入型长度/数值范围校验缺失(应强制截断)P1设计简化对齐后端安检(§3.6)
7工单防重(24h 同类进行中)完全未实现P2功能缺失(需求点)暂不处理
8图片字段填入数量不按 max_val 截断(超限不丢弃)P2边界缺陷待整改(§3.8)
9businessType / 意图前置胶囊未在 Dify 层传递P2设计简化待对齐(§3.9)
10上传大小未按文档三建议调至 20MBP2配置项部署侧调整(§3.10)
11语音(Voice)ASR 转写文本链路待确认P2待确认对齐前端(§3.11)

1. 问题一句话 ​

一键工单 Dify 子流程相对 PRD 在"资产实体对齐、防幻觉校验、工单切换保留、多模态增强、工单防重"五个能力点上存在占位缺陷、简化与缺失,其中资产解析 query 硬编码为「空调」属明确缺陷(非空调类资产对齐必然失败或错配),部分能力未落地系下沉至后端或需求未排期。


2. 产品预期(PRD 汇总) ​

按三篇 PRD 的原始定义:

  1. 架构主线(6月 v2.0):后端清洗 + AI 提取 + 后端实体对齐 + 后端安检。AI 只做语言提取,真实 ID 转换全部由中台完成;"提交工单必须由人手动点击",AI 不执行最终提交([6月一键工单方案 四、整体系统架构])。
  2. 动态实体提取型组件(Location / Asset / Device):AI 只从原话截取短语(enty_extract),后端向量库余弦相似度检索,Score > 0.85 命中回填标准 ID+中文名,< 0.85 标 missing([6月方案 六、字段清洗/词槽填充校验])。
  3. 静态选项型组件:AI 必须从 options 中挑一模一样的字眼输出;后端校验值是否在 options 内,不在则填 missing(防幻觉核心,[6月方案 六])。
  4. 基础输入型组件:数值/长度范围校验,超出强制截断([6月方案 六])。
  5. 工单模板切换(原地重绘):前端将"旧对话 + 旧卡片数据 + 新目标工单类型"发给后端重新提取映射([6月方案 五、前端卡片交互])。
  6. 可用工单列表:后端按"流程可发起 + AI 配置启用"过滤该用户可发起工单,结合前端意图前置胶囊隐式传参(businessType)提高识别准确度([6月方案 六、判断可发起工单])。
  7. 多模态输入【P0】:图片/语音上传建单;图片识别走"图片压缩 + 视觉识别增强(探针式指令 / Visual CoT / OCR)+ 文本 OCR",不负责选工单类型,仅视觉→结构化文字→注入词槽;Dify 上传限制建议调至 20MB([7月方案 多模态输入])。
  8. 多轮交互【P1】6/27 简化版:近三轮文本对话 + 本轮图片 + 本轮音频直接给 AI 重生成卡片;旧卡片信息/图片/音频不传给 AI([7月方案 多轮交互])。
  9. 工单防重【P2】:开启 AI 防重开关的流程,提交时查 24h 内同类进行中工单 → AI 检索匹配 → 疑似重复弹窗(我要催办 / 查看详情 / 坚持提交)([7月方案 工单防重])。
  10. 资产语义底座(6月 v1.0):资产向量知识库(别名、权重,默认 0.5),支撑 Asset 型字段实体对齐;/assets/resolve 需在指定空间下检索([6月资产语义底座])。

3. 现状实现与偏差定性 ​

3.1 资产实体对齐 query 硬编码「空调」(P0) ​

现状 HTTP-资产解析 节点请求体:

json
{ "query": "空调", "ambiguityMargin": 0.15, "spaceId": "{{space_id}}",
  "retrievalSetting": { "topK": 1, "scoreThreshold": 0.5 } }

query 硬编码为字面量「空调」,而 提取工单词槽后置格式处理 已从用户话术提取出 asset_name(如"投影仪")并存于 asset_fields。后端实际按"空调"去资产向量库检索:

  • 非空调类资产(投影仪/门锁/地毯…)→ 检索结果为空或错配 → 进入 拼接资产信息 的 wanted 非空且 asset_result 为空 分支,回复"无法找到【投影仪】对应的资产",建单被 clarify 卡死;

  • 恰好提"空调"时正常,掩盖缺陷。

与 PRD「enty_extract 作为参数调 URL 模糊匹配」直接冲突([6月方案 六]),属占位/接线遗留。P0,必须整改。

3.2 静态选项超集校验缺失(P1,防幻觉依赖后端安检) ​

PRD 要求静态选项型"值不在 options 内 → 填 missing"。现状 提取工单词槽后置格式处理(static_select / open_select 单选)在 fill_val 匹配不到 options 时:

python
if not options_match:
    options_match.append({"option_id": None, "option_name": fill_val})

即无条件保留 AI 提取的 label(仅 option_id 置空),未按 PRD 置 missing。若后端安检未兜底,AI 输出幻觉选项会以 option_id=None 透传至流程引擎。需与 AIHUB 后端安检确认兜底情况后定级。

3.3 工单模板切换(rematch)不保留旧卡片字段值(P1) ​

现状支持 rematch:主智能体将前端 payload(含 flowId/workOrderId/flowName/uniqueId)传入,用户输入格式处理 解析后走 判断是否为工单模板切换 → 工单id转换 → 工单字段 → 重新槽提取。但 用户输入格式处理 只解析 flowId/workOrderId/flowName/uniqueId/userFiles/userVoice,未解析旧卡片已填字段值。切换目标工单类型后,原卡片已填内容全部丢失(仅靠 chathistory 里的对话文本兜底)。

与 PRD「前端将旧对话 + 旧卡片数据 + 新目标工单类型发给后端重新提取映射 → 原地重绘」不符([6月方案 五])。注:7月 6/27 简化版对"修改工单"有演进(规则已删),故定 P1 待评审确认。

3.4 资产解析 scoreThreshold=0.5 低于 PRD 0.85(P1) ​

HTTP-资产解析 与 HTTP-空间解析 均配置 scoreThreshold: 0.5、topK: 1。PRD 明确资产向量库命中阈值 0.85([6月方案 六])。0.5 阈值过宽,存在低相似度资产误命中风险。空间解析 PRD 未约定阈值(0.5 可保留),资产解析需实测对齐。

另:HTTP-空间解析 的 query 用整句用户输入({{query}}),而非 PRD 建议的"原话短语提取",属设计简化(语义检索整句可接受,P2 备注)。

3.5 多模态视觉增强模块未在 Dify 落地(P2,待后端确认) ​

现状已实现基础多模态:判断是否有上传文件 分流,有文件走 有上传文件工单词槽提取(LLM Qwen3.6-27B,vision enabled: true, detail: high,图片直传模型)。但 PRD【7月 P0】的图片压缩(动态尺度+智能质量)、探针式缺陷指令、Visual CoT 分步推理、OCR(铭牌/房间号)、多图综合结论等增强模块在 Dify 侧均未实现,仅"把图直接喂给模型"。需确认视觉增强模块是否由 AIHUB 后端承担。

3.6 基础输入型长度/数值范围校验缺失(P2) ​

PRD 要求基础输入型"数值/长度范围校验,超出强制截断"([6月方案 六])。现状 工单字段格式处理 仅做字段降维(i/g/o/d 对照表),提取工单词槽后置格式处理 仅做类型映射,无 minLength/maxLength/数值截断逻辑。依赖后端安检兜底,待确认。

3.7 工单防重完全未实现(P2,需求点) ​

PRD【7月 P2】工单防重(24h 内同类进行中工单 → AI 检索匹配 → 疑似重复弹窗)在 Dify 两个 yml 中无任何对应节点(无防重 HTTP 调用、无 AI 匹配分支、无"触发防重时禁切换/禁提交"交互态)。记录为未排期需求点。

3.8 图片字段不按 max_val 截断(P2) ​

提取工单词槽后置格式处理 处理 imageMedia 时:

python
if max_val > 0 and used_photo_count < len(user_files):
    for i in range(len(user_files) - used_photo_count):
        picture_fields.append(user_files[i + used_photo_count])

将全部剩余图片填入当前字段,未按 valueConstraints.max 截断。PRD【7月】要求"仅 1 个 Pictures → 全部填入,超上限多余丢弃"。当 max_val=2 而用户传 5 张时,会超量填入。

3.9 businessType / 意图前置胶囊未传递(P2) ​

HTTP-可发起工单列表 请求体 businessType: "" 恒为空。PRD 要求前端意图前置胶囊隐式传参(【工单创建】前缀 + businessType)提高工单类型识别准确度([6月方案 六])。现状 一键工单工作流 tool 参数、用户输入 start 变量中均无 businessType 字段。

3.10 上传大小限制未调至 20MB(P2) ​

一键工单.yml features:file_size_limit: 15、image_file_size_limit: 10(MB)。PRD【7月】建议 Dify 调大至 20MB(ConfigMap UPLOAD_FILE_SIZE_LIMIT / UPLOAD_IMAGE_FILE_SIZE_LIMIT)。

3.11 语音(Voice)ASR 链路待确认(P2) ​

features.speech_to_text.enabled: false。audioMedia 字段仅绑定 user_voice(payload.userVoice 原始音频对象);槽提取 LLM 的 prompt 输入为 query + chathistory,未注入 ASR 转写文本。悬浮球语音建单依赖前端 ASR 转文本后作为 query 传入。PRD【7月】Voice = 原始音频 + ASR 转写文本 + 录音时长,ASR 文本应喂给 AI。需确认 ASR 文本是否已由前端/后端注入 query。


4. 测试用例(实测清单) ​

4.1 资产实体对齐(P0,先复现后整改) ​

ID输入前置条件设计预期现状预期判定
T-AS-01"8楼会议室投影仪坏了,帮报修"项目含投影仪资产资产回填投影仪标准 ID+名称,正常出卡后端按"空调"检索→无法找到【投影仪】→ clarify 卡死缺陷
T-AS-02"东塔10层空调漏水"空调资产在案回填空调 ID硬编码"空调"恰好命中→正常(掩盖缺陷)假阳性
T-AS-03"裙楼B2地面裂缝"(无资产诉求)—不触发资产解析,正常出卡asset_fields 空→跳过资产解析,正常基线一致

4.2 静态选项防幻觉(P1,待后端安检确认) ​

ID输入前置条件设计预期现状预期判定
T-OP-01"报修,原因选『管道漏水』"故障原因 options 无"管道漏水"(只有"水管爆裂")校验失败→该字段 missing(空卡片可编辑)保留 option_id=None + 原话 label 透传设计差异
T-OP-02"报修,原因『水管爆裂』"命中 options回填 option_id回填 option_id基线一致

4.3 工单模板切换保留(P1) ​

ID输入前置条件设计预期现状预期判定
T-RE-01已生成"报修"卡(位置/描述已填),语音切换为"保洁"工单前端发 payload 含旧卡片字段旧卡片字段随切换重映射保留可编辑仅对话文本重提,旧值丢失功能缺失
T-RE-02切换目标与源模板字段结构相近同上相同字段值保留需用户在新对话复述功能缺失

4.4 资产解析阈值(P1,实测) ​

ID输入设计预期现状预期判定
T-TH-01相似度 0.5–0.85 之间的资产别名不命中(<0.85 标 missing)0.5 阈值命中回填(可能错配)设计差异
T-TH-02明确别名(score≈1)命中命中基线一致

4.5 端到端主链路(7月移动端测试话术 9 条) ​

对 [7月方案 移动端测试话术] 的 9 条全量跑通验证(覆盖报修/保洁/运送/访客/漏水/门锁/裂缝等),重点观察:含资产诉求的条目("空调漏水"假阳性、"会议室门关不严"等)是否触发 §3.1 缺陷。


5. 整改方向(供评审) ​

  1. 资产 query 接线(P0):HTTP-资产解析 的 query 改为引用 asset_name(提取工单词槽后置格式处理 已输出),删除硬编码"空调";并校验后端 assets/resolve 入参契约。
  2. 静态选项校验(P1):提取工单词槽后置格式处理 中 static_select/open_select 单选,fill_val 不在 resolved_options 且 Hub options 非空时,option_id/option_name 置 null(等价 missing),把"是否由后端安检兜底"与后端确认后定级。
  3. rematch 保留旧值(P1):用户输入格式处理 解析 payload 中的旧卡片 fields(fieldId→value),rematch 时合并入本次槽提取;或与前端约定"旧值走 payload 传递"。评审是否沿用 7月 6/27 简化版(不保留)。
  4. 阈值对齐(P1):资产解析 scoreThreshold 对齐 PRD 0.85(与后端确认其取值范围与语义),空间解析 0.5 暂保留;实测后定。
  5. 图片截断(P2):imageMedia 按 max_val 截断,超限丢弃并提示。
  6. businessType(P2):start 增加 businessType 输入,catalog 请求体透传前端意图胶囊参数。
  7. 上传限制(P2):部署侧将 UPLOAD_FILE_SIZE_LIMIT / UPLOAD_IMAGE_FILE_SIZE_LIMIT 调至 20MB。
  8. 多模态增强 / 防重 / 语音 ASR(P2):与后端确认视觉增强模块归属;工单防重作为独立需求点排期;语音 ASR 链路与前端对齐后补注入。
  9. 基础输入型校验(P2):与后端确认安检是否覆盖长度/数值截断,若否由 Dify 层或后端补齐。

6. 已决策 / 不纳入项(评审确认后冻结) ​

项决策依据
单模板旁路(sole_work_order_id)不算问题,保持现状仅一个可用模板时跳过模板选用 LLM 直连字段接口,为合理优化
多意图澄清(主智能体)不算问题6月 PRD"本期暂不需要澄清",但主智能体已实现多意图澄清,属 7月 P1 演进,超前不冲突
基准日历注入(date_block)不算问题,保持现状相对日(下周X/后天)按日历换算,较 PRD 为增强项
工单模板选用强制单选保持现状PRD"多候选默认选一个,靠前端切换纠正",一致
空间解析整句 query本期不做短语提取整句语义检索可接受;PRD 短语提取为优化项
图片/语音绑定组件(imageMedia/audioMedia 填值)保持现状与 PRD 组件映射一致
动态实体后端安检(ID 回填、非向量库 URL 模糊匹配)属于 AIHUB 后端职责PRD 架构将实体对齐/安检下沉至中台,Dify 仅传短语与阈值

7. 例外说明 ​

  • 本问题不影响正向主链路:无资产诉求的报修/保洁/运送等建单在"模板选用→字段提取→出卡"行为正确,多轮(近 3 轮 chathistory)与工单切换(rematch)主路径可用。

  • 卡片唯一存活/置灰快照/打断中止/提交按钮等为前端交互,Dify 不涉及(Dify 只产出 reply/action/artifacts 结构,前端据此渲染卡片)。

  • 已落地且不在本次问题范围:可用工单列表权限过滤(catalog)、字段降维(i/g/o/d 对照表)、空间解析 + 未匹配澄清、LLM 结构化输出(JSON schema)、相对日期基准日历、Vision 多模态基础通道。

  • 多轮支持正常 ✅:主智能体经 准备上下文 将最近 3 轮对话(history_text)传入一键工单 chathistory,槽提取 LLM 提示词含"历史"且规则 3 支持上下文继承——多轮槽位延续可用。

Released under the Private License.