从 0 到 1:构建一个供 AI Agent 使用的图像生成技能系统
前言当我们把 AI Agent 接进工作流后几乎每天都会遇到一个痛点图像生成这件事每次都要靠 Agent 自己拼提示词。没有风格库、没有模板、没有搜索——结果全靠手感输出质量参差不齐。image-craft这个项目就是为了解决这个问题而生的。它是一套面向 AI Agent 的图像生成技能系统内置风格库、提示词模板、色彩方案和智能推荐引擎Agent 只需描述意图系统自动完成剩下的工作。项目地址https://github.com/Chelase/image-craft1. 背景为什么需要技能化的图像生成工具目前主流的图像生成 APIOpenAI DALL-E、GPT Image 2、Midjourney 等都只提供最底层的能力你给 prompt它出图。但在实际 Agent 工作流中我们真正需要的是需求现状批量尝试不同艺术风格需要手动查资料写 prompt风格可复用、可搜索没有集中管理的风格库提示词模板化、参数化每次都要从零拼装给 Agent 下达帮我找个赛博朋克风格Agent 只能靠幻觉瞎猜image-craft的目标就是把图像生成技能化——像搭积木一样把风格、模板、配色组合起来Agent 和人类都能用。2. 整体架构image-craft/ ├── data/ # 本地知识库 │ ├── styles.csv # 53 种艺术风格 │ ├── prompts.csv # 118 个提示词模板 │ └── colors.csv # 49 个配色方案 ├── scripts/ │ ├── search.py # 统一搜索引擎Phase 2 │ ├── prompts_enhancer.py # 提示词增强器Phase 4 │ ├── image_craft.py # Python 主脚本 │ └── image_craft.ps1 # PowerShell 主脚本 ├── SKILL.md # Agent 技能定义 ├── README.md └── ROADMAP.md设计原则无硬编码配置——所有配置来自private_config.json或环境变量双前端——PowerShell 面向 Windows 用户Python 脚本兼容全平台搜索引擎独立——search.py是纯搜索服务不依赖图像生成逻辑3. 核心数据结构3.1 风格库styles.csv53 种风格涵盖 8 大类别类别示例风格传统艺术油画、水彩、素描、版画、国画数字艺术赛博朋克、蒸汽波、故障艺术、像素风摄影风格胶片、黑白、宝丽来、长曝光、微距插画风格扁平、等距、日系、美漫、儿童插画3D 渲染低多边形、体素、C4D、Blender特殊效果双重曝光、光绘、红外摄影、移轴每条风格记录包含风格名称中英文、描述、关键词标签、提示词模板、负面提示词、适用场景、推荐参数。3.2 提示词模板库prompts.csv118 个模板覆盖场景 风格 光影 构图四大维度{ id: portrait-cinematic, name: 电影感人像, category: portrait, template: A cinematic portrait of {subject}, {lighting}, {mood}, shot on 35mm film, shallow depth of field, dramatic lighting, variables: [subject, lighting, mood], tags: [portrait, cinematic, film] }3.3 配色方案库colors.csv49 个经典配色支持通过自然语言搜索如赛博朋克莫兰迪日式自动在提示词末尾追加配色描述。4. Phase 2搜索引擎设计4.1 为什么不用数据库最初考虑过 SQLite但很快放弃了——AI Agent 的使用场景需要快速、灵活的模糊搜索而不是结构化查询。Python 原生实现更轻量也更容易与提示词增强逻辑集成。4.2 search.py 核心实现搜索算法有两个关键设计① 加权模糊匹配# 多字段加权name_en name_cn keywords description WEIGHTS {name_en: 3.0, name_cn: 3.0, keywords: 2.0, description: 1.0} def score(record, query): total 0.0 for field, weight in WEIGHTS.items(): total weight * fuzzy_match(record.get(field, ), query) return total② CJK 字符级匹配中文没有空格分词需要对 CJK 字符做特殊的 N-gram 处理def cjk_chargrams(text, n2): 对中文文本生成字符级 n-gram chars [c for c in text if not c.isascii()] return set(.join(chars[i:in]) for i in range(len(chars) - n 1))英文部分走标准单词匹配中文部分走字符级匹配两者独立计算后再合并。4.3 CLI 接口# 搜索风格默认 python scripts/search.py 赛博朋克 # 指定域 分类 python scripts/search.py 人像 --domain style --category portrait # 组合设计系统风格 模板 配色推荐 python scripts/search.py 未来城市 --design-system # 随机推荐 python scripts/search.py --random --domain style --limit 5 # JSON 输出供 Agent 调用 python scripts/search.py cyberpunk --domain all --format json5. Phase 3与主脚本集成5.1 image_craft.py 新增命令suggest命令是最重要的新功能——它让 Agent 在生成前先做规划# 风格 模板 配色组合推荐 python scripts/image_craft.py suggest 东京街头 --domain all # 机器可读的 JSON 输出 python scripts/image_craft.py suggest cyberpunk future --domain all --format json # 按类别筛选 python scripts/image_craft.py suggest 人像 --category portrait --limit 3generate / transform命令也获得了新参数# 使用风格 模板 变量替换 配色 python scripts/image_craft.py generate \ --prompt 东京街头 \ --template urban landscape \ --var cityTokyo \ --var time of daynight \ --color midnight blue \ --style-name cyberpunk \ --output tokyo.png # 加上负面提示词自动避免 lowres/bad anatomy 等常见缺陷 python scripts/image_craft.py generate \ --prompt 东京街头 \ --style-name cyberpunk \ --negative \ --output tokyo_clean.png5.2 PowerShell 等效命令# 风格建议JSON 格式 pwsh -File scripts/image_craft.ps1 -Command suggest -Prompt 赛博朋克 -Limit 3 -Format json # 生成图像 pwsh -File scripts/image_craft.ps1 -Command generate -Prompt 东京街头 -StyleName 赛博朋克 -Output outputs/cyberpunk.pngPowerShell 侧实现了 fuzzy 风格的本地搜索直接读 CSV搜不到时自动回退调用python scripts/search.py。6. Phase 4提示词增强器6.1 质量关键词注入不传入--no-quality时系统自动在提示词前注入masterpiece, best quality, high resolution, detailed, professional, trending on artstation6.2 负面提示词生成传入--negative时追加风格相关的负面提示词DEFAULT_NEGATIVE lowres, bad anatomy, blurry, worst quality, low quality STYLE_NEGATIVE { photography: noise, grain, overexposed, underexposed, distorted, illustration: deformed, disfigured, amateur, primitive, cyberpunk: natural, organic, rustic, medieval, }6.3 模板变量替换与去重模板中{subject}变量替换时自动处理常见重复描述def _deduplicate_subject(template: str, subject: str) - str: 去掉 template 开头与 subject 重复的 A/An 描述 article_match re.match(r^(A|An)\s(.), template.strip(), re.I) if article_match: desc article_match.group(2).rstrip(,;) if desc.lower() subject.lower(): template re.sub(r^(A|An)\s, , template, count1) return template6.4 风格自动推荐委托给 search.pydef suggest_styles_for_prompt(prompt: str, category: str None) - list[Style]: results search_styles(prompt, limit3, categorycategory) if not results and category: # 搜不到时去掉类别限制宽松重试 results search_styles(prompt, limit3) return results7. 实际使用示例示例 1Agent 智能规划流程用户: 帮我画一个赛博朋克风格的城市夜景Agent 执行: $ python scripts/image_craft.py suggest 赛博朋克城市 --domain all --format json 返回: { styles: [{id: cyberpunk, name_cn: 赛博朋克, score: 0.95}, ...], prompts: [{id: urban-night, name: 城市夜景, ...}], colors: [{id: neon-blue, name: 霓虹蓝, ...}] }Agent 选定风格执行生成: $ python scripts/image_craft.py generate \ --prompt 城市夜景霓虹灯光高楼林立 \ --style-id cyberpunk \ --template urban landscape \ --var cityTokyo \ --color neon-blue \ --negative \ --output cyberpunk_city.png示例 2批量风格探索# 同一个主题尝试 5 种不同风格 for style in 赛博朋克 蒸汽波 像素风 低多边形 光绘; do python scripts/image_craft.py generate \ --prompt 东京街头 \ --style-name $style \ --negative \ --output tokyo_${style}.png done8. 技术亮点技术点实现方式无硬编码配置private_config.json 环境变量双轨CJK 搜索字符级 N-gram 与英文单词匹配分开处理搜索引擎独立search.py 纯搜索不耦合图像生成逻辑双重前端PowerShellWindows Python全平台提示词去重正则去掉模板开头的 A/An 描述 重复Agent JSON 通信suggest --format json 提供机器可读输出结语image-craft的核心价值是把图像生成的隐式知识变成显式的可搜索资产。53 种风格、118 个模板、49 个配色方案——这些原本只存在于设计师脑海里的东西现在 Agent 也能调用了。如果你也在做 Agent 相关的工作或者对图像生成的工程化感兴趣欢迎 Star / Fork参与讨论。GitHub: https://github.com/Chelase/image-craft