komga-creater/docs/plans/2026-02-28-manga-generator-validation-implementation.md
2026-03-03 17:59:27 +08:00

14 KiB
Raw Permalink Blame History

漫画生成工具可行性验证实施计划

For Claude: REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task.

目标: 验证从小说文本到漫画分镜图片提示词的端到端AI处理流程可行性

架构: 使用Dify工作流串联两个DeepSeek-R1模型节点第一个节点润色小说文本第二个节点生成Markdown格式的分镜提示词

技术栈: Dify本地自部署、DeepSeek-R1 API、JSON DSL工作流配置


准备工作

任务1验证Dify环境就绪

步骤1检查Dify服务状态

# 检查Dify服务是否运行
curl -s http://localhost:3000/api/status || echo "Dify服务未运行"

预期输出: JSON格式的状态信息或错误信息

步骤2确认API访问权限

# 测试Dify API端点
curl -X GET "http://localhost:3000/api/console/api-keys" \
  -H "Authorization: Bearer YOUR_API_KEY"

预期输出: 返回API密钥列表或认证错误

步骤3检查模型提供商配置

  1. 登录Dify管理界面
  2. 导航到 "模型提供商" → "DeepSeek"
  3. 确认已配置有效的API密钥
  4. 测试模型连接性

验证标准: 所有基础服务正常运行


任务2准备DeepSeek-R1模型配置

文件: Dify管理界面配置

步骤1添加DeepSeek模型提供商

  1. 在Dify中进入 "模型提供商"
  2. 添加DeepSeek提供商
  3. 配置:

步骤2创建DeepSeek-R1模型配置

  1. 进入 "模型"
  2. 添加新模型:
    • 模型名称deepseek-r1
    • 提供商DeepSeek
    • 模型IDdeepseek-r1
    • 模式:聊天
    • 最大令牌4096
    • 温度0.7(默认)

步骤3测试模型响应

# 使用Dify API测试模型
curl -X POST "http://localhost:3000/v1/chat-messages" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "inputs": {},
    "query": "测试消息",
    "response_mode": "blocking",
    "conversation_id": "",
    "user": "test-user",
    "model": "deepseek-r1"
  }'

预期输出: 成功的模型响应

验证标准: DeepSeek-R1模型可通过Dify正常调用


任务3导入工作流DSL

文件: workflow/manga-generator-dify-dsl.json(需要创建)

步骤1创建工作流DSL文件

# 创建工作流目录
mkdir -p workflow

# 创建DSL文件
cat > workflow/manga-generator-dify-dsl.json << 'EOF'
{
  "version": "1.0",
  "name": "漫画生成工作流验证",
  "description": "验证小说到漫画分镜提示词的AI处理流程",
  "variables": [
    {
      "variable": "input_novel",
      "value_type": "string",
      "required": true,
      "label": "小说原文",
      "description": "用户输入的小说短段落300-1000字"
    },
    {
      "variable": "edited_text",
      "value_type": "string",
      "required": false,
      "label": "编辑后文本",
      "description": "AI编辑润色后的叙述文本"
    },
    {
      "variable": "storyboard_markdown",
      "value_type": "string",
      "required": false,
      "label": "分镜提示词",
      "description": "Markdown格式的分镜描述和图片提示词"
    }
  ],
  "nodes": [
    {
      "id": "editor_node",
      "type": "llm",
      "name": "小说编辑AI",
      "description": "润色和增强小说文本描述",
      "config": {
        "model": {
          "provider": "deepseek",
          "name": "deepseek-r1",
          "mode": "chat",
          "temperature": 0.7,
          "max_tokens": 2000
        },
        "prompt": {
          "system": "你是一个专业的小说编辑。你的任务是将用户提供的小说段落进行润色和增强,使其更适合转换为视觉分镜。\\n\\n要求\\n1. 保持原有情节和人物设定不变\\n2. 增强场景描述、角色动作和情感表达\\n3. 让文本更具画面感和戏剧张力\\n4. 输出保持中文长度控制在原文本的1.2-1.5倍",
          "user": "请润色以下小说段落,使其更适合视觉化:\\n\\n{{input_novel}}"
        },
        "outputs": {
          "edited_text": "{{llm_response}}"
        }
      }
    },
    {
      "id": "storyboard_node", 
      "type": "llm",
      "name": "分镜AI",
      "description": "将叙述文本转换为分镜提示词",
      "config": {
        "model": {
          "provider": "deepseek",
          "name": "deepseek-r1",
          "mode": "chat",
          "temperature": 0.6,
          "max_tokens": 3000
        },
        "prompt": {
          "system": "你是一个专业的漫画分镜师。请将叙述文本转换为3-5个分镜描述每个分镜包含视觉元素和图片生成提示词。\\n\\n输出格式要求Markdown\\n# 分镜分析\\n\\n## 场景概览\\n[简要描述整体场景]\\n\\n## 分镜详情\\n\\n### 分镜1[标题]\\n**场景描述:** [详细视觉描述]\\n**角色动作:** [主要角色动作]\\n**情感氛围:** [情感色彩]\\n**图片提示词:** [用于图片生成的提示词,包含风格、构图等]\\n\\n### 分镜2[标题]\\n...\\n\\n## 风格建议\\n[推荐的图片生成风格,如:动漫风格、写实插画、水彩等]\\n\\n注意图片提示词要具体、详细包含构图、灯光、风格等要素。",
          "user": "请将以下文本转换为漫画分镜提示词:\\n\\n{{edited_text}}"
        },
        "outputs": {
          "storyboard_markdown": "{{llm_response}}"
        }
      }
    }
  ],
  "edges": [
    {
      "source": "input_novel",
      "sourceHandle": "output",
      "target": "editor_node",
      "targetHandle": "input"
    },
    {
      "source": "editor_node", 
      "sourceHandle": "edited_text",
      "target": "storyboard_node",
      "targetHandle": "edited_text"
    },
    {
      "source": "storyboard_node",
      "sourceHandle": "storyboard_markdown", 
      "target": "output",
      "targetHandle": "input"
    }
  ],
  "outputs": [
    {
      "variable": "storyboard_markdown",
      "label": "分镜提示词",
      "description": "最终生成的Markdown格式分镜提示词"
    }
  ]
}
EOF

