Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion .github/workflows/skill-eval.yml
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,6 @@ jobs:
python tools/check_image.py --selftest
python tools/slop_check.py --selftest
python tools/compose_prompt.py --selftest
python tools/run_loop.py --selftest
python tools/rules_engine.py --selftest
python tools/visual_audit.py --selftest
python tools/corpus.py --selftest
Expand Down
23 changes: 6 additions & 17 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -92,9 +92,9 @@ python tools/atomize.py restore # 从原子的完整内容导出可读文本
不是一堆零散脚本,是一条链路:

```
拆解 ──→ 组装 ──→ 自查 ──→ 出图 ──→ 机检 ──→ 验收 ──→ 统计
atomize compose slop qwen check visual fix_stats
prompt _check _image _image _audit
拆解 ──→ 组装 ──→ 自查 ──→ 机检 ──→ 验收 ──→ 统计
atomize compose slop check visual fix_stats
prompt _check _image _audit
```

| 工具 | 做什么 |
Expand All @@ -103,15 +103,13 @@ atomize compose slop qwen check visual fix_stats
| `tools/compose_prompt.py` | 五槽位组装:保真段 → 场景 → 主体 → 细节 → 用途 → 约束,自动补平台约束、跑必填校验 |
| `tools/slop_check.py` | 提示词定稿前查 SD 时代堆词、绝对化用语、虚假促销、功效宣称、AI 痕迹 |
| `tools/rules_engine.py` | 按平台、品类、场景三份判据规则校验槽位,可 `--inject` 补默认约束 |
| `tools/qwen_image.py` | 命令行出图通道(Qwen-Image 2.1 Pro),内置授权闸门 |
| `tools/check_image.py` | 出图后平台机检:白底纯度、主体占比、比例、分辨率、文件大小、透明通道、图内文字 |
| `tools/run_loop.py` | 出图闭环:生成 → 机检 → 修复句回写 → 重跑,每轮落盘并给 manifest |
| `tools/visual_audit.py` | 视觉验收:主体一致性(感知哈希 + 颜色直方图)与 AI 感启发式,只提示不判定 |
| `tools/fix_stats.py` | 从 manifest 统计每条修复句的真实生效率,用来判断措辞要不要改 |
| `tools/corpus.py` | 正样本语料:录入、相似度检索、编译成 few-shot 范例段 |
| `tools/lint_skills.py` | 静态检查全集,CI 的第一道门 |

九个工具带 `--selftest`,离线可验,不依赖密钥与网络。除 `check_image.py` 与 `visual_audit.py` 用到 Pillow 外全是标准库。
八个工具带 `--selftest`,离线可验,不依赖密钥与网络。除 `check_image.py` 与 `visual_audit.py` 用到 Pillow 外全是标准库。

`check_image.py` 的 OCR 会自己找 tesseract:不在 PATH 时扫常见安装路径,默认语言目录缺中文时去找用户级 tessdata。缺依赖就标 `skipped`,不会假装通过。

Expand All @@ -126,17 +124,9 @@ SOP 给的是「方法」,下面两样给的是「判据与范例」:

## 出图与授权

> **出图先授权(硬性)**:任何图片生成模型(Qwen-Image 全系、wan/万相、Seedream、Gemini、GPT-Image、FLUX、z-image 等,含 MCP 工具与网页端代操作)调用前必须先取得明确授权,说明用途、模型、张数与预计花费。规则见 [`tools/IMAGE-GEN-AUTHORIZATION.md`](tools/IMAGE-GEN-AUTHORIZATION.md)。
> **出图先授权(硬性)**:任何图片生成模型(Qwen-Image 全系、wan/万相、Seedream、Gemini、GPT-Image、FLUX、z-image 等,含 MCP 工具与网页端代操作)调用前必须先取得明确授权,说明用途、模型与张数;未获授权时只交付提示词文本,不调用任何出图模型。

`tools/qwen_image.py` 内置闸门,缺 `--authorize` / `--purpose` / `--unit-price` 直接拒绝,不发出请求:

```bash
export DASHSCOPE_API_KEY="sk-..."
python tools/qwen_image.py -p "提示词" --size 1024*1024 -o out \
--authorize "用户 2026-10-29 14:20 回复:可以" --purpose "产品A 天猫主图第 2 张" --unit-price 0.25
```

