Skip to content

工作流迁移路线图

现有 workflow 清单、迁移目标、分阶段实施计划

文档信息

属性
版本v1.0
创建日期2024-12-14
状态设计完成,待实施
目标明确每个 workflow 的迁移目标和优先级

一、现有工作流清单

1.1 总览

基于 WorkflowRegistry.jsmanifest.json 分析,当前系统共有 19 个 已注册工作流。

统计维度数量
策略类1
爆款复刻类1
知识/内容生成类6
音乐/MV类3
运营/分发类3
优化/辅助类3
长视频类2
合计19

1.2 详细工作流清单

#workflow_id名称分类复杂度涉及 Agentn8n 集成
1project_diagnosis_workflow🎯 起号项目诊断strategystrategy
2healing_night_mv🌃 治愈系深夜 MVviralwriting, music, visual, video
3knowledge_explainer📚 知识解说contentwriting, visual, video
4content_repurposing🐟 一鱼多吃·全平台分发opswriting, visualrepurpose_multichannel
5daily_inspiration✨ 每日灵感opswriting, visual
6product_showcase📦 产品种草contentwriting, visual, music, video
7local_store_review🏪 本地探店contentwriting, visual, video
8lyric_storybook📖 歌词故事书musicwriting, visual, video
9music_video_creation🎵 歌词→Suno→MVmusicwriting, music, visual, videosuno_mv_stack
10voiceover_video🎤 口播脚本→视频contentwriting, visual, videovoiceover_auto_render
11social_content📱 社交内容opswriting, visual
12song_cover🎙️ 歌曲翻唱musicwriting, music, visual
13viral_title_optimizer🔥 爆款标题优化utilitywriting
14long_video_repurpose📺 长视频拆条longformwriting, video
15seo_blog_post📝 SEO 博客文章contentwriting, visual
16youtube_script_longform🎬 YouTube 长视频脚本longformwriting, visual, video
17smart_assembly_workflow🛠️ 智能合成utilitywriting, video
18content_plan_workflow📅 内容规划strategystrategy, writing
19quick_topic_suggest💡 快速选题utilitywriting

二、迁移目标映射

2.1 迁移目标定义

目标说明适用场景
Node (保留)继续使用现有 WorkflowEngine.js简单线性链路、业务逻辑重、改造成本高
LangGraph迁移到 langgraph-runner多 Agent 协作、需要反思/回溯、复杂状态流转
n8n交给 n8n 编排定时触发、跨系统集成、异步回调
Flowise改为 Flowise Chatflow对话式交互、快速迭代 prompt

2.2 逐条迁移标注

#workflow_id迁移目标优先级原因说明
1project_diagnosis_workflowLangGraphP2策略类,需要多轮推理、可能引入反思
2healing_night_mvLangGraphP2多 Agent 协作(4 个),状态流转复杂
3knowledge_explainerLangGraphP23 个 Agent,可能需要重试/回溯
4content_repurposingn8nP1已有 n8n 集成,适合跨平台分发
5daily_inspirationFlowiseP3简单推荐,适合对话式交互
6product_showcaseLangGraphP24 个 Agent,复杂链路
7local_store_reviewLangGraphP23 个 Agent,需要工具调用
8lyric_storybookLangGraphP23 个 Agent,创意生成
9music_video_creationn8n + LangGraphP1已有 n8n 集成,Suno 异步回调
10voiceover_videon8n + LangGraphP1核心工作流,已有 n8n 集成
11social_contentNode (保留)P3简单链路,改造收益低
12song_coverLangGraphP2音乐类,需要创意生成
13viral_title_optimizerNode (保留)P3单 Agent,逻辑简单
14long_video_repurposeLangGraphP2长内容处理,需要分段
15seo_blog_postNode (保留)P3成熟链路,改造成本高
16youtube_script_longformLangGraphP23 个 Agent,长脚本生成
17smart_assembly_workflowNode (保留)P3工具类,直接调用
18content_plan_workflowLangGraphP1策略类核心,需要多轮规划
19quick_topic_suggestFlowiseP3简单推荐,对话式更友好

2.3 迁移目标统计

                    迁移目标分布
    ┌──────────────────────────────────────────┐
    │                                          │
    │  ███████████████████████████ LangGraph   │  11 个 (58%)
    │  ████████████ n8n / n8n+LangGraph        │   4 个 (21%)
    │  █████ Node (保留)                        │   2 个 (11%)
    │  ███ Flowise                             │   2 个 (10%)
    │                                          │
    └──────────────────────────────────────────┘

三、分阶段实施计划

3.1 阶段概览

    时间线
    ────────────────────────────────────────────────────────►
    
    P0 设计文档      P1 n8n接管调度      P2 LangGraph迁移      P3 Flowise灵感
    ▼                ▼                   ▼                      ▼
    ┌────────┐       ┌────────────┐      ┌──────────────┐       ┌───────────┐
    │ 本次   │       │ 3-7 天     │      │ 1-2 周       │       │ 持续迭代  │
    │ 交付   │       │            │      │              │       │           │
    │        │       │            │      │              │       │           │
    │ 3份    │       │ scheduler  │      │ 选1条核心    │       │ 灵感空间  │
    │ 文档   │       │ 外移n8n    │      │ workflow试点 │       │ 策略对话  │
    └────────┘       └────────────┘      └──────────────┘       └───────────┘

