API 审核接口文档

September 20, 2026 · View on GitHub

本服务提供无鉴权的通用型 AI 内容审核接口,由 Jev System One 模型驱动。默认监听 localhost:8080,可配置为 HTTPS。

通用约定

项目说明
基地址http://localhost:8080,配置证书后为 https://localhost:8080
数据格式请求与响应均为 application/json
字符编码UTF-8
鉴权无,API 密钥由调用方携带或由服务端配置

密钥来源策略

密钥来源由 keySource 决定,可经请求体字段 keySource 或请求头 X-Jev-Key-Source 指定,取值不合法时回退为服务端默认值(环境变量 KEY_SOURCE,默认 auto)。

取值行为
auto优先使用调用方携带的密钥,缺失时回退服务端密钥
client仅使用调用方携带的密钥,缺失即报错
server仅使用服务端密钥,忽略调用方携带的密钥

调用方携带的密钥按以下优先级读取,命中即止:

  1. 请求头 X-Jev-Api-Key
  2. 请求头 Authorization: Bearer <API_KEY>
  3. 请求体字段 apiKey

服务端密钥来自环境变量 JEV_API_KEYTYPESAFE_API_KEY

clientserver 两种策略下密钥缺失的报错语义不同:前者返回 401 missing_api_key,属于调用方问题;后者返回 500 server_key_missing,属于服务端配置问题。

传输安全

API 密钥随请求传输,明文通道下存在泄漏风险,因此:

  • 服务端可配置 HTTPS_KEY_PATHHTTPS_CERT_PATH 启用 HTTPS 监听,两者同时配置时生效
  • 环境变量 REQUIRE_HTTPS 置为 true 时,服务拒绝一切非加密请求并返回 403 https_required,回环来源同样不放行
  • 经反向代理终止 TLS 时,服务依据 X-Forwarded-Proto 判断请求是否加密;此时应确保服务不直接暴露,仅由受控代理访问,否则该请求头可被伪造
  • 前端测试壳访问本地服务时固定使用 HTTPS,并在检测到明文地址时直接拒绝发送

判定说明

审核结果为三路判定之一:

判定值含义触发条件
pass自动通过违规综合分低于复审阈值且置信度达标
review转人工复审违规综合度达到复审阈值,或关键维度置信度低于下限
block拦截违规综合分达到拦截阈值

GET /health

健康检查与运行信息。

响应示例

{
  "status": "ok",
  "project": "Jev-Examiner",
  "author": "JularDepick",
  "serverKeyConfigured": false,
  "keySource": "auto",
  "requireHttps": false,
  "secure": false,
  "defaultModel": "jev-latest",
  "upstream": "https://api.typesafe.ai/v1/systemone",
  "presets": ["general", "campus"],
  "thresholds": { "block": 0.7, "review": 0.35, "minConfidence": 0.55 }
}

keySource 为服务端默认来源策略,requireHttps 为是否强制加密,secure 为当前请求是否经加密通道到达。


GET /presets

列出内置场景预设及其完整问题集与权重表。

响应示例

{
  "presets": [
    {
      "id": "general",
      "name": "通用内容审核",
      "description": "面向通用型 AI 内容审核",
      "questions": { "category": { "type": "choice" } },
      "weights": { "severity": 0.34 }
    }
  ]
}

POST /audit

对单条内容执行审核。

请求字段

字段类型必填说明
contentstring 或 object待审核内容
presetstring场景预设,取值 generalcampus,默认 general
questionsobject自定义问题集,传入后覆盖预设
weightsobject自定义权重表,传入后覆盖预设
thresholdsobject自定义阈值,含 block review minConfidence
modelstring模型标识,默认 jev-latest
apiKeystring调用方自带的 Jev API 密钥
keySourcestring密钥来源策略,取值 auto client server
includeAnswersboolean是否在响应中附带官方原始答案,默认 true

请求示例

curl -X POST https://localhost:8080/audit \
  -H "Content-Type: application/json" \
  -H "X-Jev-Api-Key: <API_KEY>" \
  -H "X-Jev-Key-Source: client" \
  -d '{"content":"有偿代课,周三高数课需要替点名","preset":"campus"}'

