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