简短回答: jev-1.13 不生成文本。你需要向 https://aihubmix.com/v1/systemone 发送一段文本以及一组命名问题,然后得到按你的问题名称返回的带类型答案,可能是一个类别、一个分数或一个概率。无需解析。下面是一个可用的请求示例、完整的响应格式,以及一个会悄悄降低准确率的设计错误。
Jev 的用途
当你需要的是判断,而不是一段文字时就可以使用它,例如为支持工单分派、评估严重程度、标记紧急程度或做内容门控。模型页面明确写道:"无文本生成,无需解析。"
如果你需要解释、摘要或任何自由格式的输出,请改用普通的聊天模型。jev 无法生成这些内容。
开始之前
- [ ] 已安装 Python 3(标准库即可满足需求)
- [ ] 一个 AiHubMix 账户和 API 密钥
- [ ] 将密钥导出为
AIHUBMIX_API_KEY,切勿硬编码在源代码中
你不需要OpenAI SDK、LangChain 或 requests 包。
第 1 步:了解端点
POST https://aihubmix.com/v1/systemone
Authorization: Bearer YOUR_KEY
Content-Type: application/json
这是一个特定于模型的路由,不是/v1/chat/completions。兼容 OpenAI 的客户端无法调用它,请使用普通 HTTP。
第 2 步:选择问题类型
共有三种类型,你可以在同一个请求中自由组合:
| 类型 | 用途 | 你需要提供 |
|---|---|---|
choice | 选择单一类别 | 字典形式的 criteria :标签 → 定义 |
score | 有序量表评分 | 列表形式的 criteria ,从最低到最高排列 |
noul | 是/否判断 | 无需其他内容,只需 instructions |
第 3 步:构建请求
state 是待判断的文本。questions 的键是你自定义的名称,响应中会使用相同的名称。
payload = {
"model": "jev-1.13",
"state": "Hi, I have been trying to connect my Stripe account for 3 days "
"and it keeps failing. I am losing sales. Please help ASAP.",
"questions": {
"department": {
"type": "choice",
"instructions": "Which team should handle this",
"criteria": {
"billing": "Payment or subscription issues",
"technical": "Bugs or integration problems",
"sales": "Pricing or account questions",
},
},
"frustration": {
"type": "score",
"instructions": "How frustrated the customer appears",
"criteria": [
"Calm, just stating facts",
"Frustrated but civil",
"Very angry, strong language",
],
},
"is_urgent": {
"type": "noul",
"instructions": "The message conveys urgency or time-sensitivity",
},
},
}
第 4 步:使用标准库发送请求
import json, os, urllib.error, urllib.request
def ask(payload):
req = urllib.request.Request(
"https://aihubmix.com/v1/systemone",
data=json.dumps(payload).encode(),
headers={"Authorization": "Bearer " + os.environ["AIHUBMIX_API_KEY"],
"Content-Type": "application/json"},
method="POST",
)
try:
with urllib.request.urlopen(req, timeout=60) as r:
return json.loads(r.read())
except urllib.error.HTTPError as e:
raise SystemExit(f"HTTP {e.code}: {e.read().decode(errors='replace')[:500]}")
将请求的构造放在函数内部。如果在模块层级直接构建并发送,导入该文件时就会重新触发调用并消耗令牌。
第 5 步:读取答案
每个答案的值都存储在与其 type 对应的键下,因此一个访问器即可处理全部三种类型:
data = ask(payload)
for name, ans in data["answers"].items():
kind = ans["type"]
print(name, kind, ans[kind], ans.get("confidence"))
print("usage:", data.get("usage"))
已验证的输出:
department choice billing 0.51
frustration score 1 1
is_urgent noul 1 None
usage: {'input_tokens': 424, 'output_tokens': 73}
第 6 步:理解完整的响应结构
打印循环隐藏了一些有用的字段。下面是一个 score 答案的原始 JSON:
{
"type": "score",
"score": 1,
"legend": {"0": "Calm, just stating facts", "1": "Frustrated but civil", "2": "Very angry, strong language"},
"probabilities": {"0": 0, "1": 1, "2": 0},
"confidence": 1
}
legend将索引映射回你自己的表述。整数本身即具有自描述性,因此你的代码中无需查找表。probabilities给出完整的概率分布,有助于发现接近并列的情况。noul没有confidence字段。 它的概率就是判断信号。
顶层还会返回 usage、id、provider(TypeSafe),以及解析后的后端版本 typesafe/jev-1.13-20260917。
影响准确率的错误
在上述请求中,department 返回了 billing,置信度为 0.51。重复相同的请求,返回了相同的标签,但置信度为 0.38 ——答案是稳定的,而所声明的确定性并不稳定。
问题出在 criteria 上,而不是模型。billing 的定义是“付款或订阅问题”,technical 的定义是“漏洞或集成问题”。一个集成 且持续失败的 Stripe 问题确实同时符合两者。模型只是在反映写入模式中的歧义。
投入生产前的两条规则:
- 编写
choice类型的 criteria 时应保证互斥。如果人在两个标签之间会犹豫,模型也会犹豫。 - 设定一个置信度阈值,并将低置信度的结果转交人工队列处理,而不是直接接受为最终决定。一个坦承不确定性的模型,比一个隐藏不确定性的模型更有价值。
上线前检查清单
- [ ] 密钥从环境变量或版本控制系统忽略的
600权限文件中加载 - [ ] 已检查
choice类型 criteria 是否存在重叠 - [ ] 已定义置信度阈值,并为低于阈值的情况设置备用流程
- [ ]
noul类型的答案单独处理,因为它们不带confidence - [ ] 已移除未使用的问题(3 个问题消耗 424 个输入令牌;2 个问题消耗 355 个)
- [ ] 非 2xx 响应及其原始内容已记录日志
常见问题
可以使用 OpenAI SDK 吗?不可以。 /v1/systemone 不是兼容 OpenAI 的路由。
jev 能返回句子或摘要吗?不能。它只回答你定义的带类型问题。
每个请求可以包含多少个问题?已验证的测试使用了两个和三个问题。每个问题都会增加输入和输出令牌,因此只保留你会据此采取行动的问题。
有版本别名吗?模型页面列出了 jev-latest 别名,与 jev-1.13 并列。如果可复现性很重要,请固定明确的版本号。
费用是多少?模型页面公布的价格为输入令牌 $0.0462 / M,输出令牌 $0 / M。这些是供应商提供的数字,编制预算前请确认当前定价。
上下文窗口是多少?模型页面的信息不一致:页眉写的是 64K,供应商表格中写的是 32K。请用你自己最长的输入进行验证后再依赖任何一个数值。
本指南的范围
以上所有内容均通过对同一输入进行三次实际调用验证。它不涵盖延迟、批处理、吞吐量,也不涵盖与示例不同的输入上的表现。置信度漂移是一个复现的观察结果,而不是测得的错误率,设置阈值前请在你自己的数据上重复验证。
在 AiHubMix 上开始使用
jev-1.13 可通过 AiHubMix 使用,模型页面包含本教程所引用的全部内容:/v1/systemone 端点、三种问题类型及其 criteria 格式、完整的响应字段,以及公布的价格:输入令牌 $0.0462 / M,输出令牌 $0 / M。jev-latest 别名会指向最新版本,因此随版本更新它会保持最新。
从这里开始: https://aihubmix.com/model/jev-latest
后续步骤:
- 创建 AiHubMix 账户并生成 API 密钥
- 复制第 3 步中的请求以及第 4 步中的
ask()函数 - 用你自己队列中的真实记录替换
state - 将结果与你目前对该记录的分类方式进行比较
如果本指南对你有帮助,欢迎订阅,获取更多关于结构化输出模型和分类流水线的文章。



