Files
teamai-test/.teamai/skills/common/gpt-image-2/references/prompt-writing.md
T

24 KiB
Raw Blame History

JSON 提示词模板总规范

本文件是 gpt-image-2 skill 的模板方法论总文档。后续所有具体模板文件都应尽量遵守这里的规则。

它不提供某个具体视觉场景的完整模板,而是定义:

  • 模板应该如何组织
  • 字段应该如何设计
  • 参数如何区分为“必问 / 默认 / 随机”
  • 缺失信息应该如何提问
  • 如何从案例提炼出可复用的结构化 JSON 模板

一、何时使用 JSON 模板

当任务满足以下任一条件时,优先使用 JSON 模板,而不是直接写一整段自然语言提示词:

  1. 画面元素很多
  2. 画面包含多个功能区域
  3. 需要 UI / 商品卡 / 评论区 / 图例 / 标注 / 页眉页脚等结构
  4. 需要支持多个变体
  5. 需要支持“用户指定 / 默认值 / 随机生成”三种模式
  6. 后续很可能复用、扩写或调试

典型适用场景:

  • 电商直播 UI 样机
  • 产品爆炸视图海报
  • 手绘城市地图
  • 讲解型 Slides
  • 高信息密度说明图

不必强行使用 JSON 模板的场景:

  • 很简单的单主体图
  • 没有复杂布局和多区域结构
  • 用户只想快速试一个很轻量的视觉方向

二、references 的目录规则

references/ 必须采用:

  • 一级:分类目录
  • 二级:单模板 Markdown 文件

例如:

references/
  ui-mockups/
    live-commerce-ui.md
    social-interface-mockup.md
  product-visuals/
    exploded-view-poster.md

不要继续采用:

  • 一个大类一个大文件
  • 一个来源一个文件
  • 一个案例一个没有分类的平铺文件

目录树的好处:

  • 精准读取
  • 易于扩展
  • 模板互不污染
  • 每个模板文件可以写得很完整

三、单模板文件的标准结构

每个具体模板文件建议遵循以下结构:

# 模板名称

## 适用范围

## 何时使用

## 缺失信息优先提问顺序

## 主模板

📖 描述

📝 提示词
```json
{ ... }

参数策略

自动补全策略

变体方式

变体 1

变体 2

避免事项


说明:

- `主模板` 必须先有
- 变体模板建立在主模板之上
- 参数策略、自动补全策略、避免事项不能省略

---

# 四、JSON 模板的推荐骨架

大多数模板建议优先从以下骨架开始:

```json
{
  "type": "模板类型",
  "goal": "图像用途",
  "subject": {},
  "scene": {},
  "layout": {},
  "style": {},
  "details": {},
  "constraints": {}
}

字段职责

type

模板类型名称,例如:

  • 直播 UI 样机
  • 产品爆炸视图海报
  • 手绘地图信息图

goal

说明这张图最终要干什么,例如:

  • 电商直播截图样机
  • 品牌主视觉海报
  • 旅游攻略地图
  • 高信息密度讲解图

subject

主体内容,例如:

  • 人物
  • 商品
  • 城市
  • 角色
  • 插画主角

scene

场景、背景、环境、氛围。

layout

画面区域组织方式,适用于:

  • 海报
  • UI
  • 地图
  • slides
  • 多区域结构图

style

风格、渲染、材质、色彩倾向、光线。

details

用于装载局部细节,例如:

  • 商品卖点
  • callout labels
  • 评论内容
  • 图例元素
  • 页脚文案

constraints

用于明确:

  • 必须出现什么
  • 必须避免什么
  • 最终结果更像什么、不像什么

五、场景特有字段建议

不同分类下可扩展不同结构。

5.1 UI Mockups

建议额外使用:

{
  "ui_overlay": {
    "top_header": {},
    "chat_area": {},
    "gift_area": {},
    "product_card": {},
    "bottom_bar": {}
  }
}

5.2 Product Visuals

建议额外使用:

{
  "header": {},
  "centerpiece": {},
  "callout_labels": {},
  "footer": {},
  "component_layers": []
}

5.3 Maps & Infographics

建议额外使用:

{
  "title_section": {},
  "sections": [],
  "legend": {},
  "centerpiece": {},
  "extras": {}
}

5.4 Slides & Visual Docs

建议额外使用:

