逆向推理文生图 System Prompt:将 Civitai 的真实 prompt 数据集转化为结构化 image-json,基于 DSPy GEPA 自动优化 System Prompt。
手写文生图 System Prompt 依赖经验,难以量化优劣。本项目通过将 Civitai 社区真实高质量 prompt 作为黄金标准数据集,利用 DSPy GEPA 优化框架自动迭代 System Prompt,实现从"靠感觉调 prompt"到"数据驱动自动进化"的转变。
Civitai Prompt 数据集
↓
数据采集模块 (data/fetch_civitai.py)
↓
数据筛选模块 (data/filter_prompts.py)
↓
LLM 转换模块 (optimize_gepa.py)
↓
双通道评估 (evaluate.py: 规则分 + LLM Judge)
↓
GEPA 自动进化 / Meta-Prompting 手动反思
↓
最优 System Prompt 导出 (extract_best_prompt.py → outputs/)
prompt-reverse-engineer/
├── data/
│ ├── fetch_civitai.py # Cursor 分页采集 Civitai 数据
│ ├── filter_prompts.py # 规则筛选:去掉低质量数据
│ └── prompts.json # 采集后的原始数据集(运行后生成,不入 git)
├── outputs/ # 各版本 System Prompt 及评估报告(不入 git)
├── schema.py # Pydantic 强校验 image-json Schema
├── llm_client.py # 统一 LLM 调用封装(OpenAI / OpenRouter)
├── evaluate.py # 双通道评分(规则分 + LLM Judge with Feedback)
├── optimize_gepa.py # GEPA 自动优化主流程
├── meta_reflect.py # 手动 meta-prompting 反思循环
├── extract_best_prompt.py # 从 GEPA 历史中提取最优版本
├── requirements.txt # 依赖声明(最低版本约束)
├── .env.example # 环境变量模板
└── LICENSE
# 推荐使用虚拟环境
python -m venv .venv
source .venv/bin/activate # macOS/Linux
# .venv\Scripts\activate # Windows
pip install -r requirements.txtcp .env.example .env
# 编辑 .env,填入 OPENAI_API_KEY 等python data/fetch_civitai.py注意:需要 Civitai API Key,在
.env中配置CIVITAI_API_KEY。
# 预览筛选结果,不写文件
python data/filter_prompts.py --dry-run
# 筛选并保存到 data/prompts_filtered.json
python data/filter_prompts.py
# 或直接覆盖原文件
python data/filter_prompts.py --inplace筛选规则:
- 去掉 prompt 长度 < 50 的过短数据
- 去掉 prompt 里已包含结构化字段的(如
"subject":,"style":等) - 去掉 prompt 长度 > 5000 的过长数据
# 快速测前 5 条(最简单)
python evaluate.py -n 5
# 跳过前 20 条,测第 21~30 条
python evaluate.py -n 10 --offset 20
# 随机抽 10 条测试(seed=42 保证每次结果一样)
python evaluate.py -n 10 --shuffle
# 测试新版 System Prompt 效果
python evaluate.py -n 20 --sp outputs/system_prompt_v1.txt
# 查看帮助
python evaluate.py --helppython optimize_gepa.pypython meta_reflect.py# 从 outputs/ 中的 GEPA 历史文件提取评分最高的版本
python extract_best_prompt.py- 跑
fetch_civitai.py采集 100 条 prompt - 跑
filter_prompts.py --dry-run预览筛选结果,确认无误过滤 - 跑
filter_prompts.py生成干净数据集 - 手写初始
outputs/system_prompt_v0.txt - 用
evaluate.py跑全量,找出评分 < 0.5 的失败案例 - 把失败案例喂给
meta_reflect.py,得到 v1 - 以 v1 为起点,用 GEPA 自动进化 10 轮
- 用
extract_best_prompt.py提取最终最优版本作为生产用 System Prompt
{
"subject": "1girl, white dress",
"style": ["anime", "watercolor"],
"lighting": "soft natural light, rim light",
"environment": "flower field, golden hour",
"camera": "medium shot, shallow depth of field",
"quality_tags": ["masterpiece", "best quality"],
"lora_tags": ["<lora:detail_tweaker:0.8>"],
"artist_reference": ["artgerm", "wlop"],
"mood": "peaceful, dreamy",
"negative_prompt": "blurry, bad anatomy"
}GEPA 优化每轮需调用 LLM 多次(评估 + 进化),100 条数据跑 10 轮约消耗 $1~3 USD(视所用模型而定)。建议先用少量数据(10~20 条)测试流程。