Skip to content

API 参考

地址:http://127.0.0.1:8000。使用 JSON。如已设置 OPENJEV_API_KEY,访问 /v1/* 需携带 Authorization: Bearer YOUR_KEY

POST /v1/systemone

字段类型含义
model字符串jev-latestopenjev-latest 或当前模型 ID,默认 jev-latest
state字符串、对象或数组待评估的共同上下文
questions对象1–64 个命名问题
images字符串数组扩展字段,最多 8 张 PNG/JPEG/WebP data URL

支持普通 JSON、聊天消息数组,以及只有一个 messages 字段的对象。聊天内容支持文字及 OpenAI 风格的 text / image_url 部件。如果对象在 messages 之外还有字段,会完整保留为 JSON,避免丢失业务信息。

instructions 和标准描述支持字符串、对象、数组。问题 ID 只用于关联响应,不传给模型;Choice 选项键也不会展示给模型,描述为 null 时例外,此时使用键作为含义。

Noul:成立概率

json
{
  "type": "noul",
  "instructions": "用户是否要求退款?",
  "criteria": { "true": "提出了退款要求", "false": "没有退款要求" }
}

criteria 可省略,默认为 Yes / No。响应:

ts
{ type: "noul"; noul: number } // true 对应的概率,范围 0–1

接近 0.5 表示两种判断相近,不表示“中等强度”。

Choice:选项与完整分布

json
{
  "type": "choice",
  "instructions": "应交给哪个团队?",
  "criteria": {
    "billing": { "负责": ["支付", "退款"] },
    "technical": "软件故障",
    "other": null
  }
}

提供 2–255 个选项。

ts
{
  type: "choice";
  choice: string; // 原始选项键
  probabilities: Record<string, number>; // 包含所有选项,总和为 1
  confidence: number; // 0–1
}

Score:评分等级的期望值

json
{
  "type": "score",
  "instructions": "此请求有多紧急?",
  "criteria": ["常规", "紧急", "严重事故"]
}

提供 2–64 个从低到高的等级,索引从 0 开始。

ts
{
  type: "score";
  score: number; // sum(等级索引 × 概率),范围 0 到等级数减 1
  legend: Record<string, string>;
  probabilities: Record<string, number>;
  confidence: number;
}

结构化等级描述在 legend 中序列化为 JSON 字符串。

响应与用量

ts
{
  model: string; // 请求使用的别名或 ID
  answers: Record<string, NoulAnswer | ChoiceAnswer | ScoreAnswer>;
  usage: { input_tokens: number; output_tokens: number };
  timing?: {                // OpenJev 扩展字段,单位毫秒
    processing_ms: number;  // 服务器从收到请求到结果就绪
    parse_ms: number;       // 读取、解析并校验请求
    prepare_ms: number;     // 整理 state、处理图片、编译提示
    queue_ms: number;       // 等待推理槽位
    inference_ms: number;   // 共享前缀预填充与逐题读数
  };
}

输入用量是各问题的完整后端提示 token 数之和,包含图片与缓存 token;输出用量等于问题数。这不是 TypeSafe 的计费单位。

timing 让你无需在客户端埋点即可查看服务端耗时:processing_ms 从 API 收到请求起算,到响应就绪为止,不含网络传输;各阶段之和与它的差距不到 1 毫秒。modelanswersusage 仍与 Jev 完全一致:官方 Python SDK 以 extra="ignore" 解析响应,JavaScript SDK 直接返回解析后的 JSON,二者都会忽略这个扩展字段。如果客户端会拒绝未知字段,设置 OPENJEV_RESPONSE_TIMING=false 即可,下列响应头仍提供相同数据。

响应头含义
x-typesafe-request-id唯一请求 ID
x-openjev-model实际后端模型
x-openjev-cached-tokens后端报告的复用 token 数
x-openjev-processing-ms服务端处理耗时;所有 /v1/* 错误响应也会返回
x-openjev-elapsed-ms评估耗时:从整理 state 到最后一次读数
Server-Timingparsepreparequeueinferencetotal,以及 llama.cpp 报告的模型计算时间 compute

浏览器开发者工具的 Timing 面板会直接显示 Server-Timing

概率以给定候选为条件。confidence = 1 − H(p)/log(n) 衡量分布集中度,不是校准后的正确率保证。

发现与健康检查

路径用途
GET /v1/modelsTypeSafe 与 OpenAI 风格模型目录
GET /v1/limits当前部署限制
GET /health检查推理后端并返回后端名称、模型、权重文件与版本;不可用时返回 503
GET /health/liveAPI 进程存活
GET /docs交互文档
GET /openapi.jsonOpenAPI schema
GET /playground本地文字与图片演示

默认上限:16 MiB 请求体、每个分支含输出 8,192 个估算 token、总输入 131,072 token、8 张图、每图解码后 2,000 万像素、缩放最长边 1,024 像素、总超时 120 秒。图片 token 准入采用保守估算,后端也会检查实际上下文。

错误

json
{ "error": { "message": "可读的错误说明" } }
状态码含义
401密钥缺失或无效
413请求或解码图片过大
422格式、模型、图片、模态或 token 限制错误
502概率不完整或后端不兼容
503后端不可用
504总超时
529排队已满,按 Retry-After 重试

校验错误会包含字段位置,不回显私密输入。

开放模型 · 本地推理 · 实测数据