{
  "page_type": "",
  "information_density": "",
  "headline_system": {},
  "visual_blocks": [],
  "annotation_style": {}
}

5.5 Storyboards & Sequences(电影分镜 / TVC / 流程板 / 漫画)

适用于「同一条叙事 / 同一个流程 / 同一组动作」按 N×M 网格输出多个 panel 的视觉。子类彼此之间字段差异大,按子类分别给字段建议:

5.5.1 电影 / 短片 cinematic 分镜(如 cinematic-storyboard-grid.md)

{
  "subject": { "primary": "", "secondary": "", "mood": "", "style": "", "aspect_ratio_per_panel": "" },
  "vehicle_or_actor": { "design": "", "scale": "" },
  "layout": {
    "grid": { "rows": 0, "columns": 0, "count": 0 },
    "sheet_aspect_ratio": "",
    "panel_borders": "",
    "sections": [{ "position": "row x col y", "description": "" }],
    "continuity": "(必填) 显式声明 N 个 panel 是连续叙事 / 同一 hero / 同一 mood"
  },
  "lighting": { "primary": "", "secondary": "", "accents": "" },
  "environment": { "location": "", "weather": "", "threat": "" }
}

字段经验:

  • sections 必须是数组,严格按 row-major 顺序列出每镜(不要让模型自由排列)
  • continuity 是该子类的关键字段,必填
  • 每镜描述要包含「景别 + 主体动作 + 光线 / 情绪」三要素
  • 远 / 中 / 近 / POV 镜头要混搭,不要全特写或全远景

5.5.2 商业广告 TVC 分镜(如 product-tvc-storyboard.md)

{
  "header": { "title": "", "subtitle_meta": "", "product_name_subtitle": "" },
  "layout": { "grid": { "rows": 0, "columns": 0, "panel_count": 0, "panel_aspect_ratio": "" } },
  "scenes": {
    "count": 0,
    "items": [{ "id": 1, "title_zh": "", "timestamp": "0-2s", "description": "" }]
  }
}

字段经验:

  • 与电影分镜相比,必须有 header.product_name_subtitle + 每镜 timestamp(广告强约束)
  • 每镜 title_zh 是面向客户的中文小标题(如「环境建立」「特写出镜」「人货同框」)
  • description 必须显式包含产品,且产品在所有镜中外观一致

5.5.3 真人 / 角色 cinematic 流程板(如 process-photo-board.md)

{
  "subject": {
    "character": { "gender": "", "age": "", "identity": "", "hair": "", "undersuit": "", "armor_or_outfit": "", "helmet_or_headpiece": "" },
    "environment": { "location": "", "background_elements": "" }
  },
  "layout": {
    "header": { "count": 2, "labels": ["title", "subtitle"], "design": "" },
    "sections": [{ "step_id": 1, "title": "", "position": "", "labels": [], "image": "" }],
    "footer": { "count": 1, "labels": ["slogan"], "design": "" },
    "grid": { "rows": 0, "columns": 0, "panel_count": 0, "panel_borders": "", "number_badges": "" }
  },
  "text_rendering": { "language": "", "font": "", "colors": "" }
}

字段经验:

  • 角色一致性靠把所有 fixed attributes(gender / hair / undersuit)独立成 subject.character 字段
  • 状态递进靠每 step 的 image 字段显式描述「此时已穿什么 / 正在做什么」
  • 必须有 number_badges 字段(步骤号在视觉上一眼可识别)
  • 标题语言(中 / 日 / 英)通过 text_rendering.language 显式声明

5.6 Catalog / Lineup / Character-Variant Poster(多卡片信息图海报)

适用于「同一基底(角色 / 产品 / 概念)多个变体在一张海报里并列展示」的视觉。子类:

5.6.1 同角色多版本海报(如 character-catalog-poster.md)

{
  "subject_overview": "(必填) 全图主题,如 '十二星座女子图鉴'",
  "language": "",
  "format": "vertical poster",
  "style": { "overall": "", "rendering": "", "mood": "" },
  "layout": {
    "sections_count": 0,
    "sections": [{
      "title": "",
      "position": "",
      "theme_color": "(必填) 该 panel 的主题色,必须 panel 间各不相同",
      "symbol": "",
      "constellation": "",
      "labels": [],
      "character": { "pose": "", "outfit": "", "background": "" }
    }]
  }
}

