海艺思创

首页/ AI绘图教程/ OpenAI Images API 怎么记录改写后的提示词

AI绘图教程

OpenAI Images API 怎么记录改写后的提示词

只保存成图,后续很难解释某次生成为什么偏离预期。把提交给接口的原始提示词、实际请求参数和响应中可能出现的改写提示词放进同一条日志,才能让商品图、插画和封面素材的…

OpenAI Images API 怎么记录改写后的提示词

准备

先为每次请求分配一个唯一的记录编号,并准备一个用于保存图片和日志的目录。日志至少保留原始提示词、模型名、尺寸、质量设置、生成时间和输出文件名。

需要特别区分两类字段:prompt 是你发出的原始提示词;revised_prompt 是响应数据中可能提供的改写结果。不要把两者互相覆盖,也不要假设每个模型或每次响应一定都会返回 revised_prompt

分步操作

  1. 在调用前,将本次要提交的提示词赋值给单独变量,例如 original_prompt
  2. 调用 Images API 时,把会影响结果的请求参数一并写入日志对象,例如 modelsizequalityoutput_format
  3. 收到响应后,遍历图片结果。对每一项读取 revised_prompt;字段不存在或值为空时,记录为 null,不要拿原始提示词冒充它。
  4. 保存图片二进制数据,并让日志中的 image_file 指向对应文件。
  5. 将整条记录追加到 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_promptrevised_prompt。若改写字段为空,就以原始提示词、参数和成图共同判断问题;不要据此推断模型没有进行任何内部处理。

翻车怎么改

常见故障:日志里所有记录的 revised_prompt 都是空值,于是误以为保存代码失效。

原因:响应未必包含这个字段,且不同模型、接口能力或响应形式可能不同。只访问固定属性还可能让程序在字段缺失时中断。

修正动作:保留 getattr(item, "revised_prompt", None) 的兜底读取方式,并同时记录原始提示词和完整请求参数。再检查实际响应对象中可用字段,确认当前调用是否确实返回了改写提示词;没有返回时,将该字段明确记为 null

常见故障:图片文件存在,但无法对应到具体提示词版本。

原因:文件名只按序号保存,日志没有稳定的运行编号或图片索引。

修正动作:run_id 加图片序号命名,并在日志内重复保存 run_idimage_indeximage_file。每次只改一个提示词片段或一个参数,复盘才有比较基础。

完成前检查

  • 发布前验收项:随机打开一张已保存图片,确认能通过日志中的 image_file 找回原始提示词、请求参数和生成时间。
  • 确认原始提示词与 revised_prompt 分字段保存,没有被覆盖。
  • 确认缺失的改写字段记录为 null,没有填入猜测内容。
  • 确认日志未写入 API 密钥、访问令牌或不应长期保存的敏感信息。
  • 确认图片与日志使用同一套运行编号,批量生成时每张图片都有独立索引。

下一步

把这篇的方法练一遍

提示词和步骤可以带到创作里直接试做一版。

去创作 看同栏目更多