# 漫画生成工具可行性验证实施计划 > **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服务状态** ```bash # 检查Dify服务是否运行 curl -s http://localhost:3000/api/status || echo "Dify服务未运行" ``` **预期输出:** JSON格式的状态信息或错误信息 **步骤2:确认API访问权限** ```bash # 测试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. 配置: - 提供商名称:DeepSeek - API密钥:你的DeepSeek API密钥 - 端点:https://api.deepseek.com **步骤2:创建DeepSeek-R1模型配置** 1. 进入 "模型" 2. 添加新模型: - 模型名称:deepseek-r1 - 提供商:DeepSeek - 模型ID:deepseek-r1 - 模式:聊天 - 最大令牌:4096 - 温度:0.7(默认) **步骤3:测试模型响应** ```bash # 使用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文件** ```bash # 创建工作流目录 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文件格式** ```bash # 检查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_novel` → `editor_node` - `editor_node.edited_text` → `storyboard_node.edited_text` - `storyboard_node.storyboard_markdown` → `output` **步骤4:保存工作流配置** 1. 点击 "保存" 2. 发布工作流版本 **验证标准:** 工作流配置完整,所有节点连接正确 --- ### 任务5:测试工作流执行 **测试用例文件:** `tests/test-inputs.md` **步骤1:创建测试输入** ```bash # 创建测试用例目录 mkdir -p tests # 创建测试输入文件 cat > tests/test-inputs.md << 'EOF' ## 测试用例1:基础场景 输入文本: 李阳推开厚重的木门,月光透过窗户洒在地板上。他看到父亲坐在书桌前,手里拿着一封信。房间里弥漫着淡淡的墨香,父亲的背影显得格外孤独。 预期输出: 1. 编辑节点:润色后的叙述文本(更丰富的视觉和情感描述) 2. 分镜节点:3-5个分镜的Markdown描述 ## 测试用例2:动作场景 输入文本: 王雪快速穿过拥挤的街道,雨水打湿了她的头发。她回头看了一眼,追赶者的影子在路灯下拉长。心跳加速,她躲进了小巷的阴影中。 预期输出: 1. 编辑节点:增强动作节奏感 2. 分镜节点:动态构图的分镜描述 EOF ``` **步骤2:执行测试用例1** ```bash # 使用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:创建质量评估标准** ```bash 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的输出保存到文件: ```bash # 保存测试用例1输出 echo '测试用例1输出内容...' > tests/output-test1.md # 保存测试用例2输出 echo '测试用例2输出内容...' > tests/output-test2.md ``` 2. 根据质量评估标准对每个输出打分 3. 记录评分结果 **步骤3:识别改进点** 1. 分析低分项目原因 2. 提出提示词优化建议 3. 记录需要调整的参数 **验证标准:** 完成质量评估,识别至少3个改进点 --- ### 任务7:性能测试 **步骤1:测试响应时间** ```bash # 记录工作流执行时间 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:测试并发能力(可选)** ```bash # 同时发送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:汇总验证结果** ```bash 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,批量执行并设置检查点 **选择哪种方式?**