> ## Documentation Index
> Fetch the complete documentation index at: https://docs.laozhang.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# 图片生成 API 有异步任务 ID 吗？

> 老张API的图片生成与编辑接口都是同步调用，不返回任务 ID，断开后无法取回结果。本页说明原因、该怎么设置 timeout，以及如何在自己的后端包一层异步任务队列。

没有。老张API的图片生成与编辑接口都是同步调用：请求保持连接，生成完成后直接在响应里返回图片，不返回任务 ID，也没有查询结果的接口。需要异步体验时，在自己的后端用业务 ID 包一层任务队列。

| 项目 | 内容 |
| - | - |
| 图片接口 | 同步返回，包括 `/v1/images/generations`、`/v1/images/edits`、Gemini `generateContent` |
| 视频接口 | 异步任务，返回任务 ID，需要轮询，见 [Wan 2.7](/api-capabilities/wan-video-generation)、[Seedance](/api-capabilities/seedance2-video-generation) |
| 建议 timeout | 360 秒；4K 或多张参考图 600 秒 |
| 断开后 | 结果无法取回，已完成的生成照常扣费 |

## 为什么没有任务 ID

* 图片接口保持与上游官方一致的同步行为，中间不加任务队列，避免额外延迟和行为差异。
* 老张API默认不保存 prompt 和生成结果，没有可以事后凭 ID 取回的数据，见[数据与日志说明](/faq/data-security)。
* 把 timeout 设够、保持长连接，绝大多数图片请求都能在一次调用内返回。

## 推荐做法

<Steps>
  <Step title="把 timeout 设到安全上限">
    客户端和中间代理的超时都设到 360 秒，4K 或多张参考图设到 600 秒。设置方法和逐层排查见[请求超时怎么办](/faq/request-timeout)。
  </Step>

  <Step title="关掉 SDK 的自动重试">
    超时后的自动重试会再生成一次、再扣一次费。把 OpenAI SDK 的 `max_retries` 设为 0，由业务代码决定是否重试。
  </Step>

  <Step title="在自己的后端记录每个任务">
    为每次请求生成业务 ID，把 prompt、参数、返回结果或错误写进自己的数据库。前端断线时，后端仍然持有完整记录。
  </Step>
</Steps>

## 在后端包一层异步队列

前端不能长时间等待时，可以这样拆分：

1. 前端提交任务，后端写入数据库并返回业务 ID；
2. 后端 worker 用同步方式调用老张API，把结果写回数据库；
3. 前端凭业务 ID 轮询自己的后端，或通过 WebSocket 接收结果。

下面是最小示例，用 Python 标准库的线程池代替正式的任务队列，生产环境可换成 Celery、RQ 或云队列：

```python theme={null}
import base64
import os
import urllib.request
import uuid
from concurrent.futures import ThreadPoolExecutor
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["LAOZHANG_API_KEY"],
    base_url="https://api.laozhang.ai/v1",
    timeout=360,
    max_retries=0,
)
executor = ThreadPoolExecutor(max_workers=4)
tasks = {}  # 生产环境请换成数据库


def save_image(item, path):
    if item.b64_json:
        data = item.b64_json.split(",", 1)[-1]  # 去掉可能的 data: 前缀
        data += "=" * (-len(data) % 4)  # 补齐末尾的 =
        with open(path, "wb") as f:
            f.write(base64.b64decode(data))
    else:
        urllib.request.urlretrieve(item.url, path)  # URL 会过期，收到后立即下载


def run(task_id, prompt):
    try:
        result = client.images.generate(model="gpt-image-2.5-flare-vip", prompt=prompt)
        path = f"{task_id}.png"
        save_image(result.data[0], path)
        tasks[task_id] = {"status": "done", "file": path}
    except Exception as error:
        tasks[task_id] = {"status": "failed", "error": str(error)}


def submit(prompt):
    task_id = str(uuid.uuid4())
    tasks[task_id] = {"status": "pending"}
    executor.submit(run, task_id, prompt)
    return task_id


def query(task_id):
    return tasks.get(task_id)
```

运行前执行 `pip install openai` 并设置环境变量 `LAOZHANG_API_KEY`。`save_image` 同时处理 Base64 和 URL 两种返回，各模型的返回格式见对应接入文档。

业务 ID 由你自己生成、存在你自己的数据库里，老张API只负责同步生成这一步。

## 常见问题

### 超时断开后，图片其实已经生成了，能补救吗？

不能。结果只在那次响应里返回，连接断开就拿不到了，而上游完成生成后仍会扣费。重试前先在[调用日志](https://api.laozhang.ai/log)确认上一次请求的状态。

### 视频生成也是同步的吗？

不是。Wan 2.7、Seedance 等视频模型按异步任务设计：提交后返回任务 ID，再轮询任务状态并下载结果，具体步骤见各视频模型页。

### 不同图片模型大概要多久？

差异很大，快的几秒，4K、高质量档位或多张参考图可能要几分钟，高峰期更慢。不确定时统一按 360 秒设置，各模型的注意事项见[图像生成 API 选型](/api-capabilities/image-generation-guide)。

## 相关文档

* [API 请求超时怎么办](/faq/request-timeout)
* [图像生成 API 选型](/api-capabilities/image-generation-guide)
* [Images API：图片生成与编辑](/api-reference/images)
* [老张API如何处理数据与日志](/faq/data-security)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.