OpenAI Images API 怎么记录改写后的提示词
只保存成图,后续很难解释某次生成为什么偏离预期。把提交给接口的原始提示词、实际请求参数和响应中可能出现的改写提示词放进同一条日志,才能让商品图、插画和封面素材的…
准备
先为每次请求分配一个唯一的记录编号,并准备一个用于保存图片和日志的目录。日志至少保留原始提示词、模型名、尺寸、质量设置、生成时间和输出文件名。
需要特别区分两类字段:prompt 是你发出的原始提示词;revised_prompt 是响应数据中可能提供的改写结果。不要把两者互相覆盖,也不要假设每个模型或每次响应一定都会返回 revised_prompt。
分步操作
- 在调用前,将本次要提交的提示词赋值给单独变量,例如
original_prompt。 - 调用 Images API 时,把会影响结果的请求参数一并写入日志对象,例如
model、size、quality和output_format。 - 收到响应后,遍历图片结果。对每一项读取
revised_prompt;字段不存在或值为空时,记录为null,不要拿原始提示词冒充它。 - 保存图片二进制数据,并让日志中的
image_file指向对应文件。 - 将整条记录追加到 JSON Lines 文件。这样每行就是一次可独立查询的生成记录,适合后续按日期、素材或提示词版本筛选。
可复制模板或示例
下面示例演示记录逻辑。它使用 getattr 安全读取响应字段:即使该字段未出现,程序仍会保存原始提示词和其他已知信息。
from datetime import datetime, timezone
from pathlib import Path
import base64
import json
from openai import OpenAI
client = OpenAI()
output_dir = Path("image_runs")
output_dir.mkdir(exist_ok=True)
run_id = datetime.now(timezone.utc).strftime("%Y%m%dT%H%M%SZ")
original_prompt = "一只陶瓷杯放在浅色木桌上,柔和侧光,留出顶部排版空间"
request_options = {
"model": "gpt-image-1",
"size": "1536x1024",
"quality": "medium",
"output_format": "png"
}
result = client.images.generate(
prompt=original_prompt,
**request_options
)
for index, item in enumerate(result.data):
image_name = f"{run_id}-{index}.png"
image_path = output_dir / image_name
image_path.write_bytes(base64.b64decode(item.b64_json))
log_record = {
"run_id": run_id,
"image_index": index,
"created_at": datetime.now(timezone.utc).isoformat(),
"original_prompt": original_prompt,
"revised_prompt": getattr(item, "revised_prompt", None),
"request_options": request_options,
"image_file": str(image_path)
}
with (output_dir / "generation-log.jsonl").open("a", encoding="utf-8") as file:
file.write(json.dumps(log_record, ensure_ascii=False) + "\n")复盘时先对比 original_prompt 与 revised_prompt。若改写字段为空,就以原始提示词、参数和成图共同判断问题;不要据此推断模型没有进行任何内部处理。
翻车怎么改
常见故障:日志里所有记录的 revised_prompt 都是空值,于是误以为保存代码失效。
原因:响应未必包含这个字段,且不同模型、接口能力或响应形式可能不同。只访问固定属性还可能让程序在字段缺失时中断。
修正动作:保留 getattr(item, "revised_prompt", None) 的兜底读取方式,并同时记录原始提示词和完整请求参数。再检查实际响应对象中可用字段,确认当前调用是否确实返回了改写提示词;没有返回时,将该字段明确记为 null。
常见故障:图片文件存在,但无法对应到具体提示词版本。
原因:文件名只按序号保存,日志没有稳定的运行编号或图片索引。
修正动作:用 run_id 加图片序号命名,并在日志内重复保存 run_id、image_index 和 image_file。每次只改一个提示词片段或一个参数,复盘才有比较基础。
完成前检查
- 发布前验收项:随机打开一张已保存图片,确认能通过日志中的
image_file找回原始提示词、请求参数和生成时间。 - 确认原始提示词与
revised_prompt分字段保存,没有被覆盖。 - 确认缺失的改写字段记录为
null,没有填入猜测内容。 - 确认日志未写入 API 密钥、访问令牌或不应长期保存的敏感信息。
- 确认图片与日志使用同一套运行编号,批量生成时每张图片都有独立索引。
下一步
把这篇的方法练一遍
提示词和步骤可以带到创作里直接试做一版。