方法论 · 熟练
Dify 搭 AI 复盘引擎的四层架构
清洗不许压语义,结论必须挂证据
这是一套把「多源材料 → 结构化复盘报告」跑通的工程方法:输入层清洗并规整格式,解析层抽事件五要素,归因层做因果归类并区分事实与推断,输出层按模板渲染报告。它解决的不是「模型会不会写」,而是复盘报告跑偏、编因果、给空话这三件事——做法是把每一层的自由度收窄:清洗阶段只清表达形式、不动原始数值;归因结论必须对得上证据编号;输出格式由 JSON Schema 与模板两级锁定;调不通时逆着流程往前查,而不是等整条跑完猜。
方法 · 一图看懂
1
输入层 · 清洗只清形式、不动数值 — 统一时间格式为 YYYY-MM-DD HH:mm、统一人名与系统名,删口语重复、合并同义句;原始数值、时长、数量、错误码一律原样保留——「平时接口 200ms,那天涨到 2s」压成「接口变慢」,归因就丢掉一半线索。
2
解析层 · 抽事件五要素 — 每条事件抽「谁 / 何时 / 做了什么 / 涉及什么 / 结果」五个字段,用参数提取器 + 自定义 JSON Schema 固定,字段描述写到可判定、结果字段只允许填材料里出现的原句。
3
归因层 · 事实与推断分栏 — 归因只落「流程缺失 / 沟通不足 / 技术债务 / 外部依赖」四类之一;每条结论挂证据编号(E1、E2…),材料只能证明时间先后的写「随后发生」,确需推断的标【推测】并写明假设。
4
输出层 · 模板渲染 + 反例约束 — 报告由 Markdown 模板定骨架(结论摘要 / 时间线 / 归因与证据 / 可执行建议);给建议加反例约束——写不出执行动作的句子必须重写,如「加强沟通」重写为「每周一、周三 15:00 跨部门同步会,项目经理记纪要发群」。
5
调试 · 逆流程回查 + 三档样例 — 结果不对先看报告生成器的输入,再看归因输入,再往前定位到抽取不完整或清洗冲掉关键信息;备简单 / 中等 / 复杂三档样例,每改一次 Prompt 三档全跑一遍,防止修好一个带崩另一个。
原理 · 为什么有效
复盘引擎的失败点不在「生成」,在「传递」——上游把数值压成语义、把时间先后写成因果,下游再强的模型也只能把错误放大。所以四层架构的核心不是分层本身,而是每层都设了一道不可越过的闸:清洗层禁止语义压缩,保证线索不被提前丢掉;解析层用 JSON Schema 把字段锁成可判定的槽,模型没有自由发挥的空间;归因层用证据编号把「结论」与「支撑」绑死,先后关系无法偷偷升级成因果关系;输出层用模板定骨架,让格式漂移在渲染前就被挡住。再叠上 temperature 固定 0.1(复盘求稳不求发散)与「宁多勿少」的 max_tokens(截断比超时更难排查),整条链就从「一次性生成」变成「可逐层定位的流水线」——出错时你能知道错在第几层,而不是只能整条重跑。
适用场景
适合:材料多源且零散(聊天记录、会议纪要、工单、提交记录混在一起)、结论要能被人复核的事后复盘——线上故障归因、项目延期复盘、迭代过程回顾;也适合需要批量产出格式统一报告的场景,因为格式被 Schema 与模板两级锁死。不适合:材料本身极少(三五条信息)时,四层架构的调试成本高于收益,直接一段提示词更快;需要发散创意的场景(写文案、想方案)也不适用——temperature 0.1 与反例约束会把多样性一起压掉;材料涉及未脱敏的人名、客户名时,先做脱敏再进引擎,不要指望清洗层顺手处理。
自测 · 5 问
我的清洗步骤里,会不会把「200ms 涨到 2s」写成「接口变慢」这种语义压缩?
每条归因结论后面是否都挂了证据编号,并且对应的原句能在材料里找到?
报告里有没有把「随后发生」写成「导致」的地方?
输出字段是不是由 JSON Schema 定死的,而不是交给一个 LLM 节点自由发挥?
我给出的任意一条建议,能不能直接派给某个角色、在某天做出交付物?
怎么上手 · 验证步骤
按这个顺序做,别跳:
1. 先只搭输入层与解析层,拿一条最简单的材料跑通「材料 → 事件五要素表」,字段填不满就改 Schema 描述,不要改 Prompt 文风
2. 接上归因层,跑同一条材料,检查结论是否都带证据编号、是否出现无据因果
3. 最后接输出层模板,用三档样例(简单 / 中等 / 复杂)各跑一遍,把每次跑偏的位置记下来
4. 跑偏时逆流程回查:报告不对看生成器输入 → 归因不对看归因输入 → 输入缺字段就回到抽取或清洗
5. 全部节点 temperature 固定 0.1,max_tokens 按清洗 2000 / 抽取 3000 / 归因 4000 / 报告 8000 配,宁多勿少
6. 知识库要接的话四件事一起做:文档按主题拆小、混合检索(关键词+向量)、标题带类型前缀(如 SOP-数据库迁移方案)、加 rerank 重排。
跑完一条真实材料后对照四项:一、时间线里的每个数值能否在原始材料里逐字找到;二、归因段每条结论是否都有证据编号且编号不重复不悬空;三、是否至少有一处被正确标成【推测】并写明了假设(全篇零推测通常意味着模型在偷偷把推断写成事实);四、建议段随机抽两条,问「这条下周能派给谁、交付什么」,答不上来就是没通过反例约束,回去重写这一句。