字段经验:

  • 每 section 必须有自己的 theme_color + symbol + motif,否则会被模型画成同一张
  • character 子字段保留同一基底(脸型 / 体型 / 发色),仅变化 outfit / pose / background
  • subject_overview 是模型理解 "为什么这些 panel 要放在一起" 的关键提示

5.6.2 系列产品 lineup 对比海报(如 lineup-comparison-poster.md)

{
  "subject": "(必填) 描述一句包含 'lineup chart / catalog board / comparison poster'",
  "branding": { "headline": "", "signature": "", "seals": [] },
  "palette": { "background": "", "highlights": [] },
  "layout": {
    "header": { "elements": [{ "type": "legend", "title": "", "labels": [] }] },
    "sections": [{ "title": "row N tier name", "labels": [] }]
  },
  "content_grid": "显式说明每行多少 SKU、每 SKU 是什么样的卡片",
  "visual_details": "材质 / 反光 / 印花 / 配件等让 SKU 之间彼此不同的细节"
}

字段经验:

  • 必须有 legend 类元素(等级 key / 图标 key / 风格 key),否则海报"对比"意味就消失
  • content_grid 字段必须显式给「每行 N 个 SKU + 行内排序逻辑(按价 / 按色 / 按年代)」
  • SKU 数量通常 12 - 36,过少不像 lineup,过多每个会被画糊

5.7 Day-trip Itinerary Map(左行程卡 + 右画面地图 split 海报)

适用于"一日游 split 海报"(如 itinerary-day-trip-map.md):

{
  "destination": { "name": "", "duration": "1 day", "theme": "" },
  "headline": { "main": "", "tagline": "", "divider": "" },
  "style": { "overall": "", "left_panel_look": "", "right_panel_look": "", "color_palette": "", "atmosphere": "" },
  "layout": {
    "format": "vertical 2:3 poster, split into two equal vertical columns",
    "left_panel": { "type": "itinerary card", "header": [], "stop_count": 5, "stop_design": [], "border": "" },
    "right_panel": { "type": "painted map scene", "background": "", "path": "", "marker_design": "", "compass_rose": "", "stats_box": "" },
    "alignment_rule": "(必填) 左右编号 / 名称 / 顺序必须严格对齐"
  },
  "stops": {
    "count": 5,
    "items": [{ "number": 1, "name": "", "time": "", "description": "", "left_vignette": "", "right_scene": "" }]
  },
  "footer_box": { "compass_rose": "", "stats_box": { "design": "", "stats": [] } }
}

字段经验:

  • alignment_rule 必填,否则左右两栏极易错位
  • 每 stop 同时给 left_vignette(卡片小插画)+ right_scene(地图大场景)双视觉
  • stops.count 建议 5-7,过少不像行程,过多卡片塞不下
  • language 默认与目的地官方语言一致(台湾 → 繁中,京都 → 日文)

5.8 Multi-Grid Ad Banner Set(多行业混合广告 banner 网格)

适用于"一图同时展示 N 个独立行业 / 主题 banner"(如 ad-banner-multi-grid.md):

{
  "language": "",
  "layout": {
    "structure": "2x2 / 3x3 grid of equal quadrants",
    "gutter": "",
    "overall_aspect_ratio": "",
    "panel_aspect_ratio": "",
    "quadrants": [{
      "position": "top-left",
      "theme": "(必填) 该格的行业 / 主题,如 'Travel' / 'Skincare'",
      "subject": "",
      "elements": [],
      "text_labels": [],
      "style": "(必填) 该格的视觉风格,与其它格不同"
    }]
  },
  "global_style": "把所有格统一的元素(如统一字体 / 统一边框)",
  "constraints": { "must_keep": ["每格内容彼此独立、无叙事关联"] }
}

字段经验:

  • quadrants 数组必填,每格必须独立指定 theme + style
  • global_style 用于"统一感"(如统一字体),但不要让所有格共享主体
  • 与 cinematic-storyboard-grid 区别:本模板强调 panel 间无叙事关联,每格都是独立成品
  • 与 banner-grid-2x2(已有)区别:本模板多行业 / 多主题,已有那个是同品牌多创意

5.9 Full Brand / Mascot Doc(18+ 模块大型品牌识别全流程文档)

