工作流按内容类型分开而不是抽象成一条通用流水线

**「笔记」和「文章」的后台处理不是同一条流水线换了输入,而是两条不同的业务流水线 —— 只共享底层的任务调度。** 把它们抽象成「统一的 AI 任务」是抽象过头:看起来优雅,实际会丢掉「不同类型该做什么」这个信息。

两条流水线各自要做什么

笔记保存后  → 找相关旧内容 → 检查思考是否全面 → 检查是否已表达过相同观点 → 对比新旧观点变化 → 结果浮到笔记旁
文章到库后  → 生成摘要 → 找相关/相似内容 → 在合适时机浮出

共享的只有「执行引擎」

两条流水线共用的仅是基础设施能力:任务创建、领取、lease 防卡死、失败重试、指数退避、内容版本校验、超时隔离、运行日志。任务记录带 kind(summary / embedding / relation / note_insight)、target(note / clip / feed_entry)、inputVersion、status、attempt。

核心规则:内容版本变了旧任务不能覆盖新内容;同内容同版本同模型不重复生成;单任务失败不中断整批;最多重试三次;调度进程退出后状态仍在数据库里。

边界:工作流不是 Agent

后台工作流是纯工作流 —— 不启动 Agent Harness、不创建会话、不跑 Tool Loop、没有主动对话能力,只按任务记录执行固定步骤。Agent 是另一套主动能力,通过 Skill 去调用工作流提供的查询接口。

反过来,交互式的事不能排进后台工作流:用户问答、润色扩写、确认后的即时反馈必须在请求里实时执行(见 后台任务队列选型)。

相关

  • Agent编排层薄自建优先于重型框架 —— 同族的「别过度抽象」判断
  • 按实际规模选型而不是按方案先进性 —— 抽象层级的成本正比于覆盖组合数
  • 物化结果要按版本失效并增量刷新 —— 这两条流水线产出的结果怎么保鲜
  • 后台任务队列选型 —— 共享的调度层怎么实现
  • 职责要先分家再谈实现 —— 先分清是两条流水线,再谈共享什么