一、概述
朱雀是腾讯面向 AIGC 内容检测的能力,可判断文本或图片是否由 AI 生成。通过 EdgeOne AI 网关统一接入后,你可以使用以下两类模型:
| Provider 名称 | 能力 | 典型用途 |
| zhuque-text | AIGC 文本检测 | 判断文本是否由 AI 生成,给出分段标签与占比。适用于 AI 内容审核、原创性检测等场景 |
| zhuque-image | AIGC 图片检测 | 判断图片是否由 AI 生成,给出置信度。适用于 AI 图片内容审核、版权保护等场景 |
注意:说明:
注意:该功能仅对企业版套餐开放。如需使用,请 联系我们 开通。
二、费用说明
调用朱雀模型会产生费用,计费单位为 EIU(Edge Inference Unit),具体单价、每次调用的 EIU 消耗与计费规则,详见 边缘推理用量单元计费说明。
费用将在你的腾讯云账号中产生,你可登录 腾讯云费用中心 查看账单与用量明细。
三、步骤一:创建网关
1. 登录 EdgeOne 控制台,根据你是否已有 EdgeOne 资源,选择以下对应入口:
·若你无任何 EdgeOne 资源:在控制台首页找到 一个入口,智能调度多模型 卡片,单击 创建项目 ,直接进入创建 AI 网关的流程。
·若你已有 EdgeOne 资源:进入控制台后页面已定位至 Makers Model Pro,单击创建项目即可。
2. 创建完成后,记录系统分配的 网关域名 与 API Key。请妥善保存网关域名与 API Key,现不支持更换 API Key,遗失需重新创建网关。
四、同步调用与异步调用的区别
朱雀支持同步与异步两种调用模式,由请求 Header 决定,请根据业务场景选择:
| 维度 | 同步模式 | 异步模式 |
| 提交 Header | 无特殊 Header | Work-Mode: async |
| 查询 Header | 不需要 | Work-Infer-Action: query |
| 请求次数 | 1 次 | 1 次提交 + N 次查询 |
| 响应内容 | 直接返回业务结果 JSON | 外层返回 {TaskId, Status, Output},其中 Output 为字符串化 JSON,需客户端二次解析 |
| 客户端阻塞 | 整个推理时长全程阻塞 | 提交立即返回,查询可异步进行 |
| 典型耗时(参考) | 文本约 10s 内、图片约 5s 内 | 提交 < 1s;结果通常 1~5s 内就绪 |
| 选型建议 | 实时单请求、低并发、代码简洁优先 | 批量任务、长耗时、不希望客户端阻塞 |
五、调用方式与鉴权
网关访问信息
| 项目 | 值 |
| 网关域名 | <your-gateway-domain>(创建网关后获取) |
| 协议 | HTTPS |
| 文本检测路由 | /v1/providers/zhuque-text/classify |
| 图片检测路由 | /v1/providers/zhuque-image/classify |
鉴权方式
所有请求均需在 Header 中携带 API Key:
| Header | 取值 | 说明 |
| Authorization | Bearer <API_KEY> | 从 EdgeOne AI 网关获取的 API Key |
| Content-Type | application/json | 请求体格式 |
注意:说明:
注意:调用 zhuque-image 时,图片需大于 300×300 像素,大小限制 10 MB,支持格式 jpg、png、webp。
六、同步调用
同步模式为默认模式,单次请求即可返回结果,无需轮询。
文本检测(zhuque-text)
请求参数:
| 参数 | 位置 | 类型 | 必填 | 说明 |
| text | Body | string | 是 | 待检测的文本内容 |
| is_merge | Body | bool | 否 | 是否合并段落,默认为 true。设为 false 时,每个段落独立输出置信度 |
curl 示例:
curl -X POST "https://<your-gateway-domain>/v1/providers/zhuque-text/classify" \\ -H "Authorization: Bearer <API_KEY>" \\ -H "Content-Type: application/json" \\ -d '{ "text": "hello world", "is_merge": true }'
响应示例:
{ "status": "success", "softmax_confidence": 0.9274, "ratio_confidence": 1.0, "labels_ratio": {"0": 0.0001, "1": 0.0001, "2": 0.9999}, "segment_labels": [ {"text": "hello world", "label": 2, "conf": 0.9274, "order": 1, "position": [0, 11]} ], "msg": ""}
响应字段说明
| 字段 | 类型 | 说明 |
| status | string | 推理状态,success 表示成功 |
| labels_ratio | object | 各类型内容占比。"0" 为人工(Human)内容占比,"1" 为 AI 内容占比,"2" 为疑似 AI 内容占比,取值均在 [0, 1] |
| ratio_confidence | float | 整体疑似 AI 内容占比,越大越可能为 AI,越小越可能为人工 |
| segment_labels | array | 各分段的类型标签及 AI 置信度 |
| softmax_confidence | float | 整体 AI 置信度,越大越可能为 AI,越小越可能为人工 |
| msg | string | 错误信息,正常时为空 |
图片检测(zhuque-image)
请求参数
| 参数 | 位置 | 类型 | 必填 | 说明 |
| imageUrl | Body | string | 二选一 | 公网可访问的图片 URL |
| imageBase64 | Body | string | 二选一 | 图片的 Base64 编码内容 |
curl 示例:
curl -X POST "https://<your-gateway-domain>/v1/providers/zhuque-image/classify" \\ -H "Authorization: Bearer <API_KEY>" \\ -H "Content-Type: application/json" \\ -d '{"imageUrl": "https://example.com/path/to/image.jpg"}'
响应示例:
{ "status": "success", "data": {"confidence": 0.1484}, "message": ""}
响应字段说明
| 字段 | 类型 | 说明 |
| status | string | 推理状态,success 表示成功 |
| data.confidence | number | 该图片为 AI 生成的置信度,取值范围 [0, 1],越接近 1 越可能为 AI 生成 |
| message | string | 错误信息,正常时为空 |
Python 同步调用示例:
import jsonimport urllib.requestGATEWAY = "https://<your-gateway-domain>"API_KEY = "<API_KEY>"HEADERS = { "Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json",}def classify_sync(provider: str, payload: dict) -> dict: req = urllib.request.Request( f"{GATEWAY}/v1/providers/{provider}/classify", data=json.dumps(payload).encode("utf-8"), headers=HEADERS, method="POST", ) with urllib.request.urlopen(req, timeout=30) as resp: return json.loads(resp.read().decode("utf-8"))if __name__ == "__main__": text_result = classify_sync("zhuque-text", {"text": "hello world"}) print("text =>", json.dumps(text_result, ensure_ascii=False, indent=2)) img_result = classify_sync( "zhuque-image", {"imageUrl": "https://example.com/path/to/image.jpg"}, ) print("image =>", json.dumps(img_result, ensure_ascii=False, indent=2))
七、异步调用
异步模式适用于批量提交或长耗时任务,分为提交与查询两步。提交时需在请求中额外携带 Header Work-Mode: async。
提交任务
下面分别给出文本与图片的提交示例,两者仅请求路径中的 provider 与请求体字段不同,其余步骤一致。
curl 示例(文本):
curl -X POST "https://<your-gateway-domain>/v1/providers/zhuque-text/classify" \\ -H "Authorization: Bearer <API_KEY>" \\ -H "Work-Mode: async" \\ -H "Content-Type: application/json" \\ -d '{"text":"hello world"}'
curl 示例(图片):
curl -X POST "https://<your-gateway-domain>/v1/providers/zhuque-image/classify" \\ -H "Authorization: Bearer <API_KEY>" \\ -H "Work-Mode: async" \\ -H "Content-Type: application/json" \\ -d '{"imageUrl": "https://example.com/path/to/image.jpg"}'
响应示例:
{ "TaskId": "s1-b9d37cd7-a778-4216-82c5-ea9f2c491c11"}
查询结果:
提交后使用返回的 TaskId 轮询结果,查询请求需携带 Header Work-Infer-Action: query。
curl 示例:
curl -X GET "https://<your-gateway-domain>/v1/providers/zhuque-text/query/<TaskId>" \\ -H "Authorization: Bearer <API_KEY>" \\ -H "Work-Infer-Action: query"
响应示例:
{ "TaskId": "s1-b9d37cd7-a778-4216-82c5-ea9f2c491c11", "Status": "SUCCEEDED", "Output": "{\\"labels_ratio\\":{\\"0\\":0.0001,\\"1\\":0.0001,\\"2\\":0.9999},\\"ratio_confidence\\":1,\\"segment_labels\\":[{\\"conf\\":0.9274,\\"label\\":2,\\"order\\":1,\\"position\\":[0,11],\\"text\\":\\"hello world\\"}],\\"softmax_confidence\\":0.9274,\\"status\\":\\"success\\"}"}
注意:异步模式的结果包在外层 {TaskId, Status, Output},其中 Output 为字符串化的 JSON,需在客户端再做一次 JSON 解析(json.loads / JSON.parse)。同步模式则无此封装。
任务状态(Status)字段:
| Status | 含义 |
| QUEUED / PROCESSING | 任务进行中,需继续轮询 |
| SUCCEEDED | 任务成功,Output 字段为业务结果 |
| FAILED | 任务失败,停止轮询并按错误处理 |
Python 异步调用示例:
import jsonimport timeimport urllib.requestGATEWAY = "https://<your-gateway-domain>"API_KEY = "<API_KEY>"AUTH = {"Authorization": f"Bearer {API_KEY}"}def classify_async(provider: str, payload: dict, poll_interval: float = 1.0) -> dict: submit_headers = {**AUTH, "Work-Mode": "async", "Content-Type": "application/json"} req = urllib.request.Request( f"{GATEWAY}/v1/providers/{provider}/classify", data=json.dumps(payload).encode("utf-8"), headers=submit_headers, method="POST", ) with urllib.request.urlopen(req, timeout=15) as resp: task_id = json.loads(resp.read().decode("utf-8"))["TaskId"] query_headers = {**AUTH, "Work-Infer-Action": "query"} while True: req = urllib.request.Request( f"{GATEWAY}/v1/providers/{provider}/query/{task_id}", headers=query_headers, method="GET", ) with urllib.request.urlopen(req, timeout=15) as resp: result = json.loads(resp.read().decode("utf-8")) status = result.get("Status") if status == "SUCCEEDED": result["Output"] = json.loads(result["Output"]) return result if status == "FAILED": raise RuntimeError(f"task failed: {result}") time.sleep(poll_interval)if __name__ == "__main__": print(json.dumps(classify_async("zhuque-text", {"text": "hello world"}), ensure_ascii=False, indent=2))
八、注意事项
异步轮询规范
·提交后必须使用返回的 TaskId 调用 /query/<TaskId> 查询,且必须携带 Header Work-Infer-Action: query。
·轮询间隔建议 1s;避免低于 500ms 的高频轮询,以免对网关与上游造成压力。
同步模式超时与重试
·同步模式在整个推理周期内会阻塞 HTTP 连接,请将客户端超时设置得足够大(建议 ≥ 30s)。
·对于长文本或大图,若担心同步阻塞,建议改用异步模式以避免连接超时风险。
·幂等性提示:失败重试可能产生重复推理,业务侧请自行去重或限流。
九、常见错误码
| HTTP 状态码 | 错误信息 | 含义 | 排查建议 |
| 401 | invalid api key | API Key 错误或失效 | 核对 Authorization Header 中的 Key 是否正确 |
| 403 | provider_not_allowed | 该网关未授权此 Provider | 检查 provider 名称拼写(应为 zhuque-text 或 zhuque-image) |
| 404 | – | 路径或 TaskId 不存在 | 检查 URL 是否包含 /v1/providers/ 前缀;查询时 TaskId 是否正确 |
| 429 | – | 触发限流 | 降低并发或增加重试退避 |
| 5xx | – | 上游推理服务异常或超时 | 稍后重试;如持续异常请联系我们 |