七牛云大模型推理服务
模型广场
模型广场
  1. 素材
  • AI模型接口
    • 七牛云 AI 大模型推理服务
    • 常见问题 FAQ
    • 关键概念与术语表
    • 本文档站使用方式
    • 如何获取API-KEY
    • Claude 模型缓存功能使用指南 (Cache Control)
    • 服务接入点
    • 模型
      • 模型列表
    • 聊天
      • 原厂接口
        • 什么是原厂接口
        • bypass Anthropic协议
        • bypass Vertex/Gemini协议
        • bypass Responses协议
      • gemini-3.1-pro-preview
        • gemini-3.1-pro-preview 思考
        • gemini-3.1-pro-preview qfile
      • gemini-2.5-pro
        • gemini-2.5-pro思考
      • openai/gpt-5
        • openai/gpt-5 思考
      • openai/gpt-5.2
        • openai/gpt-5.2 思考
      • openai/gpt-5.2-codex
        • openai/gpt-5.2-codex
      • gemini-2.5-flash
        • gemini-2.5-flash 思考
      • claude-4.5-sonnet
        • claude-4.5-sonnet 思考
      • claude-4.6-opus
        • claude-4.6-opus 思考
      • deepseek/deepseek-v3.2-251201
        • deepseek/deepseek-v3.2-251201 思考
      • deepseek-v3
        • 聊天
      • doubao-seed-1.6
        • doubao-seed-1.6
      • qwen3-max-2026-01-23
        • 聊天完成
      • moonshotai/kimi-k2.5
        • 聊天完成
      • 聊天完成
      • Anthropic协议
    • 视频
      • Webhook
      • sora-2
        • 创建视频生成任务
        • 查询视频生成状态
        • 视频 Remix
      • 火山格式
        • bytedance/doubao-seedance-2-0-260128
          • 创建视频生成任务
          • 查询视频生成任务
        • bytedance/doubao-seedance-2-0-fast-260128
          • 创建视频生成任务
          • 查询视频生成任务
      • Fal格式
        • bytedance/doubao-seedance-2-0-260128
          • 创建文生视频任务
          • 创建图生视频任务
          • 创建参考生视频任务
          • 查询任务状态
          • 查询任务结果
        • veo-3.1-generate-001
          • 创建文生视频任务
          • 创建首尾帧生视频任务
          • 创建图生视频任务
          • 查询状态
          • 获取结果
        • veo-3.1-fast-generate-001
          • 创建文生视频任务
          • 创建首尾帧生视频任务
          • 创建图生视频任务
          • 查询状态
          • 获取结果
        • vidu
          • viduq1
            • 创建文生视频任务
            • 创建参考生视频任务-非主体调用(视频生成)
            • 创建参考生视频任务-主体调用(支持音视频功能)
            • 查询任务状态
            • 查询任务结果
          • viduq2
            • 创建文生视频任务
            • 创建参考生视频任务-非主体调用(视频生成
            • 创建参考生视频任务-主体调用(支持音视频功能)
            • 查询任务状态
            • 查询任务结果
          • viduq2-pro
            • 创建图生视频任务
            • 创建首尾帧生视频任务
            • 创建参考生视频任务-非主体调用(视频生成)
            • 查询任务状态
            • 查询任务结果
          • viduq2-turbo
            • 创建图生视频任务
            • 创建首尾帧生视频任务
            • 查询任务状态
            • 查询任务结果
          • viduq3-pro
            • 创建图生视频任务
            • 创建文生视频任务
            • 创建首尾帧生视频任务
            • 查询任务状态
            • 查询任务结果
          • viduq3-turbo
            • 创建参考生视频任务
            • 创建图生视频任务
            • 创建文生视频任务
            • 创建首尾帧生视频任务
            • 查询任务状态
            • 查询任务结果
          • viduq3
            • 创建参考生视频任务
            • 查询任务状态
            • 查询任务结果
        • kling
          • kling-v2-5-turbo
            • 文生视频
            • 图生视频
          • kling-v2-6
            • 文生视频
            • 图生视频
            • 动作控制
          • kling-v3
            • 文生视频
            • 图生视频
            • 动作控制
          • kling-video-o1
            • 图生视频
            • 参考生视频
          • kling-v3-omni
            • 文生视频
            • 图生视频
            • 参考生视频
          • 查询任务状态
          • 查询任务结果
        • bytedance/doubao-seedance-2-0-fast-260128
          • 创建文生视频任务
          • 创建图生视频任务
          • 创建参考生视频任务
          • 查询任务状态
          • 查询任务结果
      • kling
        • kling-v2-1
          • 创建视频任务
          • 查询视频生成状态
        • kling-v2-5-turbo
          • 创建视频任务
          • 查询视频生成状态
        • kling-v2-6
          • 创建视频任务
          • 查询视频生成状态
        • kling-v3
          • 创建视频任务
          • 查询视频生成状态
        • kling-video-o1
          • 创建视频任务
          • 查询视频生成状态
        • kling-v3-omni
          • 创建视频任务
          • 查询视频生成状态
    • 图像生成
      • kling-v1
        • 创建文生图或单图生图任务
        • 查询任务状态
      • kling-v1-5
        • 创建文生图或单图生图任务
        • 查询任务状态
      • kling-v2
        • 创建文生图或单图生图任务
        • 创建多图生图任务
        • 查询任务状态
      • kling-v2-new
        • 创建单图生图任务
        • 查询任务状态
      • kling-v2-1
        • 创建文生图或单图生图任务
        • 创建多图生图任务
        • 查询任务状态
      • gemini-2.5-flash-image
        • 对话接口 - 支持文生图、图生图和纯对话
      • gemini-3.0-pro-image-preview
        • 对话接口 - 支持文生图、图生图和纯对话
      • gemini-3.1-flash-image-preview
        • 对话接口 - 支持文生图、图生图和纯对话
      • kling-image-o1
        • 创建图像生成任务
        • 查询图像生成任务
        • 获取结果
      • openai/gpt-image-2
        • 文生图
        • 图生图
    • 文件
      • 创建文件上传任务
      • 查询文件状态
      • 列出用户文件
    • 素材
      • 七牛云虚拟人像素材使用指南
      • 七牛云真人人像素材使用指南
      • 素材分组
        • 创建素材分组
        • 触发真人认证回查(仅 liveness_face)
        • 查询单个素材分组
        • 查询素材分组列表
        • 更新素材分组
        • 删除素材分组
      • 素材
        • 创建素材
        • 查询单个素材
        • 查询素材列表
        • 删除素材
    • 数据模型
      • 聊天
        • ChatCompletionRequest
        • ChatCompletionRequestMessage
        • MessageContent
        • ImageUrl
        • VideoUrl
        • FileUrl
        • InputAudio
        • CacheControl
        • ThinkingBlock
        • Image
        • ToolObject
        • ToolFunction
        • ToolParameters
        • ToolCall
        • ToolCallFunction
        • FunctionCall
        • ChatTemplateKwargs
        • ThinkType
        • ReasoningType
        • ImageConfig
        • SafetySetting
      • 视频
        • Sora
          • SoraVideoTask
          • SoraVideoTaskRemix
        • kling-v2-1
          • KlingV21CreateRequest
          • KlingV21CreateResponse
          • KlingV21StatusResponse
        • kling-video-o1
          • KlingVideoO1CreateRequest
          • KlingVideoO1CreateResponse
          • KlingVideoO1StatusResponse
        • kling-v2-5-turbo
          • KlingV25TurboCreateRequest
          • KlingV25TurboCreateResponse
          • KlingV25TurboStatusResponse
        • kling-v3-omni
          • KlingV3OmniCreateRequest
        • kling-v3
          • KlingV3CreateRequest
        • kling-v2-6
          • KlingV26CreateRequest
          • KlingV26CreateResponse
          • KlingV26VideoStatusResponse
        • Veo
          • CreateVideoGenerationRequest
          • Instance
          • ImageInput
          • LastFrameInput
          • VideoInput
          • ReferenceImage
          • Parameters
          • CreateVideoGenerationResponse
          • VideoGenerationJobInfo
          • VideoGenerationData
          • VideoResult
          • ErrorResponse
        • VideoCreateResponse
        • VideoStatusResponse
        • File
      • 图像生成
        • kling-v1
          • KlingV1CreateImageRequest
          • KlingV1EditImageRequest
        • kling-v1-5
          • KlingV15CreateImageRequest
        • kling-v2
          • KlingV2CreateImageRequest
          • KlingV2EditImageRequest
        • kling-v2-new
          • KlingV2NewCreateImageRequest
        • kling-v2-1
          • KlingV21CreateImageRequest
          • KlingV21EditImageRequest
        • gemini-2.5-flash-image
          • Gemini25FlashImageChatCompletionRequest
          • Gemini25FlashImageGenerationRequest
          • Gemini25FlashImageEditRequest
          • Gemini25FlashImageConfig
        • gemini-3.0-pro-image-preview
          • Gemini30ProImageChatCompletionRequest
          • Gemini30ProImageGenerationRequest
          • Gemini30ProImageEditRequest
          • Gemini30ProImageConfig
        • KlingImageTaskResponse
        • KlingImageTaskStatusResponse
        • ChatMessage
        • ChatCompletionResponse
        • FalOmniImageRequest
        • Gemini31FlashImageChatCompletionRequest
        • CreateOmniImageResponse
        • Gemini31FlashImageGenerationRequest
        • ImageTaskInfoResponse
        • Gemini31FlashImageEditRequest
        • Gemini31FlashImageConfig
      • CreateFileRequest
      • HappyHorseTextToVideoRequest
      • ViduQ3ReferenceToVideoRequest
      • ContentItem
      • FalSeedanceTextToVideoRequest
      • QueueStatus
      • FalOmniImageRequest
      • MultiPromptItem
      • FileResponse
      • HappyHorseImageToVideoRequest
      • FalSubmitResponse
      • AssetGroupVisualValidateRequest
      • FalSeedanceImageToVideoRequest
      • FalOmniImageElement
      • ElementListItem
      • Veo31FirstLastFrameToVideoInput
      • ToolItem
      • AssetGroupUpdateRequest
      • ReferenceElement
      • HappyHorseReferenceToVideoRequest
      • FalSeedanceReferenceToVideoRequest
      • CreateVideoTaskResponse
      • FileListResponse
      • HappyHorseVideoEditRequest
      • FalStatus
      • KlingV25TurboTextToVideoRequest
      • ApiErrorBody
      • AssetGroupListResponse
      • File
      • ImageUrlObject
      • FileDeleteResponse
      • FalRequestURLs
      • CommonPromptFields
      • KlingV26TextToVideoRequest
      • GetVideoTaskResponse
      • ChatMessage
      • KlingV3TextToVideoRequest
      • AssetResponse
      • KodoSource
      • KlingV3OmniTextToVideoRequest
      • AssetListResponse
      • ErrorResponse
      • KlingV25TurboImageToVideoRequest
      • ChatCompletionResponse
      • Veo31ImageToVideoInput
      • Veo31TextToVideoInput
      • KlingOmniO3TextToVideoRequest
      • KlingV26ImageToVideoRequest
      • KlingV3ImageToVideoRequest
      • AssetGroupCreateRequest
      • AssetGroupResponse
      • AssetCreateRequest
      • ErrorDetail
      • KlingVideoO1ImageToVideoRequest
      • KlingV3OmniImageToVideoRequest
      • FileError
      • KlingOmniO1ImageToVideoRequest
      • KlingVideoO1ReferenceToVideoRequest
      • ImageGenerationResponse
      • KlingOmniO3ImageToVideoRequest
      • KlingV3OmniReferenceToVideoRequest
      • FalLogEntry
      • FalMetrics
      • FalVideoItem
      • FalResultResponse
      • FalStatusResponse
      • FalErrorDetail
      • FalErrorResponse
      • VideoUrlObject
      • KlingOmniO1ReferenceToVideoRequest
      • KlingV26MotionControlRequest
      • KlingOmniO3ReferenceToVideoRequest
      • KlingV3MotionControlRequest
      • AudioUrlObject
      • DraftTaskObject
      • VideoTaskOutputContent
      • FalImageItem
      • VideoTaskToolUsageItem
      • VideoTaskUsage
  • 管理接口
    • 管理接口的认证方式
    • API Key 管理
      • 批量创建 API Key
    • 日志导出
      • 导出请求日志
      • 导出请求日志为文件
    • 数据模型
      • StatLogOKResp
      • BatchCreateApiKeysRequest
      • StatLogResp
      • ErrorResponse
      • BatchCreateApiKeysSuccessResponse
      • BatchCreateApiKeysData
      • ApiKeyInfo
      • ErrorDetail
  1. 素材

七牛云真人人像素材使用指南

七牛云 AI 大模型推理 API 支持上传真人人像(LivenessFace)素材。与虚拟人像(AIGC)不同,真人人像在建组时需要先经过活体认证(刷脸)——通过认证后,您可以在 Seedance 2.0 视频生成接口中通过 qasset:// URI 反复引用同一真人形象,无需每次重新上传。
本文是真人人像素材的完整教程。如果您要使用的是虚拟人像(AIGC)素材(无需刷脸、建组同步完成),请改读 七牛云虚拟人像素材使用指南。两类素材共用同一套素材/视频管线,仅在建组方式上不同。

真人人像素材核心特点#

活体认证建组:真人组必须经过用户刷脸才能创建,是一条异步且需用户交互的流程,状态机为 pending → awaiting_auth → active/failed
一次性认证凭证:刷脸成功后凭 byted_token 换取真人组,该凭证只能用一次,必须刷脸成功后才触发回查(详见一次性凭证硬约束)
面部一致性:每个真人组唯一绑定一个真实人像,后续上传的素材会与认证基准做面部一致性比对,非同一人/多人脸会审核失败
跨任务复用:审核通过的真人素材通过 qasset://{qassetid} 在多个视频任务里反复引用
首期范围:真人人像仅在 Seedance 2.0 视频模型生效
整体五步流程:
建认证会话 ──awaiting_auth──▶ 刷脸 ──回查(resolve)──▶ active ──上传真人素材──▶ approved ──qasset:// 引用──▶ Seedance 视频生成

与虚拟人像(AIGC)的关系#

我该用哪种素材? 一般创作场景用素人形象的,直接用七牛云虚拟人像素材使用指南即可,无需刷脸;只有涉及公众 IP(明星、知名人物等需要核验真人授权的真实形象)时,才需要使用真人人像素材。真人人像的活体认证(刷脸)正是为了核验"被使用的是经本人确认授权的真实形象"——素人形象用不到这层核验,走虚拟人像更省事。
真人人像复用了虚拟人像的全部素材/视频管线——上传、审核、查询、qasset:// 视频引用的用法完全一致。两者唯一的本质差异在建组:
维度虚拟人像(AIGC)真人人像(LivenessFace)
建组方式POST /v1/asset-groups 后很快变 active异步 + 用户交互:建会话 → 刷脸 → 回查换组
建组中间态无(pending → active)新增 awaiting_auth(等用户刷脸)
callback_url忽略必填(刷脸完成后的跳转地址)
自动建组支持(上传素材不传 group_id 时自动选/建默认组)不支持,上传素材必须显式传已 active 的真人组 group_id
默认组同一用户 (type, model) 首个组自动设默认真人组不参与默认组,is_default 恒为 false
上传 / 审核 / 视频引用——与虚拟人完全一致

核心概念#

概念说明
Group(分组)素材的分组容器,绑定 model;真人组类型为 liveness_face
Asset(素材)单个真人人像,状态机 pending → reviewing → approved/failed
活体认证真人组建组时的刷脸环节,由用户在 H5 页面完成
qgroupid用户可见的分组 ID,格式 qgroup-{uid}-{ts}
qassetid用户可见的素材 ID,格式 qasset-{uid}-{ts}
callback_url客户自己的回调地址(不是七牛、不是供应商)。刷脸完成后浏览器跳转到此地址
h5_link活体认证 H5 页面链接,用户在此刷脸。⚠️ 有效期约 120 秒
byted_token一次性认证凭证。刷脸后用于触发认证回查,查询一次即失效
result_code刷脸结果码,来自跳转回 callback_url 时拼接的 resultCode 参数。10000=成功
awaiting_auth真人组专用中间态:会话已建、h5_link 已下发,等待用户刷脸并触发回查
qasset://在 Seedance 视频请求里嵌入素材的引用 URI,形如 qasset://qasset-uid001-1716100100000000000

接口说明#

接入点#

七牛云 AI 大模型推理 API 接入域名:
接入点: https://api.qnaigc.com
使用前提:如何获取API-KEY

支持接口列表#

接口方法说明
/v1/asset-groupsPOST创建真人认证组(type=liveness_face,真人入口)
/v1/asset-groups/:qgroupidGET查询单个分组详情,用于轮询拿 h5_link 与认证结果
/v1/asset-groups/:qgroupid/visual-validate-resultPOST真人专用:刷脸成功后触发认证回查(resolve)
/v1/asset-groupsGET分页查询当前用户的素材分组
/v1/asset-groups/:qgroupidPATCH修改分组的 name / description
/v1/assetsPOST上传真人素材并提交审核
/v1/assets/:qassetidGET查询单个素材详情,用于轮询审核状态
/v1/assetsGET分页查询当前用户的素材

支持的模型#

模型 ID说明状态
bytedance/doubao-seedance-2-0-260128字节跳动豆包 Seedance 2.0,支持真人人像视频生成✅ 已上线
注意:qasset:// 引用仅在 Seedance 2.0 系列模型生效。Sora / Kling / Vidu / Veo 等其他视频模型不支持真人/虚拟人素材引用。

真人认证建组的交互模型#

真人建组的关键:七牛不会自己轮询认证结果,而是由您(客户)驱动。整条链路围绕一个一次性凭证 byted_token 展开:
① 您 POST /v1/asset-groups {type:liveness_face, model, callback_url}
   → 平台返回 qgroupid,状态 pending

② 平台后台向供应商建认证会话,拿到 h5_link + byted_token
   → 组状态推进到 awaiting_auth

③ 您轮询 GET /v1/asset-groups/:qgroupid,状态变 awaiting_auth 后拿到 h5_link
   → 引导用户打开 h5_link 刷脸(⚠️ 链接约 120 秒有效,需尽快打开)

④ 用户刷脸完成 → 浏览器跳转回【您的 callback_url】,拼接 ?bytedToken=...&resultCode=10000&...
   → 您的服务器收到回调,确认 resultCode==10000(刷脸成功)

⑤ 您 POST /v1/asset-groups/:qgroupid/visual-validate-result {result_code:"10000"}
   → 平台凭一次性 byted_token 向供应商换取真人组(resolve),仅调一次
   → 组状态 awaiting_auth → active(成功)/ failed(失败)

之后:上传真人素材 → 审核 → 视频引用(与虚拟人一致)
callback_url 是您自己的服务器。七牛只把它透传给供应商;刷脸完成后浏览器带着 resultCode 跳转到这里。您的服务收到后,由您主动调七牛 visual-validate-result 接口触发回查。
⚠️⚠️ 最关键的约束:visual-validate-result 触发的认证回查使用一次性凭证——只能在刷脸成功(resultCode==10000)后调用,且最多调一次。刷脸前调用或反复调用都会烧掉凭证,导致该组无法恢复、只能重建。详见一次性凭证硬约束。

快速上手#

下面是真人组从建组到引用的最小闭环。注意第 ③、④ 步涉及用户在浏览器刷脸,无法纯 curl 完成。
③ 引导用户打开 h5_link 刷脸(⚠️ 链接约 120 秒有效,拿到后请尽快打开)。
④ 刷脸完成 → 浏览器跳转回您的 callback_url,拼接 ?bytedToken=...&resultCode=10000&...。您的服务确认 resultCode==10000。
跑通这套流程后,请继续阅读下面的分场景详解。

分场景详解#

1. 创建真人认证组#

接口:POST /v1/asset-groups

Header 参数#

参数名类型必填说明
Authorizationstring是API Key,格式:Bearer YOUR_API_KEY
Content-Typestring是固定值:application/json

Body 参数 (JSON)#

参数名类型必填默认值说明
typestring是-固定为 liveness_face(真人人像)
namestring是-分组展示名,1–64 字符
modelstring是-绑定的模型 ID,当前仅 bytedance/doubao-seedance-2-0-260128
callback_urlstring是-客户自定义回调地址,必须是合法 https URL(不能指向内网)。刷脸完成后浏览器跳转到此地址
descriptionstring否-分组描述,最长 300 字符
为什么 callback_url 必填:供应商的认证会话强制要求回调地址,它是刷脸完成后浏览器跳转、您据 resultCode 触发回查的唯一信号。不传或填了非 https / 内网地址会在入口返回 400。

响应体说明#

接口同步返回分组记录,初始状态为 pending,平台随后在后台建认证会话,组状态会推进到 awaiting_auth。
字段名类型说明
qgroupidstring用户可见分组 ID,格式 qgroup-{uid}-{ts}
typestring固定 liveness_face
namestring展示名
modelstring绑定模型
statusstring初始为 pending,详见状态流转
is_defaultboolean真人组恒为 false
h5_linkstring仅 status=awaiting_auth 时返回
byted_tokenstring仅 status=awaiting_auth 时返回
fail_reasonstring仅 status=failed 时有值
created_atintegerUnix 时间戳(秒)
updated_atintegerUnix 时间戳(秒)

示例#

响应:
{
  "qgroupid": "qgroup-uid001-1716100000000000000",
  "type": "liveness_face",
  "name": "代言人形象",
  "description": "用于品牌视频的真人形象",
  "model": "bytedance/doubao-seedance-2-0-260128",
  "status": "pending",
  "is_default": false,
  "created_at": 1716100000,
  "updated_at": 1716100000
}

2. 轮询拿 h5_link 并引导刷脸#

接口:GET /v1/asset-groups/:qgroupid
建组后平台在后台向供应商建认证会话,您需要轮询此接口,等状态从 pending 变为 awaiting_auth,此时响应会带上 h5_link 与 byted_token。
awaiting_auth 响应:
{
  "qgroupid": "qgroup-uid001-1716100000000000000",
  "type": "liveness_face",
  "status": "awaiting_auth",
  "h5_link": "https://h5-v2.kych5.com?accessKeyId=...&bytedToken=...&lng=zh",
  "byted_token": "202603311449168C23BA26...",
  "model": "bytedance/doubao-seedance-2-0-260128",
  "created_at": 1716100000,
  "updated_at": 1716100020
}
拿到 h5_link 后,引导用户在浏览器/手机端打开链接完成刷脸。
⚠️ 120 秒窗口:h5_link 与 byted_token 有效期约 120 秒。建议前端拿到 qgroupid 后立即开始轮询(2–3 秒一次),第一时间抢到 h5_link 引导用户打开,避免窗口被链路延迟消耗。链接失效后只能重建组。

3. 刷脸完成后触发认证回查#

用户刷脸完成后,浏览器会跳转回您建组时填的 callback_url,并拼接查询参数:
https://your-domain.com/liveness/callback?bytedToken=202603311449168C23BA26...&resultCode=10000&...
您的服务器收到回调后,确认 resultCode==10000(刷脸成功),再调用本接口触发回查。
接口:POST /v1/asset-groups/:qgroupid/visual-validate-result

Body 参数 (JSON)#

参数名类型必填说明
result_codestring是刷脸结果码,即 callback 拼接参数里的 resultCode。10000=成功
byted_tokenstring否认证凭证。留空则用平台已存储的;如传入必须与该组存储的一致,否则返回 400
响应(202,受理成功):
{ "status": "awaiting_auth" }
返回 202 仅表示回查请求已受理,最终成功/失败需轮询 GET /v1/asset-groups/:qgroupid 观察 active / failed。

行为说明#

result_code == "10000"(刷脸成功):平台凭一次性 byted_token 向供应商换取真人组(resolve),成功 → active,失败 → failed。
result_code != "10000"(刷脸失败):本接口仍返回 202,平台异步将该组判为 failed,且不会消耗一次性凭证(不调用供应商)。
幂等:组已是 active / failed 终态时再调,直接返回 200 + 当前分组信息,不再触发回查。
⚠️ 务必只在刷脸成功后调用此接口,且只调一次。原因见下一节。

一次性凭证 byted_token 的硬约束#

平台向供应商查询认证结果的接口是一次性的——不管首次返回成功还是失败,byted_token 都会被立即置为"已使用",再查返回空。这条约束决定了真人认证的两条铁律:
1.
门禁——只在刷脸成功后调一次:必须确认浏览器跳转回 callback_url 时携带 resultCode==10000 后,才调 visual-validate-result。
刷脸前 / 刷脸失败就用伪造的 10000 调用:平台会向供应商发起查询并白白烧掉凭证,之后永远查不到真实结果 → 该组只能重建。
如果 result_code 如实填非 10000,平台不会烧凭证,安全落 failed。
2.
幂等——每个凭证至多触发一次:不要反复调用 visual-validate-result。平台侧有幂等保护(已终态直接返回),但请在客户端也确保"刷脸成功后只调一次"。
操作结果
刷脸成功(resultCode==10000)后调一次✅ 正常换取真人组 → active
result_code 如实填非 10000✅ 异步落 failed,不烧凭证,可重建组重试
刷脸前 / 失败后伪造 10000 调用❌ 烧掉一次性凭证,组 failed 且不可恢复,须重建组
反复调用 visual-validate-result⚠️ 平台幂等拦截,但应避免——务必只调一次
failed 是终态、不可恢复。真人组认证失败后,请重新建组(新的 qgroupid)重试,原组无法"重发会话"。

4. 组状态流转与轮询策略#

状态流转#

                   ┌──────────────────┐
                   │     pending      │  ← 建组成功,平台后台建认证会话中
                   └────────┬─────────┘
                            │  会话建成、下发 h5_link
                            ▼
                   ┌──────────────────┐
                   │   awaiting_auth  │  ← 等用户刷脸 + 触发回查(带 h5_link/byted_token)
                   └────────┬─────────┘
                            │  visual-validate-result 触发回查
              ┌─────────────┴─────────────┐
              ▼                           ▼
     ┌──────────────────┐        ┌──────────────────┐
     │      active      │        │      failed      │
     │  ✅ 可上传真人素材 │        │  ❌ 终态不可恢复   │
     └──────────────────┘        └──────────────────┘
                                  fail_reason 字段含具体原因

状态说明#

状态值说明
pending建组成功,平台后台向供应商建认证会话中
awaiting_auth会话已建、h5_link 已下发,等用户刷脸并触发回查
active认证通过,可往该组上传真人素材
failed建会话失败 / 刷脸失败 / 回查失败 / 超时,终态不可恢复

轮询建议#

拿 h5_link 阶段(pending → awaiting_auth):2–3 秒一次,尽快抢到 h5_link(120 秒窗口)
回查结果阶段(awaiting_auth → active/failed):触发 visual-validate-result 后,每 3–5 秒轮询一次
超时:若长时间没人刷脸 / 不触发回查,平台约 10 分钟后会把 awaiting_auth 组兜底判为 failed
终态判断:只关注 active 和 failed 两种终态,其他状态继续轮询

5. 上传真人素材#

真人组 active 后即可上传素材,用法与虚拟人像完全一致,差别只有一点:真人组不支持自动建组,group_id 必填且必须是已 active 的真人组。
接口:POST /v1/assets

Body 参数 (JSON)#

参数名类型必填默认值说明
typestring是-素材类型:image(图片)/ video(视频)/ audio(音频)
urlstring是-源文件 URL,必须公网可访问
namestring是-素材展示名,1–200 字符
modelstring是-与真人组一致:bytedance/doubao-seedance-2-0-260128
group_idstring是-真人组的 qgroupid。必须显式传入、且该组 status=active、model 与请求一致,否则返回 400
⚠️ 真人组不支持自动建组:虚拟人像不传 group_id 时平台会自动选/建默认 AIGC 组;真人组必须经活体认证才能创建,不传 group_id 只会落到/新建虚拟人(aigc)默认组,绝不会落到真人组。上传真人素材务必显式传真人组 group_id。
响应:
{
  "qassetid": "qasset-uid001-1716100100000000000",
  "type": "image",
  "name": "代言人正脸",
  "status": "pending",
  "group_id": "qgroup-uid001-1716100000000000000",
  "created_at": 1716100100,
  "updated_at": 1716100100
}
面部一致性约束:每个真人组唯一绑定一个真实人像。上传的图像会与认证基准做面部一致性比对——非同一人或含多个人脸会导致素材审核失败(status=failed,fail_reason 说明原因)。请确保上传的素材与刷脸认证的是同一人、单人脸。

6. 查询素材状态与列表#

真人素材的查询与轮询策略与虚拟人像完全一致。

查询单个素材:GET /v1/assets/:qassetid#

素材状态机:pending → reviewing → approved/failed。轮询建议 5–10 秒一次,只关注 approved 和 failed 两种终态。
审核通过:
{
  "qassetid": "qasset-uid001-1716100100000000000",
  "type": "image",
  "name": "代言人正脸",
  "model": "bytedance/doubao-seedance-2-0-260128",
  "status": "approved",
  "group_id": "qgroup-uid001-1716100000000000000",
  "created_at": 1716100100,
  "updated_at": 1716100250
}
审核失败(如非同一人):
{
  "qassetid": "qasset-uid001-1716100100000000000",
  "status": "failed",
  "group_id": "qgroup-uid001-1716100000000000000",
  "fail_reason": "face mismatch: not the same person",
  "created_at": 1716100100,
  "updated_at": 1716100250
}

查询素材列表:GET /v1/assets#

查询参数类型默认值说明
pageinteger1页码,从 1 开始
page_sizeinteger20每页大小,最大 100
statusstring-过滤 pending / reviewing / approved / failed
typestring-过滤 image / video / audio
group_idstring-按真人组过滤,传入 qgroup-{uid}-{ts} 格式

7. 在 Seedance 2.0 视频中引用真人素材 ⭐#

真人素材审核通过(approved)后,视频引用链路与虚拟人像零差异:把 qasset://{qassetid} 写进 Seedance 2.0 视频请求即可。qasset:// 引用支持两种协议,任选其一。

协议 A:火山方舟原厂协议#

接口:POST /v3/contents/generations/tasks
image_url 节点的 url 字段直接写 qasset://{qassetid}:
返回的 id 即视频任务 ID,使用 GET /v3/contents/generations/tasks/{id} 轮询任务状态。同一请求可拼接多个 image_url 节点引用多个素材,role 当前固定取 reference_image。

协议 B:fal 队列协议#

方法路径用途是否支持 qasset://
POST/queue/bytedance/seedance-2.0/image-to-video图生视频(首/尾帧)✅
POST/queue/bytedance/seedance-2.0/reference-to-video多模态参考生视频✅
GET/bytedance/seedance-2.0/requests/:request_id/status查询任务状态-
GET/bytedance/seedance-2.0/requests/:request_id获取任务结果-
协议 B 的完整参数(resolution / duration / aspect_ratio / generate_audio 等公共参数,以及 reference-to-video 的素材数量上限)与虚拟人像一致,详见 虚拟人像教程 §5。

引用规则#

被引用素材必须 status=approved,否则视频任务会失败
素材必须属于当前 API Key 对应的用户,否则报权限错误
同一请求里可引用多个 qasset://,平台在分发时会自动改写为供应商内部 ID
普通公网 URL 仍然支持,qasset:// 与普通 URL 可在同一请求里混用

错误与故障排查#

HTTP 状态码#

HTTP 状态触发场景处理建议
400type 非 liveness_face / callback_url 缺失或非 https / result_code 缺失 / byted_token 与该组不一致 / 上传时 group_id 非 active 或 model 不匹配按错误信息修正请求体
401API Key 缺失或无效检查 Authorization 头部
403用户被封禁 / Agent 类型非 api / qgroupid 不属于当前用户检查归属与权限
404qgroupid / qassetid 不存在或不属于当前用户检查 ID 是否正确
409调 visual-validate-result 时组仍为 pending(会话未建完) / 组的 byted_token 为空先轮询 GET 等到 awaiting_auth 拿到 h5_link 再触发回查
500平台内部错误重试,多次失败联系客服
503Kafka 等下游不可用稍后重试
错误响应统一结构:
{
  "error": {
    "type": "invalid_request_error",
    "message": "callback_url is required for liveness_face group"
  }
}

真人认证 / 审核失败常见原因#

建组阶段失败(组 failed)#

callback_url 不合法:未填 / 非 https / 指向内网 → 建组入口直接 400(不会建组)
刷脸失败:用户活体认证未通过,result_code != 10000 → 组异步判 failed,重建组重试
凭证被烧:在刷脸成功前用伪造 10000 触发回查 → 凭证作废、组 failed 不可恢复,须重建组
超时:拿到 h5_link 后长时间不刷脸 / 不触发回查 → 约 10 分钟后兜底 failed

素材审核失败(素材 failed)#

status=failed 时 fail_reason 字段会带出原因,常见场景:
非同一人:上传素材与认证基准面部不一致
多个人脸:素材中含多张人脸,无法入库
内容审核未通过:人像包含敏感/违规元素
图片无法访问:url 在审核时已不可访问(已过期、私有、403 等)
图片格式或尺寸不符合要求
failed 是终态、无法恢复。素材失败需重新提交一个新素材;真人组认证失败需重新建组。

常见问题#

Q: 真人组和虚拟人组有什么区别?
A: 唯一的本质区别是建组方式:虚拟人(aigc)建组同步、立即可用;真人(liveness_face)建组需用户刷脸认证、异步完成。建组后的上传、审核、qasset:// 视频引用用法完全一致。
Q: callback_url 是七牛的地址还是我的地址?
A: 是您自己的服务器地址。七牛只把它透传给认证供应商;刷脸完成后浏览器带着 resultCode 跳转到这里。您的服务收到回调后,再主动调七牛的 visual-validate-result 接口触发回查。
Q: 为什么我刚拿到 h5_link 没多久就失效了?
A: h5_link 与 byted_token 有效期约 120 秒。请前端拿到 qgroupid 后立即轮询 GET 抢 h5_link,第一时间引导用户打开。失效后只能重建组。
Q: 我能反复调 visual-validate-result 直到拿到结果吗?
A: 不能。它触发的认证回查使用一次性凭证,刷脸成功后只能调一次。务必在浏览器回调带 resultCode==10000 后才调,且只调一次。详见一次性凭证硬约束。
Q: result_code 填了非 10000,凭证会被烧掉吗?
A: 不会。如实填非 10000 时平台不调用供应商,安全把组判为 failed,您可以重建组重试。危险的是在刷脸未成功时填伪造的 10000——那会真的去查、烧掉凭证。
Q: 真人组认证失败 / 凭证烧掉后能恢复吗?
A: 不能。failed 是终态。请重新建组(新的 qgroupid)重新走一遍刷脸流程。
Q: 上传真人素材时不传 group_id 会怎样?
A: 真人组不支持自动建组。不传 group_id 只会落到/新建虚拟人(aigc)默认组,绝不会落到真人组。上传真人素材必须显式传已 active 的真人组 group_id。
Q: 为什么上传的素材审核失败说"非同一人"?
A: 每个真人组唯一绑定一个真实人像。上传的素材会与刷脸认证的基准做面部一致性比对,非同一人或含多张人脸会失败。请确保上传与认证的是同一人、单人脸。
Q: 真人素材能用在 Seedance 之外的视频模型吗?
A: 不能。当前仅 bytedance/doubao-seedance-2-0-260128 支持 qasset:// 引用,Sora / Kling / Vidu / Veo 等其他视频模型不支持。
Q: API Key 怎么获取?
A: 见 如何获取API-KEY。

参考文档#

七牛云虚拟人像素材使用指南 - AIGC 素材(同步建组、共用上传/审核/视频引用管线)
AI 大模型推理产品介绍
AI 大模型推理模型广场
修改于 2026-06-12 02:43:25
上一页
七牛云虚拟人像素材使用指南
下一页
创建素材分组
Built with