Are you an LLM? Read llms.txt for a summary of the docs, or llms-full.txt for the full context.
Skip to content

图片、视频与音频

图片和视频先用密钥查询模型目录,检查具体端点、参数与示例;音频模型按下方说明选择。可用性和选项取决于模型及部署,一个模型不一定支持所有媒体类型。示例需要 Python 3 和 requestspython -m pip install requests);请设置 LAZU_API_KEY 及下文模型变量。

生成图片

LAZU_IMAGE_MODEL 设为支持 /v1/images/generations 的模型。响应可能包含 data[].urldata[].b64_json,按实际形式读取。尺寸、质量和格式由模型决定,不要假设生成链接永久有效。

import os
import requests
 
origin = os.environ.get("LAZU_API_ORIGIN", "https://api.lazu.ai").rstrip("/")
response = requests.post(origin + "/v1/images/generations",
    headers={"Authorization": "Bearer " + os.environ["LAZU_API_KEY"]},
    json={"model": os.environ["LAZU_IMAGE_MODEL"], "prompt": "A blue ceramic cup"},
    timeout=180)
response.raise_for_status()
print(response.json()["data"])

提交并轮询视频

LAZU_VIDEO_MODEL 设为支持 /v1/videos 的模型。提交成功返回 HTTP 202 和任务 ID;用同一密钥查询同一任务。pendingrunning 均未完成;succeeded 提供产物信息,failed 提供错误。本地等待超时不会取消任务或令任务失败,应保存 ID 并继续查询,不要因等待结束重复创建付费任务。

import os
import time
import requests
 
origin = os.environ.get("LAZU_API_ORIGIN", "https://api.lazu.ai").rstrip("/")
headers = {"Authorization": "Bearer " + os.environ["LAZU_API_KEY"]}
response = requests.post(origin + "/v1/videos", headers=headers,
    json={"model": os.environ["LAZU_VIDEO_MODEL"], "prompt": "Ocean waves at sunrise"},
    timeout=180)
response.raise_for_status()
job_id = response.json()["id"]
print("Save job ID:", job_id, flush=True)
deadline = time.monotonic() + 600
while time.monotonic() < deadline:
    response = requests.get(origin + "/v1/videos/" + job_id,
                            headers=headers, timeout=30)
    if response.status_code in (429, 503):
        retry_after = response.headers.get("Retry-After", "5")
        delay = float(retry_after) if retry_after.isdecimal() else 5
        if delay >= deadline - time.monotonic():
            print("Still waiting; resume GET for job:", job_id)
            break
        time.sleep(max(1, delay))
        continue
    response.raise_for_status()
    job = response.json()
    if job["status"] == "succeeded":
        print(job.get("artifact", {}))
        break
    if job["status"] == "failed":
        raise RuntimeError(job.get("error", {"message": "Video failed"}))
    time.sleep(5)
else:
    print("Still waiting; resume GET for job:", job_id)
# A local timeout does not cancel the remote job. Keep job_id for later GETs.

语音生成与转写

LAZU_AUDIO_MODEL 设为语音生成模型,LAZU_VOICE 设为其支持的音色。/v1/audio/speech 返回二进制音频而非 JSON。转写需另选兼容模型,通过 multipart 向 /v1/audio/transcriptions 上传本地音频;两者是独立能力。

目录目前没有语音生成或转写端点类型,仅凭音频模态无法判断这两种能力。请向部署管理员或 Lazu 支持获取已确认的模型 ID、端点与支持的音色,并确认该模型对当前 Key 可用,不要只按音频模态选模型。将 LAZU_TRANSCRIPTION_MODEL 设置为已确认的转写模型,LAZU_AUDIO_FILE 设置为本地音频路径。

import os
from pathlib import Path
import requests
 
origin = os.environ.get("LAZU_API_ORIGIN", "https://api.lazu.ai").rstrip("/")
headers = {"Authorization": "Bearer " + os.environ["LAZU_API_KEY"]}
response = requests.post(origin + "/v1/audio/speech", headers=headers,
    json={"model": os.environ["LAZU_AUDIO_MODEL"], "input": "Hello from Lazu",
          "voice": os.environ["LAZU_VOICE"], "response_format": "mp3"}, timeout=180)
response.raise_for_status()
Path("speech.mp3").write_bytes(response.content)
import os
import requests
 
origin = os.environ.get("LAZU_API_ORIGIN", "https://api.lazu.ai").rstrip("/")
with open(os.environ["LAZU_AUDIO_FILE"], "rb") as audio:
    response = requests.post(origin + "/v1/audio/transcriptions",
        headers={"Authorization": "Bearer " + os.environ["LAZU_API_KEY"]},
        data={"model": os.environ["LAZU_TRANSCRIPTION_MODEL"]},
        files={"file": audio}, timeout=180)
response.raise_for_status()
print(response.json())

错误与结果

失败时保存请求或任务 ID 并查看错误码。若提交超时且未拿到任务 ID,先查询视频任务列表(GET /v1/videos)或联系支持,再决定是否重提。成功任务优先使用 artifact.url;如只返回 artifact.file_id,通过 Files API获取。费用按计费说明对账。

API Explorer