发请求前会打印「张数 × 单价 = 预计花费」,并追加写入 `out/authorization.log`(只留本机)。单价按官方页面当时数值填,拿不到先问,不猜。
仓库不再内置命令行出图通道:2026-11-10 按用户指令移除 `tools/qwen_image.py`、`tools/run_loop.py` 与规则正本 `tools/IMAGE-GEN-AUTHORIZATION.md`,此后出图走用户指定的外部通道。机检与视觉验收脚本仍在 `tools/`,可对任意通道产出的图做后置校验。

图生图用于产品锁定与翻新:产品实拍图作参考图,提示词里写清保留清单与改动清单。提示词默认按内容投喂、不做模型改写,硬规则不会被稀释。

Expand Down Expand Up @@ -189,6 +179,5 @@ npx promptfoo@0.124.1 eval -c evals/promptfooconfig.quality.yaml

- **AI 感阈值是经验值**:`visual_audit.py` 的饱和度、平滑度、死白、边缘密度这些判据,还没用真实的好图 / AI 图批次标定过,当提示用,不当结论
- **语料库只有 2 条种子**:检索质量取决于样本量,现在属于「能用但不够准」
- **`run_loop.py --generate` 未实跑**:需要授权与 API 余额,闭环逻辑只在 `--dry-run` 下验证过
- **OCR 需要本地装 tesseract**:缺 pytesseract 或 tesseract 时这项走 skipped,不会误报通过;CI 环境没装,所以云端不检查图内文字
- **模板抽取有少量噪声**:少数没有围栏代码块的篇目走裸段落规则,个别片段可能偏宽,未逐篇人工复核
2 changes: 1 addition & 1 deletion ecom-detail-page-prompts/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ description: "电商详情页生图提示词导演:基于上传的产品实拍
14. 定义一套**套图风格锁**——整套页面共用的色板、光影、字体气质、版式语言和装饰系统,每页原样复用。
15. 为每一页输出可直接交给生图工具执行的提示词。
16. 用户指定了生图工具的,读 `references/tool-adaptation.md`,把提示词调整为该工具偏好的写法;未指定则用通用写法。
17. **不得自行出图**。本项目限制任何图片生成模型(Qwen-Image 全系、wan/万相、Seedream、Gemini/Nano Banana、GPT-Image、FLUX、z-image 等,含 MCP 工具与网页端代操作)在调用前必须先说明用途、模型、张数和预计花费,取得用户明确同意后才可调用;规则正本见仓库(及镜像工作区)`tools/IMAGE-GEN-AUTHORIZATION.md`,单独安装技能目录时不带该文件,约束仍按本句执行。未获授权时只交付提示词文本。
17. **不得自行出图**。本项目限制任何图片生成模型(Qwen-Image 全系、wan/万相、Seedream、Gemini/Nano Banana、GPT-Image、FLUX、z-image 等,含 MCP 工具与网页端代操作)在调用前必须先说明用途、模型、张数和预计花费,取得用户明确同意后才可调用;约束一律按本句执行。未获授权时只交付提示词文本。

## 硬规则

Expand Down
20 changes: 3 additions & 17 deletions ecom-detail-page-prompts/references/tool-adaptation.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,22 +60,8 @@
- **中国法规**:AI 生成合成内容须显式与隐式双标识。
- 纯产品详情页(无 AI 人物)不涉及人物标注,但商品外观仍须与参考图一致,严禁货不对板。

## 六、本仓库命令行出图通道(Qwen-Image 2.1 Pro)
## 六、出图与授权

> **调用前必须取得用户授权**:本项目限制任何图片生成模型在调用前都要先说明用途与预计花费并取得同意,Qwen-Image 全系同样适用。规则见仓库 `tools/IMAGE-GEN-AUTHORIZATION.md`。脚本缺 `--authorize` / `--purpose` / `--unit-price` 会直接拒绝,不发出请求。
> **调用前必须取得用户授权**:本项目限制任何图片生成模型在调用前都要先说明用途与模型并取得同意;未获授权时不调用任何出图模型,只交付提示词文本。