步骤2验证DSL文件格式

# 检查JSON格式
python3 -m json.tool workflow/manga-generator-dify-dsl.json > /dev/null && echo "JSON格式正确" || echo "JSON格式错误"

步骤3通过Dify界面导入工作流

  1. 登录Dify控制台
  2. 进入 "工作流" → "创建工作流"
  3. 选择 "导入"
  4. 上传或粘贴DSL内容
  5. 保存工作流为 "漫画生成验证工作流"

验证标准: 工作流成功导入两个LLM节点可见


任务4配置工作流节点参数

步骤1调整编辑节点参数

  1. 在Dify工作流编辑器中打开导入的工作流
  2. 点击 "小说编辑AI" 节点
  3. 确认配置:
    • 模型deepseek-r1
    • 温度0.7
    • 最大令牌2000
    • 系统提示词:已正确设置
    • 用户提示词模板:包含 {{input_novel}} 变量

步骤2调整分镜节点参数

  1. 点击 "分镜AI" 节点
  2. 确认配置:
    • 模型deepseek-r1
    • 温度0.6
    • 最大令牌3000
    • 系统提示词包含完整的Markdown格式要求
    • 用户提示词模板:包含 {{edited_text}} 变量

步骤3验证变量连接

  1. 检查所有边edges连接正确
    • input_noveleditor_node
    • editor_node.edited_textstoryboard_node.edited_text
    • storyboard_node.storyboard_markdownoutput

步骤4保存工作流配置

  1. 点击 "保存"
  2. 发布工作流版本

验证标准: 工作流配置完整,所有节点连接正确


任务5测试工作流执行

测试用例文件: tests/test-inputs.md

步骤1创建测试输入

# 创建测试用例目录
mkdir -p tests

# 创建测试输入文件
cat > tests/test-inputs.md << 'EOF'
## 测试用例1基础场景

输入文本:
李阳推开厚重的木门,月光透过窗户洒在地板上。他看到父亲坐在书桌前,手里拿着一封信。房间里弥漫着淡淡的墨香,父亲的背影显得格外孤独。

预期输出:
1. 编辑节点:润色后的叙述文本(更丰富的视觉和情感描述)
2. 分镜节点3-5个分镜的Markdown描述

## 测试用例2动作场景

输入文本:
王雪快速穿过拥挤的街道,雨水打湿了她的头发。她回头看了一眼,追赶者的影子在路灯下拉长。心跳加速,她躲进了小巷的阴影中。

预期输出:
1. 编辑节点:增强动作节奏感
2. 分镜节点:动态构图的分镜描述
EOF

步骤2执行测试用例1

# 使用Dify API调用工作流
curl -X POST "http://localhost:3000/v1/workflows/run" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "inputs": {
      "input_novel": "李阳推开厚重的木门,月光透过窗户洒在地板上。他看到父亲坐在书桌前,手里拿着一封信。房间里弥漫着淡淡的墨香,父亲的背影显得格外孤独。"
    },
    "response_mode": "blocking",
    "user": "test-user-1"
  }'

预期输出: JSON响应包含 storyboard_markdown 字段

步骤3验证输出格式

检查响应中的 storyboard_markdown 字段:

  1. 是否包含 "# 分镜分析" 标题
  2. 是否包含 "## 场景概览" 部分
  3. 是否包含 "### 分镜1" 结构
  4. 是否包含 "图片提示词:" 字段

