# AI 写作弱模型多 Agent 编排需求文档 ## 1. 背景与目标 当前 `open-canvas` 页面右侧的成品展示与编辑体验已经比较成熟,但左侧模型直接生成文章的质量还不稳定。对于内网部署的弱性能大模型,单轮直出通常会出现以下问题: - 结构松散,长文容易跑题 - 素材不足,内容空泛 - 事实依据弱,容易幻觉 - 润色能力有限,语言风格不统一 - 一次生成失败后缺少可控的纠偏机制 因此本次需求的核心目标不是继续优化“单个模型一次写完”,而是在内网用代码编排一个“小型杂志社工作流”,让弱模型通过多角色分工协作,产出明显优于单模型直出的文章质量。 建议的角色分工: - `Agent A 研究员`:负责搜集内网素材、归纳事实、提取观点 - `Agent B 作家`:基于选题、素材和结构写初稿 - `Agent C 严苛编辑`:负责挑错、质检、润色、打回重写 - `Supervisor / Orchestrator`:负责流程调度、状态记录、重试与终止判断 --- ## 2. 本次建设边界 ### 2.1 前端边界 前端继续使用现有 `open-canvas` 页面,不新开第二套编辑器页面。 当前相关入口: - [CanvasResizableLayout.tsx](/F:/react/deeflow-code/deerflow-server-master/frontend-web/src/open-canvas/components/layout/CanvasResizableLayout.tsx) - [CanvasChatPanel.tsx](/F:/react/deeflow-code/deerflow-server-master/frontend-web/src/open-canvas/components/chat/CanvasChatPanel.tsx) - [CanvasArtifactPanel.tsx](/F:/react/deeflow-code/deerflow-server-master/frontend-web/src/open-canvas/components/artifact/CanvasArtifactPanel.tsx) - [CanvasStreamContext.tsx](/F:/react/deeflow-code/deerflow-server-master/frontend-web/src/open-canvas/contexts/CanvasStreamContext.tsx) - [runs.ts](/F:/react/deeflow-code/deerflow-server-master/frontend-web/src/open-canvas/api/runs.ts) 前端本期只做以下增强: - 在左侧聊天区增加“写作工作流模式” - 让用户能看到多 Agent 阶段进度,而不是只看到最终回答 - 支持结构化输入:主题、体裁、目标读者、篇幅、语气、参考资料、禁写项 - 支持查看中间产物:提纲、素材卡片、初稿、编辑意见、终稿 - 支持人工介入:确认提纲、确认初稿、接受编辑建议、手动重跑某一步 ### 2.2 后端边界 后端必须单开新路线,不影响其他同事当前功能开发。 建议原则: - 不直接改现有 DeerFlow 主流程 - 不把多 Agent 逻辑硬塞进当前通用对话链路 - 以独立服务或独立模块形式建设 - 通过清晰 API 与当前前端页面对接 推荐落地位置: - 基于仓库中的 `offline-backend-20260512` 单独开一条 `ai-writing-orchestrator` 路线 - 或在后端新建独立目录,例如 `offline-backend-20260512/apps/ai_writing_orchestrator` --- ## 3. 为什么多 Agent 对弱模型更合适 弱模型最怕“一个 prompt 做完所有事”,因为这要求模型同时完成: - 选题理解 - 信息检索 - 信息筛选 - 结构规划 - 长文写作 - 自我校验 - 风格润色 把这些任务拆开后,每个 Agent 只处理一个更短、更清晰、更容易被弱模型完成的子任务,通常会带来以下收益: - 降低单次上下文复杂度 - 降低一次性长输出失败率 - 把“写得不好”变成“某一步做得不好”,便于重试 - 可以在关键节点插入规则校验与人工确认 - 可以用程序补足模型短板,而不是完全依赖模型智力 这套方案的本质不是“让模型变聪明”,而是“让系统更会组织模型工作”。 --- ## 4. 可借鉴的开源项目 以下项目适合借鉴,但不建议整套照搬。建议以“借鉴状态机、角色协作、阶段拆分、重试与审稿机制”为主。 ### 4.1 第一优先级:LangGraph 推荐原因: - 天然适合把写作流程建模成状态图 - 支持多步骤、条件分支、重试、人工介入 - 便于把“研究 -> 提纲 -> 初稿 -> 评审 -> 重写”固化成可控流程 - 对“弱模型 + 强流程控制”很友好 可借鉴点: - `StateGraph` 的状态驱动编排 - 每一步单独定义输入、输出、失败处理 - 可视化地表达“通过 / 打回 / 重试 / 终止” 参考: - [langchain-ai/langgraph](https://github.com/langchain-ai/langgraph) - [langgraph supervisor pattern](https://github.com/langchain-ai/langgraph-supervisor-py) ### 4.2 第二优先级:STORM 推荐原因: - 它本身就是“研究 + 提纲 + 成文 + 打磨”的长文系统 - 对“先研究后写作”的思路非常契合 - 很适合借鉴其“问题驱动研究”和“分阶段生成”的思想 根据其 GitHub README,STORM 将长文生成拆成两个大阶段:先研究并产出提纲,再基于提纲与资料写长文;其引擎进一步拆成知识整理、提纲生成、正文生成、文章润色四个模块。 这和我们的目标高度一致,尤其适合借鉴: - 提纲先行 - 素材引用先行 - 分模块写作 - 后置润色 参考: - [stanford-oval/storm](https://github.com/stanford-oval/storm) ### 4.3 第三优先级:Deep Research Agent 推荐原因: - 明确支持本地模型与云模型混用 - 已经包含研究、写作、质量校验、缓存、重试等能力 - 很适合借鉴“研究阶段如何约束弱模型” 根据其 README,这个项目采用四个专职 Agent,并且带有可信度评分、质量验证、重试逻辑、缓存和 checkpoint。 特别适合借鉴: - 素材缓存 - 分阶段质量评分 - 节点失败重试 - 研究结果结构化存储 参考: - [tarun7r/deep-research-agent](https://github.com/tarun7r/deep-research-agent) ### 4.4 可选借鉴:CrewAI 推荐原因: - 角色扮演表达自然 - 写“研究员 / 作家 / 编辑”这种协作关系很直观 - Flow + Crew 的组织方式适合做 demo 和快速验证 不建议作为首选底座的原因: - 更偏“Agent 角色编排体验” - 若要做企业内网稳定落地,状态管理和流程可控性通常不如 LangGraph 路线清晰 适合借鉴: - 角色定义写法 - Task 模板 - 多角色协作 prompt 结构 参考: - [crewAIInc/crewAI](https://github.com/crewAIInc/crewAI) ### 4.5 不建议新项目优先采用:AutoGen 原因: - 截至最近公开信息,`microsoft/autogen` 已进入 maintenance mode - 官方建议新项目优先采用 `Microsoft Agent Framework` 如果要借鉴,只建议借鉴早期多 Agent 对话模式,不建议作为本项目主框架。 参考: - [microsoft/autogen](https://github.com/microsoft/autogen) - [microsoft/agent-framework](https://github.com/microsoft/agent-framework) ### 4.6 结论 综合本项目需求,建议技术选型优先级如下: 1. `LangGraph` 作为主编排框架 2. `STORM` 借鉴研究-提纲-成文-润色的模块划分 3. `Deep Research Agent` 借鉴缓存、评分、重试、可观测性 4. `CrewAI` 借鉴角色 prompt 设计与任务模板 --- ## 5. 目标产品形态 用户在当前 `open-canvas` 页面中,不再只是“向模型提问写文章”,而是启动一个可视化的写作流水线。 理想交互流程: 1. 用户输入主题、用途、风格、读者、篇幅要求 2. 系统先进入“研究阶段” 3. 系统给出资料卡片与候选提纲 4. 用户确认提纲或调整 5. 系统生成初稿 6. 严苛编辑给出问题清单 7. 系统自动重写问题段落 8. 系统输出终稿到右侧编辑区 9. 用户可继续局部改写、扩写、精简 核心体验目标: - 左侧像“编辑部工作台” - 右侧像“成文编辑器” - 用户知道系统现在进行到哪一步 - 用户可以在关键节点接管,而不是只能等待最终结果 --- ## 6. 多 Agent 流程设计 ## 6.1 建议的最小可用流程 MVP 第一版不要一上来做很复杂,建议先做 4 步闭环: 1. `Research` - 输入:主题、用户要求、内网资料源 - 输出:素材卡片列表、可引用事实列表、风险点列表 2. `Outline` - 输入:用户要求 + 素材卡片 - 输出:结构化提纲 3. `Draft` - 输入:提纲 + 素材卡片 - 输出:初稿 4. `ReviewAndRewrite` - 输入:初稿 + 用户要求 + 素材卡片 - 输出:问题清单、改写稿、终稿 MVP 终止条件: - 编辑评分达标则结束 - 不达标最多重写 2 次 - 超过次数则返回“需要人工介入” ## 6.2 第二阶段增强流程 在 MVP 跑通后,再增加: - `Planner`:根据文章类型动态规划流程 - `SectionWriter`:按章节分别写作,避免长文崩坏 - `FactChecker`:逐段核对素材来源 - `StyleEditor`:统一语气、标题风格、句式节奏 - `ComplianceReviewer`:内网场景下做敏感词、保密、术语规范检查 ## 6.3 建议的状态机 建议将流程状态固定为: - `idle` - `collecting_materials` - `generating_outline` - `await_outline_confirmation` - `writing_draft` - `reviewing_draft` - `rewriting_draft` - `completed` - `failed` - `human_intervention_required` 这样前端和后端都可以围绕统一状态通信。 --- ## 7. Agent 角色定义建议 ## 7.1 Agent A 研究员 职责: - 搜集内网知识库、文档库、FAQ、历史稿件中的相关信息 - 输出结构化素材,而不是长篇自然语言 - 对每条素材标注来源、可信度、适用角度 输出格式建议: - `facts[]` - `quotes[]` - `examples[]` - `risks[]` - `source_refs[]` 约束建议: - 禁止直接生成整篇文章 - 不做风格化表达 - 每条结论必须可回溯到来源 ## 7.2 Agent B 作家 职责: - 严格基于提纲和素材写稿 - 按章节写,而不是一次写完整篇 - 对每段附带素材引用 ID,便于后续审核 约束建议: - 无素材不发挥 - 每段只服务一个小节目标 - 段落长度控制 - 输出结构化草稿数据,而不仅是纯文本 ## 7.3 Agent C 严苛编辑 职责: - 检查逻辑跳跃、素材不足、事实不稳、表述空泛、风格不统一 - 输出明确的“问题清单”和“改写指令” - 必要时打回指定章节,而不是整篇推翻 输出格式建议: - `issues[]` - `severity` - `rewrite_instructions[]` - `accept/reject` 编辑原则建议: - 优先挑事实问题,再挑结构问题,最后才是文风问题 - 问题描述必须可执行,不能只说“写得不够好” ## 7.4 Supervisor 职责: - 负责流程启动、状态流转、失败重试、记录日志 - 判断是否需要回到上一步 - 控制最大重试次数 - 对外提供统一 API 与流式事件 --- ## 8. 前端需求 ## 8.1 保持当前页面结构不变 继续沿用当前左右布局: - 左侧:聊天 + 流程进度 + 中间产物 - 右侧:最终文章编辑与局部 AI 改写 不建议再复制一套新页面,以免造成维护分叉。 ## 8.2 左侧新增 UI 模块 建议在 `CanvasChatPanel` 基础上新增: - 写作任务表单 - 工作流阶段时间线 - Agent 执行日志面板 - 中间产物抽屉 - 人工确认卡片 建议新增的前端概念: - `workflowMode`: `chat | writing_pipeline` - `workflowStage` - `workflowRunId` - `workflowEvents[]` - `workflowArtifacts[]` ## 8.3 需要展示的中间产物 至少支持展示: - 素材卡片 - 提纲 - 初稿 - 编辑问题单 - 重写结果 - 最终定稿 这些内容建议不仅显示在消息区,也保存到右侧可选版本中,便于回看。 ## 8.4 人工介入节点 至少提供两个确认点: - 提纲确认 - 初稿确认或编辑后重跑 后续可扩展: - 指定重写某个章节 - 锁定某段不允许再改 - 替换某条素材后重新生成 --- ## 9. 后端需求 ## 9.1 架构原则 后端新路线必须满足: - 与现有通用对话链路解耦 - 与现有 Agent 运行时解耦 - 独立维护 Prompt、状态机、数据结构 - 可以单独部署、单独回滚、单独压测 ## 9.2 推荐模块划分 建议后端拆分为以下模块: - `workflow_orchestrator` - `agent_registry` - `material_retriever` - `outline_generator` - `draft_writer` - `editor_reviewer` - `rewrite_engine` - `workflow_store` - `stream_event_adapter` ## 9.3 API 建议 建议最小 API: - `POST /api/ai-writing/workflows` - 创建写作任务 - `POST /api/ai-writing/workflows/{id}/start` - 启动流程 - `GET /api/ai-writing/workflows/{id}` - 查询当前状态 - `GET /api/ai-writing/workflows/{id}/events` - 获取事件流或轮询事件 - `POST /api/ai-writing/workflows/{id}/confirm-outline` - 用户确认提纲 - `POST /api/ai-writing/workflows/{id}/rewrite-section` - 指定章节重写 - `POST /api/ai-writing/workflows/{id}/approve-final` - 确认终稿 ## 9.4 流式事件建议 为了与当前 `CanvasStreamContext` 风格兼容,建议后端输出结构化事件流,例如: - `workflow_started` - `stage_changed` - `agent_started` - `agent_output_chunk` - `artifact_generated` - `human_confirmation_required` - `retry_scheduled` - `workflow_completed` - `workflow_failed` 前端只要订阅事件,就能把左侧工作台做出来。 --- ## 10. 弱模型优化策略 这是本项目成功的关键,不能只靠“多 Agent”这四个字。 ## 10.1 强约束输出格式 每个 Agent 尽量输出 JSON 或结构化对象,不要自由发挥。 原因: - 便于程序消费 - 便于后续 Agent 接续 - 便于失败重试 - 便于质量评估 ## 10.2 长文拆成章节生成 不要让弱模型一次生成整篇长文,建议: - 先出提纲 - 再按章节逐段写 - 最后统一润色 ## 10.3 把检索和写作分离 研究员只负责找资料,作家只负责组织表达。不要让写作 Agent 同时去“边搜边编”。 ## 10.4 程序兜底而不是模型兜底 程序需要承担: - 去重 - 引用格式化 - 章节拼接 - 长度控制 - 评分阈值判断 - 重试路由 ## 10.5 小步快跑、失败可回退 每步都要能独立失败、独立重试、独立回放。 ## 10.6 引入可量化评分 编辑 Agent 输出不能只是一段文字,建议给出评分维度: - 相关性 - 事实性 - 结构完整度 - 语言流畅度 - 风格一致性 系统据此决定是否进入下一步。 --- ## 11. 分阶段实施计划 ## Phase 1:需求冻结与技术验证 目标: - 确认文章类型范围 - 确认内网资料来源 - 选定主框架 - 跑通最小多 Agent demo 交付物: - 技术选型说明 - 角色与状态机设计 - 1 个主题的端到端 demo 验收标准: - 弱模型可完成“研究 -> 提纲 -> 初稿 -> 编辑 -> 重写”闭环 ## Phase 2:后端新路线搭建 目标: - 建立独立 orchestrator - 建立 workflow state store - 建立事件流输出 - 建立可配置 prompt 模板 交付物: - 独立服务目录 - 基础 API - 状态机运行骨架 验收标准: - 不依赖现有主流程改造即可独立跑通 ## Phase 3:前端接入当前页面 目标: - 在 `CanvasChatPanel` 接入工作流模式 - 增加阶段展示与人工确认 - 中间产物可视化 交付物: - 左侧工作流时间线 - 中间产物展示面板 - 流程控制按钮 验收标准: - 用户可以在当前页面完成一次全流程写作 ## Phase 4:质量优化 目标: - 强化素材检索质量 - 提高提纲质量 - 引入章节级重写 - 引入评分与回退机制 交付物: - 质量评估规则 - 重试策略 - Prompt 调优包 验收标准: - 弱模型效果明显优于单轮直出 ## Phase 5:生产化 目标: - 加缓存 - 加日志 - 加监控 - 加失败告警 - 加审计记录 交付物: - 可观测性方案 - 运行日志与回放 - 配置中心或 prompt 管理机制 验收标准: - 可长期维护并可定位问题 --- ## 12. 团队协作与隔离方案 为了不影响其他同事,建议采用以下协作原则: - 新后端目录独立开发 - 新接口使用独立路由前缀 - 前端只在 `open-canvas` 内增量开发 - 不修改现有公共线程协议,必要时增加新事件类型 - Prompt、Agent 配置、评分规则独立存放 推荐分工: - 前端 1 人:负责左侧工作流 UI 与右侧版本接入 - 后端 1-2 人:负责 orchestrator、Agent 执行、事件流 - 算法/Prompt 1 人:负责角色 prompt、评分规则、失败样本调优 --- ## 13. 风险与规避 ### 风险 1:Agent 太多,成本和耗时暴涨 规避: - MVP 只保留 3 个业务 Agent + 1 个 Supervisor - 长文按章节写,失败只重写局部 ### 风险 2:弱模型在自由对话场景中失控 规避: - 全流程结构化 - 每步只做一件事 - 强约束输入输出格式 ### 风险 3:内网检索质量不足,导致垃圾进垃圾出 规避: - 先把资料源治理好 - 对素材做来源、可信度、去重处理 ### 风险 4:前后端协议频繁变化影响联调 规避: - 先定义事件模型和 artifact 模型 - 先 mock 数据,再并行开发 ### 风险 5:影响现有功能稳定性 规避: - 新路线、新接口、新状态机 - 不侵入现有主链路 --- ## 14. 推荐结论 本项目推荐的总体策略: 1. 前端继续基于当前 `open-canvas` 页面开发,不复制新页面 2. 后端单独开 `ai-writing-orchestrator` 新路线,避免影响现有同事 3. 主框架优先采用 `LangGraph` 4. 流程设计借鉴 `STORM` 5. 质量控制借鉴 `Deep Research Agent` 6. 角色设计与任务模板可参考 `CrewAI` 7. 第一版只做 4 步 MVP:研究、提纲、初稿、编辑重写 一句话总结: 不是继续“调一个更强的 prompt”,而是把弱模型放进一个可控的编辑部流水线,让系统帮它把复杂写作拆开完成。 --- ## 15. 参考链接 - [LangGraph](https://github.com/langchain-ai/langgraph) - [LangGraph Supervisor](https://github.com/langchain-ai/langgraph-supervisor-py) - [STORM](https://github.com/stanford-oval/storm) - [Deep Research Agent](https://github.com/tarun7r/deep-research-agent) - [CrewAI](https://github.com/crewAIInc/crewAI) - [Microsoft Agent Framework](https://github.com/microsoft/agent-framework) - [AutoGen](https://github.com/microsoft/autogen)