3.2 P0 阶段(本次交付)- 设计文档

目标:完成架构设计,明确边界和接口

交付物

  • [x] KKMUSIC_ARCHITECTURE_BLUEPRINT.md - 整体架构蓝图
  • [x] UNIFIED_RUN_JOB_CONTRACT.md - 统一接口规范
  • [x] WORKFLOW_MIGRATION_ROADMAP.md - 迁移路线(本文档)

验收标准

  • 文档完整,包含分层图、边界表、接口规范
  • 每个 workflow 都有明确的迁移目标标注
  • 不改动任何现有代码

3.3 P1 阶段(3-7 天)- n8n 接管定时调度

目标:把 PlanSchedulerService 的定时逻辑迁移到 n8n

涉及工作流

workflow_id当前状态P1 目标
voiceover_videoNode setInterval 触发n8n Cron → Node API
music_video_creationNode setInterval 触发n8n Cron → Node API
content_repurposing手动触发n8n Webhook
content_plan_workflowNode setInterval 触发n8n Cron → Node API

核心改动

3.3.1 Node 侧新增 API

javascript
// routes/scheduler.js

// 获取待执行任务列表(供 n8n 调用)
router.get('/api/scheduler/pending-tasks', authenticateToken, async (req, res) => {
  // 1. 查询所有启用自动执行的项目
  // 2. 检查日历、计划,返回需要触发的任务
  // 返回: { projects: [...], tasks: [{ workflow_id, project_id, inputs }] }
});

// 触发单个任务执行
router.post('/api/scheduler/trigger', authenticateToken, async (req, res) => {
  const { workflow_id, project_id, inputs, trigger_source } = req.body;
  // 调用 OrchestratorService.run()
  // 返回: { run_id, status }
});

3.3.2 n8n 工作流配置

json
// n8n workflow: plan_scheduler
{
  "name": "Plan Scheduler (每15分钟)",
  "nodes": [
    {
      "name": "Cron",
      "type": "n8n-nodes-base.cron",
      "parameters": {
        "rule": "*/15 * * * *"
      }
    },
    {
      "name": "Get Pending Tasks",
      "type": "n8n-nodes-base.httpRequest",
      "parameters": {
        "method": "GET",
        "url": "http://node-api:3001/api/scheduler/pending-tasks",
        "authentication": "headerAuth"
      }
    },
    {
      "name": "Loop Tasks",
      "type": "n8n-nodes-base.splitInBatches",
      "parameters": {
        "batchSize": 1
      }
    },
    {
      "name": "Trigger Task",
      "type": "n8n-nodes-base.httpRequest",
      "parameters": {
        "method": "POST",
        "url": "http://node-api:3001/api/scheduler/trigger",
        "body": "={{ JSON.stringify($json) }}"
      }
    }
  ]
}

3.3.3 PlanSchedulerService 精简

javascript
// services/workflow/PlanSchedulerService.js

class PlanSchedulerService {
  // 删除或注释 startTicking()
  // 保留 getPendingTasks() 供 API 调用
  // 保留 triggerWorkflow() 供 API 调用
  
  async getPendingTasks() {
    // 原 tick() 中的任务查询逻辑
  }
  
  async triggerWorkflow(task) {
    // 原 tick() 中的触发逻辑
  }
}

验收标准

  • n8n 能每 15 分钟自动触发计划任务
  • Node 不再使用 setInterval 轮询
  • 前端无感知,API 入口不变

3.4 P2 阶段(1-2 周)- LangGraph 接管 AI 工作流

目标:选择 1 条核心工作流,完成 LangGraph 迁移试点

推荐试点project_diagnosis_workflow

选择理由
✅ 策略类工作流,逻辑相对独立
✅ 只有 2 个步骤,复杂度适中
✅ 可能需要引入反思机制
✅ 对用户影响可控(非核心生产链路)

核心改动

3.4.1 新建 langgraph-runner 服务

langgraph-runner/
├── app/
│   ├── main.py              # FastAPI 入口
│   ├── config.py            # 配置
│   ├── graphs/
│   │   └── diagnosis_graph.py   # 诊断工作流 StateGraph
│   ├── agents/
│   │   └── strategy_agent.py    # 策略 Agent
│   └── tools/
│       └── node_api.py          # 调用 Node API 的 Tool
├── requirements.txt
└── Dockerfile

3.4.2 诊断工作流 StateGraph

python
# graphs/diagnosis_graph.py

from langgraph.graph import StateGraph, END
from typing import TypedDict

class DiagnosisState(TypedDict):
    # 输入
    creator_profile: dict
    goals: list
    main_platforms: list
    # 中间状态
    diagnosis_result: dict
    # 输出
    positioning_options: list
    errors: list

