init: add workflow and script draft assets

This commit is contained in:
sdaduanbilei 2026-03-03 17:59:27 +08:00
commit 77ad0e528f
21 changed files with 4807 additions and 0 deletions

BIN
.DS_Store vendored Normal file

Binary file not shown.

10
.env.template Normal file
View 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
View 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
View 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` 中的评估表格。

View 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
- 最大Token2000
**系统提示词:**
```
你是一个专业的小说编辑。你的任务是将用户提供的小说段落进行润色和增强,使其更适合转换为视觉分镜。
要求:
1. 保持原有情节和人物设定不变
2. 增强场景描述、角色动作和情感表达
3. 让文本更具画面感和戏剧张力
4. 输出保持中文长度控制在原文本的1.2-1.5倍
```
**用户提示词:**
```
请润色以下小说段落,使其更适合视觉化:
{{input_novel}}
```
**输出变量:**
- 变量名edited_text
- 描述:编辑后的文本
## 第四步添加分镜节点第二个LLM节点
1. 点击编辑节点后的 "+" 添加节点
2. 选择 "LLM"(大语言模型)
3. 配置如下:
**基本信息:**
- 节点名称分镜AI
**模型配置:**
- 模型deepseek-r1
- 温度0.6
- 最大Token3000
**系统提示词:**
```
你是一个专业的漫画分镜师。请将叙述文本转换为3-5个分镜描述每个分镜包含视觉元素和图片生成提示词。
输出格式要求Markdown
# 分镜分析
## 场景概览
[简要描述整体场景]
## 分镜详情
### 分镜1[标题]
**场景描述:** [详细视觉描述]
**角色动作:** [主要角色动作]
**情感氛围:** [情感色彩]
**图片提示词:** [用于图片生成的提示词,包含风格、构图等]
### 分镜2[标题]
...
## 风格建议
[推荐的图片生成风格,如:动漫风格、写实插画、水彩等]
注意:图片提示词要具体、详细,包含构图、灯光、风格等要素。
```
**用户提示词:**
```
请将以下文本转换为漫画分镜提示词:
{{edited_text}}
```
**输出变量:**
- 变量名storyboard_markdown
- 描述:分镜提示词
## 第五步:添加结束节点(输出变量)
1. 点击分镜节点后的 "+" 添加节点
2. 选择 "结束"End
3. 添加输出变量:
- 变量名storyboard_markdown
- 值来源分镜AI节点的输出
- 描述最终生成的Markdown格式分镜提示词
## 第六步:验证连接
确保节点连接顺序为:
```
开始input_novel→ 小说编辑AIedited_text→ 分镜AIstoryboard_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
View 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
- 模型IDdeepseek-r1
- 模式:聊天
- 最大令牌4096
- 温度0.7
#### 步骤3导入工作流
1. 进入 "工作流" → "创建工作流"
2. 选择 "导入"
3. 上传 `workflow/manga-generator-dify-dsl.json`
4. 保存为 "漫画生成验证工作流"
## 建议选择
**推荐方式一API自动化**:更快、更可靠,我可以自动化测试。
**方式二(手动操作)**更安全不需要暴露API密钥给脚本。
## 下一步
请告诉我你选择哪种方式,我会相应调整实施计划。

View 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初始设计创建

View File

@ -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
- 模型IDdeepseek-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
View 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秒一个分镜"

View File

