前言

当我们把 AI Agent 接进工作流后,几乎每天都会遇到一个痛点:图像生成这件事,每次都要靠 Agent 自己拼提示词。没有风格库、没有模板、没有搜索——结果全靠"手感",输出质量参差不齐。

image-craft 这个项目,就是为了解决这个问题而生的。它是一套面向 AI Agent 的图像生成技能系统,内置风格库、提示词模板、色彩方案和智能推荐引擎,Agent 只需描述意图,系统自动完成剩下的工作。

项目地址https://github.com/Chelase/image-craft


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,参与讨论。

GitHub: https://github.com/Chelase/image-craft

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