适用于"一图概览整个品牌 / 吉祥物从 DNA 到落地的全流程"(如 full-mascot-brand-doc.md):

{
  "brand": { "name": "", "industry": "", "primary_colors": [], "voice": "" },
  "character": { "description": "", "rendering_style": "" },
  "layout": {
    "grid": "3 columns by 6 rows",
    "panel_count": 18,
    "sections": [
      { "id": "01", "title": "01 BRAND DNA ANALYSIS", "elements": [] },
      { "id": "02", "title": "02 CONCEPT MOODBOARD", "elements": [] }
    ]
  }
}

字段经验:

  • sections 数组显式列出 18 个模块,每模块有自己的 id + title + elements
  • 模块 id 双数字编号(01-18),方便视觉上形成「目录感」
  • 每模块 elements 必须显式列出「这一格画什么」(草图 / 3D / 配色板 / 应用场景)
  • 与 mascot-brand-kit(已有)区别:本模板是全流程文档(18-24 格),已有那个是简化套装(6-9 格)

六、参数设计规则

每个模板字段都尽量判断属于以下哪一类。

6.1 核心参数(优先提问)

缺失会显著影响结果,优先问用户。

常见例子:

  • 主体是谁
  • 商品名称是什么
  • 城市名是什么
  • 主题是什么
  • 是真人照片还是文字描述
  • 平台风格是什么

6.2 可默认参数

缺失后可以先用默认值,不影响模板正常工作。

常见例子:

  • 背景色
  • 次级按钮文案
  • 普通装饰元素
  • 一般性灯光词
  • 常规色彩倾向

6.3 可随机参数

允许自动补全,但必须在风格范围内合理生成。

常见例子:

  • 路人昵称
  • 次级聊天消息
  • 礼物提示
  • 小装饰元素
  • 次级背景内容

七、参数写法规范

变量统一使用如下格式:

{argument name="host name" default="Elon Musk"}

建议规则:

  • name:简洁明确
  • default:给出一个可直接工作的默认值
  • 如果一个字段后续经常需要随机化,也应先给出合理默认值

不要使用:

  • 含糊不清的参数名
  • 没有默认值但又不是必问字段

八、缺失信息提问策略

8.1 总原则

提问必须:

  • 精准
  • 少量
  • 只围绕模板关键字段
  • 不要泛泛而问

8.2 通用优先级

建议按下面顺序判断是否需要提问:

  1. 主体来源是什么
  2. 图像用途是什么
  3. 核心对象/商品/主题是什么
  4. 是否允许自动补全缺失信息
  5. 是否有必须保留或必须避免的元素

8.3 直播 UI 类示例

不要问:

  • “你想做成什么感觉?”

优先问:

  • 主播是谁?
  • 用真人照片、名人名字、人物描述,还是随机生成?
  • 商品名称是什么?
  • 商品价格是否指定?
  • 是否允许我自动补全评论和礼物内容?

8.4 电影 / TVC 分镜类示例

不要问:

  • "你想要什么故事?"

优先问:

  • 一句话故事:谁 + 在哪 + 发生什么 + 结局是什么?
  • 题材是什么?(sci-fi / 灾难 / 战斗 / 浪漫 / 悬疑 / 黑色电影)
  • 镜头数量?(9 / 12 / 16)+ 网格(3×3 / 3×4 / 4×4)
  • 情绪曲线:起 → 升 → 高潮 → 落 / 一直紧张 / 平静爆发?
  • 风格:photoreal / 油画 / 动漫 cinematic / 黑白 / 复古胶片?
  • (TVC 专用)产品是什么?品牌名 / 卖点 / 时长 / 比例?

8.5 流程板 / 装备穿戴 / 教程板示例

不要问:

  • "你想做几张图?"

优先问:

  • 流程主题是什么?(装备 / 化妆 / 操作 / 训练 / 维修)
  • 主角是谁?(性别 / 年龄 / 关键识别特征 / 是否需要面部隐私保护)
  • 步骤数量?(4 / 6 / 8 / 9)+ 网格
  • 每一步「标题 + 简述 + 此时装备状态 / 操作动作」
  • 风格:cinematic 实拍 / 时尚大片 / tokusatsu 特摄 / 工坊纪实?
  • 文字语言(标题 / 说明字段使用语言)?

8.6 角色多版本目录海报示例(catalog character poster)