仓库内 `tools/qwen_image.py` 提供文生图与图生图命令行通道,走阿里云百炼 DashScope 同步接口,模型 `qwen-image-2.1-pro`。密钥只从环境变量 `DASHSCOPE_API_KEY` 或 `--key-file` 读取,不写入任何文件。

```bash
export DASHSCOPE_API_KEY="sk-..." # 也可用 --key-file 指向密钥文件
python tools/qwen_image.py -p "提示词" -o out \
--authorize "用户 2026-10-29 14:20 回复:可以" --purpose "产品A 天猫详情页第 3 页" --unit-price 0.25
python tools/qwen_image.py -f page03.txt -i product_front.jpg -i product_detail.jpg --size 1024*1536 \
--authorize "..." --purpose "..." --unit-price 0.25
```

参数要点:`--size` 用 `宽*高`(也接受 `宽x高`)或 `auto`;`-n` 支持 1 到 6 张;`--seed` 固定随机种子;`-i` 可重复,最多 10 张参考图。提示词默认按原文投喂、不做模型改写,需要模型按简单描述扩写时加 `--prompt-extend`。输出默认落在 `out/`,该目录不进版本库。详情页逐页生成时,一页一个提示词文件,参考图顺序固定为产品主图在前、细节图在后。提示词含大量引号或换行时用 `-f` 传文件,避免命令行转义问题。

授权三项:`--authorize` 填用户原话或带日期的授权说明,不得自行编造;`--purpose` 具体到产品、平台、页面位置;`--unit-price` 填官方页面当时的每张单价,拿不到就先问用户。整页批量时按总张数报花费,不要拆成多次小额授权。脚本会打印「张数 × 单价 = 预计花费」并写入 `out/authorization.log`,只留本机。

脚本只存在于仓库与镜像工作区,单独安装技能目录时不带 `tools/`。
仓库不再内置命令行出图通道:2026-11-10 按用户指令移除 `tools/qwen_image.py`、`tools/run_loop.py` 与 `tools/IMAGE-GEN-AUTHORIZATION.md`,出图改走用户指定的外部通道。详情页成图仍按上文各节的口径生成,产出用 `tools/check_image.py` 按平台机检。
2 changes: 1 addition & 1 deletion ecom-main-image-prompts/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ description: "全平台电商主图生图提示词导演:基于上传的产品
7. 为每张图规划产品专属职责(见下方"动态规划"),沿买家决策顺序展开;同时定义整套图共用的**套图风格锁**。
8. 按"模特规则"和"图中文字规则"执行人物与文字约束。
9. 用户指定了生图工具的,读 `references/tool-adaptation.md`,把提示词调整为该工具偏好的写法;未指定则用通用写法。
10. **不得自行出图**。本项目限制任何图片生成模型(Qwen-Image 全系、wan/万相、Seedream、Gemini/Nano Banana、GPT-Image、FLUX、z-image 等,含 MCP 工具与网页端代操作)在调用前必须先说明用途、模型、张数和预计花费,取得用户明确同意后才可调用;规则正本见仓库(及镜像工作区)`tools/IMAGE-GEN-AUTHORIZATION.md`,单独安装技能目录时不带该文件,约束仍按本句执行。未获授权时只交付提示词文本。
10. **不得自行出图**。本项目限制任何图片生成模型(Qwen-Image 全系、wan/万相、Seedream、Gemini/Nano Banana、GPT-Image、FLUX、z-image 等,含 MCP 工具与网页端代操作)在调用前必须先说明用途、模型、张数和预计花费,取得用户明确同意后才可调用;约束一律按本句执行。未获授权时只交付提示词文本。

## 严格规则

Expand Down
20 changes: 3 additions & 17 deletions ecom-main-image-prompts/references/tool-adaptation.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,25 +48,11 @@

规则:每步重申保留清单;一次只改一个变量;效果变差时回退上一步重新下达指令,不要叠加新指令硬改。

## 五、本仓库命令行出图通道(Qwen-Image 2.1 Pro)
## 五、出图与授权