响应示例

{
  "verdict": "block",
  "verdictLabel": "拦截",
  "violationScore": 0.941,
  "confidence": 0.9,
  "category": "course_taking",
  "tags": ["severity", "is_academic_misconduct", "is_illegal"],
  "dimensions": {
    "severity": { "type": "score", "normalized": 0.9667, "confidence": 0.9, "weight": 0.3 },
    "is_academic_misconduct": { "type": "noul", "normalized": 0.93, "confidence": null, "weight": 0.22 }
  },
  "thresholds": { "block": 0.7, "review": 0.35, "minConfidence": 0.55 },
  "preset": "campus",
  "model": "jev-1.13.0",
  "usage": { "input_tokens": 412, "output_tokens": 58 }
}

POST /audit/batch

批量审核,内部并发执行,单次上限 20 条。

请求字段

字段类型必填说明
itemsarray待审内容数组,元素为字符串或含 content 字段的对象
其余字段-/audit 一致,作用于全部条目

响应示例

{
  "total": 2,
  "summary": { "pass": 1, "review": 0, "block": 1, "failed": 0 },
  "results": [
    { "ok": true, "audit": { "verdict": "pass" } },
    { "ok": true, "audit": { "verdict": "block" } }
  ]
}

单条失败不影响其余条目,失败项以 {"ok": false, "error": {...}} 形式返回。


POST /models

查询账号可用的 Jev 模型列表,直接透传官方 GET /v1/models 结果。

请求字段

字段类型必填说明
apiKeystringAPI 密钥,亦可经请求头传递
keySourcestring密钥来源策略

POST /raw

通用透传接口,直接向 Jev 提交 statequestions,不做任何审核封装。适用于调试自定义问题集。

请求字段

字段类型必填说明
statestring 或 object 或 array待评测内容
questionsobject问题集合
modelstring模型标识
apiKeystringAPI 密钥
keySourcestring密钥来源策略

错误响应

所有错误统一返回如下结构:

{
  "error": {
    "code": "unauthorized",
    "message": "Jev API 密钥无效或缺失",
    "detail": "上游原始错误信息"
  }
}

状态码对照

状态码错误码说明
400missing_content缺少 content 字段
400missing_items缺少 items 字段或数组为空
400invalid_json请求体不是合法 JSON
400unknown_preset场景预设不存在
401missing_api_key密钥来源为 clientauto 时未提供任何密钥
401unauthorizedAPI 密钥无效
403https_required服务已强制 HTTPS,请求未加密
404not_found路径不存在
405method_not_allowed请求方法不被支持
413payload_too_large请求体超过 5 MB
429rate_limited超出 Jev 速率限制
500server_key_missing密钥来源为 server 但服务端未配置密钥
502upstream_unreachable无法连接 Jev 服务
504upstream_timeout上游请求超时
529overloadedJev 服务暂时过载

429529,服务端已内置指数退避重试,并优先遵循上游 retry-after 响应头。


环境变量

变量默认值说明
HOSTlocalhost监听地址
PORT8080监听端口
JEV_API_KEY服务端持有的 Jev API 密钥
TYPESAFE_API_KEY上者的备用变量名
KEY_SOURCEauto默认密钥来源策略
HTTPS_KEY_PATHTLS 私钥路径,与证书同时配置才启用 HTTPS
HTTPS_CERT_PATHTLS 证书路径
REQUIRE_HTTPSfalse置为 true 时拒绝非加密请求
JEV_API_BASE_URLhttps://api.typesafe.ai上游基地址
JEV_MODELjev-latest默认模型标识
UPSTREAM_TIMEOUT_MS30000上游请求超时
UPSTREAM_MAX_RETRY2上游失败重试次数
MAX_TEXT_LENGTH32000单条文本长度上限
MAX_BATCH_ITEMS20单次批量条目上限

启用 HTTPS 的启动示例

HTTPS_KEY_PATH=./key.pem HTTPS_CERT_PATH=./cert.pem REQUIRE_HTTPS=true node src/api/app.js