不要问:

  • "你想画什么角色?"

优先问:

  • 全图主题是什么?(十二星座 / 五行 / 朝代 / 人格类型 / 节气)
  • 一共几个版本?(3 / 5 / 6 / 12)
  • 每个版本的「名称 + 主题色 + 装束 / 道具 / 背景」
  • 同一角色基底(脸型 / 体型 / 发色)保持哪些不变?
  • 风格:anime / 国风 gongbi / Q 版 / 写实?

8.7 系列产品 lineup 对比海报示例

不要问:

  • "你想做什么海报?"

优先问:

  • 品牌 / 产品线 名称是什么?
  • 一共几个 SKU?(建议 12-36)
  • 按什么维度排序?(等级 tier / 系列 series / 年代 / 价格)
  • 是否需要 legend(等级 key / 图标 key / 风格 key)?
  • 背景调性:奢华深色 / 复古牛皮纸 / 工业极简?

8.8 一日游 split 海报示例

不要问:

  • "你想去哪?"

优先问:

  • 目的地(景区 / 城市 / 国家公园 名称)?
  • 标题文案 + 文字语言(中 / 日 / 英)?
  • 站点数量(5-7)+ 每站「名称 + 时间 + 一句描述 + 小插画 + 大场景」?
  • 整体路线主题(自然 / 历史 / 美食 / 摄影 / 朝圣)?
  • 风格:复古插画 / 国家公园海报 / 水彩日式 / Art Nouveau?
  • 底部 stats(总距离 / 步数 / 预计时间)?

九、自动补全策略

当用户明确表示:

  • “你来补全”
  • “你随机生成”
  • “先给我一个 demo”

则允许:

  1. 只问最关键的 1-2 个问题
  2. 其余字段使用默认值
  3. 或在可随机字段中合理生成

自动补全时必须满足:

  • 不破坏主体一致性
  • 不与用户已指定信息冲突
  • 不制造过于离谱的次要元素

十、主模板与变体模板的关系

每个模板文件至少要有:

  1. 一套主模板
  2. 若干变体模板(可选但推荐)

主模板

应满足:

  • 最通用
  • 最容易复用
  • 可覆盖大多数使用场景

变体模板

常见变体:

  • 用户给参考照片版
  • 用户给名人名字版
  • 用户给文本描述版
  • 自动补全版
  • 平台风格版
  • 商业化加强版

变体不应完全脱离主模板,而应在主模板结构上调整少量字段。


十一、从参考案例提炼模板的步骤

参考案例来源目前主要是:

  • skills/gpt-image-2/100+GPT-Image2提示词.md

后续提炼模板时,严格按以下步骤:

Step 1:先判断分类

把案例归入正确的一级目录(与 SKILL.md 模板索引一致):

  • ui-mockups
  • product-visuals
  • maps(不再叫 maps-and-infographics)
  • slides-and-visual-docs
  • poster-and-campaigns
  • portraits-and-characters
  • scenes-and-illustrations
  • editing-workflows
  • avatars-and-profile
  • storyboards-and-sequences
  • grids-and-collages
  • branding-and-packaging
  • typography-and-text-layout
  • assets-and-props
  • academic-figures
  • infographics
  • technical-diagrams

Step 2:判断是新原型还是旧原型变体

例如:

  • VR 头显爆炸图 -> 新原型
  • 手机爆炸图 -> 旧原型变体

Step 3:拆字段

把案例拆成:

  • 主体
  • 场景
  • 布局
  • 风格
  • 文案
  • 约束

Step 4:标记参数类型

为每个字段标记:

  • 必问
  • 可默认
  • 可随机

Step 5:先写主模板

不要一开始就写 4 个版本。先把最通用的一套主模板写出来。

Step 6:再补变体

例如:

  • 参考照片版
  • 人名版
  • 描述版
  • 自动补全版

Step 7:补提问顺序

说明在真实对话里优先要问哪些字段。

Step 8:补避免事项

总结这个模板最容易失败的地方。


十二、模板文件命名规则

模板文件名应满足:

  • 小写字母
  • 数字或连字符
  • 尽量精确表达主题
  • 不要用来源命名
  • 不要用序号命名

正确示例:

  • live-commerce-ui.md
  • exploded-view-poster.md
  • food-map.md

