Provider 名称 | 能力 | 典型用途 |
zhuque-text | AIGC 文本检测 | 判断文本是否由 AI 生成,给出分段标签与占比。适用于 AI 内容审核、原创性检测等场景 |
zhuque-image | AIGC 图片检测 | 判断图片是否由 AI 生成,给出置信度。适用于 AI 图片内容审核、版权保护等场景 |



维度 | 同步模式 | 异步模式 |
提交 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 | 取值 | 说明 |
Authorization | Bearer <API_KEY> | 从 EdgeOne AI 网关获取的 API Key |
Content-Type | application/json | 请求体格式 |
zhuque-image 时,图片需大于 300×300 像素,大小限制 10 MB,支持格式 jpg、png、webp。参数 | 位置 | 类型 | 必填 | 说明 |
text | Body | string | 是 | 待检测的文本内容 |
is_merge | Body | bool | 否 | 是否合并段落,默认为 true。设为 false 时,每个段落独立输出置信度 |
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 | 错误信息,正常时为空 |
参数 | 位置 | 类型 | 必填 | 说明 |
imageUrl | Body | string | 二选一 | 公网可访问的图片 URL |
imageBase64 | Body | string | 二选一 | 图片的 Base64 编码内容 |
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 | 错误信息,正常时为空 |
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))
Work-Mode: async。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 -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 -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 | 含义 |
QUEUED / PROCESSING | 任务进行中,需继续轮询 |
SUCCEEDED | 任务成功, Output 字段为业务结果 |
FAILED | 任务失败,停止轮询并按错误处理 |
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 resultif 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。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 | - | 上游推理服务异常或超时 | 稍后重试;如持续异常请联系我们 |
文档反馈