ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

用Dify搭建智能复盘助手:从工作流编排到Prompt工程实践

用Dify搭建智能复盘助手:从工作流编排到Prompt工程实践 最近一个朋友在复盘会上抱怨“我们不是没有总结过问题每次复盘完都热血沸腾过俩月照旧踩同一个坑。”我回了一句缺的不是复盘是能把“事后”变成“事前”的工具。于是我做了一个叫hindsight的小项目——一个基于Dify搭出来的“后见之明”智能复盘助手专门解决这种“知道但做不到”的尴尬。hindsight 本身是英文里“后见之明”的意思但我的目标不是让你事后叹气而是把聊天记录、项目日志、会议纪要这些乱七八糟的历史材料丢进去让大模型自动生成一份有一定深度的复盘报告发生了什么、为什么会发生、下次怎么避坑。项目用 Dify 做了可视化工作流底层接大模型 API不需要写太多代码就能跑通。适合团队做项目复盘、个人做每日回顾也适合想在 Dify 上练手、想搞明白“工作流编排 Prompt 工程”怎么落地的人。这篇就当是项目实操记录我把从思路到实现的关键细节都写出来包括为什么选 Dify、工作流怎么搭、Prompt 怎么改以及我在实际调试里踩过的几个坑。1. 项目背景与思路拆解1.1 为什么叫 hindsight复盘的刚需做过复盘的人都知道最常见的三个问题一是靠记忆当时讨论的细节过几天就模糊了二是靠感觉大家坐在一起互相“头脑风暴”最后产出全靠嗓门大三是没有沉淀复盘完PPT一关下次从头再来。hindsight 就是冲着这三个问题去的。它不替代人类做决策而是当一个“忠实的记录者分析器”把所有相关的历史材料集中起来用大模型提取关键事实分析因果链条给出可执行建议。说白了我想要的是“后见之明”的结构化版本。人类的后见之明很容易被记忆偏差和情绪污染但大模型面对完整上下文时至少能做到客观罗列“哪条消息对应哪个结果”。这个项目适合两类人。一类是团队负责人或项目成员拿它做项目复盘、客服对话复盘、研发事故复盘另一类是个人效率爱好者拿它做每日对话回顾、每周工作总结。对我来说它更像一个“信息榨汁机”把毫无结构的历史文本压成几条真正能指导行动的结论。1.2 为什么选 Dify应用平台选型在最开始我犹豫过干脆直接用大模型 API 写个脚本不就行了真上手后才发现直接调 API 只适合一次性分析一旦要处理多种输入、多个分析步骤、不同输出渠道麻烦立刻就来了。直接开发的几个痛点需要自己维护会话状态、超时重试、流式输出每一步 Prompt 更新都要改代码重新部署想把中间结果比如“事实提取”的输出传给下一步时要写一堆胶水代码想接飞书、企业微信 webhook 时还得自己写消息格式转换。Dify 把这些都解决了。它是一个开源的大模型应用开发平台提供了可视化工作流编排、Prompt 管理、知识库/RAG、日志记录、API 发布等功能。我可以用拖拽节点的方式完成“文本预处理 → 事实提取 → 原因分析 → 建议生成 → 报告合成”这条链路每个节点都能单独调试Prompt 改完立刻生效。选型对比我可以简化成一张表维度直接调 API 开发基于 Dify 搭建开发速度慢需要写大量工程代码快可视化编排Prompt 迭代改代码重部署界面直接改实时生效多模型支持自己写适配层内置多供应商配置日志和可观测性要自己埋点自带运行日志发布渠道自己写对接内置 API、webhook 等所以最终决定用 Dify。这不是说 Dify 完美而是对于“单人或小团队快速验证 AI 应用”这个场景它的性价比是最高的。后面我所有实操步骤都基于 Dify 社区版。1.3 整体架构设计hindsight 的整体架构可以分成三段输入层、处理层、输出层。输入层负责收集复盘材料。来源很杂客户对话记录、工单系统导出的 CSV、飞书会议纪要、个人聊天记录甚至是任意粘贴的文本。在 Dify 里我统一把它们转成纯文本或结构化字段放进工作流的开始节点变量里。处理层是核心由几个 LLM 节点串联第一步做“事实提取”第二步做“原因分析”第三步生成“改进建议”。每一步的结果都会作为下一步的输入形成一种“流水线思考”。这么做比一次性让模型输出完整报告要稳因为每步任务简单模型不容易遗漏信息而且中间结果可以单独检查。输出层负责把最终结果变成人看得懂的东西。我让工作流生成一份 Markdown 报告包含“事实时间线”“关键原因”“改进清单”三个段落。再通过 Dify 里的 webhook 节点把报告推到飞书群或者在网页端直接查看。这个架构之所以成立是因为把“复盘”拆成了几个子任务每个子任务用一次模型调用解决。拆解之后的好处很明显可调试性高哪一步输出不对就单独调哪个节点。2. 核心功能与数据流设计2.1 输入层材料来源与格式处理先处理最麻烦的部分历史材料千奇百怪。客服对话是一来一回的消息列表项目复盘可能是几段会议纪要研发事故可能是日志片段加评论记录。如果直接全塞给大模型一是容易超长二是不同格式混在一起模型会蒙。我的做法是定义了一个统一的输入模板开始节点有两个变量一个叫raw_material用来接收原始文本另一个叫scene用来告诉模型这是哪类场景比如“客服问题复盘”“研发事故复盘”或“个人周回顾”。场景这个词很关键它会影响后面的 Prompt 角色设定。接着用 Dify 的代码节点做文本预处理。代码节点里跑 Python干几件事把输入文本按换行符拆成段落去掉明显的时间戳噪声比如 “2025-01-01 10:00:00” 这种无意义的重复前缀统计总字符数如果超过预设阈值比如 6000 字符就按时间窗口切块每块保留 3000 字符左右并带上顺序号。这里有个经验不要试图让模型一次性处理所有材料。大模型虽然上下文窗口越来越大但材料一长注意力就会被稀释输出质量明显下降。我宁可利用 Dify 代码节点先分块再让后续 LLM 节点逐块提取事实最后再做汇总。这个“先分后总”的思路是我在这个项目里最受用的设计之一。2.2 分析层Prompt 设计与模型选型处理层是 hindsight 的“大脑”我最花时间的就是三个 LLM 节点的 Prompt。第一个节点是事实提取。Prompt 我参考了“记者式追问”的思路你是一位严谨的分析师。请从以下复盘材料中提取客观事实不要进行价值判断。事实应包含时间、人物/角色、行动、结果。只输出列表每行一条事实。如果材料中没有明确信息用“未知”代替。这步的核心是强迫模型区分“事实”和“解读”。很多无效复盘都是因为混为一谈最后变成了互相甩锅。事实提取最好像写新闻稿一样克制。第二个节点是原因分析。Prompt 会拿到第一步的事实列表然后要求基于上述事实分析问题发生的直接原因和深层原因。直接原因必须对应具体事实深层原因可以用领域知识推断。给出每个原因的可信度高/中/低。我加上了“可信度”这一项是为了防止模型一本正经地胡说八道。低可信度的原因会进入报告里的“待验证”区提醒人工复核。第三个节点生成改进建议。Prompt 强调“可执行”针对上述原因提出 3 条改进建议。每条建议必须包含具体动作、负责人角色、实施时机、预期效果。禁止出现“加强沟通”“提高意识”等空话。如果无法给出具体动作请说明为什么。这套 Prompt 设计层层递进从“看到什么”到“为什么”再到“怎么办”恰好对应康奈尔笔记法里的“线索—笔记—总结”逻辑。模型选型方面我在 Dify 里同时配置了两种模型长文本理解用 DeepSeek便宜且中文理解不错最终报告润色用 GPT-4o表达更细腻。实际使用中事实提取和原因分析基本用 DeepSeek因为速度快成本低最后的报告合成用 GPT-4o 保证可读性。大模型本身没有绝对优劣关键是让合适的模型干合适的活。2.3 输出层报告结构与知识复用输出层不是简单把结果打出来就完事。我发现如果每次复盘结果都单独存在聊天记录里三个月后照样找不着。所以 hindsight 在生成报告的同时把优秀的复盘报告写入 Dify 内置的知识库下次做类似主题复盘时会检索到历史案例作为参考。报告结构固定为 Markdown包含三部分事实时间线把提取到的事实按时间排列让人一眼看到发展的脉络原因分析按直接原因、深层原因、可信度排列改进清单每条建议带具体动作和负责人角色。这个结构我也会在 Prompt 里反复强调让模型尽量按模板输出。Dify 里的模板转换节点可以做到这一点把上一步的结果填入预设模板生成统一的 Markdown。输出渠道我接了两个一个是用 Dify 网页端直接看结果另一个是配置飞书自定义机器人 webhook报告生成后自动推到群里。飞书机器人在 Dify 里只需要一个 HTTP 请求节点把报告文本做成 JSON payload 发送即可。3. 实操过程从零搭建 hindsight3.1 环境准备Dify 部署与模型接入第一步是部署 Dify 社区版。官方推荐用 Docker Compose对着文档拉一下仓储、执行docker compose up -d就行。我在自己那台 4 核 8G 的旧服务器上跑起来了整体占用大概 2G 内存左右轻量测试完全够用。部署完成后进入管理员后台在“模型供应商”页面配置模型 API Key。我用的是 DeepSeek 和 OpenAI 兼容接口DeepSeek 的 base_url 填https://api.deepseek.com/v1模型名填deepseek-chatOpenAI 则填自己的 key。这一步注意Dify 社区版里模型供应商是可以自由配置的如果你用的是公司内部模型只要兼容 OpenAI 格式一样能接进来。创建应用时我选了“工作流”类型而不是“聊天助手”。原因是 hindsight 的处理链路是多节点流水线工作流更适合结构化输出聊天助手更适合多轮对话。工作流的开始节点可以自定义输入变量后面每个节点都能引用这些变量。3.2 创建应用与工作流编排打开工作流编辑器我按下面的顺序拖了节点开始节点定义raw_material文本和scene选择器两个输入。代码节点做文本预处理和分块输出一个数组每个元素是一个文本块。迭代节点对每个文本块执行一次“事实提取”LLM 节点输出结构化事实列表。知识检索节点可选如果知识库里有历史复盘案例就检索相关片段作为参考。聚合节点把迭代节点输出的多份事实列表合并成一个长文本。LLM 节点“原因分析”输入合并后的事实列表和场景。LLM 节点“建议生成”输入原因分析结果。模板转换节点将三个步骤的结果填充到 Markdown 模板。结束节点输出最终报告。这里有个关键点Dify 工作流里的“迭代节点”对新手有点陌生它本质上是对数组变量做循环处理。我最初没意识到这一点直接把整段材料扔进 LLM结果输出质量很差。后来拆成迭代节点每个文本块独立提取事实再合并效果直线上升。实操时我给每个 LLM 节点的max_tokens设置了合适的上限。事实提取节点因为要输出列表我设为 1000原因分析节点设为 800建议生成节点设为 1200。温度统一调成 0.3避免太发散。3.3 关键 Prompt 模板与参数调优把这三个节点的 Prompt 完整列出来其实是最有价值的。因为我试过很多版本最后发现真正有效的是下面这一套。事实提取节点你是“hindsight 复盘系统”的事实提取模块。 你的任务是从复盘材料中提取客观事实禁止任何主观评价。 输出格式 - 每条事实占一行格式为「时间 | 人物/角色 | 行动 | 结果」 - 如果人物不确定用“未知” - 如果材料没有明确时间用“时间未知” - 只输出列表不要输出解释 材料内容 {{raw_material_block}}原因分析节点你是资深复盘教练。 请基于以下事实列表定位问题发生的直接原因和深层原因。 要求 1. 直接原因必须能在事实列表中找到对应证据并标注依据的事实编号。 2. 深层原因可以结合行业经验推断但必须标注“推断”。 3. 每个原因给出可信度高/中/低。 输出格式 直接原因 - 原因描述对应事实编号 深层原因 - 原因描述推断可信度 事实列表 {{merged_facts}}建议生成节点你是行动策略顾问。 针对以下原因分析提出可执行改进建议。 每条建议必须包含 - 具体动作一句话说清楚要做什么 - 负责人角色如“客服主管”“后端工程师” - 实施时机如“下次上线前”“每周五” - 预期效果可量化的预期收益 禁止出现 - “加强沟通”“提高意识”“优化流程”等无操作指令的短语 - 没有负责人的建议 原因分析 {{cause_analysis}}调参时候的几个心得温度不要超过 0.5否则“事实提取”阶段会凭空捏造细节事实提取节点的输出格式越死板越好不要用自然语言描述要固定分隔符原因分析节点里加一句“如果没有信息支撑直接写无法判断”能显著减少幻觉。3.4 测试与效果验证我用一次真实某群聊对话记录做测试产品、开发、运营三个人讨论一个功能延期问题大约 20 分钟的通话转文字稿加上聊天记录总共大概 5000 汉字。第一次跑完事实提取节点输出的“事实时间线”非常精确把“10:24 产品提出需求变更”“10:31 开发反馈排期不够”“10:45 运营催促上线时间”这几条关键节点都列出来了。原因分析环节给出了两个直接原因和三个深层原因其中两条深层原因被我标记为低可信度需要人工验证这符合预期。改进建议也基本避免了空话比如“下次需求评审前产品需要先给出一版预估影响范围由开发补充工作量评估在周五评审会上对齐”。耗时方面全流程大概 40 秒token 消耗折合人民币不到两毛钱。第二次我把材料换成了某客服聊天记录因为格式比较乱预处理代码花了不少力气才识别出“客服”和“客户”角色后来我在预处理代码里加了简单正则匹配角色前缀准确率就上来了。验证效果不能光看一次输出好不好我给自己定的标准是报告里至少有 80% 的事实能在原始材料中找到对应原文建议里至少有一条可以直接安排人去执行。按照这个标准迭代了两轮基本就稳定了。4. 常见问题与避坑实录4.1 历史材料太长上下文塞不进模型这是最常遇到的情况。我一开始把整段材料都塞进一个 LLM 节点结果模型在 6000 字时就出现信息遗漏连“事实提取”都漏掉了一半关键节点。解决方案是前面提到的“迭代节点 分块”。我按每块 2500 字符左右切分重叠 200 字符避免切断句子再让迭代节点逐块提取事实最后聚合。这里要注意“重叠窗口”的概念如果材料中间有换行或角色切换直接把块切开会丢失衔接信息所以我在切分代码里让相邻块保留上一块末尾 200 个字符。这样成本会多一点但信息不丢。如果你不想写代码也可以用 Dify 内置的知识库做 RAG把材料传到知识库里用向量检索召回相关片段。但我在实际比较后发现对于“全量复盘”这个场景RAG 召回容易漏掉时间线关键点不如整块迭代。RAG 更适合“针对某个问题找答案”做得好的复盘还是应该读全量。4.2 模型输出太空泛全是正确的废话第一次跑通时原因分析节点输出的“深层原因”几乎全是“沟通不畅”“流程不够清晰”这种话。我差点想放弃。后来发现根因是 Prompt 没有给出“不可接受的输出示例”。我往原因分析节点的 Prompt 里加了负例以下属于不合格输出不允许出现 - 沟通不畅 - 执行力不足 - 流程不规范 - 缺乏意识同时改成要求模型引用事实编号作为证据。模型从“猜测”变成“基于事实推断”输出立刻扎实了很多。这个技巧可以理解成给模型划了一条底线你宁可说“无法判断”也不许说空话。还有一个有效的做法是给 few-shot 示例。我在建议生成节点里手动写了一条示例输出比如“下次客服话术更新前由培训专员把新话术打印成卡片在晨会上逐条讲解并人工抽查 5 条录音”。模型看到这种具体样例后模仿出来的内容就不再空洞了。4.3 工作流执行慢节点太多hindsight 初版有 7 个 LLM 节点每次跑完要一分多钟体验很差。后来我做了两个优化合并节点把“原因分析”和“建议生成”合并成一个 LLM 节点因为原因分析输出是建议生成的直接输入分开写不仅慢还会导致中间上下文重复传递。合并后 Prompt 变成两段式输出耗时从 40 秒降到 25 秒。并行处理Dify 工作流里如果多个 LLM 节点之间没有依赖关系可以拖成并行分支。我的场景里“事实提取”和“知识检索”没有依赖所以并行执行又省了 5 秒。实测下来最终版全流程在 20 秒左右对复盘工具来说完全可以接受。但要注意Dify 免费额度中也有并发限制并行分支如果太多模型 API 限流反而会拖慢速度需要平衡。4.4 数据安全与成本控制复盘材料往往包含对话记录和内部信息直接把数据传给外部模型 API还是有隐私顾虑的。我做了几层保护预处理阶段先做脱敏用简单规则把手机号、邮箱、姓名替换成占位符比如把“张三”替换为“人物A”敏感数据不进入知识库只在工作流中临时处理生产环境建议部署私有化模型DeepSeek 和 Qwen 都有开源版本可以作为替代。这样只需要在 Dify 里配置本地模型服务即可。成本控制方面每次复盘的 token 消耗主要取决于材料长度。以 5000 汉字、DeepSeek 模型为例输入约 5000 token输出约 1200 token费用在一毛钱以内即使用 GPT-4o 也基本不超过一块钱。对比线下开两小时复盘会的人力成本这个投入完全可以忽略。我建议在 Dify 的后端日志里记录每次运行的 token 消耗定期检查有没有异常高耗的任务往往就是某个节点 Prompt 设计不合理导致输出过长。5. 经验总结与后续扩展5.1 实操中的体会项目做到现在给我最大的启发不是“大模型能自动写复盘报告”而是“复盘本身可以被工程化拆解”。过去的复盘依赖人的记忆、情绪和表达而 hindsight 把复盘变成了一条流水线事实提取—原因分析—行动建议。流水线保证了每次复盘的产出质量下限这是普通人工复盘做不到的。另外发现一个很好用的小技巧在建议生成节点的 Prompt 末尾加一句“请用‘如果重来一次第一步会如何不同’的视角来组织建议”。这句话会让模型从“找借口”模式切换成“找行动”模式输出内容一下子变得特别有可执行性。你要是跟我一样被“正确的废话”折磨过可以试试。5.2 后续可以扩展的方向hindsight 目前只是把静态材料变成报告后续有几个方向我觉得很值得做接入定时任务每周自动从工单系统、聊天记录、日历里拉取数据做周报复盘给报告加上情绪分析尤其是客服场景可以统计用户情绪变化曲线定位服务爆发点把历次复盘建议做成“待办事项”跟踪执行情况形成“复盘—计划—执行—再复盘”的闭环引入多角色视角比如同一份事故材料分别让模型扮演研发、产品、运营来分析生成多视角报告。5.3 给新手的建议如果你想复现这个项目我的建议是别一上来就追求功能大而全。先做一个小场景比如“每周个人工作回顾”数据就用自己的工作日志跑通后再逐步加功能。Dify 社区版部署很简单但真正难的是 Prompt 的迭代和材料预处理。你手动跑十次每次都看输出慢慢就知道哪些地方容易出错。还有一个容易被忽略的点要给你的工作流建立版本管理。Dify 工作流编辑器里的版本会自动保存但不同版本文案之间的效果对比最好手动记录。我自己会在本地维护一个 markdown 文件每次修改 Prompt 都写清楚改动原因和效果这样回头看特别有帮助。最后分享一个我个人的使用习惯每天晚上下班前把当天没聊完的工作对话粘贴进 hindsight让它生成三条“明天不该再做的事”。坚持一个月后我发现很多沟通问题其实当天就能避免根本不用等到复盘。这个项目叫 hindsight但它的目标从来不是让你沉浸在后见之明里而是把这些后见之明变成明天的注意事项。只要能做到这一点“事后总结”就不再是一句空话。
返回列表