项目:图像生成任务审计
项目目标
在调用任何生成模型前,用 Python 标准库审计一份任务清单。项目验证任务类型、画布比例、提示要素、风险门禁、验收维度、预算、复现计划,以及来源/发布治理;它不会联网,不需要密钥,也不会生成或读取图片。
文件说明
- image_task_plan.json:一份教学封面任务夹具,明确声明为离线、无供应商、无模型执行。
- audit_image_plan.py:命令行审计器。
- test_audit_image_plan.py:有效、比例错误与权利缺失基础测试。
- test_contract_and_cli.py:严格 JSON、封闭字段、素材版本、对象级 ACL、撤权/删除传播、证据边界、策略、哈希和 CLI 回归测试。
运行步骤
在 PowerShell 7 中,从同时包含 docs/ 与 .website/ 的项目根目录进入示例目录:
Push-Location -LiteralPath 'docs\图像生成\03-项目与自测\examples'
python -B .\audit_image_plan.py .\image_task_plan.json
python -B -m unittest discover -s . -p 'test_*.py'
python -B -O -m unittest discover -s . -p 'test_*.py'
python -B -W error -m unittest discover -s . -p 'test_*.py'
Pop-Location成功时审计器打印任务摘要并返回退出码 0;结构合同有效但权利、比例、素材角色、ACL、删除传播、证据边界、预算或验收门禁失败时返回 1;文件、UTF-8、严格 JSON 或封闭字段合同错误返回 2。-B 禁止 Python 创建 .pyc 缓存。当前共 90 项测试,三种模式都应通过。
严格 JSON 会拒绝重复键与 NaN/Infinity。引用素材若存在,必须记录 asset_id、source_revision、角色、来源引用、SHA-256、权利引用和 acl_reference;image_to_image、variation、outpainting 需要 source_image,inpainting 还需要 mask。顶层 lineage 固定需求版本、执行 transform_id 与候选 release_id;governance 要求在评分前启用对象级授权/ACL、写出撤权/删除传播计划,并将事实性发布限制为 evidence_supported。这是一份教学业务合同,不是供应商 API 镜像。
你要修改的实验
- 把
rights_confirmed改为false,观察硬门禁错误。 - 把宽度改成
1000但保留4:5,观察比例一致性检查。 - 删除
acceptance中的safety维度,理解为何总分不能替代安全门槛。 - 复制夹具,设计“局部重绘”任务,添加
source_image与mask两个匿名素材记录,并填写asset_id、source_revision、acl_reference、哈希和权利引用;在提示的构图/禁止项中明确保护区,不要假装通用 schema 已覆盖供应商全部编辑参数。 - 将
object_acl_required改为false,观察审计器为何在任何评分前拒绝任务。 - 将
evidence_policy改为其他值,说明为什么生成图、哈希或内容凭证都不能单独支持事实性发布。
项目验收
- 有用途、受众、任务类型和结构化提示。
- 输出规格内部一致,候选数和尝试数有上限。
- 参考素材权利、人工审查和来源计划都是显式字段。
-
source_revision、transform_id与release_id可区分需求、变换与发布候选;对象级 ACL 和撤权/删除传播均有明确计划。 - 事实性发布边界声明为
evidence_supported,不把生成结果本身当作外部事实证据。 - 验收覆盖提示遵循、构图、文字、视觉质量、安全和权利。
- 没有 API key、真实人物素材、具体价格或模型权重。
- 有效夹具退出码为
0,策略失败为1,合同失败为2。 - 90 项测试在普通、
-O和 warnings-as-errors 三种模式均通过。
综合自测
- 为什么审计器只验证“计划完整”,不能证明输出安全或高质量?
- 哪些字段属于稳定业务语义,哪些应留给供应商适配器?
- 如何把审计结果接入 Agent:允许继续、请求补充还是拒绝?
- 若供应商不支持 seed,复现记录还应保留什么?