文识云

文本检测

AI 文本检测 API

提交一段文本,返回它由 AI 生成的可能性:既可以只要一个整体判定,也可以让模型逐段标注 「人工 / AI / 疑似 AI」并给出每段在原文中的位置。接口是异步的——提交拿到 task_id,再轮询取结果。

最近更新:

请求参数

POST /v1/text/classify,请求头需带 Authorization 与 Idempotency-Key。

字段类型必填说明
textstring是待检测文本,最多 20000 个字符(按 Unicode 字符计,不是字节);提交时剔除首尾空白,中间的空格、换行与标点计入字符数。
is_mergeboolean否是否合并分段。传 false 时逐段返回 segment_labels,用于定位「哪一段是 AI 写的」;传 true 或不传时合并为整体判定(上游默认 true),返回体积更小。

返回字段

任务成功后,result 的结构如下:

字段说明
status上游返回的执行状态,success 表示本次检测有效。
softmax_confidence模型对整篇文本的分类置信度(0~1),判断整体倾向时看它。
ratio_confidence与分段标签占比相关的另一个整体置信度口径,控制台里显示为「分段占比」。
labels_ratio各标签在全文中的占比,键为字符串 "0" / "1" / "2",全部相加为 1。
segment_labels逐段结果数组,仅在 is_merge=false 时有意义。字段见下表。

segment_labels 数组中每一项的字段:

字段说明
text这一段的原文。
label该段标签:0 = 人工、1 = AI、2 = 疑似 AI。
conf该段的置信度(0~1),波形图按它绘制。
order段落序号,从 1 开始。
position[起始位置, 段长],第二项是长度而不是结束下标,按 Unicode 字符计。

文本结果没有 data 字段——那是图片检测的形状。 两者互斥,可以用 segment_labels 是否存在来区分。

调用示例

# 1. 提交检测任务(提交即扣费,务必携带 Idempotency-Key)
#    幂等键任意 <=64 字符的随机串即可。这里读内核提供的 UUID,不用 uuidgen ——
#    它属于 uuid-runtime 包,最小化安装的 Debian/Ubuntu 上默认没有。
#    is_merge=false 让每个段落独立出置信度(分段检测);省略或 true 则合并为整体判定
curl -X POST https://your-domain.com/v1/text/classify \
  -H "Authorization: Bearer sk-zq-你的密钥" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(cat /proc/sys/kernel/random/uuid)" \
  -d '{"text":"这是一段待检测的文本","is_merge":false}'

# 2. 用返回的 task_id 轮询结果(pending / running / succeeded / failed)
curl https://your-domain.com/v1/tasks/<task_id> \
  -H "Authorization: Bearer sk-zq-你的密钥"
响应示例
{
  "code": "ok",
  "data": {
    "task_id": "01J8Z9K3M7X2Q4R6T8V0W1Y5BC",
    "provider": "zhuque-text",
    "status": "succeeded",
    "cost": "0.0600",
    "result": {
      "status": "success",
      "softmax_confidence": 0.9987,
      "ratio_confidence": 0.9821,
      "labels_ratio": { "0": 0.35, "1": 0.65 },
      "segment_labels": [
        {
          "text": "前半段人工撰写的内容",
          "label": 0,
          "conf": 0.0121,
          "order": 1,
          "position": [0, 10]
        },
        {
          "text": "后半段由模型生成的续写",
          "label": 1,
          "conf": 0.9976,
          "order": 2,
          "position": [10, 11]
        }
      ]
    },
    "error_code": null,
    "error_msg": null,
    "latency_ms": 1832,
    "created_at": "2026-10-10T15:32:14+08:00",
    "finished_at": "2026-10-10T15:32:16+08:00"
  }
}

segment_labels[].position 是 [start, length]:第二项是段长(按 Unicode 字符计),不是结束下标。

典型场景

  • 投稿与内容审核初筛。用 is_merge=false 拿到分段结果,把高置信度的段落 连同位置一起交给审核人员,人工只需要看那几段,不必通读全文。
  • AIGC 标识合规。平台需要为「疑似 AI 生成」的内容打标时,可以先跑一次检测拿到判定与依据, 再结合自身规则决定是否加标。
  • 批量文本入库前的过滤。异步任务模型适合并发提交后统一轮询,但受账号每秒提交上限约束, 批量场景请在客户端做限速与退避重试。

更完整的错误码、退款规则与用量上限见 接口文档。

常见问题

is_merge 该怎么选?+

需要知道「哪一段是 AI 写的」就传 false,返回的 segment_labels 会逐段给出标签与置信度,适合定位、标注、逐段改写;只关心「整篇是不是 AI 生成」就传 true 或不传(上游默认 true),返回体积更小。注意语义容易搞反:false 才是分段,true 是合并。

segment_labels 里的 position 怎么理解?+

position 是 [起始位置, 段长],第二项是这一段的长度,不是结束下标。即段落覆盖原文的 [position[0], position[0] + position[1]) 区间。按字符索引计算,与 text 参数的长度口径一致。

softmax_confidence 和 ratio_confidence 有什么区别?+

两者都是上游给出的整体置信度,但口径不同:softmax_confidence 是模型对整篇文本的分类输出;ratio_confidence 与分段标签的占比相关(控制台里把它显示为「分段占比」)。判断整体倾向时看 softmax_confidence,需要与分段结果对齐时看 ratio_confidence——两者明显不一致,通常说明文本里人工与 AI 内容混杂。上游没有公开这两个值的计算细节,本站原样透传,请以返回值本身为准,不要把它们当作精确的统计公式。

text 的长度上限是多少?超了怎么办?+

单次最多 20000 个字符,按 Unicode 字符计(不是字节),超出直接返回 400。更长的文本需要自行切分后分批提交,每一批都是一次独立计费与扣费——切分时尽量按段落边界切,避免把一句话截成两半影响判定。

labels_ratio 里的数字标签代表什么?+

标签是三分类:0 = 人工、1 = AI、2 = 疑似 AI,取值是各标签在全文中的占比,全部相加为 1。含义与 segment_labels 里每段的 label 字段一致。注意键是字符串,且**实际返回哪几个键取决于这次检测出现了哪些标签**——不要假设一定有 2,也不要假设只有两个键,遍历取值即可。

相关页面

注册即赠体验金,先把全流程跑通再充值

AI 文本检测 API · 文识云