步骤4执行测试用例2

重复步骤2-3使用测试用例2的输入文本

验证标准: 两个测试用例都能成功执行输出符合Markdown格式要求


任务6质量评估

评估文件: tests/quality-assessment.md

步骤1创建质量评估标准

cat > tests/quality-assessment.md << 'EOF'
## 质量评估标准

### 编辑节点质量1-5分
1. **画面感增强**:是否增强了视觉描述?
2. **情感表达**:是否增强了情感氛围?
3. **文本流畅性**:润色后是否更流畅自然?
4. **长度控制**是否控制在1.2-1.5倍原长度?

### 分镜节点质量1-5分
1. **分镜数量**是否生成3-5个合理分镜
2. **描述具体性**:场景描述是否具体可视觉化?
3. **提示词质量**:图片提示词是否包含构图、灯光、风格?
4. **格式规范性**是否严格遵循Markdown格式

### 总体评分
- 优秀15-20分
- 良好10-14分  
- 一般5-9分
- 需要改进0-4分
EOF

步骤2人工评估输出质量

  1. 将任务5的输出保存到文件

    # 保存测试用例1输出
    echo '测试用例1输出内容...' > tests/output-test1.md
    
    # 保存测试用例2输出  
    echo '测试用例2输出内容...' > tests/output-test2.md
    
  2. 根据质量评估标准对每个输出打分

  3. 记录评分结果

步骤3识别改进点

  1. 分析低分项目原因
  2. 提出提示词优化建议
  3. 记录需要调整的参数

验证标准: 完成质量评估识别至少3个改进点


任务7性能测试

步骤1测试响应时间

# 记录工作流执行时间
time curl -X POST "http://localhost:3000/v1/workflows/run" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "inputs": {
      "input_novel": "测试文本约100字长度。用于性能测试。需要包含足够的细节让AI能够处理但不要太长以免影响测试速度。"
    },
    "response_mode": "blocking",
    "user": "performance-test"
  }'

预期: 总时间 < 30秒包括两个LLM调用

步骤2测试并发能力可选

# 同时发送3个请求
for i in {1..3}; do
  curl -X POST "http://localhost:3000/v1/workflows/run" \
    -H "Authorization: Bearer YOUR_API_KEY" \
    -H "Content-Type: application/json" \
    -d "{
      \"inputs\": {
        \"input_novel\": \"并发测试文本 ${i}\"
      },
      \"response_mode\": \"blocking\",
      \"user\": \"concurrent-test-${i}\"
    }" &
done
wait

步骤3记录性能指标

  1. 平均响应时间
  2. 成功率
  3. 错误率(如果有)

验证标准: 单个请求响应时间 < 30秒成功率 > 90%


任务8验证结论与报告

报告文件: docs/validation-report.md

步骤1汇总验证结果

cat > docs/validation-report.md << 'EOF'
# 漫画生成工具可行性验证报告

## 验证概述
- **验证时间**2026-02-28
- **验证目标**:测试小说→编辑→分镜→提示词的端到端流程
- **技术栈**Dify + DeepSeek-R1

## 验证结果

### 流程顺畅性 ✅/❌
[描述工作流是否能完整执行]

### 输出质量评估
**编辑节点评分**[X]/20
- 画面感增强:[X]/5
- 情感表达:[X]/5
- 文本流畅性:[X]/5  
- 长度控制:[X]/5

**分镜节点评分**[Y]/20
- 分镜数量:[Y]/5
- 描述具体性:[Y]/5
- 提示词质量:[Y]/5
- 格式规范性:[Y]/5

**总体评分**[总分]/40

### 性能表现
- 平均响应时间:[Z]秒
- 成功率:[A]%
- 并发处理:[B]

## 关键发现

### 成功点
1. [发现的成功点1]
2. [发现的成功点2]

### 问题与改进点
1. [问题1及改进建议]
2. [问题2及改进建议]

## 可行性结论

**结论**[可行/部分可行/不可行]

**理由**
1. [理由1]
2. [理由2]
3. [理由3]

## 下一步建议

### 短期改进(如果继续验证)
1. [建议1]
2. [建议2]

### 长期规划(如果验证成功)
1. [规划1]
2. [规划2]
EOF

步骤2填写验证结果

根据实际测试结果填写报告中的各项评分和数据

步骤3生成最终结论

基于验证结果,给出明确的可行性结论

验证标准: 完成完整的验证报告,包含数据支持和明确结论


执行选项

计划已完成并保存至 docs/plans/2026-02-28-manga-generator-validation-implementation.md

两种执行方式:

1. 子代理驱动(本次会话) - 我分派新的子代理执行每个任务,任务间进行代码审查,快速迭代

2. 并行会话(独立) - 在新工作区开启新会话使用 executing-plans批量执行并设置检查点

选择哪种方式?