错误示例:

  • template-01.md
  • youmind-case-1.md
  • twitter-prompt-4.md

十三、单文件实施清单(后续每次新增模板都要遵守)

以后每新增一个模板文件,都按这份清单执行:

  1. 确定一级分类目录
  2. 确定文件名是否足够精确
  3. 判断它是新原型还是已有原型变体
  4. 写 适用范围
  5. 写 何时使用
  6. 写 缺失信息优先提问顺序
  7. 写主模板 JSON
  8. 写参数策略
  9. 写自动补全策略
  10. 写变体方式
  11. 写避免事项
  12. 若属于新增模板主题,则同步更新 SKILL.md 索引

十四、Phase 1:references 目录树重构

目标

把 references/ 从平铺结构升级为目录树。

任务拆解

1. 建立一级分类目录

创建空目录:

  • references/ui-mockups/
  • references/product-visuals/
  • references/maps-and-infographics/
  • references/slides-and-visual-docs/
  • references/poster-and-campaigns/
  • references/portraits-and-characters/
  • references/scenes-and-illustrations/
  • references/editing-workflows/
  • references/branding-and-packaging/
  • references/typography-and-text-layout/
  • references/storyboards-and-sequences/
  • references/assets-and-props/

2. 迁移现有直播模板

把现有直播模板迁移到:

  • references/ui-mockups/live-commerce-ui.md

3. 更新 SKILL.md

把原来的平铺索引改成:

  • 一级分类
  • 二级具体模板文件

4. 清理旧路径引用

删除旧的平铺 references 文件路径引用。

阶段完成标准

  • references 目录树创建完成
  • 现有直播模板已迁移到 ui-mockups/
  • SKILL.md 索引已同步

十五、Phase 2:模板方法论升级

目标

把 prompt-writing.md 升级成后续所有模板的总规范。

任务拆解

1. 补全目录规则

明确 references 必须是目录树。

2. 补全单模板文件规范

明确一个模板文件内部必须有哪些章节。

3. 补全 JSON 字段设计标准

包括:

  • 通用字段
  • 分类特有字段
  • 字段职责

4. 补全参数分类规则

包括:

  • 核心参数
  • 可默认参数
  • 可随机参数

5. 补全提问与自动补全策略

包括:

  • 问题优先级
  • 自动补全何时允许
  • 如何避免无谓提问

6. 补全案例提炼流程

从参考案例到 JSON 模板的完整步骤。

阶段完成标准

  • prompt-writing.md 可以单独作为“模板设计总规范”使用

十六、后续阶段预告(只列主任务)

Phase 3:建设 ui-mockups/

优先文件:

  • live-commerce-ui.md
  • social-interface-mockup.md
  • product-card-overlay.md

Phase 4:建设 product-visuals/

优先文件:

  • exploded-view-poster.md
  • white-background-product.md
  • premium-studio-product.md

Phase 5:建设 maps-and-infographics/

优先文件:

  • food-map.md
  • travel-route-map.md
  • illustrated-city-map.md

Phase 6:建设 slides-and-visual-docs/

优先文件:

  • dense-explainer-slides.md
  • policy-style-slide.md
  • visual-report-page.md

Phase 7:扩展常用视觉分类

  • poster-and-campaigns
  • portraits-and-characters
  • scenes-and-illustrations
  • editing-workflows

Phase 8:扩展高级分类

  • branding-and-packaging
  • typography-and-text-layout
  • storyboards-and-sequences
  • assets-and-props

十七、近期执行顺序建议

按当前情况,建议后续严格按下面顺序推进:

  1. 完成 Phase 1:重构 references 为目录树
  2. 完成 Phase 2:升级 prompt-writing.md
  3. 完成 Phase 3:建设 ui-mockups/
  4. 完成 Phase 4:建设 product-visuals/
  5. 完成 Phase 5:建设 maps-and-infographics/
  6. 完成 Phase 6:建设 slides-and-visual-docs/
  7. 再进入其他分类扩展

十八、结论

后续这个 skill 不能按“不断加案例”的方式增长,而要按:

  • 先定目录树
  • 再定模板规范
  • 再做单模板文件
  • 再补参数与提问策略
  • 最后再持续扩展案例

这样你后面才能真正依据一份稳定的路线图持续指导我完善这个 skill,而不会每次都重新决定结构。