ling-baseling-base

异步任务

Midjourney、Suno 与通用 Task 提交轮询

在线 Playground

在浏览器中直接体验本页相关 API,无需本地安装 Go 环境。

异步任务

部分 AI 能力(图像生成、音乐)为异步任务:提交 → 轮询 → 获取结果。relay 提供 SubmitTask / FetchTask 及 Midjourney、Suno 专用 API。

通用 Task API

result, err := client.SubmitTask(ctx, taskProvider, bodyReader)
if err != nil {
    log.Fatal(err)
}
taskID := result.TaskID

// 轮询
for {
    info, err := client.FetchTask(ctx, taskProvider, baseURL, apiKey, map[string]any{
        "task_id": taskID,
    }, proxy)
    if info.Status == "SUCCESS" {
        break
    }
    time.Sleep(3 * time.Second)
}

Midjourney

resp, err := client.MidjourneySubmit(ctx, baseURL, apiKey, mode, &relay.MidjourneyRequest{
    Prompt:      "a cat in space",
    Base64Array: nil,
})

task, err := client.MidjourneyFetch(ctx, baseURL, apiKey, resp.Result)
fmt.Println(task.ImageURL)

// 按条件批量查询
tasks, _ := client.MidjourneyFetchByCondition(ctx, baseURL, apiKey, map[string]any{
    "status": "SUCCESS",
})

回调

notify, err := client.MidjourneyNotify(ctx, requestBody)
// 处理 webhook 推送

Suno 音乐生成

submit, err := client.SubmitSunoTask(ctx, baseURL, apiKey, "generate", &relay.SunoSubmitRequest{
    Prompt: "upbeat electronic dance music",
})

tasks, err := client.FetchSunoTask(ctx, baseURL, apiKey, []string{submit.Data.TaskID})
for _, t := range tasks {
    fmt.Println(t.AudioURL)
}

// 单任务查询
one, _ := client.FetchSunoTaskByID(ctx, baseURL, apiKey, taskID)

最佳实践

  • 设置总超时与最大轮询次数
  • 生产环境用 webhook(MidjourneyNotify)替代忙等
  • 任务结果 URL 通常有时效,及时转存到 stores

On this page