从「一句话需求」到「可落地的海报效果图」,中间只隔了一个 Skill。
最近在做一个很有意思的小项目:为一个走 年轻、潮流、有网感 路线的轻食餐厅(品牌叫 zhan-creative)搭建一个 AI 营销物料助理。
以前设计一张海报,流程大概是:想创意 → 写方案 → 找设计师/开生图工具 → 反复调 Prompt。而现在,我只对 AI 说一句:
「帮我生成一个电子日历海报」
它就能按品牌规范输出完整创意方案,并自动调用大模型画出效果图。这篇文章记录一下这个 Skill 是怎么设计的,以及过程中踩过的几个真实的坑。
一、项目长什么样
整个东西收敛成一个非常小的项目结构:
demo01/
├── .claude/
│ └── skills/
│ └── zhan-creative/ # 一个「技能」目录
│ ├── SKILL.md # 技能说明书(品牌资产 + 工作流)
│ ├── references/ # 参考资料(可放范例/色板等)
│ ├── assets/ # 参考素材位
│ ├── scripts/
│ │ └── qwen_image_gen.py # 调用图像生成模型的脚本
│ └── output/ # AI 生成的成品图核心思想就一句话:把「设计师的脑子」和「画师的手」都封装进一个 Skill。以后无论是做海报、易拉宝、工装还是包装盒,调用同一个技能即可。
二、品牌资产,先写进「说明书」
做物料最怕的是风格跑偏。所以第一步,把品牌的核心视觉资产固化进 SKILL.md:
## 品牌核心元素
- 品牌名:zhan-creative餐厅
- 风格:年轻、潮流、有网感
- IP形象:布偶猫
- 主色:薄荷绿 #5DDEB5
- Slogan:A FRESH, MODERN BITE / 健康轻食主义
- 风格:3D卡通、清新时尚,软陶奶油柔光质感有了这份「地基」,AI 每次出方案都会自动对齐品牌调性——布偶猫 IP、薄荷绿主色、软陶奶油质感,不会天马行空跑偏。
三、任务拆成三步:创意 → Prompt → 出图
SKILL.md 里定义了固定工作流,保证每次输出的质量稳定:
## 你的任务
当用户说要做某种物料(海报、易拉宝、工装、包装盒等),你需要:
1. 严格按照固定格式输出完整物料设计创意方案;
2. 根据创意方案提炼完整绘图正向提示词,调用本地 python 脚本生成 AI 效果图;
3. 将脚本返回的本地图片文件路径展示给用户。创意方案也有固定四段式:创意主题 / 视觉风格 / 画面构成 / 细节建议。这样既方便用户判断方向,也方便把方案「翻译」成绘图 Prompt。
关键的设计决策是:正向 Prompt 强制内置品牌基底,再追加当前物料的具体画面描述,例如:
3D卡通,软陶奶油柔光质感,布偶猫IP,薄荷绿 #5DDEB5,
清新治愈,高细节,商业物料。
【此处再拼接:画面布局、主体元素、配色、质感等物料专属描述】负面提示词也做了统一约定,避免「模糊、畸形、错误文字」等常见翻车:
模糊,变形,低画质,水印,错误文字,畸形,多肢体,丑陋四、真正「出图」的那段脚本
效果图是通过阿里云百炼(DashScope)的 qwen-image 模型生成的,脚本核心只有几十行:
from dashscope import ImageSynthesis
import dashscope
def generate_image(prompt, negative_prompt="", size="1024*1024",
n=1, output_dir="./skill_output"):
dashscope.api_key = DASHSCOPE_API_KEY
saved_files = []
# qwen-image 单次仅支持生成 1 张,故循环 n 次、每次 n=1
for idx in range(n):
resp = ImageSynthesis.call(
model="qwen-image",
prompt=prompt,
negative_prompt=negative_prompt,
size=size,
n=1,
)
if resp.status_code != 200:
raise RuntimeError(f"API调用失败 {resp.status_code}: {resp.message}")
for result in resp.output.results:
img_bytes = requests.get(result.url, timeout=120).content
save_path = Path(output_dir) / f"gen_qwen_image_gen_{idx}.png"
save_path.write_bytes(img_bytes)
saved_files.append(save_path)
return saved_files调用方式也非常简单,命令行即可:
python3 scripts/qwen_image_gen.py \
--prompt "【拼接好的完整绘图 Prompt】" \
--negative-prompt "模糊,变形,低画质,水印,错误文字,畸形,多肢体,丑陋" \
--size "720*1280" \
--n 2 \
--out-dir ./output尺寸规则也预置好了,按发布场景自动选择:
五、实战效果:一张「电子日历海报」
我让它做了一张 电子日历海报(竖版 9:16)。创意方向是:
「每天一口新鲜 · 布偶猫的轻食月历」——布偶猫当"日期管家"趴在月历上,陪你每天健康打卡。
AI 直接产出的两张效果图如下:


可以看到 3D 卡通的布偶猫、薄荷绿主色、软陶奶油质感都稳稳落在品牌调性里,吐司、牛油果、咖啡杯、小太阳这些轻食元素也散落得很自然。整条链路——创意方案 → Prompt → 成品图 → 本地路径返回——一次跑通。
六、避坑记录(都是真实踩过的)
写这套东西时踩了几个不算冷门的坑,值得记下来:
模型名不能想当然。 最初脚本写的是
qwen-image-2.0-pro,结果一调用就报url error, please check url。排查后发现该账号下真正可用的模型名是qwen-image。遇到"看起来对但报 URL 错"时,先怀疑模型 ID 是否正确。n=2会让任务「静默失败」。 以为传n=2就能出两张,结果 HTTP 200、任务却异步 FAILED,返回num_images_per_prompt must be 1,文件列表为空。解决办法是循环调用 n 次、每次 n=1,既尊重模型限制,又保留了「一次要两张」的 CLI 语义。装好的依赖没被用上。 一开始在系统 Python 里找不到
dashscope,反复import失败;后来发现依赖被装进了项目自带的.venv(Python 3.11),而终端默认用的是 Homebrew 的 Python 3.13。跑脚本前先确认用的是同一个解释器。AI 画「字」仍然会翻车。 日历里的日期数字、星期文字偶尔会错乱(比如把星期写成怪字、日期出现重复/乱序)。文生图模型的文字渲染仍是短板。所以更稳的玩法是:把 AI 图当"底图素材",用 PS / Canva / 代码再叠一层真实、可编辑的文字层。
密钥安全要留意。 脚本为了本地方便硬编码了 API Key,但绝不能把这类文件推到公开仓库。脚本头部也特意加了警示注释,只允许本地个人使用。
七、小结与后续
这个项目最大的价值,不是"能画图",而是把品牌审美 + 固定工作流 + 图像生成打包成了一个可复用的"技能原子"。之后无论做海报、外卖包装盒、工装还是菜单,都只需要一句话,AI 就能按同一套品牌语言稳定地产出。
后续可以做的方向还很多:
把参考图(references / assets)喂给多模态模型做 风格一致性生图;
接入固定排版模板,解决 AI 文字乱码问题;
把「创意方案」同步输出成小红书/公众号文案,一次生成多平台内容。
如果你也在做品牌相关的 AI 自动化,欢迎交流~
技术栈:Claude Code Skill · 阿里云百炼 DashScope(qwen-image)· Python