> **调用前必须取得用户授权**:本项目限制任何图片生成模型在调用前都要先说明用途与预计花费并取得同意,Qwen-Image 全系同样适用。规则见仓库 `tools/IMAGE-GEN-AUTHORIZATION.md`。脚本缺 `--authorize` / `--purpose` / `--unit-price` 会直接拒绝,不发出请求。
> **调用前必须取得用户授权**:本项目限制任何图片生成模型在调用前都要先说明用途与模型并取得同意;未获授权时不调用任何出图模型,只交付提示词文本。

仓库内 `tools/qwen_image.py` 提供文生图与图生图命令行通道,走阿里云百炼 DashScope 同步接口,模型 `qwen-image-2.1-pro`。密钥只从环境变量 `DASHSCOPE_API_KEY` 或 `--key-file` 读取,不写入任何文件。

```bash
export DASHSCOPE_API_KEY="sk-..." # 也可用 --key-file 指向密钥文件
python tools/qwen_image.py -p "提示词" -o out \
--authorize "用户 2026-10-29 14:20 回复:可以" --purpose "产品A 天猫主图第 2 张" --unit-price 0.25
python tools/qwen_image.py -f prompt.txt -i product_front.jpg -i product_detail.jpg --size 1024*1024 \
--authorize "..." --purpose "..." --unit-price 0.25
```

参数要点:`--size` 用 `宽*高`(也接受 `宽x高`)或 `auto`;`-n` 支持 1 到 6 张;`--seed` 固定随机种子;`-i` 可重复,最多 10 张参考图。提示词默认按原文投喂、不做模型改写,需要模型按简单描述扩写时加 `--prompt-extend`。输出默认落在 `out/`,该目录不进版本库。提示词含大量引号或换行时用 `-f` 传文件,避免命令行转义问题。

授权三项:`--authorize` 填用户原话或带日期的授权说明,不得自行编造;`--purpose` 具体到产品、平台、页面位置;`--unit-price` 填官方页面当时的每张单价,拿不到就先问用户。脚本会打印「张数 × 单价 = 预计花费」并写入 `out/authorization.log`,只留本机。

脚本只存在于仓库与镜像工作区,单独安装技能目录时不带 `tools/`。
仓库不再内置命令行出图通道:2026-11-10 按用户指令移除 `tools/qwen_image.py`、`tools/run_loop.py` 与 `tools/IMAGE-GEN-AUTHORIZATION.md`,出图改走用户指定的外部通道。下节自查脚本对任意通道产出的图同样适用。

## 六、产出前后两道自查

Expand Down
62 changes: 0 additions & 62 deletions tools/IMAGE-GEN-AUTHORIZATION.md

This file was deleted.

6 changes: 3 additions & 3 deletions tools/fix_stats.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# -*- coding: utf-8 -*-
"""修复句效果统计:从闭环跑出来的 manifest 里算出哪条修复句真正管用。

闭环(run_loop)每轮会记下「这次因为哪些机检项失败、追加了哪些修复句」。把多轮结果聚合起来,
闭环每轮会记下「这次因为哪些机检项失败、追加了哪些修复句」。把多轮结果聚合起来,
就能知道:写纯白背景那句到底让多少张图过了白底、写 1:1 那句的命中率是多少。
以后调整修复句措辞,用这份统计判断是变好还是变坏。

Expand Down Expand Up @@ -140,7 +140,7 @@ def main():

manifests = load_manifests(args.dir)
if not manifests:
print(f"{args.dir} 下没有 manifest.json,先跑一次 run_loop", file=sys.stderr)
print(f"{args.dir} 下没有 manifest.json,先跑一次出图闭环", file=sys.stderr)
return 1

got = analyze(manifests)
Expand All @@ -150,7 +150,7 @@ def main():
"\n要看修复统计,用 --generate 跑真闭环(缺授权时有授权闸门拦着,不会真的花钱)。", file=sys.stderr)
else:
print("manifest 里有轮次但没记修复句:可能是旧格式(fixes 是字符串而非 {id, text})。"
"\n当前版本 run_loop 写的是带 id 的对象,重跑一次闭环即可。", file=sys.stderr)
"\n当前版本闭环写的是带 id 的对象,重跑一次闭环即可。", file=sys.stderr)
return 1

if args.json:
Expand Down
Loading
Loading