@ -0,0 +1,354 @@
# 《我在五代搞基建》可读版小剧本 1.0
## 一句话定位
现代土木工程师穿越五代乱世,靠工程技术从“活下来”走到“改秩序”,在权谋、战争与人性里做选择。
---
## 第一章 坠落
河北,某隧道工地。
警报响了三次,林远还盯着平板上的地层模型。
“林工,撤!”
喊声刚落,顶板像被巨手掀开,钢筋与混凝土一起塌下来。灯光熄灭,世界只剩轰鸣与粉尘。
林远抱头扑倒,耳边最后一个声音,是金属断裂时那种刺耳的尖啸。
再睁眼时,他在一条冰冷的山溪里。
他咳出两口水,撑着石头爬起来。四周只有湿冷的林子和不知名的鸟叫。没有施工便道,没有吊车,没有人。
只有口袋里那部碎屏手机。
他按亮屏幕15%电0格信号。
相册没了,聊天记录没了,唯独离线资料还在:
- 《中国古代建筑防震手册》
- 《黑火药提纯与配比》
- 《农作物轮作技术指南》
林远盯着那几行文件名,忽然觉得荒诞得像一个恶意玩笑。
远处,狼嚎响起。
他抬头,第一次感到真正的恐惧。
---
## 第二章 官道
第二天午后,官道上尘土飞扬。
林远刚躲进灌木,就看见一队披甲溃兵在抢难民。有人跪地求饶,被一脚踹翻。一个骑兵提刀,冲向抱着幼弟的小女孩。
林远没有时间思考。
他捡起石块,朝骑兵后背砸去。石头砸在铁甲上,发出沉闷一响。骑兵愣了一下,转头看见他,怒吼着拨马冲来。
林远转身就跑,冲到路边破茶棚前,抄起翻倒木桌,把折断的自拍杆卡进缝隙,尖端朝上。
战马冲到近前,前蹄踩空,整匹马猛地上扬,骑兵被甩出去。林远扑上去,安全帽当锤,连砸两下。
对方挣扎,林远咬牙,工兵铲横着顶住对方喉咙。
“再动就死。”
骑兵眼神凶狠,却终于停住。
林远喘得胸口生疼,回头去找那两个孩子。
女孩浑身发抖,手却死死护着弟弟。
“叫什么名字?”
“我……我叫小翠。”
“他呢?”
“小石头。”
林远点头:“跟我走。现在。”
身后传来追兵叫骂。三个人钻进林子,像三只被猎犬追赶的小兽。
---
## 第三章 破庙夜话
夜里,破庙漏风。
林远把压缩饼干掰成三份,最大的一块塞给小石头。男孩狼吞虎咽,呛得咳嗽。小翠一边拍弟弟背,一边悄悄看林远手里的“亮纸”包装。
“你们家乡的纸,都这么亮吗?”
林远苦笑:“嗯,很贵。”
他不敢说那叫复合膜,也不敢说工地宿舍楼下超市里随便买。
火堆快熄了。手机只剩7%。
林远打开离线地图缓存,看见模糊的北方轮廓,手指在泥地上画了一遍:太行、太原、幽州。
小翠蹲在旁边看,突然问:“大哥哥,你会写字吗?”
林远一怔,点头。
小翠低声说:“那你以后能不能教我?会写字的人,不容易饿死。”
这句话让林远沉默很久。
他看着两个孩子蜷在火光里,心里第一次有了方向。
“先活下去。”他说,“活下去,再说别的。”
手机电量跳到1%。
黑屏前最后一秒,时间停在他熟悉的现代日期。
下一秒,彻底熄灭。
---
## 第四章 太原城下
三天后,太原城门。
难民排成一条灰色长蛇。城墙高而旧,脚手架歪斜,吊绳磨损,工匠在上面像踩着命在干活。
林远只看了两眼,就知道那套滑轮组装反了。
“这样吊,迟早断。”他低声说。
旁边工头听见,嗤笑:“你懂?”
林远没解释,走上前:“给我两根绳,一根横梁。我让你们两个人顶四个人。”
工头冷脸:“做不到,滚出城。”
“做到了呢?”
“做到了,给你饭吃。”
半个时辰后,围观的人越来越多。
林远重新穿绳、改受力点、加一道交叉固定。两名工匠试着拉,原本卡死的石料竟平稳抬起。
人群先静,后炸开。
工头瞪着那块离地的石头,脸上写满不信。
“这……什么邪术?”
林远擦掉手上的灰,淡淡道:“不是邪术。是省力。”
他本想说“机械优势”,想了想,改口:“格物。”
这两个字像石子落水,传进了城里更多人的耳朵。
---
## 第五章 节度使府
当晚,林远被带进节度使府。
偏厅灯火不亮,墙上挂着地图和兵器。刘知远坐在案后,不怒自威。
“你叫林远?”
“是。”
“哪里人?”
“幽州。”
“会什么?”
林远停了一瞬:“筑城、治水、炼铁、农具改造。”
厅中几名亲兵都笑了。刘知远没笑,只盯着他。
“你可知,夸口在军中是什么罪?”
“知。”
“那你还敢说?”
林远抬眼,语气平稳:“将军要的是能用的人,不是会低头的人。”
厅里瞬间安静。
刘知远忽然起身,走到地图前。
“太原若被围,最先断什么?”
“水。”林远没看地图,直接答,“若敌军截上游,城内先乱。要提前凿井、修蓄水池、分级配水,先保军营再保民区。”
刘知远眼神微动。
“明日去军器监。”
“是。”
“林远。”
“在。”
“别让我失望。”
---
## 第六章 军器监
军器监里终日火星四溅。
林远站在炉前看了一圈:炉温不稳,皮囊鼓风忽强忽弱,铁里夹渣严重。老铁匠不服他,冷着脸扔来一句:“会说不算,会打才算。”
林远点头,卷起袖子。
他拆了皮囊,改成活塞风箱。第一轮拉动时,火焰猛地窜高,炉膛亮得发白。
老铁匠先骂,骂到一半停住。
第二炉铁出来,锭面更细,杂质更少。围观工匠一下全围了上来。
“这法子能教吗?”老铁匠声音发颤。
“能。”
“要钱吗?”
“不要。”
“那你图什么?”
林远看着炉火,轻声说:“图你们以后少死几个人。”
这句话比任何技术都快,在工匠间传开。
几日后,林远又在汾水边架起水轮,做出水排。鼓风从人力改成水力,炉火昼夜不断。
刘知远再次召见他,这次厅里多了一个人。
郭威,目光沉静,话不多。
“听说你还懂农具?”郭威问。
林远拿起笔,在麻纸上画了曲辕犁结构。犁评、犁箭、犁壁,一笔一笔讲受力与调深。
郭威看完,点头:“这不是匠气,这是章法。”
刘知远拍案:“试制。”
城外试田,老农扶着新犁走过第一垄地,回头时眼里含泪。
“省牛,也省命。”
---
## 第七章 燕云与火
夜宴只有三人:刘知远、郭威、林远。
地图摊开,话题落在燕云十六州。
“石敬瑭若引契丹南下,中原会怎样?”郭威问。
林远指着关隘线,几乎本能地说出地理链路:幽州、云州、山口、平原、行军日程。
他说完,屋里很久没人接话。
刘知远端着杯,低声道:“你像提前见过这一切。”
林远没有回答。
那晚之后,他被正式留在幕府,身份从“会干活的外乡人”变成“可议事的幕僚”。
但他知道,这一步并不安全。
他在山谷里设了隐蔽工坊,开始试验最原始的火药配比。硝石提纯、硫磺研磨、木炭筛粉,每一步都像在刀尖上跳舞。
点火那刻,所有人退到坡后。
引线燃尽,轰的一声,地面炸出黑坑。
工匠们跪了一片,喊“天雷”。
林远站在烟尘里,心一点点往下沉。
他比任何人都清楚,自己放出来的不是奇迹,是一头会反噬主人的兽。
---
## 第八章 书房里的选择(试读终点)
黄昏,节度使书房。
林远把一小包黑色粉末放在案上。
刘知远盯着它,问:
“这是什么?”
“人造的雷。”
“能守城?”
“能。”
“能攻城?”
“也能。”
刘知远沉默片刻,突然换了问题:
“你要什么?”
林远没立刻答。
窗外风过汾水,远处更鼓三响。
“我要军器监和工坊的人事权,三个月。我要先修军械、再修水利、再修粮路。”
“你知道你在要什么吗?”
“知道。”
“你也知道,旧派会要你的命。”
“知道。”
刘知远盯着他,慢慢笑了,笑意却冷。
“好。我给你三个月。”
“谢将军。”
“林远。”
“在。”
“做不成,你自己挑个死法。”
林远拱手,声音很稳:
“若做成呢?”
“若做成,”刘知远起身,走到地图前,“河东由你先画图。”
林远抬头,看见烛光映在那张北方地图上,像一条尚未成形的路。
他知道,真正的战争才刚开始。
---
## 读后判断点(给你快速判断是否“上头”)
- 你是否想继续看“林远怎么在三个月内交差”?
- 你是否关心“小翠从被救者成长为关键角色”的线?
- 你是否期待“技术理性 vs 乱世权谋”的正面对撞?
如果这三条里有两条打中你,这个项目就值得继续扩写成完整剧集版。

