推理结果回调
设置回调
请求 /sdapi/v1/generate
接口时填写 callback_url
参数,开启异步任务结束后回调通知,用户不再需要轮询回调接口。
回调接口发送的 body
内容和 /sdapi/v1/result
保持一致(如下 SdapiResultResponse
)
回调接口必须能够接受 POST
请求方式,并且能够解析下述 body
内容。
回调请求字段说明(SdapiResultResponse)
request_id
(string
): 此次请求的唯一标识 ID。status
(int64
): 表示任务的当前状态。其中:0
- 未完成,1
- 已完成,2
- 失败message
(string
, 可选): 如果任务失败,此字段会包含失败的具体原因。results
([]ImageResult
): 包含一个或多个任务结果的数组。
SdapiResult 说明
描述单个任务的结果。
字段说明
status
(int64
): 任务的状态,其中:0
- 未完成,1
- 已完成,2
- 失败url
(string
): 成功生成的图片
回调服务代码示例
通过 FastAPI
快速搭建回调服务
- 安装依赖
pip install uvicorn fastapi
- 编写服务代码
main.py
from fastapi import FastAPI
from pydantic import BaseModel, Field
from typing import List, Optional
from fastapi.responses import JSONResponse
app = FastAPI()
class ImageResult(BaseModel):
# 假设每个结果包括一个图片URL和一些其他详细信息
url: str = Field(alias="url")
status: int = Field(default=0, alias="status")
class ImageResultResponse(BaseModel):
request_id: str = Field(alias="request_id")
status: int = Field(default=0, alias="status") # 0 - 未完成, 1 - 已完成, 2 - 失败
message: Optional[str] = Field(default=None, alias="message")
results: List[ImageResult] = Field(default=[], alias="results")
@ app.post("/task_completed")
async def handle_task_completed(response: ImageResultResponse):
# 打印基本信息
print(f"Request ID: {response.request_id}")
print(f"Status: {response.status}")
if response.status == 2:
print(f"Error Message: {response.message}")
# 打印结果详情
if response.results:
print("Results:")
for index, result in enumerate(response.results, start=1):
print(f" Result {index}:")
print(f" Image URL: {result.url}")
print(f" Status: {result.status}")
else:
print("No results available.")
# 返回JSON响应
return JSONResponse(status_code=200, content={"message": "Task processed successfully", "data": response.dict()})
- 启动服务
uvicorn main:app --reload --host 0.0.0.0 --port 10001
注意:回调服务必须支持外网访问,如有需求,可以使用工作空间进行调试。
请求示例
回调方法 /task_completed
具体请求如下
import requests
import json
url = "https://api.lanrui.co/sdapi/v1/generate?endpoint={填入所启动的推理服务的endpoint,如下图红框所示,删除花括号}&callback_url={填入用于回调的callback地址,删除花括号}"
payload = json.dumps(
{
"sd_model_checkpoint": "realisticVisionV51_v40VAE.safetensors",
"prompt": "A girl",
"negative_prompt": "",
"width": 1200,
"height": 673,
"sampler_name": "DPM++ 2M",
"scheduler": "Karras",
"steps": 20,
"cfg_scale": 7,
"batch_size": 1,
"clip_skip": 2,
"seed": -1,
"override_settings": {"sd_model_checkpoint": "realisticVisionV51_v40VAE.safetensors"}
}
)
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer {填入API Key,删除花括号}',
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
附:生成图片接口说明
POST /sdapi/v1/generate
接口描述
该接口用于异步生成图片,用户可指定一个回调地址,以便在图片生成任务完成后接收通知。
参数
- endpoint (string, 可选): 自助推理服务的 endpoint 地址。
- callback_url (string, 可选): 任务完成后的回调通知地址,必须支持从外网通过 POST 方式调用。