530 lines
14 KiB
Markdown
530 lines
14 KiB
Markdown
# 漫画生成工具可行性验证实施计划
|
||
|
||
> **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,批量执行并设置检查点
|
||
|
||
**选择哪种方式?** |