许多 AI 生成任务(如视频生成)是异步处理的。使用任务管理 API 可以查询任务状态、进度和结果。
任务生命周期
创建任务
调用生成 API 创建任务,获得 task_id
处理中 (processing)
任务正在生成中,可查看进度
完成 (completed) / 失败 (failed)
任务完成或失败,可获取结果或错误信息
请求参数
请求示例
curl https://ai.kaiho.cc/v1/tasks/task_abc123 \
-H "Authorization: Bearer YOUR_API_KEY"
响应格式
排队中
{
"id" : "task_abc123" ,
"type" : "video_generation" ,
"status" : "queued" ,
"progress" : 0 ,
"queue_position" : 5 ,
"estimated_time" : 180 ,
"created_at" : "2024-01-15T10:30:00Z"
}
处理中
{
"id" : "task_abc123" ,
"type" : "video_generation" ,
"status" : "processing" ,
"progress" : 45 ,
"current_step" : "rendering" ,
"estimated_time_remaining" : 90 ,
"created_at" : "2024-01-15T10:30:00Z" ,
"started_at" : "2024-01-15T10:31:00Z"
}
已完成
{
"id" : "task_abc123" ,
"type" : "video_generation" ,
"status" : "completed" ,
"progress" : 100 ,
"result" : {
"video_url" : "https://storage.kaiho.cc/videos/video-123.mp4" ,
"thumbnail_url" : "https://storage.kaiho.cc/videos/thumb-123.jpg" ,
"duration" : 10 ,
"resolution" : "1920x1080" ,
"size_bytes" : 15728640
},
"created_at" : "2024-01-15T10:30:00Z" ,
"started_at" : "2024-01-15T10:31:00Z" ,
"completed_at" : "2024-01-15T10:33:30Z" ,
"processing_time" : 150
}
{
"id" : "task_abc123" ,
"type" : "video_generation" ,
"status" : "failed" ,
"progress" : 65 ,
"error" : {
"code" : "content_violation" ,
"message" : "生成的内容违反了我们的内容政策" ,
"details" : "检测到不适当的内容"
},
"created_at" : "2024-01-15T10:30:00Z" ,
"started_at" : "2024-01-15T10:31:00Z" ,
"failed_at" : "2024-01-15T10:32:45Z"
}
任务状态说明
状态 说明 可用字段 queued任务已创建,等待处理 queue_position, estimated_timeprocessing任务正在处理中 progress, current_step, estimated_time_remainingcompleted任务成功完成 result, processing_timefailed任务处理失败 errorcancelled任务被取消 -
轮询最佳实践
import time
def poll_task ( task_id ):
while True :
status = get_task_status(task_id)
if status[ 'status' ] in [ 'completed' , 'failed' ]:
return status
# 根据进度调整轮询间隔
if status[ 'progress' ] < 20 :
time.sleep( 10 ) # 初期较慢,10秒轮询一次
else :
time.sleep( 5 ) # 后期较快,5秒轮询一次
import time
def poll_with_backoff ( task_id , max_attempts = 100 ):
interval = 2
max_interval = 60
for attempt in range (max_attempts):
status = get_task_status(task_id)
if status[ 'status' ] in [ 'completed' , 'failed' ]:
return status
time.sleep(interval)
interval = min (interval * 1.5 , max_interval) # 指数增长,最大60秒
def smart_poll ( task_id ):
status = get_task_status(task_id)
# 根据预估剩余时间智能等待
if 'estimated_time_remaining' in status:
wait_time = max ( 5 , status[ 'estimated_time_remaining' ] / 5 )
time.sleep(wait_time)
else :
time.sleep( 10 )
使用 Webhook(推荐)
避免频繁轮询,使用 webhook 接收完成通知:
# 创建任务时指定 webhook
response = requests.post(
"https://ai.kaiho.cc/v1/videos/generations" ,
headers = { "Authorization" : "Bearer YOUR_API_KEY" },
json = {
"model" : "sora-2" ,
"prompt" : "视频描述..." ,
"webhook_url" : "https://your-server.com/webhook" ,
"webhook_events" : [ "completed" , "failed" ] # 指定要接收的事件
}
)
Webhook 回调示例:
{
"event" : "task.completed" ,
"task_id" : "task_abc123" ,
"type" : "video_generation" ,
"status" : "completed" ,
"result" : {
"video_url" : "https://storage.kaiho.cc/videos/video-123.mp4" ,
"duration" : 10
},
"completed_at" : "2024-01-15T10:33:30Z"
}
批量查询任务
查询多个任务的状态:
curl https://ai.kaiho.cc/v1/tasks \
-H "Authorization: Bearer YOUR_API_KEY" \
-G \
-d "ids=task_abc123,task_def456,task_ghi789"
取消任务
取消正在处理的任务:
import requests
response = requests.delete(
f "https://ai.kaiho.cc/v1/tasks/task_abc123" ,
headers = { "Authorization" : "Bearer YOUR_API_KEY" }
)
print (response.json())
# {"id": "task_abc123", "status": "cancelled"}
注意: 已经开始处理的任务可能无法立即取消,仍会产生部分费用。
任务历史查询
获取您的任务历史记录:
response = requests.get(
"https://ai.kaiho.cc/v1/tasks" ,
headers = { "Authorization" : "Bearer YOUR_API_KEY" },
params = {
"type" : "video_generation" , # 筛选任务类型
"status" : "completed" , # 筛选任务状态
"limit" : 50 , # 每页数量
"offset" : 0 # 偏移量
}
)
tasks = response.json()
错误码说明
错误码 说明 处理建议 task_not_found任务不存在 检查 task_id 是否正确 content_violation内容违规 修改提示词,避免违规内容 insufficient_credits余额不足 充值账户 processing_timeout处理超时 简化任务或联系支持 system_error系统错误 稍后重试或联系支持
完整示例
综合使用任务管理的完整示例:
import requests
import time
API_KEY = "YOUR_API_KEY"
BASE_URL = "https://ai.kaiho.cc/v1"
def create_video_task ( prompt ):
"""创建视频生成任务"""
response = requests.post(
f " { BASE_URL } /videos/generations" ,
headers = { "Authorization" : f "Bearer { API_KEY } " },
json = {
"model" : "sora-2" ,
"prompt" : prompt,
"duration" : 10 ,
"resolution" : "1920x1080"
}
)
return response.json()
def get_task_status ( task_id ):
"""获取任务状态"""
response = requests.get(
f " { BASE_URL } /tasks/ { task_id } " ,
headers = { "Authorization" : f "Bearer { API_KEY } " }
)
return response.json()
def wait_for_completion ( task_id , timeout = 600 ):
"""等待任务完成"""
start_time = time.time()
while True :
if time.time() - start_time > timeout:
raise TimeoutError ( f "任务超时: { task_id } " )
status = get_task_status(task_id)
print ( f "状态: { status[ 'status' ] } , 进度: { status.get( 'progress' , 0 ) } %" )
if status[ 'status' ] == 'completed' :
return status[ 'result' ]
elif status[ 'status' ] == 'failed' :
raise Exception ( f "任务失败: { status[ 'error' ] } " )
# 智能等待
time.sleep( 5 )
# 使用示例
task = create_video_task( "一只猫在弹钢琴" )
print ( f "任务已创建: { task[ 'id' ] } " )
result = wait_for_completion(task[ 'id' ])
print ( f "视频已生成: { result[ 'video_url' ] } " )
性能优化: 使用 webhook 代替轮询可以显著减少API调用次数,降低延迟并节省成本。