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

6.4 KiB

13. 标签驱动提示词工程

一句话概括:40+ 预定义标签映射到精确的图像生成指令,保障风格一致性与管线友好性。


处理流程

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

标签分类体系

系统内置 40+ 预定义标签,分为 7 大类别,每条标签精确映射到一条图像生成指令。

内容类型 — 决定布局与格式

标签 映射指令要点
瓦片/图块 瓦片集,可无缝拼接,网格排列,白色背景
背景/远景 三层结构(远景/中景/前景),视差滚动适配
前景/装饰 独立遮挡物,白色背景,可叠加
图集 多元素打包,网格排列,白色背景
纹理 可无缝平铺,白色背景
序列帧 连续动画帧,网格排列,标注方向和帧数
纸娃娃部件 可组合散件,统一比例和锚点

美术风格 — 决定渲染技术

标签 映射指令要点
像素 严格像素网格,无抗锯齿,有限色盘
卡通 粗轮廓线,明亮饱和色彩,夸张比例
手绘 自然笔触纹理,不规则线条
矢量 干净几何形状,平滑曲线
扁平 无阴影或极少阴影,纯色块面

色调配色

标签 映射指令要点
暖色 红橙黄为主,温暖活力氛围
冷色 蓝青紫为主,冷静神秘氛围
鲜艳 高饱和度,强烈对比
柔和 低饱和度,温和内敛
单色 单一色相,明暗层次

线条粗细

标签 映射指令要点
无 无线条轮廓,纯色块面
细线 0.5-1px,细腻精致
中等 1-2px,清晰明确
粗线 2-4px,粗犷有力

场景氛围

标签 映射指令要点
森林 树木、藤蔓、蘑菇、落叶
地牢 石砖墙壁、火把、蛛网
城市 建筑、街道、路灯
太空 星云、行星、飞船
水下 珊瑚、水草、气泡
沙漠 沙丘、仙人掌、绿洲

光照效果

标签 映射指令要点
明亮 充足自然光,无深阴影
昏暗 低光照,柔和阴影
戏剧 强烈明暗对比,聚光灯效果
霓虹 高饱和彩色光源,赛博朋克辉光

情绪基调

标签 映射指令要点
欢快 明亮色彩,圆润造型
黑暗 深色调,尖锐造型
神秘 朦胧效果,未知元素
史诗 宏大场面,壮观远景
平静 柔和色彩,开阔空间

精灵图特殊处理

flowchart TD
    T["用户标签"] --> G{"包含网格标签?\n瓦片/图集/序列帧/纸娃娃"}
    G -->|"是"| S["注入网格布局指令\n白色背景 + 8-16px 间隙\n投影法可检测"]
    G -->|"否"| N["标准布局指令"]
    S --> P["Prompt 构建"]
    N --> P

当标签命中 gridLayoutTags 集合时,自动注入网格布局专用指令:

  • 纯白色背景 (#FFFFFF)
  • 帧间 8-16px 纯白间隙
  • 间隙内不得有任何像素
  • 确保投影法能可靠检测间隙

这些指令对下游的 SplitSprite 切割算法至关重要。


未知标签回退

当用户输入系统未预定义的标签时,不会报错,而是降级为通用风格描述:

func tagToInstruction(tag string) string {
    if inst, ok := tagInstruction[tag]; ok {
        return inst
    }
    // 未知标签:作为风格修饰词处理
    return fmt.Sprintf("风格特征: %s(用户自定义标签,按其字面含义应用到画面中)", tag)
}

这保证了系统的向前兼容 — 新增标签无需修改核心逻辑。


PromptOptimizer 节点

PromptOptimizer 是 Eino 管线的第一个节点,负责将标签指令组装为最终提示词。

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;纯白色背景..."

LLM 回退机制

当 LLM 不可用时(API Key 未配置 / 网络故障),系统自动降级到模板生成:

flowchart TD
    A["callLLMRefine"] --> B{"API Key\n已配置?"}
    B -->|"否"| F["fallbackRefine\n模板回退"]
    B -->|"是"| C["调用 Chat API"]
    C --> D{"调用成功?"}
    D -->|"是"| E["返回 LLM 优化结果"]
    D -->|"否"| F
    F --> G["解析标签\n组装三段式提示词"]
    G --> H["返回模板生成结果"]

模板回退同样遵循标签驱动逻辑,保证即使没有 LLM 参与,生成的提示词也具备结构化和一致性。


关联文档

文档 关系
05 - 生成管线 PromptOptimizer 是管线第一阶段
06 - 精灵图处理 网格布局指令影响切割算法
01 - 系统总览 提示词工程在整体架构中的位置
00 - 索引 返回文档总览