从 0 到 1:构建一个供 AI Agent 使用的图像生成技能系统
前言
当我们把 AI Agent 接进工作流后,几乎每天都会遇到一个痛点:图像生成这件事,每次都要靠 Agent 自己拼提示词。没有风格库、没有模板、没有搜索——结果全靠"手感",输出质量参差不齐。
image-craft 这个项目,就是为了解决这个问题而生的。它是一套面向 AI Agent 的图像生成技能系统,内置风格库、提示词模板、色彩方案和智能推荐引擎,Agent 只需描述意图,系统自动完成剩下的工作。
1. 背景:为什么需要技能化的图像生成工具?
目前主流的图像生成 API(OpenAI 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.csv)
53 种风格,涵盖 8 大类别:
| 类别 | 示例风格 |
|---|---|
| 传统艺术 | 油画、水彩、素描、版画、国画 |
| 数字艺术 | 赛博朋克、蒸汽波、故障艺术、像素风 |
| 摄影风格 | 胶片、黑白、宝丽来、长曝光、微距 |
| 插画风格 | 扁平、等距、日系、美漫、儿童插画 |
| 3D 渲染 | 低多边形、体素、C4D、Blender |
| 特殊效果 | 双重曝光、光绘、红外摄影、移轴 |
每条风格记录包含:风格名称(中英文)、描述、关键词标签、提示词模板、负面提示词、适用场景、推荐参数。
3.2 提示词模板库(prompts.csv)
118 个模板,覆盖场景 + 风格 + 光影 + 构图四大维度:
{
"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.csv)
49 个经典配色,支持通过自然语言搜索(如"赛博朋克""莫兰迪""日式"),自动在提示词末尾追加配色描述。
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, n=2):
"""对中文文本生成字符级 n-gram"""
chars = [c for c in text if not c.isascii()]
return set("".join(chars[i:i+n]) 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 json
5. 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 3
generate / transform 命令也获得了新参数:
# 使用风格 + 模板 + 变量替换 + 配色
python scripts/image_craft.py generate \
--prompt "东京街头" \
--template "urban landscape" \
--var city="Tokyo" \
--var "time of day=night" \
--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.png
5.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.png
PowerShell 侧实现了 fuzzy 风格的本地搜索(直接读 CSV),搜不到时自动回退调用 python scripts/search.py。
6. Phase 4:提示词增强器
6.1 质量关键词注入
不传入 --no-quality 时,系统自动在提示词前注入:
masterpiece, best quality, high resolution, detailed, professional, trending on artstation
6.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, count=1)
return template
6.4 风格自动推荐(委托给 search.py)
def suggest_styles_for_prompt(prompt: str, category: str = None) -> list[Style]:
results = search_styles(prompt, limit=3, category=category)
if not results and category:
# 搜不到时去掉类别限制,宽松重试
results = search_styles(prompt, limit=3)
return results
7. 实际使用示例
示例 1:Agent 智能规划流程
用户: 帮我画一个赛博朋克风格的城市夜景
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 city="Tokyo" \
--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"
done
8. 技术亮点
| 技术点 | 实现方式 |
|---|---|
| 无硬编码配置 | private_config.json + 环境变量双轨 |
| CJK 搜索 | 字符级 N-gram 与英文单词匹配分开处理 |
| 搜索引擎独立 | search.py 纯搜索,不耦合图像生成逻辑 |
| 双重前端 | PowerShell(Windows)+ Python(全平台) |
| 提示词去重 | 正则去掉模板开头的 "A/An + 描述" 重复 |
| Agent JSON 通信 | suggest --format json 提供机器可读输出 |
结语
image-craft 的核心价值,是把图像生成的隐式知识变成显式的可搜索资产。53 种风格、118 个模板、49 个配色方案——这些原本只存在于设计师脑海里的东西,现在 Agent 也能调用了。
如果你也在做 Agent 相关的工作,或者对图像生成的工程化感兴趣,欢迎 Star / Fork,参与讨论。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)