init: add workflow and script draft assets
This commit is contained in:
commit
77ad0e528f
10
.env.template
Normal file
10
.env.template
Normal file
@ -0,0 +1,10 @@
|
||||
# Dify 配置
|
||||
DIFY_API_KEY=your_dify_api_key_here
|
||||
DIFY_BASE_URL=https://dify.wutongshucloud.com
|
||||
|
||||
# DeepSeek 配置
|
||||
DEEPSEEK_API_KEY=your_deepseek_api_key_here
|
||||
|
||||
# 工作流配置
|
||||
WORKFLOW_NAME=漫画生成验证工作流
|
||||
MODEL_NAME=deepseek-r1
|
||||
109
README.md
Normal file
109
README.md
Normal file
@ -0,0 +1,109 @@
|
||||
# Komga Creater
|
||||
|
||||
小说文本到漫画分镜提示词的工作流项目。
|
||||
|
||||
这个仓库既可作为对外展示的项目说明,也可直接作为团队内部的实施手册使用。
|
||||
|
||||
## 项目简介
|
||||
|
||||
Komga Creater 基于 Dify + DeepSeek,将小说段落转换为结构化漫画分镜(Markdown),用于后续图片生成。
|
||||
|
||||
核心价值:
|
||||
- 快速验证从文本到分镜提示词的可行性
|
||||
- 降低分镜设计门槛,提升创作效率
|
||||
- 提供标准化测试用例与质量评估体系
|
||||
|
||||
## 适用场景
|
||||
|
||||
- 小说可视化与漫画改编前期
|
||||
- AIGC 分镜提示词批量生产
|
||||
- 团队内部提示词工程验证
|
||||
|
||||
## 功能概览
|
||||
|
||||
- 单路径验证版工作流:编辑 -> 分镜
|
||||
- 双模式工作流:
|
||||
- 传统漫画分镜(静态叙事)
|
||||
- 时间线漫画分镜(连续动作)
|
||||
- 配套文档:导入、配置、手动搭建、测试与评分
|
||||
|
||||
## 仓库结构
|
||||
|
||||
```text
|
||||
.
|
||||
├── workflow/
|
||||
│ ├── manga-generator-dify-dsl.json # 早期 JSON DSL(参考)
|
||||
│ ├── 漫画生成验证工作流.yml # 单路径验证版(MVP)
|
||||
│ └── 漫画生成工作流-v2.yml # 双模式增强版
|
||||
├── docs/
|
||||
│ ├── dify-import-guide.md # DSL 导入指南
|
||||
│ ├── dify-setup-guide.md # Dify + DeepSeek 配置说明
|
||||
│ ├── dify-manual-setup-guide.md # 手动搭建步骤
|
||||
│ └── workflow-v2-readme.md # v2 详细说明
|
||||
├── tests/
|
||||
│ ├── test-inputs.md # 测试输入样例
|
||||
│ └── quality-assessment.md # 质量评分标准
|
||||
└── .env.template # 环境变量模板
|
||||
```
|
||||
|
||||
## 快速开始(外部用户)
|
||||
|
||||
1. 登录 Dify:`https://dify.wutongshucloud.com`
|
||||
2. 创建应用并导入 DSL:
|
||||
- `workflow/漫画生成验证工作流.yml`(快速验证)
|
||||
- `workflow/漫画生成工作流-v2.yml`(推荐)
|
||||
3. 在 Dify 中配置 DeepSeek 模型
|
||||
4. 运行测试输入,查看分镜输出
|
||||
|
||||
详细导入说明见:[docs/dify-import-guide.md](docs/dify-import-guide.md)
|
||||
|
||||
## 实施手册(内部团队)
|
||||
|
||||
### 1. 环境准备
|
||||
|
||||
```bash
|
||||
cp .env.template .env
|
||||
```
|
||||
|
||||
填写以下变量:
|
||||
- `DIFY_API_KEY`
|
||||
- `DIFY_BASE_URL`
|
||||
- `DEEPSEEK_API_KEY`
|
||||
- `WORKFLOW_NAME`
|
||||
- `MODEL_NAME`
|
||||
|
||||
### 2. 工作流选择建议
|
||||
|
||||
- 需求是“先打通流程”:使用 `漫画生成验证工作流.yml`
|
||||
- 需求是“覆盖更多输入类型”:使用 `漫画生成工作流-v2.yml`
|
||||
|
||||
### 3. 测试执行
|
||||
|
||||
1. 使用测试集:`tests/test-inputs.md`
|
||||
2. 按评分标准评估:`tests/quality-assessment.md`
|
||||
3. 记录每个用例总分与主要问题
|
||||
|
||||
### 4. 验收标准
|
||||
|
||||
- 流程完整跑通(输入 -> 编辑 -> 分镜 -> 输出)
|
||||
- 输出结构符合 Markdown 规范
|
||||
- 分镜描述可视化明确,提示词可直接用于图片生成
|
||||
- 综合评分达到团队设定阈值(建议 >= 28/40)
|
||||
|
||||
## 常用文档入口
|
||||
|
||||
- 配置指南:[docs/dify-setup-guide.md](docs/dify-setup-guide.md)
|
||||
- 导入指南:[docs/dify-import-guide.md](docs/dify-import-guide.md)
|
||||
- 手动搭建:[docs/dify-manual-setup-guide.md](docs/dify-manual-setup-guide.md)
|
||||
- v2 说明:[docs/workflow-v2-readme.md](docs/workflow-v2-readme.md)
|
||||
|
||||
## 路线建议
|
||||
|
||||
1. 先用验证版确认质量下限
|
||||
2. 切换到 v2 处理复杂动作场景
|
||||
3. 通过测试评分持续迭代提示词
|
||||
4. 验证稳定后再接入图片生成 API 与服务化部署
|
||||
|
||||
## 备注
|
||||
|
||||
本仓库当前聚焦“工作流验证与提示词工程”,不包含完整前后端应用代码。
|
||||
71
docs/dify-import-guide.md
Normal file
71
docs/dify-import-guide.md
Normal file
@ -0,0 +1,71 @@
|
||||
# Dify DSL 导入指南
|
||||
|
||||
## 导入步骤
|
||||
|
||||
### 1. 进入 Dify 控制台
|
||||
- 访问你的Dify地址:https://dify.wutongshucloud.com
|
||||
- 登录账户
|
||||
|
||||
### 2. 导入 DSL 文件
|
||||
1. 点击左侧菜单的 **"应用"** 或 **"Apps"**
|
||||
2. 点击右上角的 **"创建应用"** 或 **"Create App"**
|
||||
3. 选择 **"导入 DSL"** 或 **"Import DSL"**
|
||||
4. 选择文件:`workflow/漫画生成验证工作流.yml`
|
||||
5. 点击 **"创建"** 或 **"Create"**
|
||||
|
||||
### 3. 验证工作流
|
||||
导入后,你应该能看到:
|
||||
- **开始节点**:包含输入变量 `input_novel`(小说原文)
|
||||
- **小说编辑AI节点**:第一个LLM节点,使用deepseek-r1模型
|
||||
- **分镜AI节点**:第二个LLM节点,使用deepseek-r1模型
|
||||
- **分镜提示词输出节点**:最终输出节点
|
||||
|
||||
### 4. 测试工作流
|
||||
1. 点击 **"运行"** 或 **"Run"**
|
||||
2. 输入测试文本:
|
||||
```
|
||||
李阳推开厚重的木门,月光透过窗户洒在地板上。他看到父亲坐在书桌前,手里拿着一封信。房间里弥漫着淡淡的墨香,父亲的背影显得格外孤独。
|
||||
```
|
||||
3. 查看输出是否符合Markdown格式
|
||||
|
||||
### 5. 如果导入失败
|
||||
如果导入时遇到问题,可以尝试:
|
||||
1. 检查Dify版本是否支持该DSL格式(建议0.8.0+)
|
||||
2. 确保DeepSeek模型提供商已配置
|
||||
3. 手动创建工作流(参考 `docs/dify-manual-setup-guide.md`)
|
||||
|
||||
## 预期输出示例
|
||||
|
||||
```markdown
|
||||
# 分镜分析
|
||||
|
||||
## 场景概览
|
||||
深夜的书房,月光与墨香交织,李阳发现父亲独自面对一封神秘书信,空气中弥漫着沉默的张力。
|
||||
|
||||
## 分镜详情
|
||||
|
||||
### 分镜1:推门而入
|
||||
**场景描述:** 厚重的木门缓缓推开,月光如水银泻地般洒在地板上,形成明暗对比强烈的光影效果。
|
||||
**角色动作:** 李阳的手停留在门把上,身体微微前倾,表情兼具紧张与期待。
|
||||
**情感氛围:** 神秘、期待、微微的紧张。
|
||||
**图片提示词:** 深夜室内,一扇古老的木门半开,月光从窗户斜射入房间,在木质地板上形成清晰的光影条纹,构图采用低角度仰视,强调门框的高大和压迫感,黑色剪影风格的男性人物站在门口,动漫风格,电影级光影,细节丰富。
|
||||
|
||||
### 分镜2:父亲的背影
|
||||
**场景描述:** 书桌前,父亲佝偻的背影沐浴在月光中,桌上一封信在微弱光线下泛着淡淡的光泽。
|
||||
**角色动作:** 父亲低头凝视手中的信,肩膀微微下沉,姿态显露出疲惫与沉思。
|
||||
**情感氛围:** 孤独、沉重、忧郁。
|
||||
**图片提示词:** 书房内景,昏暗的灯光,一个中年男性的背影坐在书桌前,手中拿着一封信,窗外月光照射进来,整体色调偏冷蓝,氛围感强烈,写实插画风格,参考新海诚的光影处理,强调孤独感。
|
||||
|
||||
### 分镜3:墨香的氛围
|
||||
**场景描述:** 特写镜头,空气中似乎能看见弥漫的墨香,书房的细节在月光下若隐若现。
|
||||
**角色动作:** 无具体人物动作,重点展现环境氛围。
|
||||
**情感氛围:** 宁静、诗意、若有若无的忧伤。
|
||||
**图片提示词:** 书房环境特写,古老的文房四宝,毛笔悬挂,墨水瓶半开,空气中弥漫着淡淡的烟雾般的墨香,月光穿透窗帘,整体氛围宁静而诗意,中国水墨画风格与现代插画结合,淡雅色调。
|
||||
|
||||
## 风格建议
|
||||
推荐使用写实插画风或动漫风格,参考新海诚、宫崎骏等导演的光影处理手法,强调情感氛围的渲染。建议色调以冷暖对比为主,突出孤独与神秘的氛围。
|
||||
```
|
||||
|
||||
## 下一步
|
||||
|
||||
导入成功后,请使用 `tests/test-inputs.md` 中的测试用例进行测试,并填写 `tests/quality-assessment.md` 中的评估表格。
|
||||
192
docs/dify-manual-setup-guide.md
Normal file
192
docs/dify-manual-setup-guide.md
Normal file
@ -0,0 +1,192 @@
|
||||
# Dify 工作流手动配置指南
|
||||
|
||||
## 概述
|
||||
|
||||
由于Dify的DSL导入需要特定格式,本指南提供手动创建工作流的步骤。
|
||||
|
||||
## 第一步:创建新工作流
|
||||
|
||||
1. 登录 https://dify.wutongshucloud.com/apps
|
||||
2. 点击 "创建应用"
|
||||
3. 选择 "工作流"(Workflow)
|
||||
4. 命名为:`漫画生成验证工作流`
|
||||
|
||||
## 第二步:添加开始节点(输入变量)
|
||||
|
||||
1. 点击 "开始" 节点
|
||||
2. 添加输入变量:
|
||||
- 变量名:`input_novel`
|
||||
- 变量类型:文本(Paragraph)
|
||||
- 标签:小说原文
|
||||
- 是否必填:是
|
||||
- 默认值:(留空)
|
||||
- 描述:用户输入的小说短段落(300-1000字)
|
||||
|
||||
## 第三步:添加编辑节点(第一个LLM节点)
|
||||
|
||||
1. 点击 "+" 添加节点
|
||||
2. 选择 "LLM"(大语言模型)
|
||||
3. 配置如下:
|
||||
|
||||
**基本信息:**
|
||||
- 节点名称:小说编辑AI
|
||||
|
||||
**模型配置:**
|
||||
- 模型:deepseek-r1
|
||||
- 温度:0.7
|
||||
- 最大Token:2000
|
||||
|
||||
**系统提示词:**
|
||||
```
|
||||
你是一个专业的小说编辑。你的任务是将用户提供的小说段落进行润色和增强,使其更适合转换为视觉分镜。
|
||||
|
||||
要求:
|
||||
1. 保持原有情节和人物设定不变
|
||||
2. 增强场景描述、角色动作和情感表达
|
||||
3. 让文本更具画面感和戏剧张力
|
||||
4. 输出保持中文,长度控制在原文本的1.2-1.5倍
|
||||
```
|
||||
|
||||
**用户提示词:**
|
||||
```
|
||||
请润色以下小说段落,使其更适合视觉化:
|
||||
|
||||
{{input_novel}}
|
||||
```
|
||||
|
||||
**输出变量:**
|
||||
- 变量名:edited_text
|
||||
- 描述:编辑后的文本
|
||||
|
||||
## 第四步:添加分镜节点(第二个LLM节点)
|
||||
|
||||
1. 点击编辑节点后的 "+" 添加节点
|
||||
2. 选择 "LLM"(大语言模型)
|
||||
3. 配置如下:
|
||||
|
||||
**基本信息:**
|
||||
- 节点名称:分镜AI
|
||||
|
||||
**模型配置:**
|
||||
- 模型:deepseek-r1
|
||||
- 温度:0.6
|
||||
- 最大Token:3000
|
||||
|
||||
**系统提示词:**
|
||||
```
|
||||
你是一个专业的漫画分镜师。请将叙述文本转换为3-5个分镜描述,每个分镜包含视觉元素和图片生成提示词。
|
||||
|
||||
输出格式要求(Markdown):
|
||||
# 分镜分析
|
||||
|
||||
## 场景概览
|
||||
[简要描述整体场景]
|
||||
|
||||
## 分镜详情
|
||||
|
||||
### 分镜1:[标题]
|
||||
**场景描述:** [详细视觉描述]
|
||||
**角色动作:** [主要角色动作]
|
||||
**情感氛围:** [情感色彩]
|
||||
**图片提示词:** [用于图片生成的提示词,包含风格、构图等]
|
||||
|
||||
### 分镜2:[标题]
|
||||
...
|
||||
|
||||
## 风格建议
|
||||
[推荐的图片生成风格,如:动漫风格、写实插画、水彩等]
|
||||
|
||||
注意:图片提示词要具体、详细,包含构图、灯光、风格等要素。
|
||||
```
|
||||
|
||||
**用户提示词:**
|
||||
```
|
||||
请将以下文本转换为漫画分镜提示词:
|
||||
|
||||
{{edited_text}}
|
||||
```
|
||||
|
||||
**输出变量:**
|
||||
- 变量名:storyboard_markdown
|
||||
- 描述:分镜提示词
|
||||
|
||||
## 第五步:添加结束节点(输出变量)
|
||||
|
||||
1. 点击分镜节点后的 "+" 添加节点
|
||||
2. 选择 "结束"(End)
|
||||
3. 添加输出变量:
|
||||
- 变量名:storyboard_markdown
|
||||
- 值来源:分镜AI节点的输出
|
||||
- 描述:最终生成的Markdown格式分镜提示词
|
||||
|
||||
## 第六步:验证连接
|
||||
|
||||
确保节点连接顺序为:
|
||||
```
|
||||
开始(input_novel)→ 小说编辑AI(edited_text)→ 分镜AI(storyboard_markdown)→ 结束
|
||||
```
|
||||
|
||||
## 第七步:保存并发布
|
||||
|
||||
1. 点击右上角 "保存"
|
||||
2. 点击 "发布"
|
||||
3. 选择 "运行" 模式
|
||||
|
||||
## 第八步:测试
|
||||
|
||||
1. 点击 "运行" 按钮
|
||||
2. 输入测试文本:
|
||||
```
|
||||
李阳推开厚重的木门,月光透过窗户洒在地板上。他看到父亲坐在书桌前,手里拿着一封信。房间里弥漫着淡淡的墨香,父亲的背影显得格外孤独。
|
||||
```
|
||||
3. 查看输出是否符合Markdown格式要求
|
||||
|
||||
## 预期输出示例
|
||||
|
||||
```markdown
|
||||
# 分镜分析
|
||||
|
||||
## 场景概览
|
||||
深夜的书房,月光与墨香交织,李阳发现父亲独自面对一封神秘书信,空气中弥漫着沉默的张力。
|
||||
|
||||
## 分镜详情
|
||||
|
||||
### 分镜1:推门而入
|
||||
**场景描述:** 厚重的木门缓缓推开,月光如水银泻地般洒在地板上,形成明暗对比强烈的光影效果。
|
||||
**角色动作:** 李阳的手停留在门把上,身体微微前倾,表情兼具紧张与期待。
|
||||
**情感氛围:** 神秘、期待、微微的紧张。
|
||||
**图片提示词:** 深夜室内,一扇古老的木门半开,月光从窗户斜射入房间,在木质地板上形成清晰的光影条纹,构图采用低角度仰视,强调门框的高大和压迫感,黑色剪影风格的男性人物站在门口,动漫风格,电影级光影,细节丰富。
|
||||
|
||||
### 分镜2:父亲的背影
|
||||
**场景描述:** 书桌前,父亲佝偻的背影沐浴在月光中,桌上一封信在微弱光线下泛着淡淡的光泽。
|
||||
**角色动作:** 父亲低头凝视手中的信,肩膀微微下沉,姿态显露出疲惫与沉思。
|
||||
**情感氛围:** 孤独、沉重、忧郁。
|
||||
**图片提示词:** 书房内景,昏暗的灯光,一个中年男性的背影坐在书桌前,手中拿着一封信,窗外月光照射进来,整体色调偏冷蓝,氛围感强烈,写实插画风格,参考新海诚的光影处理,强调孤独感。
|
||||
|
||||
### 分镜3:墨香的氛围
|
||||
**场景描述:** 特写镜头,空气中似乎能看见弥漫的墨香,书房的细节在月光下若隐若现。
|
||||
**角色动作:** 无具体人物动作,重点展现环境氛围。
|
||||
**情感氛围:** 宁静、诗意、若有若无的忧伤。
|
||||
**图片提示词:** 书房环境特写,古老的文房四宝,毛笔悬挂,墨水瓶半开,空气中弥漫着淡淡的烟雾般的墨香,月光穿透窗帘,整体氛围宁静而诗意,中国水墨画风格与现代插画结合,淡雅色调。
|
||||
|
||||
## 风格建议
|
||||
推荐使用写实插画风或动漫风格,参考新海诚、宫崎骏等导演的光影处理手法,强调情感氛围的渲染。建议色调以冷暖对比为主,突出孤独与神秘的氛围。
|
||||
```
|
||||
|
||||
## 常见问题
|
||||
|
||||
### Q1: 找不到deepseek-r1模型?
|
||||
- 确认已在 "模型提供商" 中正确配置DeepSeek
|
||||
- 检查模型名称是否正确
|
||||
|
||||
### Q2: 变量引用错误?
|
||||
- 确保使用 `{{变量名}}` 格式
|
||||
- 检查变量名是否与前面节点定义的一致
|
||||
|
||||
### Q3: 输出格式不符合预期?
|
||||
- 可以在系统提示词中添加更多格式说明
|
||||
- 可以在用户提示词中添加输出示例
|
||||
|
||||
## 下一步
|
||||
|
||||
创建工作流后,使用 `tests/test-inputs.md` 中的测试用例逐一测试,并记录结果。
|
||||
68
docs/dify-setup-guide.md
Normal file
68
docs/dify-setup-guide.md
Normal file
@ -0,0 +1,68 @@
|
||||
# Dify 配置指南
|
||||
|
||||
## 两种配置方式
|
||||
|
||||
### 方式一:API自动化(推荐)
|
||||
通过API密钥,我可以用脚本自动化配置工作流。
|
||||
|
||||
#### 步骤1:获取Dify API密钥
|
||||
1. 登录 https://dify.wutongshucloud.com
|
||||
2. 点击右上角用户头像 → "设置"
|
||||
3. 进入 "API密钥" 或 "开发者设置"
|
||||
4. 点击 "创建API密钥"
|
||||
5. 复制生成的密钥(格式如:`app-xxx`)
|
||||
|
||||
#### 步骤2:获取DeepSeek API密钥
|
||||
1. 访问 https://platform.deepseek.com
|
||||
2. 注册/登录账户
|
||||
3. 进入 "API密钥" 部分
|
||||
4. 创建新密钥并复制
|
||||
|
||||
#### 步骤3:配置环境变量
|
||||
```bash
|
||||
# 复制模板文件
|
||||
cp .env.template .env
|
||||
|
||||
# 编辑.env文件,填写你的密钥
|
||||
nano .env
|
||||
```
|
||||
|
||||
然后我可以通过脚本自动化完成所有配置。
|
||||
|
||||
### 方式二:手动操作
|
||||
你手动完成Dify界面操作,我提供配置文件。
|
||||
|
||||
#### 步骤1:配置DeepSeek模型提供商
|
||||
1. 登录Dify控制台
|
||||
2. 进入 "模型提供商" → "添加提供商"
|
||||
3. 选择 "DeepSeek"
|
||||
4. 填写:
|
||||
- 提供商名称:DeepSeek
|
||||
- API密钥:你的DeepSeek API密钥
|
||||
- 端点:https://api.deepseek.com
|
||||
|
||||
#### 步骤2:创建DeepSeek-R1模型
|
||||
1. 进入 "模型" → "添加模型"
|
||||
2. 配置:
|
||||
- 模型名称:deepseek-r1
|
||||
- 提供商:DeepSeek
|
||||
- 模型ID:deepseek-r1
|
||||
- 模式:聊天
|
||||
- 最大令牌:4096
|
||||
- 温度:0.7
|
||||
|
||||
#### 步骤3:导入工作流
|
||||
1. 进入 "工作流" → "创建工作流"
|
||||
2. 选择 "导入"
|
||||
3. 上传 `workflow/manga-generator-dify-dsl.json`
|
||||
4. 保存为 "漫画生成验证工作流"
|
||||
|
||||
## 建议选择
|
||||
|
||||
**推荐方式一(API自动化)**:更快、更可靠,我可以自动化测试。
|
||||
|
||||
**方式二(手动操作)**:更安全,不需要暴露API密钥给脚本。
|
||||
|
||||
## 下一步
|
||||
|
||||
请告诉我你选择哪种方式,我会相应调整实施计划。
|
||||
210
docs/plans/2026-02-28-manga-generator-validation-design.md
Normal file
210
docs/plans/2026-02-28-manga-generator-validation-design.md
Normal file
@ -0,0 +1,210 @@
|
||||
# 漫画生成工具可行性验证设计
|
||||
|
||||
## 项目概述
|
||||
|
||||
### 目标
|
||||
验证从小说文本到漫画分镜图片提示词的端到端AI处理流程可行性。
|
||||
|
||||
### 核心问题
|
||||
1. 整个流程(输入→AI编辑→AI分镜→输出)能否顺畅执行?
|
||||
2. AI生成的内容质量是否足够用于图片生成?
|
||||
|
||||
## 验证方案选择
|
||||
|
||||
### 方案:纯Dify工作流(选择此方案)
|
||||
|
||||
**理由**:
|
||||
- 最快实现验证(30分钟内可搭建完成)
|
||||
- 完全利用现有工具(Dify + DeepSeek API)
|
||||
- 无需编码,专注于核心AI能力测试
|
||||
|
||||
## 详细设计
|
||||
|
||||
### 系统架构
|
||||
```
|
||||
用户输入(短段落小说文本)
|
||||
↓
|
||||
[Dify工作流]
|
||||
├── [编辑节点] DeepSeek-R1
|
||||
│ └── 润色增强叙述文本
|
||||
└── [分镜节点] DeepSeek-R1
|
||||
└── 生成Markdown格式分镜提示词
|
||||
↓
|
||||
用户复制提示词到图片生成平台
|
||||
```
|
||||
|
||||
### 组件说明
|
||||
|
||||
#### 1. 输入处理
|
||||
- **格式**:短段落小说文本(300-1000字)
|
||||
- **来源**:用户从七猫小说等平台复制粘贴
|
||||
- **预处理**:无,直接交给AI编辑节点
|
||||
|
||||
#### 2. AI编辑节点
|
||||
- **模型**:DeepSeek-R1
|
||||
- **温度**:0.7
|
||||
- **任务**:润色和增强小说文本描述
|
||||
- **输出要求**:
|
||||
- 保持原有情节和人物设定
|
||||
- 增强场景描述、角色动作和情感表达
|
||||
- 让文本更具画面感和戏剧张力
|
||||
- 长度控制在原文本的1.2-1.5倍
|
||||
|
||||
#### 3. AI分镜节点
|
||||
- **模型**:DeepSeek-R1
|
||||
- **温度**:0.6
|
||||
- **任务**:将叙述文本转换为分镜提示词
|
||||
- **输出格式**:Markdown结构
|
||||
```
|
||||
# 分镜分析
|
||||
|
||||
## 场景概览
|
||||
[整体场景描述]
|
||||
|
||||
## 分镜详情
|
||||
|
||||
### 分镜1:[标题]
|
||||
**场景描述:** [详细视觉描述]
|
||||
**角色动作:** [主要角色动作]
|
||||
**情感氛围:** [情感色彩]
|
||||
**图片提示词:** [用于图片生成的提示词]
|
||||
|
||||
### 分镜2:[标题]
|
||||
...
|
||||
|
||||
## 风格建议
|
||||
[推荐图片生成风格]
|
||||
```
|
||||
|
||||
### Dify工作流配置
|
||||
|
||||
#### 技术栈
|
||||
- **平台**:Dify(本地自部署)
|
||||
- **AI模型**:DeepSeek-R1
|
||||
- **格式**:JSON DSL
|
||||
|
||||
#### 关键配置
|
||||
1. **编辑节点提示词**:
|
||||
```
|
||||
你是一个专业的小说编辑。你的任务是将用户提供的小说段落进行润色和增强,使其更适合转换为视觉分镜。
|
||||
|
||||
要求:
|
||||
1. 保持原有情节和人物设定不变
|
||||
2. 增强场景描述、角色动作和情感表达
|
||||
3. 让文本更具画面感和戏剧张力
|
||||
4. 输出保持中文,长度控制在原文本的1.2-1.5倍
|
||||
```
|
||||
|
||||
2. **分镜节点提示词**:
|
||||
```
|
||||
你是一个专业的漫画分镜师。请将叙述文本转换为3-5个分镜描述,每个分镜包含视觉元素和图片生成提示词。
|
||||
|
||||
输出格式要求(Markdown):
|
||||
[格式规范见上文]
|
||||
|
||||
注意:图片提示词要具体、详细,包含构图、灯光、风格等要素。
|
||||
```
|
||||
|
||||
## 验证方法
|
||||
|
||||
### 成功标准
|
||||
1. ✅ **流程顺畅**:输入→编辑→分镜→输出能完整执行
|
||||
2. ✅ **输出质量**:
|
||||
- 编辑节点输出增强画面感
|
||||
- 分镜节点输出符合Markdown格式
|
||||
- 图片提示词具体、可生成
|
||||
|
||||
### 测试用例
|
||||
|
||||
#### 测试用例1:基础场景
|
||||
```text
|
||||
输入:
|
||||
李阳推开厚重的木门,月光透过窗户洒在地板上。他看到父亲坐在书桌前,手里拿着一封信。房间里弥漫着淡淡的墨香,父亲的背影显得格外孤独。
|
||||
|
||||
预期验证:
|
||||
1. 编辑节点输出更丰富的视觉描述
|
||||
2. 分镜节点生成3-5个分镜
|
||||
3. 图片提示词包含具体构图和风格
|
||||
```
|
||||
|
||||
#### 测试用例2:动作场景
|
||||
```text
|
||||
输入:
|
||||
王雪快速穿过拥挤的街道,雨水打湿了她的头发。她回头看了一眼,追赶者的影子在路灯下拉长。心跳加速,她躲进了小巷的阴影中。
|
||||
|
||||
预期验证:
|
||||
1. 编辑节点增强动作节奏感
|
||||
2. 分镜节点体现动态构图
|
||||
3. 提示词包含光影和氛围描述
|
||||
```
|
||||
|
||||
### 验证步骤
|
||||
1. **环境准备**:
|
||||
- 确保Dify本地部署正常
|
||||
- 配置DeepSeek-R1模型访问
|
||||
- 导入提供的JSON DSL工作流
|
||||
|
||||
2. **功能测试**:
|
||||
- 使用测试用例1运行工作流
|
||||
- 检查各节点输出格式
|
||||
- 验证Markdown结构完整性
|
||||
|
||||
3. **质量评估**:
|
||||
- 人工评估编辑文本质量(是否增强画面感)
|
||||
- 检查分镜合理性(场景转换是否自然)
|
||||
- 评估图片提示词可用性(是否足够具体)
|
||||
|
||||
4. **性能测试**:
|
||||
- 记录流程执行时间
|
||||
- 测试并发处理能力(可选)
|
||||
|
||||
## 风险与缓解
|
||||
|
||||
### 技术风险
|
||||
1. **模型输出不稳定**
|
||||
- 缓解:调整温度参数,优化提示词
|
||||
|
||||
2. **Dify工作流配置复杂**
|
||||
- 缓解:使用提供的DSL模板,分步测试
|
||||
|
||||
3. **Markdown格式不规范**
|
||||
- 缓解:在提示词中明确格式要求,添加示例
|
||||
|
||||
### 业务风险
|
||||
1. **输出质量不足**
|
||||
- 缓解:准备多个测试用例,调整提示词迭代
|
||||
|
||||
2. **流程时间过长**
|
||||
- 缓解:设定时间阈值(如3分钟内完成)
|
||||
|
||||
## 后续计划
|
||||
|
||||
### 验证成功后的扩展
|
||||
1. **添加预处理**:文本分段、清理功能
|
||||
2. **增加后处理**:提示词格式美化、批量导出
|
||||
3. **集成图片生成**:直接调用Stable Diffusion等API
|
||||
4. **用户界面**:开发简单Web界面
|
||||
|
||||
### 验证失败的处理
|
||||
1. **分析瓶颈**:识别是AI能力问题还是流程设计问题
|
||||
2. **调整方案**:考虑混合方案(Dify+自定义代码)
|
||||
3. **简化目标**:先验证单一步骤(如仅分镜生成)
|
||||
|
||||
## 决策记录
|
||||
|
||||
### 关键决策
|
||||
1. **选择纯Dify方案**:快速验证优先
|
||||
2. **使用Markdown输出**:便于用户复制使用
|
||||
3. **聚焦短段落输入**:降低验证复杂度
|
||||
4. **使用DeepSeek-R1**:推理优化适合多步骤分析
|
||||
|
||||
### 约束条件
|
||||
1. **工具限制**:必须使用Dify + DeepSeek API
|
||||
2. **时间目标**:快速验证(1-2天内完成)
|
||||
3. **输出要求**:生成可用的图片提示词,而非实际图片
|
||||
|
||||
---
|
||||
|
||||
**创建时间**:2026-02-28
|
||||
**更新记录**:
|
||||
- 2026-02-28:初始设计创建
|
||||
@ -0,0 +1,530 @@
|
||||
# 漫画生成工具可行性验证实施计划
|
||||
|
||||
> **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,批量执行并设置检查点
|
||||
|
||||
**选择哪种方式?**
|
||||
143
docs/workflow-v2-readme.md
Normal file
143
docs/workflow-v2-readme.md
Normal file
@ -0,0 +1,143 @@
|
||||
# 漫画生成工作流 v2 更新说明
|
||||
|
||||
## 新增功能
|
||||
|
||||
### 1. 双模式支持
|
||||
工作流现在支持两种输出模式:
|
||||
|
||||
#### 模式A:传统漫画分镜
|
||||
- **适用场景**:小说段落、静态场景描述
|
||||
- **输出**:3-5个分镜,不强调时间轴
|
||||
- **示例输入**:
|
||||
```
|
||||
李阳推开厚重的木门,月光透过窗户洒在地板上。他看到父亲坐在书桌前...
|
||||
```
|
||||
|
||||
#### 模式B:时间线漫画分镜
|
||||
- **适用场景**:连续动作描述、动态场景(如15秒画面描述)
|
||||
- **输出**:带时间标记的分镜(如"0-3秒"、"3-6秒"),分镜数量由AI根据动作节奏自动决定
|
||||
- **示例输入**:
|
||||
```
|
||||
冰凉的夜雨如密集的银针般倾泻,王雪的长发湿漉漉地黏在惨白的脸颊...
|
||||
```
|
||||
- **示例输出**:
|
||||
```markdown
|
||||
### 分镜1:[0-3秒] 雨中疾奔
|
||||
**时间点:** 0-3秒
|
||||
**场景描述:** 王雪在雨中奔跑,长发湿漉漉贴在脸上...
|
||||
**图片提示词:** ...
|
||||
|
||||
### 分镜2:[3-6秒] 惊惶回眸
|
||||
**时间点:** 3-6秒
|
||||
...
|
||||
```
|
||||
|
||||
### 2. 智能关键帧提取
|
||||
- **时间线分析AI**:自动识别动作转折点
|
||||
- **时间标记**:AI自由决定时间点(如"0-3秒"、"3-5秒",不一定是固定间隔)
|
||||
- **动态分镜数**:根据动作节奏自动决定分镜数量(3-8个)
|
||||
|
||||
## 使用步骤
|
||||
|
||||
### 1. 导入DSL
|
||||
1. 访问 https://dify.wutongshucloud.com
|
||||
2. 应用 → 创建应用 → 导入DSL
|
||||
3. 选择 `workflow/漫画生成工作流-v2.yml`
|
||||
|
||||
### 2. 运行工作流
|
||||
1. **输入文本**:粘贴你的描述
|
||||
2. **选择模式**:
|
||||
- 传统漫画分镜:适合小说段落
|
||||
- 时间线漫画分镜:适合连续动作描述
|
||||
3. **查看输出**:根据选择的模式生成对应格式的分镜
|
||||
|
||||
### 3. 测试用例
|
||||
|
||||
#### 测试用例1:传统模式
|
||||
**输入**:
|
||||
```
|
||||
李阳推开厚重的木门,月光透过窗户洒在地板上。他看到父亲坐在书桌前,手里拿着一封信。房间里弥漫着淡淡的墨香,父亲的背影显得格外孤独。
|
||||
```
|
||||
**模式**:传统漫画分镜
|
||||
**预期**:3-5个分镜,不标注时间
|
||||
|
||||
#### 测试用例2:时间线模式
|
||||
**输入**:
|
||||
```
|
||||
冰凉的夜雨如密集的银针般倾泻,将整条街道浸泡在闪烁的霓虹与破碎的水光里。王雪的长发湿漉漉地黏在惨白的脸颊,她逆着稀疏而模糊的人影,在湿滑反光的柏油路上踉跄疾奔,每一次仓促的呼吸都在冰凉的空气中扯出白雾。惊惶回眸——那道追赶者的漆黑剪影,被身后惨白的路灯无限拉长、扭曲变形,紧贴地面疾速蔓延,仿佛噩梦具现的触角。
|
||||
|
||||
心脏在胸腔里疯狂擂动,震耳欲聋。就在窒息般的恐惧攥紧喉咙的瞬间,她眼角瞥见右前方一道极其狭窄的缝隙:那是两栋旧楼之间一道被遗忘的巷口,幽深,黑暗,像大地的一道伤口。求生的本能压倒一切,她猛地拧身折向,如离弦之箭般将自己彻底投进那片浓稠的、仿佛能吸收一切光线与声响的阴影之中。
|
||||
|
||||
巷内弥漫着潮湿的霉味与杂物堆积的腐朽气息。王雪的背脊紧紧抵住冰冷湿滑的砖墙,尖锐的碎石硌着皮肉。她用尽全部力气捂住自己的口鼻,将几乎冲喉而出的剧烈喘息与战栗死死压回身体深处,只剩下瞪大的双眼,死死盯向巷口那一方被雨幕朦胧的、危险的光亮。
|
||||
```
|
||||
**模式**:时间线漫画分镜
|
||||
**预期**:带时间标记的分镜(如"0-3秒"、"3-6秒"等)
|
||||
|
||||
## 节点说明
|
||||
|
||||
### 开始节点
|
||||
- **输入文本**:小说段落或连续动作描述
|
||||
- **输出模式**:
|
||||
- 传统漫画分镜
|
||||
- 时间线漫画分镜
|
||||
|
||||
### 模式选择器
|
||||
根据"输出模式"变量选择处理路径:
|
||||
- 传统漫画分镜 → 小说编辑AI → 传统分镜AI
|
||||
- 时间线漫画分镜 → 时间线分析AI → 时间线分镜AI
|
||||
|
||||
### 传统路径
|
||||
1. **小说编辑AI**:润色文本,增强画面感
|
||||
2. **传统分镜AI**:生成3-5个传统漫画分镜
|
||||
|
||||
### 时间线路径
|
||||
1. **时间线分析AI**:
|
||||
- 分析连续动作描述
|
||||
- 识别关键动作转折点
|
||||
- 标注时间点(AI自由决定)
|
||||
- 提取每个时间点的画面描述
|
||||
|
||||
2. **时间线分镜AI**:
|
||||
- 将时间线分析转换为带时间标记的分镜
|
||||
- 每个分镜包含:时间点、场景描述、图片提示词
|
||||
- 增加"叙事节奏建议"部分
|
||||
|
||||
### 输出节点
|
||||
合并两个路径的输出(根据选择的模式只显示对应结果)
|
||||
|
||||
## 技术细节
|
||||
|
||||
### 条件分支实现
|
||||
使用 **question-classifier** 节点实现模式选择:
|
||||
- query_variable_selector: `开始.output_mode`
|
||||
- classes:
|
||||
- 传统漫画分镜
|
||||
- 时间线漫画分镜
|
||||
|
||||
### 变量传递
|
||||
- 传统路径:`开始.input_text` → `小说编辑AI` → `传统分镜AI` → `输出`
|
||||
- 时间线路径:`开始.input_text` → `时间线分析AI` → `时间线分镜AI` → `输出`
|
||||
|
||||
### 输出合并
|
||||
输出节点使用:`{{#1740748800002.text#}}{{#1740748800006.text#}}`
|
||||
由于只有一条路径会执行,所以只显示对应模式的输出
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. **模式选择很重要**:
|
||||
- 静态场景描述 → 选择"传统漫画分镜"
|
||||
- 连续动作描述 → 选择"时间线漫画分镜"
|
||||
|
||||
2. **时间标记是估算值**:
|
||||
- AI会根据动作节奏自由决定时间范围
|
||||
- 不是精确的时间码,而是帮助理解叙事节奏的参考
|
||||
|
||||
3. **分镜数量**:
|
||||
- 传统模式:固定3-5个
|
||||
- 时间线模式:AI根据动作复杂度自动决定(通常3-8个)
|
||||
|
||||
## 后续优化建议
|
||||
|
||||
1. **增加示例提示**:在开始节点增加示例文本,帮助用户选择正确的模式
|
||||
2. **自动模式识别**:训练AI自动判断输入适合哪种模式
|
||||
3. **细化时间粒度**:允许用户指定时间精度(如"每2秒一个分镜")
|
||||
354
docs/我在五代搞基建-可读版小剧本1.0.md
Normal file
354
docs/我在五代搞基建-可读版小剧本1.0.md
Normal file
@ -0,0 +1,354 @@
|
||||
# 《我在五代搞基建》可读版小剧本 1.0
|
||||
|
||||
## 一句话定位
|
||||
现代土木工程师穿越五代乱世,靠工程技术从“活下来”走到“改秩序”,在权谋、战争与人性里做选择。
|
||||
|
||||
---
|
||||
|
||||
## 第一章 坠落
|
||||
|
||||
河北,某隧道工地。
|
||||
|
||||
警报响了三次,林远还盯着平板上的地层模型。
|
||||
|
||||
“林工,撤!”
|
||||
|
||||
喊声刚落,顶板像被巨手掀开,钢筋与混凝土一起塌下来。灯光熄灭,世界只剩轰鸣与粉尘。
|
||||
|
||||
林远抱头扑倒,耳边最后一个声音,是金属断裂时那种刺耳的尖啸。
|
||||
|
||||
再睁眼时,他在一条冰冷的山溪里。
|
||||
|
||||
他咳出两口水,撑着石头爬起来。四周只有湿冷的林子和不知名的鸟叫。没有施工便道,没有吊车,没有人。
|
||||
|
||||
只有口袋里那部碎屏手机。
|
||||
|
||||
他按亮屏幕:15%电,0格信号。
|
||||
|
||||
相册没了,聊天记录没了,唯独离线资料还在:
|
||||
|
||||
- 《中国古代建筑防震手册》
|
||||
- 《黑火药提纯与配比》
|
||||
- 《农作物轮作技术指南》
|
||||
|
||||
林远盯着那几行文件名,忽然觉得荒诞得像一个恶意玩笑。
|
||||
|
||||
远处,狼嚎响起。
|
||||
|
||||
他抬头,第一次感到真正的恐惧。
|
||||
|
||||
---
|
||||
|
||||
## 第二章 官道
|
||||
|
||||
第二天午后,官道上尘土飞扬。
|
||||
|
||||
林远刚躲进灌木,就看见一队披甲溃兵在抢难民。有人跪地求饶,被一脚踹翻。一个骑兵提刀,冲向抱着幼弟的小女孩。
|
||||
|
||||
林远没有时间思考。
|
||||
|
||||
他捡起石块,朝骑兵后背砸去。石头砸在铁甲上,发出沉闷一响。骑兵愣了一下,转头看见他,怒吼着拨马冲来。
|
||||
|
||||
林远转身就跑,冲到路边破茶棚前,抄起翻倒木桌,把折断的自拍杆卡进缝隙,尖端朝上。
|
||||
|
||||
战马冲到近前,前蹄踩空,整匹马猛地上扬,骑兵被甩出去。林远扑上去,安全帽当锤,连砸两下。
|
||||
|
||||
对方挣扎,林远咬牙,工兵铲横着顶住对方喉咙。
|
||||
|
||||
“再动就死。”
|
||||
|
||||
骑兵眼神凶狠,却终于停住。
|
||||
|
||||
林远喘得胸口生疼,回头去找那两个孩子。
|
||||
|
||||
女孩浑身发抖,手却死死护着弟弟。
|
||||
|
||||
“叫什么名字?”
|
||||
|
||||
“我……我叫小翠。”
|
||||
|
||||
“他呢?”
|
||||
|
||||
“小石头。”
|
||||
|
||||
林远点头:“跟我走。现在。”
|
||||
|
||||
身后传来追兵叫骂。三个人钻进林子,像三只被猎犬追赶的小兽。
|
||||
|
||||
---
|
||||
|
||||
## 第三章 破庙夜话
|
||||
|
||||
夜里,破庙漏风。
|
||||
|
||||
林远把压缩饼干掰成三份,最大的一块塞给小石头。男孩狼吞虎咽,呛得咳嗽。小翠一边拍弟弟背,一边悄悄看林远手里的“亮纸”包装。
|
||||
|
||||
“你们家乡的纸,都这么亮吗?”
|
||||
|
||||
林远苦笑:“嗯,很贵。”
|
||||
|
||||
他不敢说那叫复合膜,也不敢说工地宿舍楼下超市里随便买。
|
||||
|
||||
火堆快熄了。手机只剩7%。
|
||||
|
||||
林远打开离线地图缓存,看见模糊的北方轮廓,手指在泥地上画了一遍:太行、太原、幽州。
|
||||
|
||||
小翠蹲在旁边看,突然问:“大哥哥,你会写字吗?”
|
||||
|
||||
林远一怔,点头。
|
||||
|
||||
小翠低声说:“那你以后能不能教我?会写字的人,不容易饿死。”
|
||||
|
||||
这句话让林远沉默很久。
|
||||
|
||||
他看着两个孩子蜷在火光里,心里第一次有了方向。
|
||||
|
||||
“先活下去。”他说,“活下去,再说别的。”
|
||||
|
||||
手机电量跳到1%。
|
||||
|
||||
黑屏前最后一秒,时间停在他熟悉的现代日期。
|
||||
|
||||
下一秒,彻底熄灭。
|
||||
|
||||
---
|
||||
|
||||
## 第四章 太原城下
|
||||
|
||||
三天后,太原城门。
|
||||
|
||||
难民排成一条灰色长蛇。城墙高而旧,脚手架歪斜,吊绳磨损,工匠在上面像踩着命在干活。
|
||||
|
||||
林远只看了两眼,就知道那套滑轮组装反了。
|
||||
|
||||
“这样吊,迟早断。”他低声说。
|
||||
|
||||
旁边工头听见,嗤笑:“你懂?”
|
||||
|
||||
林远没解释,走上前:“给我两根绳,一根横梁。我让你们两个人顶四个人。”
|
||||
|
||||
工头冷脸:“做不到,滚出城。”
|
||||
|
||||
“做到了呢?”
|
||||
|
||||
“做到了,给你饭吃。”
|
||||
|
||||
半个时辰后,围观的人越来越多。
|
||||
|
||||
林远重新穿绳、改受力点、加一道交叉固定。两名工匠试着拉,原本卡死的石料竟平稳抬起。
|
||||
|
||||
人群先静,后炸开。
|
||||
|
||||
工头瞪着那块离地的石头,脸上写满不信。
|
||||
|
||||
“这……什么邪术?”
|
||||
|
||||
林远擦掉手上的灰,淡淡道:“不是邪术。是省力。”
|
||||
|
||||
他本想说“机械优势”,想了想,改口:“格物。”
|
||||
|
||||
这两个字像石子落水,传进了城里更多人的耳朵。
|
||||
|
||||
---
|
||||
|
||||
## 第五章 节度使府
|
||||
|
||||
当晚,林远被带进节度使府。
|
||||
|
||||
偏厅灯火不亮,墙上挂着地图和兵器。刘知远坐在案后,不怒自威。
|
||||
|
||||
“你叫林远?”
|
||||
|
||||
“是。”
|
||||
|
||||
“哪里人?”
|
||||
|
||||
“幽州。”
|
||||
|
||||
“会什么?”
|
||||
|
||||
林远停了一瞬:“筑城、治水、炼铁、农具改造。”
|
||||
|
||||
厅中几名亲兵都笑了。刘知远没笑,只盯着他。
|
||||
|
||||
“你可知,夸口在军中是什么罪?”
|
||||
|
||||
“知。”
|
||||
|
||||
“那你还敢说?”
|
||||
|
||||
林远抬眼,语气平稳:“将军要的是能用的人,不是会低头的人。”
|
||||
|
||||
厅里瞬间安静。
|
||||
|
||||
刘知远忽然起身,走到地图前。
|
||||
|
||||
“太原若被围,最先断什么?”
|
||||
|
||||
“水。”林远没看地图,直接答,“若敌军截上游,城内先乱。要提前凿井、修蓄水池、分级配水,先保军营再保民区。”
|
||||
|
||||
刘知远眼神微动。
|
||||
|
||||
“明日去军器监。”
|
||||
|
||||
“是。”
|
||||
|
||||
“林远。”
|
||||
|
||||
“在。”
|
||||
|
||||
“别让我失望。”
|
||||
|
||||
---
|
||||
|
||||
## 第六章 军器监
|
||||
|
||||
军器监里终日火星四溅。
|
||||
|
||||
林远站在炉前看了一圈:炉温不稳,皮囊鼓风忽强忽弱,铁里夹渣严重。老铁匠不服他,冷着脸扔来一句:“会说不算,会打才算。”
|
||||
|
||||
林远点头,卷起袖子。
|
||||
|
||||
他拆了皮囊,改成活塞风箱。第一轮拉动时,火焰猛地窜高,炉膛亮得发白。
|
||||
|
||||
老铁匠先骂,骂到一半停住。
|
||||
|
||||
第二炉铁出来,锭面更细,杂质更少。围观工匠一下全围了上来。
|
||||
|
||||
“这法子能教吗?”老铁匠声音发颤。
|
||||
|
||||
“能。”
|
||||
|
||||
“要钱吗?”
|
||||
|
||||
“不要。”
|
||||
|
||||
“那你图什么?”
|
||||
|
||||
林远看着炉火,轻声说:“图你们以后少死几个人。”
|
||||
|
||||
这句话比任何技术都快,在工匠间传开。
|
||||
|
||||
几日后,林远又在汾水边架起水轮,做出水排。鼓风从人力改成水力,炉火昼夜不断。
|
||||
|
||||
刘知远再次召见他,这次厅里多了一个人。
|
||||
|
||||
郭威,目光沉静,话不多。
|
||||
|
||||
“听说你还懂农具?”郭威问。
|
||||
|
||||
林远拿起笔,在麻纸上画了曲辕犁结构。犁评、犁箭、犁壁,一笔一笔讲受力与调深。
|
||||
|
||||
郭威看完,点头:“这不是匠气,这是章法。”
|
||||
|
||||
刘知远拍案:“试制。”
|
||||
|
||||
城外试田,老农扶着新犁走过第一垄地,回头时眼里含泪。
|
||||
|
||||
“省牛,也省命。”
|
||||
|
||||
---
|
||||
|
||||
## 第七章 燕云与火
|
||||
|
||||
夜宴只有三人:刘知远、郭威、林远。
|
||||
|
||||
地图摊开,话题落在燕云十六州。
|
||||
|
||||
“石敬瑭若引契丹南下,中原会怎样?”郭威问。
|
||||
|
||||
林远指着关隘线,几乎本能地说出地理链路:幽州、云州、山口、平原、行军日程。
|
||||
|
||||
他说完,屋里很久没人接话。
|
||||
|
||||
刘知远端着杯,低声道:“你像提前见过这一切。”
|
||||
|
||||
林远没有回答。
|
||||
|
||||
那晚之后,他被正式留在幕府,身份从“会干活的外乡人”变成“可议事的幕僚”。
|
||||
|
||||
但他知道,这一步并不安全。
|
||||
|
||||
他在山谷里设了隐蔽工坊,开始试验最原始的火药配比。硝石提纯、硫磺研磨、木炭筛粉,每一步都像在刀尖上跳舞。
|
||||
|
||||
点火那刻,所有人退到坡后。
|
||||
|
||||
引线燃尽,轰的一声,地面炸出黑坑。
|
||||
|
||||
工匠们跪了一片,喊“天雷”。
|
||||
|
||||
林远站在烟尘里,心一点点往下沉。
|
||||
|
||||
他比任何人都清楚,自己放出来的不是奇迹,是一头会反噬主人的兽。
|
||||
|
||||
---
|
||||
|
||||
## 第八章 书房里的选择(试读终点)
|
||||
|
||||
黄昏,节度使书房。
|
||||
|
||||
林远把一小包黑色粉末放在案上。
|
||||
|
||||
刘知远盯着它,问:
|
||||
|
||||
“这是什么?”
|
||||
|
||||
“人造的雷。”
|
||||
|
||||
“能守城?”
|
||||
|
||||
“能。”
|
||||
|
||||
“能攻城?”
|
||||
|
||||
“也能。”
|
||||
|
||||
刘知远沉默片刻,突然换了问题:
|
||||
|
||||
“你要什么?”
|
||||
|
||||
林远没立刻答。
|
||||
|
||||
窗外风过汾水,远处更鼓三响。
|
||||
|
||||
“我要军器监和工坊的人事权,三个月。我要先修军械、再修水利、再修粮路。”
|
||||
|
||||
“你知道你在要什么吗?”
|
||||
|
||||
“知道。”
|
||||
|
||||
“你也知道,旧派会要你的命。”
|
||||
|
||||
“知道。”
|
||||
|
||||
刘知远盯着他,慢慢笑了,笑意却冷。
|
||||
|
||||
“好。我给你三个月。”
|
||||
|
||||
“谢将军。”
|
||||
|
||||
“林远。”
|
||||
|
||||
“在。”
|
||||
|
||||
“做不成,你自己挑个死法。”
|
||||
|
||||
林远拱手,声音很稳:
|
||||
|
||||
“若做成呢?”
|
||||
|
||||
“若做成,”刘知远起身,走到地图前,“河东由你先画图。”
|
||||
|
||||
林远抬头,看见烛光映在那张北方地图上,像一条尚未成形的路。
|
||||
|
||||
他知道,真正的战争才刚开始。
|
||||
|
||||
---
|
||||
|
||||
## 读后判断点(给你快速判断是否“上头”)
|
||||
|
||||
- 你是否想继续看“林远怎么在三个月内交差”?
|
||||
- 你是否关心“小翠从被救者成长为关键角色”的线?
|
||||
- 你是否期待“技术理性 vs 乱世权谋”的正面对撞?
|
||||
|
||||
如果这三条里有两条打中你,这个项目就值得继续扩写成完整剧集版。
|
||||
173
tests/quality-assessment.md
Normal file
173
tests/quality-assessment.md
Normal file
@ -0,0 +1,173 @@
|
||||
## 质量评估标准
|
||||
|
||||
### 编辑节点质量(每项1-5分,共20分)
|
||||
|
||||
#### 1. 画面感增强(1-5分)
|
||||
- **5分**:显著增强,添加了丰富的视觉细节(光影、色彩、空间感)
|
||||
- **4分**:明显增强,有较多视觉描述
|
||||
- **3分**:适度增强,有一些视觉细节
|
||||
- **2分**:略有增强,视觉描述不明显
|
||||
- **1分**:几乎无增强,缺乏画面感
|
||||
|
||||
#### 2. 情感表达(1-5分)
|
||||
- **5分**:情感细腻,氛围渲染到位,读者能深刻感受
|
||||
- **4分**:情感表达清晰,有一定的氛围渲染
|
||||
- **3分**:情感表达基本到位
|
||||
- **2分**:情感表达较弱
|
||||
- **1分**:缺乏情感色彩
|
||||
|
||||
#### 3. 文本流畅性(1-5分)
|
||||
- **5分**:行文流畅,节奏把控好,语言精炼
|
||||
- **4分**:较流畅,节奏比较自然
|
||||
- **3分**:基本流畅,偶有生硬处
|
||||
- **2分**:不够流畅,有多处生硬
|
||||
- **1分**:流畅性差
|
||||
|
||||
#### 4. 长度控制(1-5分)
|
||||
- **5分**:长度控制在原文本的1.2-1.5倍,恰到好处
|
||||
- **4分**:长度接近理想范围(1.1-1.6倍)
|
||||
- **3分**:长度略有偏差(1.0-1.7倍)
|
||||
- **2分**:长度偏差较大
|
||||
- **1分**:过长或过短
|
||||
|
||||
---
|
||||
|
||||
### 分镜节点质量(每项1-5分,共20分)
|
||||
|
||||
#### 1. 分镜数量(1-5分)
|
||||
- **5分**:3-5个分镜,数量适中,节奏合理
|
||||
- **4分**:分镜数量接近理想(2-6个)
|
||||
- **3分**:分镜数量略有偏差
|
||||
- **2分**:分镜数量不合理(过少或过多)
|
||||
- **1分**:分镜数量严重偏离要求
|
||||
|
||||
#### 2. 描述具体性(1-5分)
|
||||
- **5分**:场景描述非常具体,包含完整的视觉元素
|
||||
- **4分**:场景描述较具体,大部分视觉元素清晰
|
||||
- **3分**:场景描述基本清晰
|
||||
- **2分**:场景描述不够具体
|
||||
- **1分**:场景描述模糊,无法视觉化
|
||||
|
||||
#### 3. 提示词质量(1-5分)
|
||||
- **5分**:提示词详细完整,包含构图、灯光、风格等要素,可直接用于图片生成
|
||||
- **4分**:提示词较详细,包含多个要素
|
||||
- **3分**:提示词基本可用,缺少部分要素
|
||||
- **2分**:提示词不够详细,难以直接使用
|
||||
- **1分**:提示词质量差,无法使用
|
||||
|
||||
#### 4. 格式规范性(1-5分)
|
||||
- **5分**:严格遵循Markdown格式,结构清晰完整
|
||||
- **4分**:格式较规范,有轻微偏差
|
||||
- **3分**:格式基本正确
|
||||
- **2分**:格式有多处错误
|
||||
- **1分**:格式混乱
|
||||
|
||||
---
|
||||
|
||||
### 总体评分标准
|
||||
|
||||
**总分(满分40分):**
|
||||
- **优秀(36-40分)**:输出质量高,可直接用于图片生成
|
||||
- **良好(28-35分)**:输出质量不错,稍作调整即可使用
|
||||
- **一般(20-27分)**:输出质量一般,需要较多调整
|
||||
- **需要改进(<20分)**:输出质量不足,需要优化提示词
|
||||
|
||||
---
|
||||
|
||||
### 评估记录表格
|
||||
|
||||
#### 测试用例1评分表
|
||||
|
||||
| 评估项目 | 得分 | 备注 |
|
||||
|---------|-----|------|
|
||||
| **编辑节点(/20)** | | |
|
||||
| 画面感增强 | /5 | |
|
||||
| 情感表达 | /5 | |
|
||||
| 文本流畅性 | /5 | |
|
||||
| 长度控制 | /5 | |
|
||||
| **分镜节点(/20)** | | |
|
||||
| 分镜数量 | /5 | |
|
||||
| 描述具体性 | /5 | |
|
||||
| 提示词质量 | /5 | |
|
||||
| 格式规范性 | /5 | |
|
||||
| **总分** | **/40** | |
|
||||
|
||||
#### 测试用例2评分表
|
||||
|
||||
| 评估项目 | 得分 | 备注 |
|
||||
|---------|-----|------|
|
||||
| **编辑节点(/20)** | | |
|
||||
| 画面感增强 | /5 | |
|
||||
| 情感表达 | /5 | |
|
||||
| 文本流畅性 | /5 | |
|
||||
| 长度控制 | /5 | |
|
||||
| **分镜节点(/20)** | | |
|
||||
| 分镜数量 | /5 | |
|
||||
| 描述具体性 | /5 | |
|
||||
| 提示词质量 | /5 | |
|
||||
| 格式规范性 | /5 | |
|
||||
| **总分** | **/40** | |
|
||||
|
||||
#### 测试用例3评分表
|
||||
|
||||
| 评估项目 | 得分 | 备注 |
|
||||
|---------|-----|------|
|
||||
| **编辑节点(/20)** | | |
|
||||
| 画面感增强 | /5 | |
|
||||
| 情感表达 | /5 | |
|
||||
| 文本流畅性 | /5 | |
|
||||
| 长度控制 | /5 | |
|
||||
| **分镜节点(/20)** | | |
|
||||
| 分镜数量 | /5 | |
|
||||
| 描述具体性 | /5 | |
|
||||
| 提示词质量 | /5 | |
|
||||
| 格式规范性 | /5 | |
|
||||
| **总分** | **/40** | |
|
||||
|
||||
#### 测试用例4评分表
|
||||
|
||||
| 评估项目 | 得分 | 备注 |
|
||||
|---------|-----|------|
|
||||
| **编辑节点(/20)** | | |
|
||||
| 画面感增强 | /5 | |
|
||||
| 情感表达 | /5 | |
|
||||
| 文本流畅性 | /5 | |
|
||||
| 长度控制 | /5 | |
|
||||
| **分镜节点(/20)** | | |
|
||||
| 分镜数量 | /5 | |
|
||||
| 描述具体性 | /5 | |
|
||||
| 提示词质量 | /5 | |
|
||||
| 格式规范性 | /5 | |
|
||||
| **总分** | **/40** | |
|
||||
|
||||
---
|
||||
|
||||
### 综合评估总结
|
||||
|
||||
#### 平均得分:____ / 40
|
||||
|
||||
#### 总体评级:
|
||||
- [ ] 优秀(36-40分)
|
||||
- [ ] 良好(28-35分)
|
||||
- [ ] 一般(20-27分)
|
||||
- [ ] 需要改进(<20分)
|
||||
|
||||
#### 主要优点:
|
||||
1.
|
||||
2.
|
||||
3.
|
||||
|
||||
#### 主要问题:
|
||||
1.
|
||||
2.
|
||||
3.
|
||||
|
||||
#### 改进建议:
|
||||
1.
|
||||
2.
|
||||
3.
|
||||
|
||||
#### 可行性判断:
|
||||
- [ ] **可行**:输出质量达标,流程顺畅,可以继续优化
|
||||
- [ ] **部分可行**:需要调整提示词或参数后再次测试
|
||||
- [ ] **不可行**:输出质量不足,需要重新设计方案
|
||||
49
tests/test-inputs.md
Normal file
49
tests/test-inputs.md
Normal file
@ -0,0 +1,49 @@
|
||||
## 测试用例1:基础场景
|
||||
|
||||
输入文本:
|
||||
```
|
||||
李阳推开厚重的木门,月光透过窗户洒在地板上。他看到父亲坐在书桌前,手里拿着一封信。房间里弥漫着淡淡的墨香,父亲的背影显得格外孤独。
|
||||
```
|
||||
|
||||
预期输出:
|
||||
1. 编辑节点:润色后的叙述文本(更丰富的视觉和情感描述)
|
||||
2. 分镜节点:3-5个分镜的Markdown描述
|
||||
|
||||
---
|
||||
|
||||
## 测试用例2:动作场景
|
||||
|
||||
输入文本:
|
||||
```
|
||||
王雪快速穿过拥挤的街道,雨水打湿了她的头发。她回头看了一眼,追赶者的影子在路灯下拉长。心跳加速,她躲进了小巷的阴影中。
|
||||
```
|
||||
|
||||
预期输出:
|
||||
1. 编辑节点:增强动作节奏感
|
||||
2. 分镜节点:动态构图的分镜描述
|
||||
|
||||
---
|
||||
|
||||
## 测试用例3:对话场景
|
||||
|
||||
输入文本:
|
||||
```
|
||||
"你为什么要这么做?"林夏的声音在颤抖,她紧紧攥着手中的照片。张明沉默了片刻,望向窗外灰暗的天空:"有些事情,你现在还不会明白。"
|
||||
```
|
||||
|
||||
预期输出:
|
||||
1. 编辑节点:增强对话张力和人物情绪
|
||||
2. 分镜节点:包含人物表情和对话的分镜
|
||||
|
||||
---
|
||||
|
||||
## 测试用例4:奇幻场景
|
||||
|
||||
输入文本:
|
||||
```
|
||||
龙翼展开,遮蔽了半边天空。骑士拔出长剑,剑身泛着蓝色的魔法光芒。巨龙俯下头颅,金色的竖瞳凝视着这个渺小的人类。空气在燃烧,大地在颤抖。
|
||||
```
|
||||
|
||||
预期输出:
|
||||
1. 编辑节点:增强奇幻氛围和史诗感
|
||||
2. 分镜节点:包含特效和动作的分镜
|
||||
101
workflow/manga-generator-dify-dsl.json
Normal file
101
workflow/manga-generator-dify-dsl.json
Normal file
@ -0,0 +1,101 @@
|
||||
{
|
||||
"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格式分镜提示词"
|
||||
}
|
||||
]
|
||||
}
|
||||
481
workflow/剧本创作通用工作流-v1.yml
Normal file
481
workflow/剧本创作通用工作流-v1.yml
Normal file
@ -0,0 +1,481 @@
|
||||
app:
|
||||
description: 通用剧本创作工作流 - 一套流程覆盖大纲、写作、拆解三种模式
|
||||
icon: 🎞️
|
||||
icon_background: '#E8F5E9'
|
||||
mode: workflow
|
||||
name: 剧本创作通用工作流-v1
|
||||
use_icon_as_answer_icon: false
|
||||
kind: app
|
||||
version: 0.1.2
|
||||
workflow:
|
||||
conversation_variables: []
|
||||
environment_variables: []
|
||||
features:
|
||||
file_upload:
|
||||
enabled: false
|
||||
opening_statement: '输入项目设定并选择模式:大纲模式 / 写作模式 / 拆解模式。'
|
||||
retriever_resource:
|
||||
enabled: false
|
||||
sensitive_word_avoidance:
|
||||
enabled: false
|
||||
speech_to_text:
|
||||
enabled: false
|
||||
suggested_questions_after_answer:
|
||||
enabled: false
|
||||
text_to_speech:
|
||||
enabled: false
|
||||
graph:
|
||||
edges:
|
||||
- data:
|
||||
isInIteration: false
|
||||
sourceType: start
|
||||
targetType: if-else
|
||||
id: 1940748800000-source-1940748800004-target
|
||||
source: '1940748800000'
|
||||
sourceHandle: source
|
||||
target: '1940748800004'
|
||||
targetHandle: target
|
||||
type: custom
|
||||
zIndex: 0
|
||||
- data:
|
||||
isInIteration: false
|
||||
sourceType: if-else
|
||||
targetType: llm
|
||||
id: 1940748800004-true-1940748800001-target
|
||||
source: '1940748800004'
|
||||
sourceHandle: 'true'
|
||||
target: '1940748800001'
|
||||
targetHandle: target
|
||||
type: custom
|
||||
zIndex: 0
|
||||
- data:
|
||||
isInIteration: false
|
||||
sourceType: if-else
|
||||
targetType: if-else
|
||||
id: 1940748800004-false-1940748800008-target
|
||||
source: '1940748800004'
|
||||
sourceHandle: 'false'
|
||||
target: '1940748800008'
|
||||
targetHandle: target
|
||||
type: custom
|
||||
zIndex: 0
|
||||
- data:
|
||||
isInIteration: false
|
||||
sourceType: llm
|
||||
targetType: answer
|
||||
id: 1940748800001-source-1940748800005-target
|
||||
source: '1940748800001'
|
||||
sourceHandle: source
|
||||
target: '1940748800005'
|
||||
targetHandle: target
|
||||
type: custom
|
||||
zIndex: 0
|
||||
- data:
|
||||
isInIteration: false
|
||||
sourceType: if-else
|
||||
targetType: llm
|
||||
id: 1940748800008-true-1940748800002-target
|
||||
source: '1940748800008'
|
||||
sourceHandle: 'true'
|
||||
target: '1940748800002'
|
||||
targetHandle: target
|
||||
type: custom
|
||||
zIndex: 0
|
||||
- data:
|
||||
isInIteration: false
|
||||
sourceType: if-else
|
||||
targetType: llm
|
||||
id: 1940748800008-false-1940748800003-target
|
||||
source: '1940748800008'
|
||||
sourceHandle: 'false'
|
||||
target: '1940748800003'
|
||||
targetHandle: target
|
||||
type: custom
|
||||
zIndex: 0
|
||||
- data:
|
||||
isInIteration: false
|
||||
sourceType: llm
|
||||
targetType: answer
|
||||
id: 1940748800002-source-1940748800006-target
|
||||
source: '1940748800002'
|
||||
sourceHandle: source
|
||||
target: '1940748800006'
|
||||
targetHandle: target
|
||||
type: custom
|
||||
zIndex: 0
|
||||
- data:
|
||||
isInIteration: false
|
||||
sourceType: llm
|
||||
targetType: answer
|
||||
id: 1940748800003-source-1940748800007-target
|
||||
source: '1940748800003'
|
||||
sourceHandle: source
|
||||
target: '1940748800007'
|
||||
targetHandle: target
|
||||
type: custom
|
||||
zIndex: 0
|
||||
nodes:
|
||||
- data:
|
||||
desc: ''
|
||||
selected: false
|
||||
title: 开始
|
||||
type: start
|
||||
variables:
|
||||
- label: 项目名
|
||||
max_length: 120
|
||||
options: []
|
||||
required: true
|
||||
type: text-input
|
||||
variable: project_name
|
||||
- label: 核心一句话
|
||||
max_length: 500
|
||||
options: []
|
||||
required: true
|
||||
type: paragraph
|
||||
variable: core_idea
|
||||
- label: 时代与世界观
|
||||
max_length: 1200
|
||||
options: []
|
||||
required: true
|
||||
type: paragraph
|
||||
variable: world_setting
|
||||
- label: 角色设定
|
||||
max_length: 2000
|
||||
options: []
|
||||
required: true
|
||||
type: paragraph
|
||||
variable: character_setup
|
||||
- label: 风格参考
|
||||
max_length: 1200
|
||||
options: []
|
||||
required: false
|
||||
type: paragraph
|
||||
variable: style_reference
|
||||
- label: 当前任务目标
|
||||
max_length: 1200
|
||||
options: []
|
||||
required: false
|
||||
type: paragraph
|
||||
variable: task_goal
|
||||
- label: 已有文本(拆解时必填)
|
||||
max_length: 8000
|
||||
options: []
|
||||
required: false
|
||||
type: paragraph
|
||||
variable: existing_text
|
||||
- label: 输出模式
|
||||
max_length: 24
|
||||
options:
|
||||
- 大纲模式
|
||||
- 写作模式
|
||||
- 拆解模式
|
||||
required: true
|
||||
type: select
|
||||
variable: output_mode
|
||||
height: 220
|
||||
id: '1940748800000'
|
||||
position:
|
||||
x: 80
|
||||
y: 280
|
||||
selected: false
|
||||
sourcePosition: right
|
||||
targetPosition: left
|
||||
type: custom
|
||||
width: 260
|
||||
- data:
|
||||
cases:
|
||||
- case_id: 'true'
|
||||
conditions:
|
||||
- comparison_operator: contains
|
||||
id: condition-001
|
||||
value: 大纲模式
|
||||
varType: string
|
||||
variable_selector:
|
||||
- '1940748800000'
|
||||
- output_mode
|
||||
id: 'true'
|
||||
logical_operator: and
|
||||
- case_id: 'false'
|
||||
conditions:
|
||||
- comparison_operator: not contains
|
||||
id: condition-002
|
||||
value: 大纲模式
|
||||
varType: string
|
||||
variable_selector:
|
||||
- '1940748800000'
|
||||
- output_mode
|
||||
id: 'false'
|
||||
logical_operator: and
|
||||
desc: 先判断是否走大纲模式
|
||||
selected: false
|
||||
title: 模式判断A
|
||||
type: if-else
|
||||
height: 140
|
||||
id: '1940748800004'
|
||||
position:
|
||||
x: 390
|
||||
y: 280
|
||||
selected: false
|
||||
sourcePosition: right
|
||||
targetPosition: left
|
||||
type: custom
|
||||
width: 244
|
||||
- data:
|
||||
cases:
|
||||
- case_id: 'true'
|
||||
conditions:
|
||||
- comparison_operator: contains
|
||||
id: condition-003
|
||||
value: 写作模式
|
||||
varType: string
|
||||
variable_selector:
|
||||
- '1940748800000'
|
||||
- output_mode
|
||||
id: 'true'
|
||||
logical_operator: and
|
||||
- case_id: 'false'
|
||||
conditions:
|
||||
- comparison_operator: not contains
|
||||
id: condition-004
|
||||
value: 写作模式
|
||||
varType: string
|
||||
variable_selector:
|
||||
- '1940748800000'
|
||||
- output_mode
|
||||
id: 'false'
|
||||
logical_operator: and
|
||||
desc: 非大纲后,区分写作与拆解
|
||||
selected: false
|
||||
title: 模式判断B
|
||||
type: if-else
|
||||
height: 140
|
||||
id: '1940748800008'
|
||||
position:
|
||||
x: 700
|
||||
y: 420
|
||||
selected: false
|
||||
sourcePosition: right
|
||||
targetPosition: left
|
||||
type: custom
|
||||
width: 244
|
||||
- data:
|
||||
context:
|
||||
enabled: false
|
||||
desc: 生成可执行的剧本全局规划
|
||||
model:
|
||||
completion_params:
|
||||
max_tokens: 3600
|
||||
temperature: 0.7
|
||||
mode: chat
|
||||
name: deepseek-reasoner
|
||||
provider: langgenius/deepseek/deepseek
|
||||
prompt_template:
|
||||
- id: system-001
|
||||
role: system
|
||||
text: |
|
||||
你是资深剧集编剧统筹,擅长长剧结构设计。
|
||||
任务:基于输入生成“可持续连载”的剧本大纲,不空泛。
|
||||
|
||||
输出格式(Markdown):
|
||||
# 项目总纲
|
||||
## 1) 核心卖点(3条)
|
||||
## 2) 世界观规则(5条)
|
||||
## 3) 主角成长弧(起点-转折-代价-终局)
|
||||
## 4) 关键配角弧(至少3人)
|
||||
## 5) 三幕式结构(每幕目标、冲突、爆点)
|
||||
## 6) 20集分集卡点(每集2-3句,含结尾钩子)
|
||||
## 7) 风险与修正建议(至少5条)
|
||||
|
||||
约束:
|
||||
- 每集必须有“目标-阻碍-变化”
|
||||
- 不要模板化鸡汤句
|
||||
- 允许爽点,但必须包含代价
|
||||
- id: user-001
|
||||
role: user
|
||||
text: |
|
||||
项目名:{{#1940748800000.project_name#}}
|
||||
核心一句话:{{#1940748800000.core_idea#}}
|
||||
时代与世界观:{{#1940748800000.world_setting#}}
|
||||
角色设定:{{#1940748800000.character_setup#}}
|
||||
风格参考:{{#1940748800000.style_reference#}}
|
||||
当前任务目标:{{#1940748800000.task_goal#}}
|
||||
selected: false
|
||||
title: 大纲统筹AI
|
||||
type: llm
|
||||
variables: []
|
||||
height: 98
|
||||
id: '1940748800001'
|
||||
position:
|
||||
x: 700
|
||||
y: 120
|
||||
selected: false
|
||||
sourcePosition: right
|
||||
targetPosition: left
|
||||
type: custom
|
||||
width: 244
|
||||
- data:
|
||||
context:
|
||||
enabled: false
|
||||
desc: 生成单集可拍剧本草稿
|
||||
model:
|
||||
completion_params:
|
||||
max_tokens: 3800
|
||||
temperature: 0.72
|
||||
mode: chat
|
||||
name: deepseek-reasoner
|
||||
provider: langgenius/deepseek/deepseek
|
||||
prompt_template:
|
||||
- id: system-001
|
||||
role: system
|
||||
text: |
|
||||
你是影视剧本执笔编剧。
|
||||
任务:根据项目设定与当前任务,输出一集可拍的场景剧本草稿。
|
||||
|
||||
输出格式(Markdown):
|
||||
# 单集剧本草稿
|
||||
## 集标题
|
||||
## 本集主题与冲突
|
||||
## 场景列表(8-12场)
|
||||
每场按以下格式:
|
||||
- 场次编号
|
||||
- 时空标记(内/外 + 日/夜 + 地点)
|
||||
- 画面动作
|
||||
- 关键对白(2-6句)
|
||||
- 场尾钩子
|
||||
|
||||
## 节奏检查
|
||||
- 前10%钩子是否成立
|
||||
- 中段是否升级
|
||||
- 结尾是否有不可逆变化
|
||||
|
||||
约束:
|
||||
- 避免百科式解释
|
||||
- 角色对白要有身份区分
|
||||
- 保留类型爽点,同时写出代价
|
||||
- id: user-001
|
||||
role: user
|
||||
text: |
|
||||
项目名:{{#1940748800000.project_name#}}
|
||||
核心一句话:{{#1940748800000.core_idea#}}
|
||||
时代与世界观:{{#1940748800000.world_setting#}}
|
||||
角色设定:{{#1940748800000.character_setup#}}
|
||||
风格参考:{{#1940748800000.style_reference#}}
|
||||
当前任务目标:{{#1940748800000.task_goal#}}
|
||||
selected: false
|
||||
title: 剧本写作AI
|
||||
type: llm
|
||||
variables: []
|
||||
height: 98
|
||||
id: '1940748800002'
|
||||
position:
|
||||
x: 1020
|
||||
y: 350
|
||||
selected: false
|
||||
sourcePosition: right
|
||||
targetPosition: left
|
||||
type: custom
|
||||
width: 244
|
||||
- data:
|
||||
context:
|
||||
enabled: false
|
||||
desc: 将已有剧本拆解为生产资料(分镜/口播/发布文案)
|
||||
model:
|
||||
completion_params:
|
||||
max_tokens: 3800
|
||||
temperature: 0.65
|
||||
mode: chat
|
||||
name: deepseek-reasoner
|
||||
provider: langgenius/deepseek/deepseek
|
||||
prompt_template:
|
||||
- id: system-001
|
||||
role: system
|
||||
text: |
|
||||
你是内容拆解与改编总监。
|
||||
任务:把输入的剧本文本拆解为短视频与图文生产资料。
|
||||
|
||||
输出格式(Markdown):
|
||||
# 剧本拆解包
|
||||
## 1) 剧情主线摘要(150字内)
|
||||
## 2) 关键角色卡(主角+2配角)
|
||||
## 3) 分镜提纲(6-10镜头)
|
||||
每条含:镜头目的 / 画面 / 台词要点 / 情绪
|
||||
## 4) 60秒口播稿
|
||||
## 5) 小红书笔记版文案(220-320字)
|
||||
## 6) 标题10条(悬念/反差/结论各至少3条)
|
||||
## 7) 封面文案3组(主+副)
|
||||
|
||||
约束:
|
||||
- 不改变原剧情核心事件
|
||||
- 可优化节奏与表达,但不凭空新增关键设定
|
||||
- id: user-001
|
||||
role: user
|
||||
text: |
|
||||
项目名:{{#1940748800000.project_name#}}
|
||||
风格参考:{{#1940748800000.style_reference#}}
|
||||
当前任务目标:{{#1940748800000.task_goal#}}
|
||||
已有文本:{{#1940748800000.existing_text#}}
|
||||
selected: false
|
||||
title: 剧本拆解AI
|
||||
type: llm
|
||||
variables: []
|
||||
height: 98
|
||||
id: '1940748800003'
|
||||
position:
|
||||
x: 1020
|
||||
y: 520
|
||||
selected: false
|
||||
sourcePosition: right
|
||||
targetPosition: left
|
||||
type: custom
|
||||
width: 244
|
||||
- data:
|
||||
answer: '{{#1940748800001.text#}}'
|
||||
desc: 输出项目总纲与分集卡点
|
||||
selected: false
|
||||
title: 大纲模式输出
|
||||
type: answer
|
||||
variables: []
|
||||
height: 102
|
||||
id: '1940748800005'
|
||||
position:
|
||||
x: 1330
|
||||
y: 120
|
||||
selected: false
|
||||
sourcePosition: right
|
||||
targetPosition: left
|
||||
type: custom
|
||||
width: 244
|
||||
- data:
|
||||
answer: '{{#1940748800002.text#}}'
|
||||
desc: 输出单集可拍剧本草稿
|
||||
selected: false
|
||||
title: 写作模式输出
|
||||
type: answer
|
||||
variables: []
|
||||
height: 102
|
||||
id: '1940748800006'
|
||||
position:
|
||||
x: 1330
|
||||
y: 350
|
||||
selected: false
|
||||
sourcePosition: right
|
||||
targetPosition: left
|
||||
type: custom
|
||||
width: 244
|
||||
- data:
|
||||
answer: '{{#1940748800003.text#}}'
|
||||
desc: 输出剧本拆解资料包
|
||||
selected: false
|
||||
title: 拆解模式输出
|
||||
type: answer
|
||||
variables: []
|
||||
height: 102
|
||||
id: '1940748800007'
|
||||
position:
|
||||
x: 1330
|
||||
y: 520
|
||||
selected: false
|
||||
sourcePosition: right
|
||||
targetPosition: left
|
||||
type: custom
|
||||
width: 244
|
||||
589
workflow/剧本创作通用工作流-v2.yml
Normal file
589
workflow/剧本创作通用工作流-v2.yml
Normal file
@ -0,0 +1,589 @@
|
||||
app:
|
||||
description: 通用剧本创作工作流 - 同时生成大纲、写作、拆解并导出DOCX
|
||||
icon: 🎞️
|
||||
icon_background: '#E8F5E9'
|
||||
mode: workflow
|
||||
name: 剧本创作通用工作流-v2
|
||||
use_icon_as_answer_icon: false
|
||||
dependencies:
|
||||
- current_identifier: null
|
||||
type: marketplace
|
||||
value:
|
||||
marketplace_plugin_unique_identifier: bowenliang123/md_exporter:2.2.0@9f39c2c2c1cd09180e2cc053090adc9886019483f502727467f136712b8b9639
|
||||
version: null
|
||||
- current_identifier: null
|
||||
type: marketplace
|
||||
value:
|
||||
marketplace_plugin_unique_identifier: langgenius/deepseek:0.0.11@35bcd3f233f99d07bdadef8b326945df3bda5e8f773330144bc90d84800336b9
|
||||
version: null
|
||||
kind: app
|
||||
version: 0.5.0
|
||||
workflow:
|
||||
conversation_variables: []
|
||||
environment_variables: []
|
||||
features:
|
||||
file_upload:
|
||||
enabled: false
|
||||
opening_statement: '输入项目设定后,将自动同时生成:项目大纲、单集草稿、拆解素材,并导出为DOCX。'
|
||||
retriever_resource:
|
||||
enabled: false
|
||||
sensitive_word_avoidance:
|
||||
enabled: false
|
||||
speech_to_text:
|
||||
enabled: false
|
||||
suggested_questions: []
|
||||
suggested_questions_after_answer:
|
||||
enabled: false
|
||||
text_to_speech:
|
||||
enabled: false
|
||||
language: ''
|
||||
voice: ''
|
||||
graph:
|
||||
edges:
|
||||
- data:
|
||||
isInIteration: false
|
||||
isInLoop: false
|
||||
sourceType: start
|
||||
targetType: llm
|
||||
id: 2040748800000-source-2040748800001-target
|
||||
source: '2040748800000'
|
||||
sourceHandle: source
|
||||
target: '2040748800001'
|
||||
targetHandle: target
|
||||
type: custom
|
||||
zIndex: 0
|
||||
- data:
|
||||
isInIteration: false
|
||||
isInLoop: false
|
||||
sourceType: llm
|
||||
targetType: llm
|
||||
id: 2040748800001-source-2040748800002-target
|
||||
source: '2040748800001'
|
||||
sourceHandle: source
|
||||
target: '2040748800002'
|
||||
targetHandle: target
|
||||
type: custom
|
||||
zIndex: 0
|
||||
- data:
|
||||
isInIteration: false
|
||||
isInLoop: false
|
||||
sourceType: start
|
||||
targetType: llm
|
||||
id: 2040748800000-source-2040748800003-target
|
||||
source: '2040748800000'
|
||||
sourceHandle: source
|
||||
target: '2040748800003'
|
||||
targetHandle: target
|
||||
type: custom
|
||||
zIndex: 0
|
||||
- data:
|
||||
isInIteration: false
|
||||
isInLoop: false
|
||||
sourceType: llm
|
||||
targetType: code
|
||||
id: 2040748800001-source-2040748800004-target
|
||||
source: '2040748800001'
|
||||
sourceHandle: source
|
||||
target: '2040748800004'
|
||||
targetHandle: target
|
||||
type: custom
|
||||
zIndex: 0
|
||||
- data:
|
||||
isInIteration: false
|
||||
isInLoop: false
|
||||
sourceType: llm
|
||||
targetType: code
|
||||
id: 2040748800002-source-2040748800004-target
|
||||
source: '2040748800002'
|
||||
sourceHandle: source
|
||||
target: '2040748800004'
|
||||
targetHandle: target
|
||||
type: custom
|
||||
zIndex: 0
|
||||
- data:
|
||||
isInIteration: false
|
||||
isInLoop: false
|
||||
sourceType: llm
|
||||
targetType: code
|
||||
id: 2040748800003-source-2040748800004-target
|
||||
source: '2040748800003'
|
||||
sourceHandle: source
|
||||
target: '2040748800004'
|
||||
targetHandle: target
|
||||
type: custom
|
||||
zIndex: 0
|
||||
- data:
|
||||
isInIteration: false
|
||||
isInLoop: false
|
||||
sourceType: code
|
||||
targetType: tool
|
||||
id: 2040748800004-source-2040748800005-target
|
||||
source: '2040748800004'
|
||||
sourceHandle: source
|
||||
target: '2040748800005'
|
||||
targetHandle: target
|
||||
type: custom
|
||||
zIndex: 0
|
||||
- data:
|
||||
isInIteration: false
|
||||
isInLoop: false
|
||||
sourceType: tool
|
||||
targetType: end
|
||||
id: 2040748800005-source-2040748800006-target
|
||||
source: '2040748800005'
|
||||
sourceHandle: source
|
||||
target: '2040748800006'
|
||||
targetHandle: target
|
||||
type: custom
|
||||
zIndex: 0
|
||||
nodes:
|
||||
- data:
|
||||
selected: false
|
||||
title: 开始
|
||||
type: start
|
||||
variables:
|
||||
- default: ''
|
||||
hint: ''
|
||||
label: 项目名
|
||||
max_length: 120
|
||||
options: []
|
||||
placeholder: ''
|
||||
required: true
|
||||
type: text-input
|
||||
variable: project_name
|
||||
- default: ''
|
||||
hint: ''
|
||||
label: 核心一句话
|
||||
max_length: 500
|
||||
options: []
|
||||
placeholder: ''
|
||||
required: true
|
||||
type: paragraph
|
||||
variable: core_idea
|
||||
- default: ''
|
||||
hint: ''
|
||||
label: 时代与世界观
|
||||
max_length: 1200
|
||||
options: []
|
||||
placeholder: ''
|
||||
required: true
|
||||
type: paragraph
|
||||
variable: world_setting
|
||||
- default: ''
|
||||
hint: ''
|
||||
label: 角色设定
|
||||
max_length: 2500
|
||||
options: []
|
||||
placeholder: ''
|
||||
required: true
|
||||
type: paragraph
|
||||
variable: character_setup
|
||||
- default: ''
|
||||
hint: ''
|
||||
label: 风格参考
|
||||
max_length: 1200
|
||||
options: []
|
||||
placeholder: ''
|
||||
required: false
|
||||
type: paragraph
|
||||
variable: style_reference
|
||||
- default: ''
|
||||
hint: ''
|
||||
label: 当前任务目标
|
||||
max_length: 1200
|
||||
options: []
|
||||
placeholder: ''
|
||||
required: false
|
||||
type: paragraph
|
||||
variable: task_goal
|
||||
- default: 第1集
|
||||
hint: ''
|
||||
label: 目标集数(用于单集生成)
|
||||
max_length: 32
|
||||
options: []
|
||||
placeholder: 例如:第1集 / 第10集
|
||||
required: true
|
||||
type: text-input
|
||||
variable: target_episode
|
||||
- default: ''
|
||||
hint: ''
|
||||
label: 已有文本(用于拆解)
|
||||
max_length: 8000
|
||||
options: []
|
||||
placeholder: ''
|
||||
required: false
|
||||
type: paragraph
|
||||
variable: existing_text
|
||||
height: 250
|
||||
id: '2040748800000'
|
||||
position:
|
||||
x: 80
|
||||
y: 260
|
||||
positionAbsolute:
|
||||
x: 80
|
||||
y: 260
|
||||
selected: false
|
||||
sourcePosition: right
|
||||
targetPosition: left
|
||||
type: custom
|
||||
width: 260
|
||||
- data:
|
||||
context:
|
||||
enabled: false
|
||||
variable_selector: []
|
||||
desc: 生成项目总纲和分集卡点
|
||||
model:
|
||||
completion_params:
|
||||
temperature: 0.7
|
||||
max_tokens: 3200
|
||||
mode: chat
|
||||
name: deepseek-chat
|
||||
provider: langgenius/deepseek/deepseek
|
||||
prompt_template:
|
||||
- id: sys-001
|
||||
role: system
|
||||
text: |
|
||||
你是资深剧集编剧统筹。输出务必具体、可执行。
|
||||
|
||||
输出格式(Markdown):
|
||||
# A. 项目总纲
|
||||
## 核心卖点(3条)
|
||||
## 世界观规则(5条)
|
||||
## 主角成长弧(起点-转折-代价-终局)
|
||||
## 关键配角弧(至少3人)
|
||||
## 三幕式结构(每幕目标、冲突、爆点)
|
||||
## 20集分集卡点(每集2-3句,含结尾钩子)
|
||||
## 风险与修正建议(至少5条)
|
||||
- id: usr-001
|
||||
role: user
|
||||
text: |
|
||||
项目名:{{#2040748800000.project_name#}}
|
||||
核心一句话:{{#2040748800000.core_idea#}}
|
||||
时代与世界观:{{#2040748800000.world_setting#}}
|
||||
角色设定:{{#2040748800000.character_setup#}}
|
||||
风格参考:{{#2040748800000.style_reference#}}
|
||||
当前任务目标:{{#2040748800000.task_goal#}}
|
||||
selected: false
|
||||
title: 大纲统筹AI
|
||||
type: llm
|
||||
variables: []
|
||||
height: 98
|
||||
id: '2040748800001'
|
||||
position:
|
||||
x: 420
|
||||
y: 80
|
||||
positionAbsolute:
|
||||
x: 420
|
||||
y: 80
|
||||
selected: false
|
||||
sourcePosition: right
|
||||
targetPosition: left
|
||||
type: custom
|
||||
width: 260
|
||||
- data:
|
||||
context:
|
||||
enabled: false
|
||||
variable_selector: []
|
||||
desc: 基于A总纲生成指定集数的单集草稿
|
||||
model:
|
||||
completion_params:
|
||||
temperature: 0.72
|
||||
max_tokens: 3200
|
||||
mode: chat
|
||||
name: deepseek-chat
|
||||
provider: langgenius/deepseek/deepseek
|
||||
prompt_template:
|
||||
- id: sys-002
|
||||
role: system
|
||||
text: |
|
||||
你是影视剧本执笔编剧。你的唯一依据是输入的“A.项目总纲”,必须严格对齐,不得偏离。
|
||||
|
||||
输出格式(Markdown):
|
||||
# B. 单集剧本草稿
|
||||
## 对齐检查(先输出)
|
||||
- 目标集数:
|
||||
- 对应总纲卡点原文:
|
||||
- 本集承接上集/推进主线说明:
|
||||
## 集标题
|
||||
## 本集主题与冲突
|
||||
## 场景列表(8-12场)
|
||||
每场格式:场次编号 / 时空标记 / 画面动作 / 关键对白 / 场尾钩子
|
||||
## 节奏检查
|
||||
- 前10%钩子
|
||||
- 中段升级
|
||||
- 结尾不可逆变化
|
||||
|
||||
硬性约束:
|
||||
1. 仅生成“目标集数”对应内容
|
||||
2. 不得新增会破坏总纲主线的关键设定
|
||||
3. 角色关系与能力边界必须与总纲一致
|
||||
4. 信息不足时,只做最小补全并显式标注“补全假设”
|
||||
- id: usr-002
|
||||
role: user
|
||||
text: |
|
||||
A.项目总纲全文:
|
||||
{{#2040748800001.text#}}
|
||||
|
||||
项目名:{{#2040748800000.project_name#}}
|
||||
目标集数:{{#2040748800000.target_episode#}}
|
||||
核心一句话:{{#2040748800000.core_idea#}}
|
||||
时代与世界观:{{#2040748800000.world_setting#}}
|
||||
角色设定:{{#2040748800000.character_setup#}}
|
||||
风格参考:{{#2040748800000.style_reference#}}
|
||||
当前任务目标:{{#2040748800000.task_goal#}}
|
||||
selected: false
|
||||
title: 剧本写作AI
|
||||
type: llm
|
||||
variables: []
|
||||
height: 98
|
||||
id: '2040748800002'
|
||||
position:
|
||||
x: 420
|
||||
y: 280
|
||||
positionAbsolute:
|
||||
x: 420
|
||||
y: 280
|
||||
selected: false
|
||||
sourcePosition: right
|
||||
targetPosition: left
|
||||
type: custom
|
||||
width: 260
|
||||
- data:
|
||||
context:
|
||||
enabled: false
|
||||
variable_selector: []
|
||||
desc: 将已有剧本拆解为短视频与图文素材
|
||||
model:
|
||||
completion_params:
|
||||
temperature: 0.65
|
||||
max_tokens: 3200
|
||||
mode: chat
|
||||
name: deepseek-chat
|
||||
provider: langgenius/deepseek/deepseek
|
||||
prompt_template:
|
||||
- id: sys-003
|
||||
role: system
|
||||
text: |
|
||||
你是内容拆解与改编总监。
|
||||
|
||||
输出格式(Markdown):
|
||||
# C. 剧本拆解包
|
||||
## 剧情主线摘要(150字内)
|
||||
## 关键角色卡(主角+2配角)
|
||||
## 分镜提纲(6-10镜头)
|
||||
## 60秒口播稿
|
||||
## 小红书笔记版文案(220-320字)
|
||||
## 标题10条(悬念/反差/结论)
|
||||
## 封面文案3组(主+副)
|
||||
|
||||
约束:不改变原剧情核心事件,不凭空新增关键设定。
|
||||
- id: usr-003
|
||||
role: user
|
||||
text: |
|
||||
项目名:{{#2040748800000.project_name#}}
|
||||
风格参考:{{#2040748800000.style_reference#}}
|
||||
当前任务目标:{{#2040748800000.task_goal#}}
|
||||
已有文本:{{#2040748800000.existing_text#}}
|
||||
selected: false
|
||||
title: 剧本拆解AI
|
||||
type: llm
|
||||
variables: []
|
||||
height: 98
|
||||
id: '2040748800003'
|
||||
position:
|
||||
x: 420
|
||||
y: 480
|
||||
positionAbsolute:
|
||||
x: 420
|
||||
y: 480
|
||||
selected: false
|
||||
sourcePosition: right
|
||||
targetPosition: left
|
||||
type: custom
|
||||
width: 260
|
||||
- data:
|
||||
code: |
|
||||
function main({project_name, outline_text, writing_text, breakdown_text}) {
|
||||
const md = `# ${project_name} - 剧本创作输出包\n\n${outline_text}\n\n---\n\n${writing_text}\n\n---\n\n${breakdown_text}`;
|
||||
return {
|
||||
merged_markdown: md,
|
||||
output_name: `${project_name}-剧本创作输出包`
|
||||
};
|
||||
}
|
||||
code_language: javascript
|
||||
outputs:
|
||||
merged_markdown:
|
||||
children: null
|
||||
type: string
|
||||
output_name:
|
||||
children: null
|
||||
type: string
|
||||
selected: false
|
||||
title: 合并Markdown
|
||||
type: code
|
||||
variables:
|
||||
- value_selector:
|
||||
- '2040748800000'
|
||||
- project_name
|
||||
value_type: string
|
||||
variable: project_name
|
||||
- value_selector:
|
||||
- '2040748800001'
|
||||
- text
|
||||
value_type: string
|
||||
variable: outline_text
|
||||
- value_selector:
|
||||
- '2040748800002'
|
||||
- text
|
||||
value_type: string
|
||||
variable: writing_text
|
||||
- value_selector:
|
||||
- '2040748800003'
|
||||
- text
|
||||
value_type: string
|
||||
variable: breakdown_text
|
||||
height: 52
|
||||
id: '2040748800004'
|
||||
position:
|
||||
x: 780
|
||||
y: 280
|
||||
positionAbsolute:
|
||||
x: 780
|
||||
y: 280
|
||||
selected: false
|
||||
sourcePosition: right
|
||||
targetPosition: left
|
||||
type: custom
|
||||
width: 260
|
||||
- data:
|
||||
is_team_authorization: true
|
||||
paramSchemas:
|
||||
- auto_generate: null
|
||||
default: null
|
||||
form: llm
|
||||
human_description:
|
||||
en_US: Markdown text
|
||||
zh_Hans: Markdown格式文本
|
||||
label:
|
||||
en_US: Markdown text
|
||||
zh_Hans: Markdown格式文本
|
||||
llm_description: ''
|
||||
max: null
|
||||
min: null
|
||||
name: md_text
|
||||
options: []
|
||||
placeholder: null
|
||||
precision: null
|
||||
required: true
|
||||
scope: null
|
||||
template: null
|
||||
type: string
|
||||
- auto_generate: null
|
||||
default: null
|
||||
form: llm
|
||||
human_description:
|
||||
en_US: Optional docx template file for styling
|
||||
zh_Hans: 可选的docx模板文件,用于样式控制
|
||||
label:
|
||||
en_US: DOCX Template File
|
||||
zh_Hans: DOCX 模板文件
|
||||
llm_description: ''
|
||||
max: null
|
||||
min: null
|
||||
name: docx_template_file
|
||||
options: []
|
||||
placeholder: null
|
||||
precision: null
|
||||
required: false
|
||||
scope: null
|
||||
template: null
|
||||
type: file
|
||||
- auto_generate: null
|
||||
default: null
|
||||
form: llm
|
||||
human_description:
|
||||
en_US: Optional custom output file name
|
||||
zh_Hans: 可选的自定义输出文件名
|
||||
label:
|
||||
en_US: Output Filename
|
||||
zh_Hans: 输出文件名
|
||||
llm_description: ''
|
||||
max: null
|
||||
min: null
|
||||
name: output_filename
|
||||
options: []
|
||||
placeholder: null
|
||||
precision: null
|
||||
required: false
|
||||
scope: null
|
||||
template: null
|
||||
type: string
|
||||
params:
|
||||
docx_template_file: ''
|
||||
md_text: ''
|
||||
output_filename: ''
|
||||
plugin_id: bowenliang123/md_exporter
|
||||
plugin_unique_identifier: bowenliang123/md_exporter:2.2.0@9f39c2c2c1cd09180e2cc053090adc9886019483f502727467f136712b8b9639
|
||||
provider_icon: /console/api/workspaces/current/plugin/icon
|
||||
provider_id: bowenliang123/md_exporter/md_exporter
|
||||
provider_name: bowenliang123/md_exporter/md_exporter
|
||||
provider_type: builtin
|
||||
selected: false
|
||||
title: Markdown 转 DOCX 文件
|
||||
tool_configurations: {}
|
||||
tool_description: 将 Markdown 转换为 DOCX 文件的工具
|
||||
tool_label: Markdown 转 DOCX 文件
|
||||
tool_name: md_to_docx
|
||||
tool_node_version: '2'
|
||||
tool_parameters:
|
||||
docx_template_file:
|
||||
type: constant
|
||||
value: null
|
||||
md_text:
|
||||
type: mixed
|
||||
value: '{{#2040748800004.merged_markdown#}}'
|
||||
output_filename:
|
||||
type: mixed
|
||||
value: '{{#2040748800004.output_name#}}'
|
||||
type: tool
|
||||
height: 52
|
||||
id: '2040748800005'
|
||||
position:
|
||||
x: 1140
|
||||
y: 280
|
||||
positionAbsolute:
|
||||
x: 1140
|
||||
y: 280
|
||||
selected: false
|
||||
sourcePosition: right
|
||||
targetPosition: left
|
||||
type: custom
|
||||
width: 260
|
||||
- data:
|
||||
outputs:
|
||||
- value_selector:
|
||||
- '2040748800004'
|
||||
- merged_markdown
|
||||
value_type: string
|
||||
variable: merged_markdown
|
||||
- value_selector:
|
||||
- '2040748800005'
|
||||
- files
|
||||
value_type: array[file]
|
||||
variable: docx_files
|
||||
selected: false
|
||||
title: 输出
|
||||
type: end
|
||||
height: 114
|
||||
id: '2040748800006'
|
||||
position:
|
||||
x: 1460
|
||||
y: 280
|
||||
positionAbsolute:
|
||||
x: 1460
|
||||
y: 280
|
||||
selected: false
|
||||
sourcePosition: right
|
||||
targetPosition: left
|
||||
type: custom
|
||||
width: 260
|
||||
479
workflow/历史账号Dify工作流-v1.yml
Normal file
479
workflow/历史账号Dify工作流-v1.yml
Normal file
@ -0,0 +1,479 @@
|
||||
app:
|
||||
description: 历史内容账号增长工作流 - 支持选题标题模式和全链路发布模式
|
||||
icon: 🎬
|
||||
icon_background: '#FFF3E0'
|
||||
mode: workflow
|
||||
name: 历史账号Dify工作流-v1
|
||||
use_icon_as_answer_icon: false
|
||||
kind: app
|
||||
version: 0.1.2
|
||||
workflow:
|
||||
conversation_variables: []
|
||||
environment_variables: []
|
||||
features:
|
||||
file_upload:
|
||||
enabled: false
|
||||
opening_statement: '请输入账号定位与主题方向,选择输出模式生成小红书历史内容发布方案。'
|
||||
retriever_resource:
|
||||
enabled: false
|
||||
sensitive_word_avoidance:
|
||||
enabled: false
|
||||
speech_to_text:
|
||||
enabled: false
|
||||
suggested_questions_after_answer:
|
||||
enabled: false
|
||||
text_to_speech:
|
||||
enabled: false
|
||||
graph:
|
||||
edges:
|
||||
- data:
|
||||
isInIteration: false
|
||||
sourceType: start
|
||||
targetType: if-else
|
||||
id: 1840748800000-source-1840748800004-target
|
||||
source: '1840748800000'
|
||||
sourceHandle: source
|
||||
target: '1840748800004'
|
||||
targetHandle: target
|
||||
type: custom
|
||||
zIndex: 0
|
||||
- data:
|
||||
isInIteration: false
|
||||
sourceType: if-else
|
||||
targetType: llm
|
||||
id: 1840748800004-true-1840748800001-target
|
||||
source: '1840748800004'
|
||||
sourceHandle: 'true'
|
||||
target: '1840748800001'
|
||||
targetHandle: target
|
||||
type: custom
|
||||
zIndex: 0
|
||||
- data:
|
||||
isInIteration: false
|
||||
sourceType: if-else
|
||||
targetType: llm
|
||||
id: 1840748800004-false-1840748800005-target
|
||||
source: '1840748800004'
|
||||
sourceHandle: 'false'
|
||||
target: '1840748800005'
|
||||
targetHandle: target
|
||||
type: custom
|
||||
zIndex: 0
|
||||
- data:
|
||||
isInIteration: false
|
||||
sourceType: llm
|
||||
targetType: llm
|
||||
id: 1840748800001-source-1840748800002-target
|
||||
source: '1840748800001'
|
||||
sourceHandle: source
|
||||
target: '1840748800002'
|
||||
targetHandle: target
|
||||
type: custom
|
||||
zIndex: 0
|
||||
- data:
|
||||
isInIteration: false
|
||||
sourceType: llm
|
||||
targetType: llm
|
||||
id: 1840748800005-source-1840748800006-target
|
||||
source: '1840748800005'
|
||||
sourceHandle: source
|
||||
target: '1840748800006'
|
||||
targetHandle: target
|
||||
type: custom
|
||||
zIndex: 0
|
||||
- data:
|
||||
isInIteration: false
|
||||
sourceType: llm
|
||||
targetType: answer
|
||||
id: 1840748800002-source-1840748800003-target
|
||||
source: '1840748800002'
|
||||
sourceHandle: source
|
||||
target: '1840748800003'
|
||||
targetHandle: target
|
||||
type: custom
|
||||
zIndex: 0
|
||||
- data:
|
||||
isInIteration: false
|
||||
sourceType: llm
|
||||
targetType: answer
|
||||
id: 1840748800006-source-1840748800007-target
|
||||
source: '1840748800006'
|
||||
sourceHandle: source
|
||||
target: '1840748800007'
|
||||
targetHandle: target
|
||||
type: custom
|
||||
zIndex: 0
|
||||
nodes:
|
||||
- data:
|
||||
desc: ''
|
||||
selected: false
|
||||
title: 开始
|
||||
type: start
|
||||
variables:
|
||||
- label: 账号定位
|
||||
max_length: 800
|
||||
options: []
|
||||
required: true
|
||||
type: paragraph
|
||||
variable: account_positioning
|
||||
- label: 受众画像
|
||||
max_length: 500
|
||||
options: []
|
||||
required: true
|
||||
type: paragraph
|
||||
variable: audience_profile
|
||||
- label: 主题方向
|
||||
max_length: 300
|
||||
options: []
|
||||
required: true
|
||||
type: paragraph
|
||||
variable: topic_direction
|
||||
- label: 参考风格描述
|
||||
max_length: 800
|
||||
options: []
|
||||
required: false
|
||||
type: paragraph
|
||||
variable: reference_style
|
||||
- label: 输出模式
|
||||
max_length: 48
|
||||
options:
|
||||
- 选题标题模式
|
||||
- 全链路发布模式
|
||||
required: true
|
||||
type: select
|
||||
variable: output_mode
|
||||
height: 167
|
||||
id: '1840748800000'
|
||||
position:
|
||||
x: 92
|
||||
y: 292
|
||||
selected: false
|
||||
sourcePosition: right
|
||||
targetPosition: left
|
||||
type: custom
|
||||
width: 244
|
||||
- data:
|
||||
cases:
|
||||
- case_id: 'true'
|
||||
conditions:
|
||||
- comparison_operator: contains
|
||||
id: condition-001
|
||||
value: 选题标题模式
|
||||
varType: string
|
||||
variable_selector:
|
||||
- '1840748800000'
|
||||
- output_mode
|
||||
id: 'true'
|
||||
logical_operator: and
|
||||
- case_id: 'false'
|
||||
conditions:
|
||||
- comparison_operator: contains
|
||||
id: condition-002
|
||||
value: 全链路发布模式
|
||||
varType: string
|
||||
variable_selector:
|
||||
- '1840748800000'
|
||||
- output_mode
|
||||
id: 'false'
|
||||
logical_operator: and
|
||||
desc: 根据输出模式选择处理路径
|
||||
selected: false
|
||||
title: 模式选择器
|
||||
type: if-else
|
||||
height: 140
|
||||
id: '1840748800004'
|
||||
position:
|
||||
x: 384
|
||||
y: 292
|
||||
selected: false
|
||||
sourcePosition: right
|
||||
targetPosition: left
|
||||
type: custom
|
||||
width: 244
|
||||
- data:
|
||||
context:
|
||||
enabled: false
|
||||
desc: 生成高传播潜力历史选题池
|
||||
model:
|
||||
completion_params:
|
||||
max_tokens: 2600
|
||||
temperature: 0.7
|
||||
mode: chat
|
||||
name: deepseek-reasoner
|
||||
provider: langgenius/deepseek/deepseek
|
||||
prompt_template:
|
||||
- id: system-001
|
||||
role: system
|
||||
text: |
|
||||
你是“小红书历史内容增长策划”。
|
||||
任务:基于账号定位与受众,生成可发布的历史内容选题池。
|
||||
|
||||
风格要求:
|
||||
1. 学习“电影化叙事 + 冲突驱动 + 史料锚点”的表达方式
|
||||
2. 只学习方法,不抄袭任何已有标题或原句
|
||||
3. 标题必须有冲突、代价、反转中的至少两个元素
|
||||
4. 选题优先“人物命运拐点、权力博弈、战争决策复盘”
|
||||
|
||||
输出格式(Markdown):
|
||||
# 选题池(10条)
|
||||
|
||||
| 序号 | 选题标题 | 冲突钩子 | 史料锚点 | 爆款概率(1-10) | 风险提示 |
|
||||
|---|---|---|---|---|---|
|
||||
| 1 | ... | ... | ... | ... | ... |
|
||||
|
||||
## Top3推荐
|
||||
1. [标题] - 推荐理由(受众匹配 + 传播潜力)
|
||||
2. [标题] - 推荐理由
|
||||
3. [标题] - 推荐理由
|
||||
|
||||
## 账号差异化建议
|
||||
- 至少给3条,避免同质化。
|
||||
- id: user-001
|
||||
role: user
|
||||
text: |
|
||||
账号定位:{{#1840748800000.account_positioning#}}
|
||||
受众画像:{{#1840748800000.audience_profile#}}
|
||||
主题方向:{{#1840748800000.topic_direction#}}
|
||||
参考风格描述:{{#1840748800000.reference_style#}}
|
||||
selected: false
|
||||
title: 选题策划AI
|
||||
type: llm
|
||||
variables: []
|
||||
height: 98
|
||||
id: '1840748800001'
|
||||
position:
|
||||
x: 676
|
||||
y: 150
|
||||
selected: false
|
||||
sourcePosition: right
|
||||
targetPosition: left
|
||||
type: custom
|
||||
width: 244
|
||||
- data:
|
||||
context:
|
||||
enabled: false
|
||||
desc: 生成完整发布包(脚本+封面+正文+标签+互动)
|
||||
model:
|
||||
completion_params:
|
||||
max_tokens: 3600
|
||||
temperature: 0.65
|
||||
mode: chat
|
||||
name: deepseek-reasoner
|
||||
provider: langgenius/deepseek/deepseek
|
||||
prompt_template:
|
||||
- id: system-001
|
||||
role: system
|
||||
text: |
|
||||
你是“小红书历史内容总编导”。
|
||||
任务:输出一条可直接发布的完整内容包。
|
||||
|
||||
方法要求:
|
||||
1. 采用电影化叙事节奏:开场钩子 -> 冲突升级 -> 反转结论 -> 价值落点
|
||||
2. 观点必须可回溯到史料线索,避免绝对化断言
|
||||
3. 只借鉴风格,不复用其他创作者的标题与句子
|
||||
4. 语言要克制、硬核、可口播
|
||||
|
||||
输出格式(Markdown):
|
||||
# 全链路发布包
|
||||
|
||||
## 1) 主标题(5条)
|
||||
- 标题A
|
||||
- 标题B
|
||||
- 标题C
|
||||
- 标题D
|
||||
- 标题E
|
||||
|
||||
## 2) 封面文案(3组)
|
||||
- 组1:主文案 + 副文案(8-14字主文案)
|
||||
- 组2:...
|
||||
- 组3:...
|
||||
|
||||
## 3) 60-90秒口播脚本
|
||||
- 开场钩子(1-2句)
|
||||
- 第一段:背景与冲突
|
||||
- 第二段:关键转折与证据
|
||||
- 第三段:结论与现实映射
|
||||
- 收束金句(1句)
|
||||
|
||||
## 4) 笔记正文(300-450字)
|
||||
- 结构化排版,适合小红书阅读
|
||||
|
||||
## 5) 评论区引导(3条)
|
||||
- 争议型问题1
|
||||
- 站队型问题2
|
||||
- 延展型问题3
|
||||
|
||||
## 6) 话题标签(12个)
|
||||
- 4个泛历史标签
|
||||
- 4个细分题材标签
|
||||
- 4个互动增长标签
|
||||
|
||||
## 7) 史实校验清单
|
||||
- 列出3-5条关键事实与可查线索(史记/汉书等)
|
||||
- 哪些是“推断”,哪些是“史实记载”,必须标注
|
||||
- id: user-001
|
||||
role: user
|
||||
text: |
|
||||
账号定位:{{#1840748800000.account_positioning#}}
|
||||
受众画像:{{#1840748800000.audience_profile#}}
|
||||
主题方向:{{#1840748800000.topic_direction#}}
|
||||
参考风格描述:{{#1840748800000.reference_style#}}
|
||||
selected: false
|
||||
title: 全链路策划AI
|
||||
type: llm
|
||||
variables: []
|
||||
height: 98
|
||||
id: '1840748800005'
|
||||
position:
|
||||
x: 676
|
||||
y: 380
|
||||
selected: false
|
||||
sourcePosition: right
|
||||
targetPosition: left
|
||||
type: custom
|
||||
width: 244
|
||||
- data:
|
||||
context:
|
||||
enabled: false
|
||||
desc: 生成标题与封面策略并给出A/B测试计划
|
||||
model:
|
||||
completion_params:
|
||||
max_tokens: 3000
|
||||
temperature: 0.6
|
||||
mode: chat
|
||||
name: deepseek-reasoner
|
||||
provider: langgenius/deepseek/deepseek
|
||||
prompt_template:
|
||||
- id: system-001
|
||||
role: system
|
||||
text: |
|
||||
你是“小红书标题与封面实验官”。
|
||||
任务:基于选题池输出可执行的标题方案与实验计划。
|
||||
|
||||
输出格式(Markdown):
|
||||
# 标题与封面实验方案
|
||||
|
||||
## 1) Top5选题深挖
|
||||
对每个选题输出:
|
||||
- 标题版本A(悬念型)
|
||||
- 标题版本B(结论型)
|
||||
- 标题版本C(反差型)
|
||||
- 封面主文案(8-14字)
|
||||
- 封面副文案(10-18字)
|
||||
- 首句口播(15秒内)
|
||||
|
||||
## 2) A/B测试建议
|
||||
- 测试批次:首发48小时
|
||||
- 指标:点击率、3秒留存、完播率、收藏率
|
||||
- 给出每个选题的主推版本与备选版本
|
||||
|
||||
## 3) 发布节奏
|
||||
- 给出7天排期(每天1条)
|
||||
- 标明每条内容的目标(拉新/互动/收藏)
|
||||
|
||||
约束:
|
||||
- 不得重复输入中的原句
|
||||
- 不得制造未经证据支持的历史细节
|
||||
- id: user-001
|
||||
role: user
|
||||
text: '{{#1840748800001.text#}}'
|
||||
selected: false
|
||||
title: 标题封面AI
|
||||
type: llm
|
||||
variables: []
|
||||
height: 98
|
||||
id: '1840748800002'
|
||||
position:
|
||||
x: 968
|
||||
y: 150
|
||||
selected: false
|
||||
sourcePosition: right
|
||||
targetPosition: left
|
||||
type: custom
|
||||
width: 244
|
||||
- data:
|
||||
context:
|
||||
enabled: false
|
||||
desc: 给全链路内容做二次压缩与发布前检查
|
||||
model:
|
||||
completion_params:
|
||||
max_tokens: 3000
|
||||
temperature: 0.55
|
||||
mode: chat
|
||||
name: deepseek-reasoner
|
||||
provider: langgenius/deepseek/deepseek
|
||||
prompt_template:
|
||||
- id: system-001
|
||||
role: system
|
||||
text: |
|
||||
你是“小红书发布前审校AI”。
|
||||
任务:对内容包做实战化改写,提升发布可执行性。
|
||||
|
||||
输出格式(Markdown):
|
||||
# 发布前最终稿
|
||||
|
||||
## 最终主标题(1条)
|
||||
## 备选标题(2条)
|
||||
## 最终封面文案(主+副)
|
||||
## 口播精简版(45-70秒)
|
||||
## 笔记精简版(220-320字)
|
||||
## 标签最终版(10个)
|
||||
## 风险检查
|
||||
- 可能争议点
|
||||
- 建议保守表述
|
||||
- 审核风险词替换建议
|
||||
|
||||
要求:
|
||||
- 可直接复制发布
|
||||
- 保留硬核感,但避免绝对化措辞
|
||||
- id: user-001
|
||||
role: user
|
||||
text: '{{#1840748800005.text#}}'
|
||||
selected: false
|
||||
title: 发布审校AI
|
||||
type: llm
|
||||
variables: []
|
||||
height: 98
|
||||
id: '1840748800006'
|
||||
position:
|
||||
x: 968
|
||||
y: 380
|
||||
selected: false
|
||||
sourcePosition: right
|
||||
targetPosition: left
|
||||
type: custom
|
||||
width: 244
|
||||
- data:
|
||||
answer: '{{#1840748800002.text#}}'
|
||||
desc: 输出选题标题实验方案
|
||||
selected: false
|
||||
title: 选题标题输出
|
||||
type: answer
|
||||
variables: []
|
||||
height: 102
|
||||
id: '1840748800003'
|
||||
position:
|
||||
x: 1260
|
||||
y: 150
|
||||
selected: false
|
||||
sourcePosition: right
|
||||
targetPosition: left
|
||||
type: custom
|
||||
width: 244
|
||||
- data:
|
||||
answer: '{{#1840748800006.text#}}'
|
||||
desc: 输出全链路发布最终稿
|
||||
selected: false
|
||||
title: 全链路发布输出
|
||||
type: answer
|
||||
variables: []
|
||||
height: 102
|
||||
id: '1840748800007'
|
||||
position:
|
||||
x: 1260
|
||||
y: 380
|
||||
selected: false
|
||||
sourcePosition: right
|
||||
targetPosition: left
|
||||
type: custom
|
||||
width: 244
|
||||
646
workflow/合同助手.yml
Normal file
646
workflow/合同助手.yml
Normal file
@ -0,0 +1,646 @@
|
||||
app:
|
||||
description: ''
|
||||
icon: 🤖
|
||||
icon_background: '#FFEAD5'
|
||||
mode: workflow
|
||||
name: 合同助手
|
||||
use_icon_as_answer_icon: false
|
||||
dependencies:
|
||||
- current_identifier: null
|
||||
type: marketplace
|
||||
value:
|
||||
marketplace_plugin_unique_identifier: langgenius/siliconflow:0.0.39@24cca06d03099357488b00b84ba59d39e76373478cb8b2cabd3a0a2aa1fe975b
|
||||
version: null
|
||||
- current_identifier: null
|
||||
type: marketplace
|
||||
value:
|
||||
marketplace_plugin_unique_identifier: bowenliang123/md_exporter:2.2.0@9f39c2c2c1cd09180e2cc053090adc9886019483f502727467f136712b8b9639
|
||||
version: null
|
||||
- current_identifier: null
|
||||
type: marketplace
|
||||
value:
|
||||
marketplace_plugin_unique_identifier: langgenius/deepseek:0.0.11@35bcd3f233f99d07bdadef8b326945df3bda5e8f773330144bc90d84800336b9
|
||||
version: null
|
||||
kind: app
|
||||
version: 0.5.0
|
||||
workflow:
|
||||
conversation_variables: []
|
||||
environment_variables: []
|
||||
features:
|
||||
file_upload:
|
||||
allowed_file_extensions:
|
||||
- .JPG
|
||||
- .JPEG
|
||||
- .PNG
|
||||
- .GIF
|
||||
- .WEBP
|
||||
- .SVG
|
||||
allowed_file_types:
|
||||
- image
|
||||
allowed_file_upload_methods:
|
||||
- local_file
|
||||
- remote_url
|
||||
enabled: false
|
||||
fileUploadConfig:
|
||||
audio_file_size_limit: 50
|
||||
batch_count_limit: 5
|
||||
file_size_limit: 15
|
||||
image_file_batch_limit: 10
|
||||
image_file_size_limit: 10
|
||||
single_chunk_attachment_limit: 10
|
||||
video_file_size_limit: 100
|
||||
workflow_file_upload_limit: 10
|
||||
image:
|
||||
enabled: false
|
||||
number_limits: 3
|
||||
transfer_methods:
|
||||
- local_file
|
||||
- remote_url
|
||||
number_limits: 3
|
||||
opening_statement: ''
|
||||
retriever_resource:
|
||||
enabled: true
|
||||
sensitive_word_avoidance:
|
||||
enabled: false
|
||||
speech_to_text:
|
||||
enabled: false
|
||||
suggested_questions: []
|
||||
suggested_questions_after_answer:
|
||||
enabled: false
|
||||
text_to_speech:
|
||||
enabled: false
|
||||
language: ''
|
||||
voice: ''
|
||||
graph:
|
||||
edges:
|
||||
- data:
|
||||
isInIteration: false
|
||||
isInLoop: false
|
||||
sourceType: knowledge-retrieval
|
||||
targetType: llm
|
||||
id: 1770108318162-source-1770108337053-target
|
||||
source: '1770108318162'
|
||||
sourceHandle: source
|
||||
target: '1770108337053'
|
||||
targetHandle: target
|
||||
type: custom
|
||||
zIndex: 0
|
||||
- data:
|
||||
isInLoop: false
|
||||
sourceType: llm
|
||||
targetType: tool
|
||||
id: 1770108337053-source-1770108739786-target
|
||||
source: '1770108337053'
|
||||
sourceHandle: source
|
||||
target: '1770108739786'
|
||||
targetHandle: target
|
||||
type: custom
|
||||
zIndex: 0
|
||||
- data:
|
||||
isInIteration: false
|
||||
isInLoop: false
|
||||
sourceType: tool
|
||||
targetType: code
|
||||
id: 1770108739786-source-1770109395677-target
|
||||
selected: false
|
||||
source: '1770108739786'
|
||||
sourceHandle: source
|
||||
target: '1770109395677'
|
||||
targetHandle: target
|
||||
type: custom
|
||||
zIndex: 0
|
||||
- data:
|
||||
isInIteration: false
|
||||
isInLoop: false
|
||||
sourceType: code
|
||||
targetType: http-request
|
||||
id: 1770109395677-source-1770170304071-target
|
||||
source: '1770109395677'
|
||||
sourceHandle: source
|
||||
target: '1770170304071'
|
||||
targetHandle: target
|
||||
type: custom
|
||||
zIndex: 0
|
||||
- data:
|
||||
isInIteration: false
|
||||
isInLoop: false
|
||||
sourceType: http-request
|
||||
targetType: code
|
||||
id: 1770170304071-source-1770171334605-target
|
||||
source: '1770170304071'
|
||||
sourceHandle: source
|
||||
target: '1770171334605'
|
||||
targetHandle: target
|
||||
type: custom
|
||||
zIndex: 0
|
||||
- data:
|
||||
isInIteration: false
|
||||
isInLoop: false
|
||||
sourceType: code
|
||||
targetType: end
|
||||
id: 1770171334605-source-1770108424229-target
|
||||
source: '1770171334605'
|
||||
sourceHandle: source
|
||||
target: '1770108424229'
|
||||
targetHandle: target
|
||||
type: custom
|
||||
zIndex: 0
|
||||
- data:
|
||||
isInIteration: false
|
||||
isInLoop: false
|
||||
sourceType: start
|
||||
targetType: llm
|
||||
id: 1770106628924-source-1770187316880-target
|
||||
source: '1770106628924'
|
||||
sourceHandle: source
|
||||
target: '1770187316880'
|
||||
targetHandle: target
|
||||
type: custom
|
||||
zIndex: 0
|
||||
- data:
|
||||
isInIteration: false
|
||||
isInLoop: false
|
||||
sourceType: llm
|
||||
targetType: knowledge-retrieval
|
||||
id: 1770187316880-source-1770108318162-target
|
||||
source: '1770187316880'
|
||||
sourceHandle: source
|
||||
target: '1770108318162'
|
||||
targetHandle: target
|
||||
type: custom
|
||||
zIndex: 0
|
||||
nodes:
|
||||
- data:
|
||||
selected: false
|
||||
title: 用户输入
|
||||
type: start
|
||||
variables:
|
||||
- default: ''
|
||||
hint: ''
|
||||
label: 合同名称
|
||||
max_length: 256
|
||||
options: []
|
||||
placeholder: ''
|
||||
required: true
|
||||
type: text-input
|
||||
variable: name
|
||||
- default: ''
|
||||
hint: ''
|
||||
label: 合同编号
|
||||
max_length: 256
|
||||
options: []
|
||||
placeholder: ''
|
||||
required: true
|
||||
type: text-input
|
||||
variable: number
|
||||
- default: ''
|
||||
hint: ''
|
||||
label: 合同类型
|
||||
max_length: 48
|
||||
options: []
|
||||
placeholder: ''
|
||||
required: true
|
||||
type: text-input
|
||||
variable: type
|
||||
- default: ''
|
||||
hint: ''
|
||||
label: 项目名称
|
||||
max_length: 2048
|
||||
options: []
|
||||
placeholder: ''
|
||||
required: true
|
||||
type: paragraph
|
||||
variable: project_name_list
|
||||
- default: ''
|
||||
hint: ''
|
||||
label: 乙方全称
|
||||
max_length: 256
|
||||
options: []
|
||||
placeholder: ''
|
||||
required: true
|
||||
type: text-input
|
||||
variable: customer_name
|
||||
- default: ''
|
||||
hint: ''
|
||||
label: 甲方全程
|
||||
max_length: 256
|
||||
options: []
|
||||
placeholder: ''
|
||||
required: true
|
||||
type: text-input
|
||||
variable: org_name
|
||||
- default: ''
|
||||
hint: ''
|
||||
label: 合同金额
|
||||
max_length: 48
|
||||
options: []
|
||||
placeholder: ''
|
||||
required: true
|
||||
type: text-input
|
||||
variable: amount
|
||||
- default: ''
|
||||
hint: ''
|
||||
label: 付款说明及比例
|
||||
max_length: 512
|
||||
options: []
|
||||
placeholder: ''
|
||||
required: true
|
||||
type: paragraph
|
||||
variable: remark
|
||||
height: 291
|
||||
id: '1770106628924'
|
||||
position:
|
||||
x: 80
|
||||
y: 282
|
||||
positionAbsolute:
|
||||
x: 80
|
||||
y: 282
|
||||
selected: false
|
||||
sourcePosition: right
|
||||
targetPosition: left
|
||||
type: custom
|
||||
width: 242
|
||||
- data:
|
||||
dataset_ids:
|
||||
- 6uACYcOQ1t0C3/KHbn3tqeCHvEd4w2QFhEq/9948NnDQ6A/VUSeqwzivZhbajG2b
|
||||
multiple_retrieval_config:
|
||||
reranking_enable: true
|
||||
reranking_mode: reranking_model
|
||||
reranking_model:
|
||||
model: netease-youdao/bce-reranker-base_v1
|
||||
provider: langgenius/siliconflow/siliconflow
|
||||
top_k: 4
|
||||
query_attachment_selector: []
|
||||
query_variable_selector:
|
||||
- '1770187316880'
|
||||
- text
|
||||
retrieval_mode: multiple
|
||||
selected: false
|
||||
title: 知识检索
|
||||
type: knowledge-retrieval
|
||||
height: 90
|
||||
id: '1770108318162'
|
||||
position:
|
||||
x: 682
|
||||
y: 282
|
||||
positionAbsolute:
|
||||
x: 682
|
||||
y: 282
|
||||
selected: false
|
||||
sourcePosition: right
|
||||
targetPosition: left
|
||||
type: custom
|
||||
width: 242
|
||||
- data:
|
||||
context:
|
||||
enabled: true
|
||||
variable_selector:
|
||||
- '1770108318162'
|
||||
- result
|
||||
model:
|
||||
completion_params:
|
||||
temperature: 0.7
|
||||
mode: chat
|
||||
name: deepseek-chat
|
||||
provider: langgenius/deepseek/deepseek
|
||||
prompt_template:
|
||||
- id: 54faae96-2f1e-4a0c-b0a7-a6bf59d2a61b
|
||||
role: system
|
||||
text: "# Role\n你是一位拥有 10 年经验的中国资深法务专家,精通《中华人民共和国民法典》。你的专长是根据用户提供的核心要素,结合公司内部的标准合同范本,起草严谨、规范的法律合同。\n\
|
||||
\n# Task\n请根据下方的 [Input Data] 和 [Retrieved Context](知识库检索到的合同范本),撰写一份完整的合同草案。\n\
|
||||
\n# Input Data\n- 合同名称: {{#1770106628924.name#}}\n- 合同编号: {{#1770106628924.number#}}\n\
|
||||
- 甲方信息: {{#1770106628924.org_name#}}\n- 乙方信息: {{#1770106628924.customer_name#}}\n\
|
||||
- 项目列表: {{#1770106628924.project_name_list#}}\n- 合同总额: {{#1770106628924.amount#}}\
|
||||
\ (请自动转换为大写金额)\n- 备注/特殊条款: {{#1770106628924.remark#}}(包含付款方式、分期比例、特殊交付要求等)\n\
|
||||
\n# Context (Reference Templates)\n{{#context#}}\n*(注意:这是 Dify 检索到的知识库内容,请以此为骨架)*\n\
|
||||
\n# Drafting Rules (必须严格遵守)\n\n1. **结构规范**:\n - 必须包含:合同封面、首部(双方信息)、引言(法律依据)、正文(条款)、尾部(签字盖章页)。\n\
|
||||
\ - 法律依据必须引用《中华人民共和国民法典》。\n\n2. **类型自适应**:\n - **情形 A(政府/咨询类)**:如果合同名称包含“风险评估”、“咨询”、“专项债”,请参照《风险评估咨询技术服务合同》风格。\n\
|
||||
\ - 强调“依据国家、省、市政策”。\n - 包含“不可预见情况”的变更条款。\n - **情形 B(设计/合作类)**:如果合同名称包含“设计”、“合作”、“外包”,请参照《设计合作协议》风格。\n\
|
||||
\ - 必须明确交付物格式:Word、PDF 及 CAD。\n - 必须包含“禁止擅自转包/分包”条款。\n\n3. **核心条款强制要求**:\n\
|
||||
\ - **违约责任**:必须包含赔偿范围,具体表述为:“包括但不限于直接经济损失、预期可期待利益、诉讼费、律师费、保全费、差旅费等”。\n\
|
||||
\ - **保密例外**:必须包含“市场拓展宣传权”条款,即:“为了进行市场拓展,乙方可以披露曾为甲方工作的事实及一般性质,但不得泄露核心机密。”\n\
|
||||
\ - **争议解决**:管辖法院统一设定为 **甲方所在地** 人民法院。\n\n4. **数据填充逻辑**:\n - 将 {{#1770106628924.amount#}}\
|
||||
\ 填充至“费用与支付”条款,并根据 中的分期描{{#1770106628924.remark#}}述(如“30%首付”)自动生成分期付款明细。\n\
|
||||
\ - 将 {{#1770106628924.project_name_list#}} 填充至“鉴于”或“项目背景”部分。\n\n5.\
|
||||
\ **格式输出**:\n - 使用清晰的 Markdown 格式(# 标题, ## 条款)。\n - 不要输出任何“好的,我来为您生成”之类的废话,直接输出合同正文。\n\
|
||||
\n# Output Example Structure\n## [合同名称]\n**合同编号**:[编号]\n\n**甲方**:[甲方全称]\n\
|
||||
...\n**乙方**:[乙方全称]\n...\n\n### 第一条 法律依据\n...\n### 第二条 业务范围与工作内容\n...\n\
|
||||
(根据备注生成的支付条款)\n...\n### [最后] 签字页"
|
||||
selected: true
|
||||
title: 合同
|
||||
type: llm
|
||||
vision:
|
||||
enabled: false
|
||||
height: 88
|
||||
id: '1770108337053'
|
||||
position:
|
||||
x: 984
|
||||
y: 282
|
||||
positionAbsolute:
|
||||
x: 984
|
||||
y: 282
|
||||
selected: true
|
||||
sourcePosition: right
|
||||
targetPosition: left
|
||||
type: custom
|
||||
width: 242
|
||||
- data:
|
||||
outputs:
|
||||
- value_selector:
|
||||
- '1770171334605'
|
||||
- fileId
|
||||
value_type: string
|
||||
variable: file_id
|
||||
selected: false
|
||||
title: 输出
|
||||
type: end
|
||||
height: 88
|
||||
id: '1770108424229'
|
||||
position:
|
||||
x: 3005.6255273523284
|
||||
y: 282
|
||||
positionAbsolute:
|
||||
x: 3005.6255273523284
|
||||
y: 282
|
||||
selected: false
|
||||
sourcePosition: right
|
||||
targetPosition: left
|
||||
type: custom
|
||||
width: 242
|
||||
- data:
|
||||
is_team_authorization: true
|
||||
paramSchemas:
|
||||
- auto_generate: null
|
||||
default: null
|
||||
form: llm
|
||||
human_description:
|
||||
en_US: Markdown text
|
||||
ja_JP: Markdown text
|
||||
pt_BR: Markdown text
|
||||
zh_Hans: Markdown格式文本
|
||||
label:
|
||||
en_US: Markdown text
|
||||
ja_JP: Markdown text
|
||||
pt_BR: Markdown text
|
||||
zh_Hans: Markdown格式文本
|
||||
llm_description: ''
|
||||
max: null
|
||||
min: null
|
||||
name: md_text
|
||||
options: []
|
||||
placeholder: null
|
||||
precision: null
|
||||
required: true
|
||||
scope: null
|
||||
template: null
|
||||
type: string
|
||||
- auto_generate: null
|
||||
default: null
|
||||
form: llm
|
||||
human_description:
|
||||
en_US: Optional docx template file for styling。Use "Home"-"Styles Pane"
|
||||
in Microsoft Word to edit styles of the docx file.
|
||||
ja_JP: Optional docx template file for styling。Use "Home"-"Styles Pane"
|
||||
in Microsoft Word to edit styles of the docx file.
|
||||
pt_BR: Optional docx template file for styling。Use "Home"-"Styles Pane"
|
||||
in Microsoft Word to edit styles of the docx file.
|
||||
zh_Hans: 可选的docx模板文件,用于样式控制。使用Microsoft Word中“开始”-“样式窗格”对docx文件的样式进行编辑。
|
||||
label:
|
||||
en_US: DOCX Template File
|
||||
ja_JP: DOCX Template File
|
||||
pt_BR: DOCX Template File
|
||||
zh_Hans: DOCX 模板文件
|
||||
llm_description: An optional .pptx file that serves as a template for the
|
||||
generated presentation
|
||||
max: null
|
||||
min: null
|
||||
name: docx_template_file
|
||||
options: []
|
||||
placeholder: null
|
||||
precision: null
|
||||
required: false
|
||||
scope: null
|
||||
template: null
|
||||
type: file
|
||||
- auto_generate: null
|
||||
default: null
|
||||
form: llm
|
||||
human_description:
|
||||
en_US: Optional custom output file name, and the filename suffix is not
|
||||
required.
|
||||
ja_JP: Optional custom output file name, and the filename suffix is not
|
||||
required.
|
||||
pt_BR: Optional custom output file name, and the filename suffix is not
|
||||
required.
|
||||
zh_Hans: 可选的自定义输出文件名,后缀名无需指定
|
||||
label:
|
||||
en_US: Output Filename
|
||||
ja_JP: Output Filename
|
||||
pt_BR: Output Filename
|
||||
zh_Hans: 输出文件名
|
||||
llm_description: ''
|
||||
max: null
|
||||
min: null
|
||||
name: output_filename
|
||||
options: []
|
||||
placeholder: null
|
||||
precision: null
|
||||
required: false
|
||||
scope: null
|
||||
template: null
|
||||
type: string
|
||||
params:
|
||||
docx_template_file: ''
|
||||
md_text: ''
|
||||
output_filename: ''
|
||||
plugin_id: bowenliang123/md_exporter
|
||||
plugin_unique_identifier: bowenliang123/md_exporter:2.2.0@9f39c2c2c1cd09180e2cc053090adc9886019483f502727467f136712b8b9639
|
||||
provider_icon: /console/api/workspaces/current/plugin/icon?tenant_id=bc2d392f-7f32-4b7e-aaa8-fa5e13acb772&filename=f0bad95cda1671b4e49f0e05df6122ef9ec5d554e138f128795d11d3806c00ef.svg
|
||||
provider_id: bowenliang123/md_exporter/md_exporter
|
||||
provider_name: bowenliang123/md_exporter/md_exporter
|
||||
provider_type: builtin
|
||||
selected: false
|
||||
title: Markdown 转 DOCX 文件
|
||||
tool_configurations: {}
|
||||
tool_description: 将 Markdown 转换为 DOCX 文件的工具
|
||||
tool_label: Markdown 转 DOCX 文件
|
||||
tool_name: md_to_docx
|
||||
tool_node_version: '2'
|
||||
tool_parameters:
|
||||
docx_template_file:
|
||||
type: constant
|
||||
value: null
|
||||
md_text:
|
||||
type: mixed
|
||||
value: '{{#1770108337053.text#}}'
|
||||
output_filename:
|
||||
type: mixed
|
||||
value: '{{#1770106628924.name#}}'
|
||||
type: tool
|
||||
height: 52
|
||||
id: '1770108739786'
|
||||
position:
|
||||
x: 1419
|
||||
y: 282
|
||||
positionAbsolute:
|
||||
x: 1419
|
||||
y: 282
|
||||
selected: false
|
||||
sourcePosition: right
|
||||
targetPosition: left
|
||||
type: custom
|
||||
width: 242
|
||||
- data:
|
||||
code: "\nfunction main({files}) {\n const file = files[0]\n\n return\
|
||||
\ {\n url: file.url,\n filename: file.filename\n }\n}\n"
|
||||
code_language: javascript
|
||||
outputs:
|
||||
filename:
|
||||
children: null
|
||||
type: string
|
||||
url:
|
||||
children: null
|
||||
type: string
|
||||
selected: false
|
||||
title: 提取 file
|
||||
type: code
|
||||
variables:
|
||||
- value_selector:
|
||||
- '1770108739786'
|
||||
- files
|
||||
value_type: array[file]
|
||||
variable: files
|
||||
height: 52
|
||||
id: '1770109395677'
|
||||
position:
|
||||
x: 1824
|
||||
y: 282
|
||||
positionAbsolute:
|
||||
x: 1824
|
||||
y: 282
|
||||
selected: false
|
||||
sourcePosition: right
|
||||
targetPosition: left
|
||||
type: custom
|
||||
width: 242
|
||||
- data:
|
||||
authorization:
|
||||
config: null
|
||||
type: no-auth
|
||||
body:
|
||||
data:
|
||||
- id: key-value-117
|
||||
key: ''
|
||||
type: text
|
||||
value: "{\n \"url\":\"{{#1770109395677.url#}}\"\n \"fileName\":\"\
|
||||
{{#1770109395677.filename#}}\"\n}"
|
||||
type: json
|
||||
headers: ''
|
||||
method: post
|
||||
params: ''
|
||||
retry_config:
|
||||
max_retries: 3
|
||||
retry_enabled: true
|
||||
retry_interval: 100
|
||||
selected: false
|
||||
ssl_verify: true
|
||||
timeout:
|
||||
max_connect_timeout: 0
|
||||
max_read_timeout: 0
|
||||
max_write_timeout: 0
|
||||
title: HTTP 请求
|
||||
type: http-request
|
||||
url: http://129.28.93.36:3123/file/upload-url
|
||||
variables: []
|
||||
height: 137
|
||||
id: '1770170304071'
|
||||
position:
|
||||
x: 2200.6280674679188
|
||||
y: 282
|
||||
positionAbsolute:
|
||||
x: 2200.6280674679188
|
||||
y: 282
|
||||
selected: false
|
||||
sourcePosition: right
|
||||
targetPosition: left
|
||||
type: custom
|
||||
width: 242
|
||||
- data:
|
||||
code: "\nfunction main({arg1, id}) {\n const res = JSON.parse(arg1)\n \
|
||||
\ if (res.code === 200){\n const fileId = res.data.id\n \
|
||||
\ return {\n fileId: fileId\n }\n }\n return {\n\
|
||||
\ error: \"文件上传失败\"\n }\n}\n"
|
||||
code_language: javascript
|
||||
outputs:
|
||||
fileId:
|
||||
children: null
|
||||
type: string
|
||||
selected: false
|
||||
title: 提取文件 id 和 项目 id
|
||||
type: code
|
||||
variables:
|
||||
- value_selector:
|
||||
- '1770170304071'
|
||||
- body
|
||||
value_type: string
|
||||
variable: arg1
|
||||
height: 52
|
||||
id: '1770171334605'
|
||||
position:
|
||||
x: 2567.126350783164
|
||||
y: 282
|
||||
positionAbsolute:
|
||||
x: 2567.126350783164
|
||||
y: 282
|
||||
selected: false
|
||||
sourcePosition: right
|
||||
targetPosition: left
|
||||
type: custom
|
||||
width: 242
|
||||
- data:
|
||||
context:
|
||||
enabled: false
|
||||
variable_selector: []
|
||||
desc: ''
|
||||
model:
|
||||
completion_params:
|
||||
temperature: 0.7
|
||||
mode: chat
|
||||
name: deepseek-chat
|
||||
provider: langgenius/deepseek/deepseek
|
||||
prompt_template:
|
||||
- id: 008dcdb9-e4f6-43a3-bca2-227512323bba
|
||||
role: system
|
||||
text: "# Role\n你是一名资深的法务助理,专门负责在公司的合同数据库中检索最匹配的合同范本和条款。\n\n# Task\n根据用户提供的合同元数据,分析其业务实质,并将其转换为一段“用于检索向量数据库”的精准关键词或描述性语句。\n\
|
||||
\n# Input Data\n- 合同类型 (Type): {{#1770106628924.type#}}\n- 项目名称 (Project\
|
||||
\ List): {{#1770106628924.project_name_list#}}\n- 备注要求 (Remark): {{#1770106628924.remark#}}\n\
|
||||
- 乙方名称 (Customer Name): {{#1770106628924.customer_name#}}\n- 甲方名称: {{#1770106628924.org_name#}}\n\
|
||||
- 合同总金额:{{#1770106628924.amount#}}\n- 合同名称:{{#1770106628924.name#}}\n\n\
|
||||
# Rules for Query Generation\n1. **识别核心范本**:\n - 如果 Input 暗示是政府、公家单位、发债、评估,关键词必须包含“专项债券项目风险评估咨询技术服务合同”。\n\
|
||||
\ - 如果 Input 暗示是设计院、个人合作、画图,关键词必须包含“设计合作协议”。\n2. **提取特殊条款需求**:\n -\
|
||||
\ 从 `remark` 中提取关键约束(如:分期付款、保密期、违约金比例、知识产权归属)。\n3. **输出格式**:\n - 仅输出一段纯文本,包含:核心合同范本名称\
|
||||
\ + 关键业务场景 + 特殊条款关键词。\n - 不要输出任何解释性文字。\n\n# Example Output\n专项债券项目风险评估咨询技术服务合同\
|
||||
\ 政府对公业务 分期付款 违约责任 知识产权归属"
|
||||
selected: false
|
||||
title: 查询重写
|
||||
type: llm
|
||||
vision:
|
||||
enabled: false
|
||||
height: 88
|
||||
id: '1770187316880'
|
||||
position:
|
||||
x: 382
|
||||
y: 282
|
||||
positionAbsolute:
|
||||
x: 382
|
||||
y: 282
|
||||
selected: false
|
||||
sourcePosition: right
|
||||
targetPosition: left
|
||||
type: custom
|
||||
width: 242
|
||||
viewport:
|
||||
x: -304.92567306294177
|
||||
y: 270.1161833988058
|
||||
zoom: 1.1371907472107188
|
||||
rag_pipeline_variables: []
|
||||
407
workflow/漫画生成工作流-v2.yml
Normal file
407
workflow/漫画生成工作流-v2.yml
Normal file
@ -0,0 +1,407 @@
|
||||
app:
|
||||
description: 漫画生成工具 - 支持传统小说和连续动作描述两种输入模式
|
||||
icon: 🎨
|
||||
icon_background: '#E3F2FD'
|
||||
mode: workflow
|
||||
name: 漫画生成工作流-v2
|
||||
use_icon_as_answer_icon: false
|
||||
kind: app
|
||||
version: 0.1.2
|
||||
workflow:
|
||||
conversation_variables: []
|
||||
environment_variables: []
|
||||
features:
|
||||
file_upload:
|
||||
enabled: false
|
||||
opening_statement: '请输入小说段落或连续动作描述,选择输出模式生成漫画分镜提示词。'
|
||||
retriever_resource:
|
||||
enabled: false
|
||||
sensitive_word_avoidance:
|
||||
enabled: false
|
||||
speech_to_text:
|
||||
enabled: false
|
||||
suggested_questions_after_answer:
|
||||
enabled: false
|
||||
text_to_speech:
|
||||
enabled: false
|
||||
graph:
|
||||
edges:
|
||||
- data:
|
||||
isInIteration: false
|
||||
sourceType: start
|
||||
targetType: if-else
|
||||
id: 1740748800000-source-1740748800004-target
|
||||
source: '1740748800000'
|
||||
sourceHandle: source
|
||||
target: '1740748800004'
|
||||
targetHandle: target
|
||||
type: custom
|
||||
zIndex: 0
|
||||
- data:
|
||||
isInIteration: false
|
||||
sourceType: if-else
|
||||
targetType: llm
|
||||
id: 1740748800004-true-1740748800001-target
|
||||
source: '1740748800004'
|
||||
sourceHandle: 'true'
|
||||
target: '1740748800001'
|
||||
targetHandle: target
|
||||
type: custom
|
||||
zIndex: 0
|
||||
- data:
|
||||
isInIteration: false
|
||||
sourceType: if-else
|
||||
targetType: llm
|
||||
id: 1740748800004-false-1740748800005-target
|
||||
source: '1740748800004'
|
||||
sourceHandle: 'false'
|
||||
target: '1740748800005'
|
||||
targetHandle: target
|
||||
type: custom
|
||||
zIndex: 0
|
||||
- data:
|
||||
isInIteration: false
|
||||
sourceType: llm
|
||||
targetType: llm
|
||||
id: 1740748800001-source-1740748800002-target
|
||||
source: '1740748800001'
|
||||
sourceHandle: source
|
||||
target: '1740748800002'
|
||||
targetHandle: target
|
||||
type: custom
|
||||
zIndex: 0
|
||||
- data:
|
||||
isInIteration: false
|
||||
sourceType: llm
|
||||
targetType: llm
|
||||
id: 1740748800005-source-1740748800006-target
|
||||
source: '1740748800005'
|
||||
sourceHandle: source
|
||||
target: '1740748800006'
|
||||
targetHandle: target
|
||||
type: custom
|
||||
zIndex: 0
|
||||
- data:
|
||||
isInIteration: false
|
||||
sourceType: llm
|
||||
targetType: answer
|
||||
id: 1740748800002-source-1740748800003-target
|
||||
source: '1740748800002'
|
||||
sourceHandle: source
|
||||
target: '1740748800003'
|
||||
targetHandle: target
|
||||
type: custom
|
||||
zIndex: 0
|
||||
- data:
|
||||
isInIteration: false
|
||||
sourceType: llm
|
||||
targetType: answer
|
||||
id: 1740748800006-source-1740748800007-target
|
||||
source: '1740748800006'
|
||||
sourceHandle: source
|
||||
target: '1740748800007'
|
||||
targetHandle: target
|
||||
type: custom
|
||||
zIndex: 0
|
||||
nodes:
|
||||
- data:
|
||||
desc: ''
|
||||
selected: false
|
||||
title: 开始
|
||||
type: start
|
||||
variables:
|
||||
- label: 输入文本
|
||||
max_length: 3000
|
||||
options: []
|
||||
required: true
|
||||
type: paragraph
|
||||
variable: input_text
|
||||
- label: 输出模式
|
||||
max_length: 48
|
||||
options:
|
||||
- 传统漫画分镜
|
||||
- 时间线漫画分镜
|
||||
required: true
|
||||
type: select
|
||||
variable: output_mode
|
||||
height: 115
|
||||
id: '1740748800000'
|
||||
position:
|
||||
x: 92
|
||||
y: 292
|
||||
selected: false
|
||||
sourcePosition: right
|
||||
targetPosition: left
|
||||
type: custom
|
||||
width: 244
|
||||
- data:
|
||||
cases:
|
||||
- case_id: 'true'
|
||||
conditions:
|
||||
- comparison_operator: contains
|
||||
id: condition-001
|
||||
value: 传统漫画分镜
|
||||
varType: string
|
||||
variable_selector:
|
||||
- '1740748800000'
|
||||
- output_mode
|
||||
id: 'true'
|
||||
logical_operator: and
|
||||
- case_id: 'false'
|
||||
conditions:
|
||||
- comparison_operator: contains
|
||||
id: condition-002
|
||||
value: 时间线漫画分镜
|
||||
varType: string
|
||||
variable_selector:
|
||||
- '1740748800000'
|
||||
- output_mode
|
||||
id: 'false'
|
||||
logical_operator: and
|
||||
desc: 根据输出模式选择处理路径
|
||||
selected: false
|
||||
title: 模式选择器
|
||||
type: if-else
|
||||
height: 140
|
||||
id: '1740748800004'
|
||||
position:
|
||||
x: 384
|
||||
y: 292
|
||||
selected: false
|
||||
sourcePosition: right
|
||||
targetPosition: left
|
||||
type: custom
|
||||
width: 244
|
||||
- data:
|
||||
context:
|
||||
enabled: false
|
||||
desc: 润色小说文本,增强画面感
|
||||
model:
|
||||
completion_params:
|
||||
max_tokens: 2000
|
||||
temperature: 0.7
|
||||
mode: chat
|
||||
name: deepseek-reasoner
|
||||
provider: langgenius/deepseek/deepseek
|
||||
prompt_template:
|
||||
- id: system-001
|
||||
role: system
|
||||
text: |
|
||||
你是一个专业的小说编辑。你的任务是将用户提供的小说段落进行润色和增强,使其更适合转换为视觉分镜。
|
||||
|
||||
要求:
|
||||
1. 保持原有情节和人物设定不变
|
||||
2. 增强场景描述、角色动作和情感表达
|
||||
3. 让文本更具画面感和戏剧张力
|
||||
4. 输出保持中文,长度控制在原文本的1.2-1.5倍
|
||||
- id: user-001
|
||||
role: user
|
||||
text: '{{#1740748800000.input_text#}}'
|
||||
selected: false
|
||||
title: 小说编辑AI
|
||||
type: llm
|
||||
variables: []
|
||||
height: 98
|
||||
id: '1740748800001'
|
||||
position:
|
||||
x: 676
|
||||
y: 150
|
||||
selected: false
|
||||
sourcePosition: right
|
||||
targetPosition: left
|
||||
type: custom
|
||||
width: 244
|
||||
- data:
|
||||
context:
|
||||
enabled: false
|
||||
desc: 处理连续动作描述,提取时间节奏
|
||||
model:
|
||||
completion_params:
|
||||
max_tokens: 2000
|
||||
temperature: 0.7
|
||||
mode: chat
|
||||
name: deepseek-reasoner
|
||||
provider: langgenius/deepseek/deepseek
|
||||
prompt_template:
|
||||
- id: system-001
|
||||
role: system
|
||||
text: |
|
||||
你是一个专业的动作描述分析师。你的任务是分析用户提供的连续动作描述(如15秒画面描述),提取关键的时间节点和视觉转折点。
|
||||
|
||||
要求:
|
||||
1. 识别描述中的关键动作转折点(如从A动作转为B动作的瞬间)
|
||||
2. 标注每个关键动作的大致时间点(如"0-3秒"、"3-6秒"等,自由决定时间范围)
|
||||
3. 为每个时间点提取最具代表性的画面描述
|
||||
4. 保持动作的连贯性和叙事逻辑
|
||||
5. 输出格式:时间标记 + 画面描述,例如:
|
||||
[0-3秒] 王雪在雨中奔跑,长发湿漉漉贴在脸上
|
||||
[3-6秒] 惊惶回眸,看到追赶者的剪影
|
||||
6. 分镜数量由AI根据动作节奏自动决定(一般3-8个)
|
||||
- id: user-001
|
||||
role: user
|
||||
text: '{{#1740748800000.input_text#}}'
|
||||
selected: false
|
||||
title: 时间线分析AI
|
||||
type: llm
|
||||
variables: []
|
||||
height: 98
|
||||
id: '1740748800005'
|
||||
position:
|
||||
x: 676
|
||||
y: 380
|
||||
selected: false
|
||||
sourcePosition: right
|
||||
targetPosition: left
|
||||
type: custom
|
||||
width: 244
|
||||
- data:
|
||||
context:
|
||||
enabled: false
|
||||
desc: 将小说文本转换为传统漫画分镜
|
||||
model:
|
||||
completion_params:
|
||||
max_tokens: 3000
|
||||
temperature: 0.6
|
||||
mode: chat
|
||||
name: deepseek-reasoner
|
||||
provider: langgenius/deepseek/deepseek
|
||||
prompt_template:
|
||||
- id: system-001
|
||||
role: system
|
||||
text: |
|
||||
你是一个专业的漫画分镜师。请将叙述文本转换为3-5个分镜描述,每个分镜包含视觉元素和图片生成提示词。
|
||||
|
||||
输出格式要求(Markdown):
|
||||
# 分镜分析
|
||||
|
||||
## 场景概览
|
||||
[简要描述整体场景]
|
||||
|
||||
## 分镜详情
|
||||
|
||||
### 分镜1:[标题]
|
||||
**场景描述:** [详细视觉描述]
|
||||
**角色动作:** [主要角色动作]
|
||||
**情感氛围:** [情感色彩]
|
||||
**图片提示词:** [用于图片生成的提示词,包含风格、构图等]
|
||||
|
||||
### 分镜2:[标题]
|
||||
...
|
||||
|
||||
## 风格建议
|
||||
[推荐的图片生成风格,如:动漫风格、写实插画、水彩等]
|
||||
|
||||
注意:图片提示词要具体、详细,包含构图、灯光、风格等要素。
|
||||
- id: user-001
|
||||
role: user
|
||||
text: '{{#1740748800001.text#}}'
|
||||
selected: false
|
||||
title: 传统分镜AI
|
||||
type: llm
|
||||
variables: []
|
||||
height: 98
|
||||
id: '1740748800002'
|
||||
position:
|
||||
x: 968
|
||||
y: 150
|
||||
selected: false
|
||||
sourcePosition: right
|
||||
targetPosition: left
|
||||
type: custom
|
||||
width: 244
|
||||
- data:
|
||||
context:
|
||||
enabled: false
|
||||
desc: 将时间线分析转换为带时间标记的漫画分镜
|
||||
model:
|
||||
completion_params:
|
||||
max_tokens: 3000
|
||||
temperature: 0.6
|
||||
mode: chat
|
||||
name: deepseek-reasoner
|
||||
provider: langgenius/deepseek/deepseek
|
||||
prompt_template:
|
||||
- id: system-001
|
||||
role: system
|
||||
text: |
|
||||
你是一个专业的漫画分镜师。请将时间线分析转换为带时间标记的漫画分镜,每个分镜包含视觉元素和图片生成提示词。
|
||||
|
||||
输出格式要求(Markdown):
|
||||
# 时间线漫画分镜分析
|
||||
|
||||
## 场景概览
|
||||
[简要描述整体场景和时间跨度]
|
||||
|
||||
## 时间线分镜详情
|
||||
|
||||
### 分镜1:[时间标记] [标题]
|
||||
**时间点:** [如:0-3秒]
|
||||
**场景描述:** [详细视觉描述]
|
||||
**角色动作:** [主要角色动作]
|
||||
**情感氛围:** [情感色彩]
|
||||
**图片提示词:** [用于图片生成的提示词,包含风格、构图等]
|
||||
|
||||
### 分镜2:[时间标记] [标题]
|
||||
...
|
||||
|
||||
## 叙事节奏建议
|
||||
[关于分镜之间的时间感和节奏的建议]
|
||||
|
||||
## 风格建议
|
||||
[推荐的图片生成风格]
|
||||
|
||||
注意:
|
||||
1. 每个分镜必须标注时间点(如"0-3秒"、"3-6秒"等)
|
||||
2. 时间标记应该保持连贯,覆盖整个动作过程
|
||||
3. 图片提示词要具体、详细,可直接用于AI绘图
|
||||
- id: user-001
|
||||
role: user
|
||||
text: '{{#1740748800005.text#}}'
|
||||
selected: false
|
||||
title: 时间线分镜AI
|
||||
type: llm
|
||||
variables: []
|
||||
height: 98
|
||||
id: '1740748800006'
|
||||
position:
|
||||
x: 968
|
||||
y: 380
|
||||
selected: false
|
||||
sourcePosition: right
|
||||
targetPosition: left
|
||||
type: custom
|
||||
width: 244
|
||||
- data:
|
||||
answer: '{{#1740748800002.text#}}'
|
||||
desc: 输出传统漫画分镜提示词
|
||||
selected: false
|
||||
title: 传统分镜输出
|
||||
type: answer
|
||||
variables: []
|
||||
height: 102
|
||||
id: '1740748800003'
|
||||
position:
|
||||
x: 1260
|
||||
y: 150
|
||||
selected: false
|
||||
sourcePosition: right
|
||||
targetPosition: left
|
||||
type: custom
|
||||
width: 244
|
||||
- data:
|
||||
answer: '{{#1740748800006.text#}}'
|
||||
desc: 输出时间线漫画分镜提示词
|
||||
selected: false
|
||||
title: 时间线分镜输出
|
||||
type: answer
|
||||
variables: []
|
||||
height: 102
|
||||
id: '1740748800007'
|
||||
position:
|
||||
x: 1260
|
||||
y: 380
|
||||
selected: false
|
||||
sourcePosition: right
|
||||
targetPosition: left
|
||||
type: custom
|
||||
width: 244
|
||||
195
workflow/漫画生成验证工作流.yml
Normal file
195
workflow/漫画生成验证工作流.yml
Normal file
@ -0,0 +1,195 @@
|
||||
app:
|
||||
description: 漫画生成工具验证 - 从小说文本到分镜图片提示词
|
||||
icon: 🎨
|
||||
icon_background: '#E3F2FD'
|
||||
mode: workflow
|
||||
name: 漫画生成验证工作流
|
||||
use_icon_as_answer_icon: false
|
||||
kind: app
|
||||
version: 0.1.2
|
||||
workflow:
|
||||
conversation_variables: []
|
||||
environment_variables: []
|
||||
features:
|
||||
file_upload:
|
||||
enabled: false
|
||||
opening_statement: '请输入小说段落,我会帮你生成漫画分镜提示词。'
|
||||
retriever_resource:
|
||||
enabled: false
|
||||
sensitive_word_avoidance:
|
||||
enabled: false
|
||||
speech_to_text:
|
||||
enabled: false
|
||||
suggested_questions_after_answer:
|
||||
enabled: false
|
||||
text_to_speech:
|
||||
enabled: false
|
||||
graph:
|
||||
edges:
|
||||
- data:
|
||||
isInIteration: false
|
||||
sourceType: start
|
||||
targetType: llm
|
||||
id: 1740748800000-source-1740748800001-target
|
||||
source: '1740748800000'
|
||||
sourceHandle: source
|
||||
target: '1740748800001'
|
||||
targetHandle: target
|
||||
type: custom
|
||||
zIndex: 0
|
||||
- data:
|
||||
isInIteration: false
|
||||
sourceType: llm
|
||||
targetType: llm
|
||||
id: 1740748800001-source-1740748800002-target
|
||||
source: '1740748800001'
|
||||
sourceHandle: source
|
||||
target: '1740748800002'
|
||||
targetHandle: target
|
||||
type: custom
|
||||
zIndex: 0
|
||||
- data:
|
||||
isInIteration: false
|
||||
sourceType: llm
|
||||
targetType: answer
|
||||
id: 1740748800002-source-1740748800003-target
|
||||
source: '1740748800002'
|
||||
sourceHandle: source
|
||||
target: '1740748800003'
|
||||
targetHandle: target
|
||||
type: custom
|
||||
zIndex: 0
|
||||
nodes:
|
||||
- data:
|
||||
desc: ''
|
||||
selected: false
|
||||
title: 开始
|
||||
type: start
|
||||
variables:
|
||||
- label: 小说原文
|
||||
max_length: 2000
|
||||
options: []
|
||||
required: true
|
||||
type: paragraph
|
||||
variable: input_novel
|
||||
height: 89
|
||||
id: '1740748800000'
|
||||
position:
|
||||
x: 92
|
||||
y: 292
|
||||
selected: false
|
||||
sourcePosition: right
|
||||
targetPosition: left
|
||||
type: custom
|
||||
width: 244
|
||||
- data:
|
||||
context:
|
||||
enabled: false
|
||||
desc: 润色和增强小说文本描述
|
||||
model:
|
||||
completion_params:
|
||||
max_tokens: 2000
|
||||
temperature: 0.7
|
||||
mode: chat
|
||||
name: deepseek-r1
|
||||
provider: deepseek
|
||||
prompt_template:
|
||||
- id: system-001
|
||||
role: system
|
||||
text: |
|
||||
你是一个专业的小说编辑。你的任务是将用户提供的小说段落进行润色和增强,使其更适合转换为视觉分镜。
|
||||
|
||||
要求:
|
||||
1. 保持原有情节和人物设定不变
|
||||
2. 增强场景描述、角色动作和情感表达
|
||||
3. 让文本更具画面感和戏剧张力
|
||||
4. 输出保持中文,长度控制在原文本的1.2-1.5倍
|
||||
- id: user-001
|
||||
role: user
|
||||
text: '{{#1740748800000.input_novel#}}'
|
||||
selected: false
|
||||
title: 小说编辑AI
|
||||
type: llm
|
||||
variables: []
|
||||
height: 98
|
||||
id: '1740748800001'
|
||||
position:
|
||||
x: 384
|
||||
y: 292
|
||||
selected: false
|
||||
sourcePosition: right
|
||||
targetPosition: left
|
||||
type: custom
|
||||
width: 244
|
||||
- data:
|
||||
context:
|
||||
enabled: false
|
||||
desc: 将叙述文本转换为分镜提示词
|
||||
model:
|
||||
completion_params:
|
||||
max_tokens: 3000
|
||||
temperature: 0.6
|
||||
mode: chat
|
||||
name: deepseek-r1
|
||||
provider: deepseek
|
||||
prompt_template:
|
||||
- id: system-001
|
||||
role: system
|
||||
text: |
|
||||
你是一个专业的漫画分镜师。请将叙述文本转换为3-5个分镜描述,每个分镜包含视觉元素和图片生成提示词。
|
||||
|
||||
输出格式要求(Markdown):
|
||||
# 分镜分析
|
||||
|
||||
## 场景概览
|
||||
[简要描述整体场景]
|
||||
|
||||
## 分镜详情
|
||||
|
||||
### 分镜1:[标题]
|
||||
**场景描述:** [详细视觉描述]
|
||||
**角色动作:** [主要角色动作]
|
||||
**情感氛围:** [情感色彩]
|
||||
**图片提示词:** [用于图片生成的提示词,包含风格、构图等]
|
||||
|
||||
### 分镜2:[标题]
|
||||
...
|
||||
|
||||
## 风格建议
|
||||
[推荐的图片生成风格,如:动漫风格、写实插画、水彩等]
|
||||
|
||||
注意:图片提示词要具体、详细,包含构图、灯光、风格等要素。
|
||||
- id: user-001
|
||||
role: user
|
||||
text: '{{#1740748800001.text#}}'
|
||||
selected: false
|
||||
title: 分镜AI
|
||||
type: llm
|
||||
variables: []
|
||||
height: 98
|
||||
id: '1740748800002'
|
||||
position:
|
||||
x: 676
|
||||
y: 292
|
||||
selected: false
|
||||
sourcePosition: right
|
||||
targetPosition: left
|
||||
type: custom
|
||||
width: 244
|
||||
- data:
|
||||
answer: '{{#1740748800002.text#}}'
|
||||
desc: 输出分镜提示词
|
||||
selected: false
|
||||
title: 分镜提示词输出
|
||||
type: answer
|
||||
variables: []
|
||||
height: 102
|
||||
id: '1740748800003'
|
||||
position:
|
||||
x: 968
|
||||
y: 292
|
||||
selected: false
|
||||
sourcePosition: right
|
||||
targetPosition: left
|
||||
type: custom
|
||||
width: 244
|
||||
BIN
我在五代搞基建-剧本创作输出包.docx
Normal file
BIN
我在五代搞基建-剧本创作输出包.docx
Normal file
Binary file not shown.
BIN
我在五代搞基建.docx
Normal file
BIN
我在五代搞基建.docx
Normal file
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user