Files
cs-note/hzh/Gen2D/13-标签驱动提示词工程.md
T

224 lines
6.8 KiB
Markdown
Raw Normal View History

2026-06-03 10:30:42 +08:00
---
tags: [prompt-engineering, tag-mapping, ai, llm, fallback-pattern, template]
create time: 2026-06-03 11:00
---
2026-06-03 10:12:49 +08:00
# 13. 标签驱动提示词工程
2026-06-03 10:30:42 +08:00
## 概述
2026-06-03 10:12:49 +08:00
2026-06-03 10:30:42 +08:00
40+ 预定义标签映射到精确的图像生成指令,保障风格一致性与管线友好性。
2026-06-03 10:12:49 +08:00
2026-06-03 10:30:42 +08:00
## 正文
### 处理流程
2026-06-03 10:12:49 +08:00
```mermaid
flowchart LR
A["用户选择标签\n+ 输入描述"] --> B["Tag Mapper\n标签→指令映射"]
B --> C["Prompt Template\n三段式结构组装"]
C --> D{"LLM 可用?"}
D -->|"是"| E["PromptOptimizer\nLLM 精炼"]
D -->|"否"| F["Fallback Template\n模板生成"]
E --> G["Final Prompt\n最终提示词"]
F --> G
G --> H["AssetGenerator\n文生图 API"]
style B fill:#7c4dff,stroke:#333,color:#fff
style D fill:#ff9800,stroke:#333,color:#fff
style G fill:#4caf50,stroke:#333,color:#fff
```
---
2026-06-03 10:30:42 +08:00
### 标签分类体系
2026-06-03 10:12:49 +08:00
系统内置 40+ 预定义标签,分为 **7 大类别**,每条标签精确映射到一条图像生成指令。
2026-06-03 10:30:42 +08:00
#### 内容类型 — 决定布局与格式
2026-06-03 10:12:49 +08:00
| 标签 | 映射指令要点 |
|------|-------------|
| `瓦片/图块` | 瓦片集,可无缝拼接,网格排列,白色背景 |
| `背景/远景` | 三层结构(远景/中景/前景),视差滚动适配 |
| `前景/装饰` | 独立遮挡物,白色背景,可叠加 |
| `图集` | 多元素打包,网格排列,白色背景 |
| `纹理` | 可无缝平铺,白色背景 |
| `序列帧` | 连续动画帧,网格排列,标注方向和帧数 |
| `纸娃娃部件` | 可组合散件,统一比例和锚点 |
2026-06-03 10:30:42 +08:00
#### 美术风格 — 决定渲染技术
2026-06-03 10:12:49 +08:00
| 标签 | 映射指令要点 |
|------|-------------|
| `像素` | 严格像素网格,无抗锯齿,有限色盘 |
| `卡通` | 粗轮廓线,明亮饱和色彩,夸张比例 |
| `手绘` | 自然笔触纹理,不规则线条 |
| `矢量` | 干净几何形状,平滑曲线 |
| `扁平` | 无阴影或极少阴影,纯色块面 |
2026-06-03 10:30:42 +08:00
#### 色调配色
2026-06-03 10:12:49 +08:00
| 标签 | 映射指令要点 |
|------|-------------|
| `暖色` | 红橙黄为主,温暖活力氛围 |
| `冷色` | 蓝青紫为主,冷静神秘氛围 |
| `鲜艳` | 高饱和度,强烈对比 |
| `柔和` | 低饱和度,温和内敛 |
| `单色` | 单一色相,明暗层次 |
2026-06-03 10:30:42 +08:00
#### 线条粗细
2026-06-03 10:12:49 +08:00
| 标签 | 映射指令要点 |
|------|-------------|
| `无` | 无线条轮廓,纯色块面 |
| `细线` | 0.5-1px,细腻精致 |
| `中等` | 1-2px,清晰明确 |
| `粗线` | 2-4px,粗犷有力 |
2026-06-03 10:30:42 +08:00
#### 场景氛围
2026-06-03 10:12:49 +08:00
| 标签 | 映射指令要点 |
|------|-------------|
| `森林` | 树木、藤蔓、蘑菇、落叶 |
| `地牢` | 石砖墙壁、火把、蛛网 |
| `城市` | 建筑、街道、路灯 |
| `太空` | 星云、行星、飞船 |
| `水下` | 珊瑚、水草、气泡 |
| `沙漠` | 沙丘、仙人掌、绿洲 |
2026-06-03 10:30:42 +08:00
#### 光照效果
2026-06-03 10:12:49 +08:00
| 标签 | 映射指令要点 |
|------|-------------|
| `明亮` | 充足自然光,无深阴影 |
| `昏暗` | 低光照,柔和阴影 |
| `戏剧` | 强烈明暗对比,聚光灯效果 |
| `霓虹` | 高饱和彩色光源,赛博朋克辉光 |
2026-06-03 10:30:42 +08:00
#### 情绪基调
2026-06-03 10:12:49 +08:00
| 标签 | 映射指令要点 |
|------|-------------|
| `欢快` | 明亮色彩,圆润造型 |
| `黑暗` | 深色调,尖锐造型 |
| `神秘` | 朦胧效果,未知元素 |
| `史诗` | 宏大场面,壮观远景 |
| `平静` | 柔和色彩,开阔空间 |
---
2026-06-03 10:30:42 +08:00
### 精灵图特殊处理
2026-06-03 10:12:49 +08:00
```mermaid
flowchart TD
T["用户标签"] --> G{"包含网格标签?\n瓦片/图集/序列帧/纸娃娃"}
G -->|"是"| S["注入网格布局指令\n白色背景 + 8-16px 间隙\n投影法可检测"]
G -->|"否"| N["标准布局指令"]
S --> P["Prompt 构建"]
N --> P
```
当标签命中 `gridLayoutTags` 集合时,自动注入网格布局专用指令:
- **纯白色背景** (`#FFFFFF`)
- **帧间 8-16px 纯白间隙**
- **间隙内不得有任何像素**
- **确保投影法能可靠检测间隙**
这些指令对下游的 `SplitSprite` 切割算法至关重要。
2026-06-03 10:30:42 +08:00
> [!question] 为什么精灵图需要特殊的网格布局指令?
>
> 如果不指定间隙要求,AI 生成的图片往往会让人物之间几乎没有空隙——人类艺术家这样做是为了最大化利用画布,但机器无法从中准确推断分割边界。**强制纯白间隙 = 人为制造"裂缝"**,让投影检测算法可以像翻书页一样逐页分离内容。这就是典型的「用约束换精度」的设计思路。
2026-06-03 10:12:49 +08:00
---
2026-06-03 10:30:42 +08:00
### 未知标签回退
2026-06-03 10:12:49 +08:00
当用户输入系统未预定义的标签时,不会报错,而是降级为通用风格描述:
```go
func tagToInstruction(tag string) string {
if inst, ok := tagInstruction[tag]; ok {
return inst
}
// 未知标签:作为风格修饰词处理
return fmt.Sprintf("风格特征: %s(用户自定义标签,按其字面含义应用到画面中)", tag)
}
```
这保证了系统的**向前兼容** — 新增标签无需修改核心逻辑。
---
2026-06-03 10:30:42 +08:00
### PromptOptimizer 节点
2026-06-03 10:12:49 +08:00
PromptOptimizer 是 Eino 管线的第一个节点,负责将标签指令组装为最终提示词。
```mermaid
flowchart LR
subgraph "输入"
A["全局风格提示词\nprojectStyle"]
B["任务描述\nprompt + userNote"]
C["标签指令\ntagInstructions"]
D["拒绝原因\nqualityFeedback\n(重试时)"]
end
subgraph "PromptOptimizer"
E["buildMetaPrompt\n组装元提示词"]
F{"LLM 可用?"}
G["callLLMRefine\nLLM 精炼"]
H["fallbackRefine\n模板生成"]
end
subgraph "输出"
I["Final Prompt\n三段式结构"]
end
A --> E
B --> E
C --> E
D --> E
E --> F
F -->|"API Key 已配置"| G
F -->|"未配置 / 调用失败"| H
G --> I
H --> I
```
三段式输出结构:
| 段落 | 内容 | 示例 |
|------|------|------|
| 【主题】 | 画面主体与场景 | "一个融合像素风格的游戏角色精灵图..." |
| 【风格】 | 艺术风格与视觉特征 | "美术风格: 像素画;色调: 暖色系..." |
| 【技术】 | 分辨率和格式参数 | "输出格式: spritesheet;纯白色背景..." |
---
2026-06-03 10:30:42 +08:00
### LLM 回退机制
2026-06-03 10:12:49 +08:00
当 LLM 不可用时(API Key 未配置 / 网络故障),系统自动降级到模板生成:
```mermaid
flowchart TD
2026-06-03 10:30:42 +08:00
A["callLLMRefine"] --> B{"API Key 已配置?"}
2026-06-03 10:12:49 +08:00
B -->|"否"| F["fallbackRefine\n模板回退"]
B -->|"是"| C["调用 Chat API"]
C --> D{"调用成功?"}
D -->|"是"| E["返回 LLM 优化结果"]
D -->|"否"| F
F --> G["解析标签\n组装三段式提示词"]
G --> H["返回模板生成结果"]
```
模板回退同样遵循标签驱动逻辑,保证即使没有 LLM 参与,生成的提示词也具备结构化和一致性。
## 关联文档
2026-06-03 10:30:42 +08:00
- [[05-生成管线]] — PromptOptimizer 是管线第一阶段
- [[06-精灵图处理]] — 网格布局指令影响切割算法
- [[01-系统总览]] — 提示词工程在整体架构中的位置
- [[00-索引]] — 返回文档总览