[AIask]新增支持 Jev 模型,另有赛博鸡蛋自动发放。
请先注册: https://aiask.me/
使用方法:AIask.me 网站后台 -> API 密钥 -> 创建密钥 -> 名称自定义,类型选:OpenAi ,分组选:JEV 模型
费用(目前):$0.063 / 1M 输入 token ,输出免费
一、curl 示例
curl https://aiask.me/v1/systemone \
-H "Authorization: Bearer sk-你的 key" \
-H "Content-Type: application/json" \
-d '{
"state": {"message": "导出按钮在 Safari 上会让设置页崩溃,Chrome 正常。", "source": "support_ticket"},
"model": "jev-latest",
"questions": {
"is_bug": {
"type": "noul",
"instructions": "这是不是一个软件缺陷报告?"
},
"team": {
"type": "choice",
"instructions": "该分给哪个团队?",
"criteria": {"frontend": "UI 、浏览器兼容性", "backend": "API 、数据库", "infra": "部署、可用性"}
},
"severity": {
"type": "score",
"instructions": "严重程度?",
"criteria": ["仅外观问题", "功能受损但有变通办法", "阻塞且无变通办法"]
}
}
}'
二、JEV 是什么
TypeSafe System One 不是聊天模型,是结构化判断模型。你给它一段素材( state )和若干道题( questions ),它一次性返回每道题的概率化答案,没有自由文本、没有流式输出、没有 tool call 。
典型用途:工单分类、内容审核、RAG 段落筛选、LLM 输出兜底校验、意图路由、置信度分流。
与 OpenAI 协议的区别一览:
|
OpenAI Chat/Responses |
TypeSafe System One |
|---|
端点 |
/v1/chat/completions、/v1/responses |
/v1/systemone |
输入 |
messages |
state + questions |
输出 |
文本 / tool call |
每题一个概率化答案 |
流式 |
支持 |
不支持 |
计费 |
输入 + 输出 |
只算输入 token ,输出免费 |
三、端点与鉴权
POST https://aiask.me/v1/systemone
Authorization: Bearer sk-你的-aiask-key
Content-Type: application/json
四、请求结构
{
"state": "客户说运动鞋尺码发错了,想换成 10 码。",
"model": "jev-latest",
"questions": {
"自定义题目 key": { "type": "noul|choice|score", "instructions": "...", "criteria": ... }
}
}
三个字段都必填。questions 的 key 由你自己定义,响应会用同样的 key 返回答案 —— 这就是"结构化"的来源,不需要解析自由文本。
state 接受三种形态 **[官方文档]**:
"state": "我的卡被扣了两次款。" // 字符串:单段文本
"state": {"message": "我的卡被扣了两次款。", "order_id": "A-104"} // 对象:带字段名的记录(推荐)
"state": ["你好", "我的客户号是 TS1337 。", "卡被扣了两次款。"] // 数组:消息序列
只接受文本,不支持图片 / 音频 / 视频。英文准确率最高,中文等其它语言支持但准确率会下降 [官方文档] —— 中文业务场景建议先小批量实测再上量。
原则:state 放事实和素材,questions 放要做的判断。两者不要混着写。
五、三种题型
1. noul —— 是非题,返回"是"的概率
{
"type": "noul",
"instructions": "客户是不是在要求转人工?",
"criteria": {
"true": "提到了之前的工单、尝试过联系、或说'我问过了'",
"false": "没有任何过往联系的迹象"
}
}
criteria 可选,只有 true / false 两个描述字段。返回:
{ "type": "noul", "noul": 0.93 }
noul 是 0~1 的概率值,表示"是"的可能性。注意 0.5 表示两种可能性各半,不是"中等程度"。noul 答案不带 confidence 字段。
2. choice —— 单选题,返回选项 + 完整概率分布
{
"type": "choice",
"instructions": "这条工单应该归哪个部门?",
"criteria": {
"returns": "换货、退款、错发或破损",
"shipping": "物流状态、延迟、丢件",
"billing": "扣费、发票、支付问题"
}
}
criteria 是对象/映射(不是数组):key 是选项名,value 是选项描述。描述可以写 null(选项名本身够清楚时)。最多 255 个选项 **[官方文档]**。返回:
{
"type": "choice",
"choice": "returns",
"confidence": 0.88,
"probabilities": { "returns": 0.88, "shipping": 0.09, "billing": 0.03 }
}
choice 是概率最高的那个,probabilities 全部选项加起来等于 1.0 。
3. score —— 打分题,返回有序量表上的位置
{
"type": "score",
"instructions": "这个 bug 有多严重?",
"criteria": [
"仅影响外观,功能正常",
"功能受损或降级,但有变通办法",
"阻塞性问题,无变通办法"
]
}
criteria 是数组(注意和 choice 不同),2~10 个等级,从低到高排列 **[官方文档]**。返回:
{
"type": "score",
"score": 1.3,
"confidence": 0.54,
"legend": { "0": "仅影响外观,功能正常", "1": "功能受损或降级,但有变通办法", "2": "阻塞性问题,无变通办法" },
"probabilities": { "0": 0.0, "1": 0.7, "2": 0.3 }
}
score 不是整数,是各等级编号的概率加权平均(上例 1×0.7 + 2×0.3 = 1.3 )。legend 是等级编号到描述的映射。
写 criteria 的要点 **[官方文档]**:等级描述要写得可对照素材("功能受损但有变通办法"),不要写抽象词("中等严重")。一道题只评一个维度,多维度拆成多道题然后在自己代码里加权。
选型速查
答案形态 |
用哪个 |
关键返回字段 |
|---|
是 / 否 |
noul |
noul( 0~1 概率) |
一组固定选项里挑一个(无序) |
choice |
choice + probabilities + confidence |
有序量表上的位置(严重度、满意度、成熟度) |
score |
score + legend + probabilities + confidence |
六、完整响应
{
"model": "jev-1.13.0",
"answers": {
"题目 key1": { ... },
"题目 key2": { ... }
},
"usage": { "input_tokens": 360, "output_tokens": 39 }
}
一次请求可以问多道题,共用同一份 state 。这是省钱的关键:state 只计费一次,加题几乎不增加输入 token 。能合并就别拆成多次请求。
七、confidence 怎么用
confidence( 0~1 )由 probabilities 的集中程度算出来,只有 choice 和 score 有 **[官方文档]**。分布越集中越高,1.0 表示概率全压在一个结果上。
官方建议的三档分流 **[官方文档]**:
区间 |
处理方式 |
|---|
高 |
直接自动执行 |
中 |
谨慎处理 —— 让用户确认、标记待审、或补充数据再判 |
低 |
不要执行 —— 转人工、要求澄清、或走其它系统 |
具体阈值要按业务定:官方示例用 0.5 作为兜底底线(低于此一律转人工),**破坏性操作要求 0.9+**,只读操作可以放宽。阈值要拿自己的数据实测后再调,别直接抄。
八、官方 SDK 接入
官方 SDK 可以直接用,只需把 base URL 指到 aiask.me 、key 换成本站 key,其余代码不用动。
Python
from typesafe_sdk import TypeSafeClient, Noul, Choice, Score
client = TypeSafeClient(
api_key="sk-你的 aiask-key",
base_url="https://aiask.me", # 默认是 https://api.typesafe.ai
model="jev-latest",
)
with client:
resp = client.system_one(
state="导出按钮在 Safari 上会让设置页崩溃。",
questions={
"team": Choice(
instructions="该分给哪个团队?",
criteria={"frontend": "UI 、浏览器兼容性", "backend": "API 、数据库"},
),
"severity": Score(
instructions="严重程度?",
criteria=["仅外观问题", "功能受损但有变通办法", "阻塞且无变通办法"],
),
},
)
print(resp.answers["team"].choice, resp.answers["team"].confidence)
- 环境变量走
TYPESAFE_API_KEY 和 TYPESAFE_BASE_URL(把后者设成 https://aiask.me 即可,代码零改动)
- 异步用
AsyncTypeSafeClient + async with,await client.system_one(...)
- 重试超时:
RetryPolicy(max_retries=3, backoff_max=0.2, timeout=1.0),可挂在 client 上也可以单次调用传
- 不想用
Noul() / Choice() 这些辅助类,也可以直接传原始字典:{"billing": {"type": "noul", "instructions": "关于账单吗?"}}
JavaScript / TypeScript
npm install @typesafe-ai/sdk # 需要 Node.js 20+
import { TypeSafeClient, choice } from "@typesafe-ai/sdk";
const client = new TypeSafeClient({
apiKey: "sk-你的 aiask-key",
baseURL: "https://aiask.me", // 默认 https://api.typesafe.ai
defaultModel: "jev-latest",
timeout: 10000, // 单次尝试超时,毫秒
});
const resp = await client.systemOne({
state: { document: "我被重复扣款了,请尽快处理。" },
questions: {
category: choice("这条工单是关于什么的?", { billing: null, technical: null, other: null }),
},
});
console.log(resp.answers.category.choice);
TypeSafeClientConfig 全部可选项 [官方文档]:apiKey、baseURL、defaultModel(默认 jev-latest)、timeout(默认 10000ms )、retry、defaultHeaders、fetch、logger、logLevel(默认 warn)、dangerouslyAllowBrowser(默认 false ,别开,会把 key 暴露给页面用户)。
注意:base_url / baseURL 填站点根地址 https://aiask.me 就行,SDK 自己会拼 /v1/systemone。别填成 https://aiask.me/v1/systemone。
九、限制
项目 |
限制 |
来源 |
|---|
单请求总上下文 |
64k token ( state + 所有题目合计) |
[官方文档] |
state + 最长的那道题 |
32k token |
[官方文档] |
choice 选项数 |
最多 255 |
[官方文档] |
score 等级数 |
2 ~ 10 |
[官方文档] |
上游吞吐 |
250,000 token/秒; 1,200 请求/分钟 |
[官方文档] |
流式 |
不支持 |
[已实测] |
输入模态 |
纯文本 |
[官方文档] |
官方说明速率限制会因需求波动动态调整,可能不另行通知。本站还叠加自己的分组并发、RPM 、配额限制。
十、错误码与排错
状态码 |
含义 |
怎么办 |
|---|
401 |
key 无效 / 缺失 [已实测] |
检查 Authorization: Bearer sk-... |
403 |
权限不足 |
key 状态、IP 白名单 |
404 |
key 的分组不是 OpenAI 平台 [已实测] |
后台把 key 换到 OpenAI 平台分组 |
422 |
请求校验失败 [已实测] |
见下方三种常见情况 |
429 |
限流 |
指数退避重试 [官方文档] |
5xx / 529 |
上游过载 [官方文档] |
指数退避重试;本站会先尝试切换账号 |
422 的三种常见原因 **[已实测]**:
- body 不是合法 JSON ,或为空
model 不是 jev-*(比如误传 gpt-5.4)—— 报 model must be a jev model (e.g. jev-latest)
- 缺
questions,或 questions 不是对象 —— 报 questions is required
排错顺序建议:
- 先
GET /v1/models 确认 key 能看到 jev 模型 —— 看不到说明分组白名单或平台不对
- 后台 → 账号管理 → 对应账号点"测试连接",模型选
jev-latest,会直接打上游 /v1/systemone 并回显 model / noul / usage [已实测]
- 后台 → 使用记录,确认
inbound_endpoint 和 upstream_endpoint 都是 /v1/systemone