173
tests/quality-assessment.md Normal file
View 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
View File

@ -0,0 +1,49 @@
## 测试用例1基础场景
输入文本:
```
李阳推开厚重的木门,月光透过窗户洒在地板上。他看到父亲坐在书桌前,手里拿着一封信。房间里弥漫着淡淡的墨香,父亲的背影显得格外孤独。
```
预期输出:
1. 编辑节点:润色后的叙述文本(更丰富的视觉和情感描述)
2. 分镜节点3-5个分镜的Markdown描述
---
## 测试用例2动作场景
输入文本:
```
王雪快速穿过拥挤的街道,雨水打湿了她的头发。她回头看了一眼,追赶者的影子在路灯下拉长。心跳加速,她躲进了小巷的阴影中。
```
预期输出:
1. 编辑节点:增强动作节奏感
2. 分镜节点:动态构图的分镜描述
---
## 测试用例3对话场景
输入文本:
```
"你为什么要这么做?"林夏的声音在颤抖,她紧紧攥着手中的照片。张明沉默了片刻,望向窗外灰暗的天空:"有些事情,你现在还不会明白。"
```
预期输出:
1. 编辑节点:增强对话张力和人物情绪
2. 分镜节点:包含人物表情和对话的分镜
---
## 测试用例4奇幻场景
输入文本:
```
龙翼展开,遮蔽了半边天空。骑士拔出长剑,剑身泛着蓝色的魔法光芒。巨龙俯下头颅,金色的竖瞳凝视着这个渺小的人类。空气在燃烧,大地在颤抖。
```
预期输出:
1. 编辑节点:增强奇幻氛围和史诗感
2. 分镜节点:包含特效和动作的分镜

View 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格式分镜提示词"
}
]
}

View 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

View 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

View 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
View 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: []

View 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

View 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

Binary file not shown.

BIN
我在五代搞基建.docx Normal file

Binary file not shown.