likeadmin-api 数字人任务查询实战:image_human/query 如何处理排队、完成和失败

数字人接口接入后,很多项目会卡在"请求已经返回了,视频在哪里"这一步。LikeAdmin API 的全驱动数字人接口采用异步任务模型,提交接口返回任务 ID,生成结果需要通过查询接口获取。本文只讨论任务状态处理,不重复介绍素材生成效果,重点放在可重试、可追踪和不重复扣费的工程实现上。

一、提交接口和查询接口是两个动作

提交任务使用:

复制代码
POST /api/v1/apps/image_human/submit

查询任务使用:

复制代码
POST /api/v1/apps/image_human/query

查询接口的必填参数是平台返回的 task_id,查询本身按资料库记录不重复计费。也就是说,业务系统可以把查询设计成独立的状态机,而不是把生成请求一直阻塞到视频返回。

二、推荐的数据表字段

实际项目中,我建议至少保存以下字段:

复制代码
| 字段 | 用途 |
| --- | --- |
| `biz_id` | 自己系统的订单或内容 ID |
| `task_id` | LikeAdmin API 返回的平台任务 ID |
| `status` | 本地状态,例如 submitted、processing、completed、failed |
| `request_hash` | 图片、音频、模式等输入的摘要,用于幂等判断 |
| `result_url` | 任务完成后的结果地址 |
| `error_message` | 失败时保留平台错误信息 |
| `last_polled_at` | 最近一次查询时间 |

不要只保存一个 task_id 字符串。没有业务 ID 和请求摘要时,用户重复点击提交、网络超时重试和后台补偿都可能生成重复任务,后续很难判断哪一个结果属于哪一笔业务。

三、查询请求示例

复制代码
async function queryImageHuman(taskId) {
  const response = await fetch(
    "https://api.likeadmin.cn/api/v1/apps/image_human/query",
    {
      method: "POST",
      headers: {
        Authorization: "Bearer YOUR_API_KEY",
        "Content-Type": "application/json"
      },
      body: JSON.stringify({ task_id: taskId })
    }
  );

if (!response.ok) {

throw new Error(query failed: ${response.status});

}

return response.json();

}

```

示例只展示调用结构,不写入真实密钥。生产代码还应设置超时、记录响应摘要,并对 HTTP 错误和业务错误分别处理。

四、用状态机控制轮询

可以把平台返回结果归一为四类:

  1. `submitted`:已经拿到任务 ID,等待第一次查询。
  2. `processing`:平台仍在排队或生成,按退避间隔继续查询。
  3. `completed`:结果地址可用,写入 `result_url`,通知前端或下游流程。
  4. `failed`:保存错误信息,根据错误类型决定是否重新提交。

伪代码如下:

复制代码
async function pollUntilDone(task) {
  let delayMs = 5000;

for (let attempt = 0; attempt < 30; attempt += 1) {

const result = await queryImageHuman(task.task_id);

const status = normalizeStatus(result);

if (status === "completed") {

return { status, resultUrl: extractResultUrl(result) };

}

if (status === "failed") {

throw new Error(extractError(result));

}

await sleep(delayMs);

delayMs = Math.min(Math.round(delayMs * 1.5), 60000);

}

return { status: "timeout", taskId: task.task_id };

}

```

normalizeStatusextractResultUrl 应按当前接口真实响应字段实现,不能直接假设所有应用都返回同一层级。LikeAdmin API 的通用任务接口也提供 GET /api/v1/tasks/{task_id},但应用专用 query 的响应应优先以对应开发者文档为准。

五、超时和重试怎么做

客户端超时不等于平台任务失败。提交请求如果在网络层超时,第一步应根据业务请求摘要查询是否已经写入任务记录;只有确认没有成功创建,才允许重新提交。

查询超时则可以把任务标记为 unknown,由后台补偿任务继续检查,不要立刻当成失败。真正失败时,建议按以下顺序判断:

  • 素材地址不可访问:修复 URL 后重新提交。
  • 参数校验失败:修正字段后重新提交,不能原样重试。
  • 平台暂时性错误:使用有限次数和递增间隔重试。
  • 余额、权限或能力未开放:停止自动重试,提示运营处理。

六、生产接入的几个细节

  • API Key 放在服务端环境变量中,前端只拿业务系统的任务 ID。
  • 轮询任务要设置最大次数和最大时长,避免异常任务无限占用队列。
  • 完成后的结果地址建议复制到自己的对象存储或媒体服务,再给前端使用,具体做法取决于结果 URL 的有效期。
  • 记录请求参数的非敏感摘要,方便复现问题,但不要把密钥写入日志。
  • 接口开放状态、计费和返回字段可能调整,发布前应重新核对 LikeAdmin API 当前文档。

七、总结

image_human/query 的价值不只是"查结果",而是把异步生成接入成可恢复的业务流程。保存 task_id、建立状态机、区分超时和失败,再配合幂等键,才能把一次数字人演示变成稳定的生产能力。

本文封面使用 LikeAdmin API 的 image_human/query 真实接口截图,发布流程会把它上传到 CSDN 的封面字段后再提交文章。

相关推荐
阿里云大数据AI技术1 小时前
阿里云 Milvus 知识库开启邀测,助力客户构建企业级 Agent
人工智能·agent
正经教主1 小时前
AI提示词工程(进阶)第7课:角色设定与身份模拟
人工智能
lucky_syq2 小时前
第3篇 · S1·上:什么是大语言模型 + Transformer 架构深讲
人工智能·语言模型·架构·transformer
小玮看世界2 小时前
当“安全“变成“教训“:《拟人化暂行办法》时代,AI护栏的过度拒答之困与破局
大数据·人工智能
本当迷ya2 小时前
8月17日最新 Codex gpt-5.6-sol 开启 1M 上下文封印
人工智能
jinggongszh2 小时前
使用AI协同开发产品条码规则功能——从“理解方案、原型、接口文档”到“落地真实前端代码”
前端·人工智能·mes系统·mes工程架构
网易云信2 小时前
政企共建!全国首个网易智企 AI OPC 社区落地衢州
aigc·agent
宋哥转AI2 小时前
深入理解 AI Agent · MEMORY #02:记忆的工程机制
人工智能·agent·ai编程
一名普通的电源工程师3 小时前
WRF2424S‑3WR2 适配优选 钡特电源 VF3‑24S24S|3W 工业 DC‑DC 模块电源选型拆解
人工智能·电源模块·工业电源
野三关彭于晏3 小时前
Agent 时代,如何用 AI 重塑教育信息化
人工智能·agent