ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

基于Dify工作流搭建AI复盘助手Hindsight:从过程分幕到行动建议

基于Dify工作流搭建AI复盘助手Hindsight:从过程分幕到行动建议 “hindsight”这个词英文里是“后见之明”的意思说白了就是事后回头看才把前因后果看明白。放到项目开发上就是复盘、回看、追溯。我最近用 Dify 搭了一个叫 Hindsight 的应用专门做这件事把一段对话、一个项目过程、甚至一份日志丢进去让大模型帮你复盘出问题出在哪、哪些决策当时没看透、下次怎么优化。这篇文章就把我完整的搭建思路、实操步骤和踩过的坑写出来给想自己做“复盘助手”或者“自动回顾工具”的朋友一个参考。1. 项目整体设计与思路拆解1.1 为什么叫 Hindsight它到底解决什么问题先聊点概念。我们平时说的“复盘”本质上就是利用后见之明把已经发生的事重新看一遍。但人脑的复盘有几个天然缺陷第一记忆会美化当时的关键细节容易忘第二信息太分散聊天记录、项目文档、日志散落在各个系统里根本串不起来第三情绪影响判断刚吵完架或者刚上线完看什么都带着滤镜。Hindsight 这个项目想做的就是把这些缺陷交给大模型去补。它不只是一个“总结工具”而是一个带流程的复盘流程输入原材料自动拆分过程、标记关键节点、检索相关背景、识别决策点、给出反思和行动建议。等于你给 AI 一段“发生过的事”它帮你把“当时没看清的”全部列出来。我在设计的时候参考了心理学里的“事后偏差”这个概念——人一旦知道结果就会高估自己当时预判的准确性。Hindsight 正好反过来用既然我们已经知道结果了那就让 AI 用这个“上帝视角”帮我们找出过程里的漏洞而不是让 AI 替我们事后找借口。1.2 为什么选择 Dify 作为搭建基础选 Dify不是因为它最潮而是因为它刚好覆盖了 Hindsight 需要的所有功能同时又没有把复杂度堆到个人开发者头上。Dify 是一个开源的大模型应用开发平台你可以把它理解成“LLM 应用的乐高积木盒”可视化编排 prompt、连接知识库、配置工作流、发布 API全都给你包好了。我最初也考虑过直接用 LangChain 写一套但很快放弃了。原因是复盘类应用太依赖“流程编排”先判断输入类型再决定走哪条处理路线中间还要多次调用模型完成不同子任务。用 LangChain 写这些代码量不小调试还麻烦。Dify 的工作流模式能把这些节点可视化地串起来改流程不用改代码这对快速迭代特别友好。另外 Hindsight 需要一个“记忆”能力它要能记住之前历次复盘的结果方便对比“这次跟上次有什么不同”。Dify 的会话管理加变量存储正好能承担这部分功能。所以整体技术选型就是Dify 做应用框架 一个大模型做推理我用的 GPT 系列 可选的知识库放参考模板。这套组合的好处是后续如果换成国产模型或者本地模型Dify 里换个供应商就行业务逻辑完全不用动。1.3 Hindsight 的核心功能模块拆解按复盘场景我把 Hindsight 拆成五个功能模块这也是整个项目的主干线输入解析把原始材料清洗成结构化文本去掉噪音识别角色和事件时间线。过程分幕按时间或主题把过程切成分段就像给电影分场景。关键节点标定自动标出转折点、决策点、异常点。对比分析结合知识库或历史复盘记录指出“当时漏了什么”。行动建议输出可执行的改进清单而不是空泛的“以后注意”。这五个模块不一定每次都全部跑工作流里做了分支如果输入是聊天记录走对话复盘线如果输入是项目报告走项目复盘线如果输入只是几句话的感想那就直接走轻量总结线。这套分支设计是在实际使用中慢慢加上的一开始把所有输入都丢给同一个 Prompt结果经常出现“用总结聊天记录的方式去总结项目报告”输出变得四不像。2. 核心细节解析与实操要点2.1 Dify 里的应用类型怎么选聊天助手还是工作流这是第一个分岔路。Dify 里创建应用时会问你要做“聊天助手”还是“工作流”。Hindsight 我选了“工作流”作为主应用原因很直接复盘不是一来一回的闲聊它有明确的处理阶段需要把“解析-分析-输出”这几个步骤固定下来。工作流模式能让你用节点控制顺序每一步的输出都是下一步的输入非常适合这种流水线式的任务。而且工作流模式对 Token 的消耗可控。聊天助手每次用户发一句话你要把整个对话历史都塞给模型复盘场景里输入动辄几千字这样搞成本太高。工作流模式里你可以只把当前批次的数据传给模型跑完就结束省掉无意义的上下文累积。当然聊天助手也不是没用。我做了一个简化版 Hindsight Lite用聊天助手方式实现适合用户随手贴一段话进去问“帮我看看这段沟通哪里有问题”。这个轻量版的好处是支持多轮追问比如 AI 说“这里可能缺乏明确反馈”你可以立刻问“那怎么改进才合适”。它的定位就是快速问答而不像主应用那样要产出完整的复盘报告。2.2 Prompt 设计的核心让模型扮演“复盘教练”而非“总结机器人”很多人做复盘工具Prompt 就写一句“请总结这段对话”结果得到的东西只能叫摘要不叫复盘。区别在哪复盘要带立场、带框架、带追问。我在系统提示词里给模型设定了一个角色“你是 Hindsight 复盘教练你的任务是基于完整事实指出过程中被忽视的信号、决策上的盲区、以及可复用的经验而不是复述事件。”同时我给了它几个固定的分析维度目标与结果当时想达成什么最终实际是什么。关键决策过程中做了哪些关键选择依据是什么。信息盲区当时缺少哪些信息这些信息是否可得。执行偏差计划跟实际执行之间的差距。可复用经验下次遇到类似情境哪些做法值得保留。这五个维度会被写进 Pormpt 里作为硬性框架。实测下来有了框架之后模型输出的质量比自由发挥高一截至少不会东扯西扯而且每条建议都能对应回具体的证据点。2.3 工作流节点的关键配置参数Dify 的工作流节点主要有七种常用类型在 Hindsight 里我用了其中五个节点类型在 Hindsight 中的作用关键注意点开始节点接收用户输入的文本设定变量名建议用input_text和input_typeLLM 节点执行分幕、标定、总结等任务配置好模型参数temperature 调到 0.2 以下知识检索节点从历史复盘库中找类似案例控制 TopK 数量别把无关内容带进上下文代码节点做简单的文本切分和格式化建议只做轻量处理复杂的解析交给 LLM条件分支节点根据输入类型走不同处理线判断条件写清楚注意类型匹配结束节点输出最终报告用结构化格式输出方便后续对接除了这些还有变量聚合器和迭代节点我在第一版没用上后来发现当输入是多条聊天记录时需要把每条记录单独处理后重新聚合才引入迭代器。这个后面细说。2.4 让 Hindsight 能“记住”历史知识库与变量复盘最怕的就是“孤立地看单次事件”。如果 Hindsight 完全没记忆每次复盘都是从零开始那它就只能做表面文章。所以给它配了两个记忆渠道第一个渠道是 Dify 的知识库。我把过去写过的复盘报告、团队的复盘模板、一些经典的决策案例整理成文档传进知识库。这样 LLM 在生成复盘时会先做知识检索找到跟当前场景最相似的历史资料再参考里面的用语和结构来输出。这个做法非常有效相当于给模型请了一个“行业顾问”。第二个渠道是对话变量。Dify 的工作流允许定义会话级变量比如review_history每次跑完复盘后把报告摘要存到这个变量里。下一次再运行工作流前置节点会先读取这个变量作为上下文注入给后续的 LLM。这样 Hindsight 多少有了点“连续记忆”。这里有个非常容易踩的坑知识库检索的相似度阈值别设太低。我一开始设了 0.5结果什么鸡毛蒜皮都当相似内容返回把模型都给带偏了。后来调成 0.75 以上返回的内容才基本靠谱。要知道知识检索返回的是“参考素材”不是“标准答案”如果素材跟当前事件关联度不够模型很容易被误导。3. 实操过程与核心环节实现3.1 前期准备模型、数据和环境动手之前先把要用的东西准备好。第一是选模型。Hindsight 的复盘质量跟模型能力强相关复杂文本还是得用 GPT-4 或者 Claude 级别的模型才稳。如果成本敏感可以用 GPT-3.5 或国内的 GLM 系列跑轻量场景。我在 Dify 里申请了多个模型的 API Key在工作流不同的节点上分别配置分幕这类机械任务用便宜模型复盘反思这类高难度任务用强模型。这个“混搭”策略能省将近一半的 Token 费用。第二是准备一批测试数据。我找了三类真实聊天记录片段脱敏后的、一份项目总结文档、一段周会议的录音转文字。这三类的结构差别很大正好用来检验工作流的分支逻辑。第三是在 Dify 控制台里先把“模型供应商”配置好选择 OpenAI API 并填入 Key。Dify 支持自部署我为了数据安全是用 Docker 在自己服务器上跑的社区版功能已经足够安装命令就一行 docker 起容器这里不赘述。3.2 创建工作流主应用一步步配置节点我直接说创建路径Dify 控制台 → 创建应用 → 选择“工作流” → 开始编排。进来后会看到一个可视化的画布左边是节点库右边是节点配置区。第一步配置开始节点。我定义了三个输入字段input_text用户输入的原始复盘材料字符串类型。input_type材料类型选项是conversation、project、note。reference_tag可选的关联标签比如项目名或人名用于知识库过滤。这些字段会在开始节点里以表单形式展示给前端调用者API 调用时也是通过这几个字段传参。第二步加一个条件分支节点。根据input_type的值把流程分成三条线路。如果是note直接走短总结线如果是conversation走详细对话复盘线如果是project走项目复盘线。条件分支节点在 Dify 里配置很简单选“变量”等于“值”就行但要注意拼写大小写必须严格一致。第三步配置主流程节点也就是 LLM 节点。这是整个工作流的核心。我拿对话复盘线路为例展开。先拖一个 LLM 节点进来给它取名“结构化过程分幕”。模型选择 GPT-4otemperature 设成 0.1。上下文里填入input_text系统 Prompt 这么写你是一名过程分析师负责把输入的对话或事件材料按时间顺序拆解为“幕”。每一幕需要包含时间范围如果有、参与角色、事件目标、核心动作、结果状态。请以 JSON 数组输出每个元素包含字段scene_id, title, summary, roles, key_point。输出格式要严格因为下一步要用代码节点来解析。这里我特意限制了 output format让 LLM 只输出 JSON不要加任何解释。第四步用代码节点处理中间结果。Dify 支持 Python 代码节点作用是把 LLM 输出转成结构化数据。我在这个节点里写了简单代码用 json.loads 解析上一步的输出然后按scene_id排序并把长文本按字数切块。要注意Dify 代码节点的运行时间有限制不要在里面做太重的操作比如数据分析否则会超时报错。第五步接第二个 LLM 节点“深度复盘分析”。它接收上一步传过来的分幕数据再结合知识库检索结果生成报告。这个节点的上下文是structured_scenes知识检索节点也作为它的一个前置来源。深度复盘节点的 Prompt 是你是一名复盘教练。以下是按幕划分的过程记录{{scenes}} 请基于这些信息完成复盘 1. 指出每一幕中的目标与结果偏差 2. 识别关键决策点并说明当时可能缺失的信息 3. 找出被忽视的信号或风险点 4. 输出一句话核心结论和三条可执行改进建议。 请用 Markdown 格式输出包含小节标题。为什么要分两步 LLM而不是一个 LLM 把所有事干完因为复盘的质量依赖“过程结构”的清晰度。如果直接把原始文本丢给模型让它总结它容易遗漏细节。先分幕、再复盘的“两阶段分析”是借鉴了电视剧编剧拆戏的方法让模型先理解“发生了什么”再去判断“哪些有问题”。实测下来两阶段的洞察丰富度比一阶段高出很多特别是对长文本效果差别尤其明显。第六步接结束节点。我把最终输出设置成一个结构化 JSON除了复盘报告文本还包括conclusion、suggestions、key_risks这几个字段。这样这个工作流除了能展示报告之外还能被外部系统直接调用拿到字段去入自己的数据库或发通知。3.3 配置知识库检索让参考案例来加持知识库在 Hindsight 里负责提供“历史案例库”。我在 Dify 的“知识库”模块里创建了一个名为 “hindsight-templates” 的库上传了十几篇文档内容包括各类场景的复盘范文、决策模型比如 AAR 事后检视法、沟通分析框架等。然后我在工作流里放了一个“知识检索”节点放在“深度复盘分析”节点前面。检索节点配置了三个参数检索输入把开始节点的reference_tag和input_text拼接成一句话比如“[项目review] 后端服务超时复盘”让检索器知道当前是什么场景。TopK设成 3。太多了模型会看不过来而且无关内容容易干扰。分数阈值设在 0.75低于这个相似度的一律不返回。知识库对 Hindsight 的意义在于“参照系”。没有知识库的复盘容易流于空泛比如模型只会说“建议加强沟通”这种废话。而有了案例库之后它会学着案例里的结构产出类似“建议在时间节点前设置强制 check-point”这样的具体方案专业度明显提升。3.4 发布与 API 接入示例工作流搭好后在右上角点“发布”Dify 就会生成一个 API 端点。然后在“访问 API”页面里拿到 API Key 和 API 地址。Hindsight 我最终是集成到了自己的一个 Slack 机器人里但这里给一个更通用的 Python 调用示例方便你快速理解接口调用方式。import requests import json API_URL https://your-dify-app.example.com/v1/workflows/run API_KEY app-xxxxxx headers { Authorization: fBearer {API_KEY}, Content-Type: application/json, } payload { inputs: { input_text: 昨天线上出了故障我们几个工程是沟通出现了断档排查用了两个小时最后发现是配置更新没同步..., input_type: project, reference_tag: 线上故障复盘 }, response_mode: blocking, user: tester-01 } resp requests.post(API_URL, headersheaders, jsonpayload) data resp.json() # 获取工作流输出 outputs data[data][outputs] print(outputs[report])注意这里response_mode我用了blocking也就是同步等待结果。如果复盘材料很长跑完可能要半分钟甚至更久HTTP 连接容易超时。这时候改成streaming模式用 SSE 流式接收输出会更稳定。我一开始没注意长文本复盘经常报 504后来全改成 streaming 才好。3.5 迭代版本的增强玩法第一版只能处理单段文本。后来我发现真实场景里用户不会把一整篇聊天记录复制粘贴成一段话而是会按消息顺序一条一条传。所以我加了“迭代”节点把开始节点改成支持数组输入遍历每一条消息先做角色识别和清洗再聚合成完整的时间线才交给分幕节点。具体做法是在开始节点定义字段messages类型选择“数组”里面每个元素包含sender、time、content。然后引入一个“迭代”节点循环处理每条消息每个循环体里放一个 LLM 节点做单条摘要。循环结束后再用“变量聚合器”把摘要拼成完整消息序列。这个过程虽然看着复杂但实现起来其实很顺Dify 做了可视化连接不需要手写循环代码。迭代处理还有一个好处单条消息短模型的输入 Token 少响应速度快成本也低。如果直接把几千条消息全部塞进一个 Prompt那 Token 消耗会爆炸而且模型的中段注意力还会退化处理质量变差。4. 常见问题与排查技巧实录4.1 长文本处理Token 超限与上下文丢失Hindsight 早期碰到的头号问题就是材料太长。一个小时的会议转写文本动辄两万字直接用 LLM 节点塞进去直接报 context length exceeded。后来我加了“文本分段”策略在代码节点里按字数切块每块 3000 字左右并保留 20% 的重叠防止上下文被切断。切完块以后对每块独立做分幕摘要再把摘要合并作为下一步完整复盘的基础。这个“分块-摘要-合成”模式本质上是模仿人的阅读方式——先把章节读薄再在脑中进行整体分析。实测下来即使材料有四五万字也能稳定跑完复盘报告的字数依旧能保持在几百上千字并没有明显损失信息。4.2 输出格式不稳定模型偶尔不按 JSON 走我要求分幕节点输出 JSON 数组但大模型不是机器偶尔会在 JSON 前后加上一句“好的这是结果”或者在一个布尔值后面多了个逗号。这就导致后面的代码节点 json.loads 直接报错。应对办法有两个。第一个是“双保险”代码节点里先尝试 json.loads如果失败就用正则把代码块提取出来再解析一次。第二个是在 Prompt 里加上强约束词“只输出 JSON不要输出任何其他内容”并把示例输出写在 Prompt 结尾。即便如此还是要写兜底逻辑。后来我干脆要求模型把 JSON 放在 Markdown 代码块里然后在代码节点里先剥离标记再解析解析成功率基本达到 100%。4.3 知识库检索结果跑偏刚才提到相似度阈值再展开说。Dify 的默认检索是向量检索它看的是语义相似度不是关键词匹配。我传进去的文档里如果有“沟通”“复盘”这些词用户输入一旦也有“沟通”哪怕说的是完全不同的场景它也会把那份文档捞回来。这会让 LLM 被带进错误的参考框架。我的解法是把知识库里的文档做更细的切分每篇文档开头统一加上场景标签比如“应用场景研发故障复盘”“应用场景销售周会复盘”。然后在知识检索节点里设置“查询改写”把reference_tag加在检索请求的前置位置这样向量相似度计算会优先匹配到同标签的内容。标签一致后检索准确率一下子提升了非常多。4.4 复杂场景下 GPU/API 成本问题Hindsight 的复盘是完整的多阶段流程一次完整复盘可能要调用 3 到 5 次大模型接口。如果是高强度的 API 收费模型成本压力很大。我的经验是给不同节点分配模型分幕、清洗、摘要这些机械任务用便宜快速的模型。复盘反思、行动建议这些创造性任务用能力强、贵的模型。在 Dify 的 LLM 节点里每个节点可以单独选择模型所以我做了两套配置。这样总体上质量不掉成本能压到原来的六成左右。另外我加了“缓存”机制对相同的输入哈希在 Dify 外部缓存上次结果命中直接返回不重复跑模型。要知道复盘是个低频操作没必要每次都花全价进行推理。4.5 复盘结果“太正确但没卵用”这是我最想强调的一个坑。模型很容易输出一些正确却没用的废话比如“应加强团队协作”“需提高沟通效率”——这些话放哪都对但解决不了任何问题。Hindsight 的目标是“可执行的回看”必须让每条建议都落到具体动作上。解决办法是在 Prompt 里加入强制约束每条行动建议必须以“谁在什么时间前做什么事预期改善什么指标”的格式输出。比如“责任人后端负责人时间明天下班前动作梳理配置发布清单并加入检查项预期配置类故障排查时间缩短 50%”。有了这个格式约束模型就没有办法输出空话只能去材料里找实打实的人和事。这也是整个 Hindsight 项目里我认为最有价值的一个设计。5. 我个人的一些体会与扩展方向最后说点实际的体验。Hindsight 这个项目最让我意外的是它在“团队管理”场景下受到的欢迎远超“个人效率”场景。你把一段群聊记录交进去Hindsight 输出的复盘不会偏袒任何一方因为它没有情绪没有小组政治只认事实和逻辑。这种“无情感的第三方视角”反而是很多时候人类复盘做不到的。目前我在考虑扩展两个方向一个是用它来做每周自动工作周报的“反向复盘”让 Hindsight 每天记录你的工作日志周末自动对比这周目标和完成度生成偏差报告另一个是把工作流接入企业微信机器人让团队成员直接在对话框里输入关键词就触发复盘输出直接推送到群内。Dify 本身支持 embedding 和外部 API这些扩展其实都是配置层面的事情不需要动底层逻辑。如果你也想做一个类似的工具我的建议是别一上来就追求功能全先把你最痛的一个复盘场景跑通比如只看聊天记录或者只看项目周报。等流程稳定了再慢慢往里加知识库、历史对比、多分支输入。工具这类东西能用起来比什么都强。Hindsight 说到底不是要替你决策它是帮你把“事后才看清的东西”变成“下次行动前的提示”。
返回列表