def build_diagnosis_graph():
    graph = StateGraph(DiagnosisState)
    
    # 添加节点
    graph.add_node("diagnose", diagnose_project)
    graph.add_node("position", generate_positioning)
    graph.add_node("reflect", maybe_reflect)  # 可选反思
    
    # 添加边
    graph.add_edge("diagnose", "position")
    graph.add_conditional_edges(
        "position",
        should_reflect,
        {
            True: "reflect",
            False: END
        }
    )
    graph.add_edge("reflect", "position")
    
    graph.set_entry_point("diagnose")
    
    return graph.compile()

3.4.3 Node 侧路由逻辑

javascript
// services/workflow/WorkflowService.js

async function startWorkflow(workflowId, inputs, context) {
  const workflow = registry.get(workflowId);
  
  // 根据 engine 字段路由
  switch (workflow.engine) {
    case 'langgraph':
      return await langGraphClient.run(workflowId, inputs, context);
    case 'n8n':
      return await n8nService.trigger(workflow.n8n_workflow, inputs);
    case 'node':
    default:
      return await workflowEngine.run(workflowId, inputs, context);
  }
}

3.4.4 manifest.json 扩展

json
[
  {
    "id": "project_diagnosis_workflow",
    "engine": "langgraph",           // 新增字段
    "langgraph_graph": "diagnosis",  // 新增字段
    // ... 其他字段保持不变
  },
  {
    "id": "voiceover_video",
    "engine": "node",                // 保留原有引擎
    // ...
  }
]

验收标准

  • langgraph-runner 服务正常运行
  • project_diagnosis_workflow 完整走通
  • Trace 数据正确写入 Task 表
  • 错误能正确回调并处理

3.5 P3 阶段(持续迭代)- Flowise 灵感空间

目标:把灵感检索、策略对话沉淀到 Flowise

涉及工作流

workflow_id改造方向
daily_inspiration改为 Flowise Chatflow
quick_topic_suggest改为 Flowise Chatflow

核心改动

3.5.1 Flowise Chatflow 配置

  • 创建 inspiration_qa Chatflow

    • 接入向量数据库(语料/案例)
    • 配置 Retrieval + LLM Chain
    • 输出结构化推荐结果
  • 创建 strategy_chat Chatflow

    • 接入项目上下文
    • 支持多轮对话
    • 输出策略建议

3.5.2 FlowiseProxyService 增强

javascript
// services/FlowiseProxyService.js

class FlowiseProxyService {
  async predict(chatflowId, question, projectContext) {
    // 1. 查询项目信息
    const project = await Project.findByPk(projectContext.project_id);
    
    // 2. 拼装上下文
    const overrideConfig = {
      projectName: project.name,
      platforms: project.meta?.platforms,
      positioning: project.meta?.positioning,
      recentContents: await this.getRecentContents(project.id)
    };
    
    // 3. 调用 Flowise
    const response = await axios.post(
      `${FLOWISE_URL}/api/v1/prediction/${chatflowId}`,
      { question, overrideConfig }
    );
    
    return response.data;
  }
}

验收标准

  • 灵感空间能正常对话
  • 返回结果包含相关语料引用
  • 对话历史正确维护

四、风险与应对

4.1 风险矩阵

风险可能性影响应对策略
LangGraph 学习曲线陡峭先做小规模试点,积累经验
n8n 集群不稳定设置告警,保留 Node 降级
数据一致性问题Run/Job 状态统一写入 Task 表
迁移期间服务中断灰度发布,新旧并行

4.2 回滚策略

每个 workflow 的迁移都应支持回滚:

1. manifest.json 中 engine 字段改回 "node"
2. 重启服务,流量回到 WorkflowEngine
3. 无需代码修改

五、依赖与环境

5.1 新增服务

服务技术栈端口说明
langgraph-runnerPython 3.11 + FastAPI8000LangGraph 运行时

5.2 依赖版本

# langgraph-runner/requirements.txt
langgraph>=0.0.40
langchain>=0.1.0
langchain-openai>=0.0.5
fastapi>=0.109.0
uvicorn>=0.27.0
httpx>=0.26.0
pydantic>=2.5.0

5.3 环境变量

env
# langgraph-runner
OPENAI_API_KEY=sk-xxx
NODE_API_URL=http://localhost:3001
LANGSMITH_API_KEY=xxx  # 可选,用于 trace

六、附录

6.1 现有代码参考

文件说明
backend/src/workflows/manifest.json工作流清单
backend/src/services/workflow/WorkflowEngine.js现有引擎
backend/src/services/workflow/WorkflowRegistry.js工作流注册表
backend/src/services/workflow/OrchestratorService.js编排服务
backend/src/services/workflow/PlanSchedulerService.js计划调度
backend/src/services/n8nService.jsn8n 集成
backend/src/services/FlowiseProxyService.jsFlowise 代理

6.2 相关文档


文档维护者:一刻工坊技术团队
最后更新:2024-12-14

© 2024-2025 趣美丽 QuMeiLi · Powered by 刻流星引擎 KeLiuXing