Jev TypeScript 快速上手
Jev 天然契合 TypeScript:你声明想要的形状,就得到类型化的返回。这里是完整路径 —— 安装、key、一个可运行示例,以及三种原语 —— 代码之外没什么要读的。
每个示例都需要一个 jv_live_ key。在 pricing 页领一个,导出为 JEV_API_KEY,就可以开始了。 获取 key →
如果你已经打算从 TypeScript 调用 Jev,你大概想要 TypeScript 在别处给你的同一样东西:一份契约。你声明所需的决策 —— 在这些 key 之间做 choice、在这个刻度上打 score、一个校准过的是/否 —— 就精确地拿回那个形状,绝不会是一段还得解析的散文,也不会是偶尔格式错乱的 JSON。这就是"类型安全"AI 调用的全部卖点,也是 Jev 能嵌进类型化代码库、无需你在裸 LLM 外围写防御式解析的原因。
1. 安装
npm i @typesafe-ai/sdk2. 设置你的 key
在 pricing 页领一个 jv_live_ key,放进你的环境变量。SDK 会自动读取它,所以没有敏感信息落进你的源码。
export TYPESAFE_API_KEY=jv_live_...3. 一个 30 行的可运行示例
一次调用,两个类型化答案 —— 一个可用于路由的 choice,一个可设阈值的校准是/否:
import { TypeSafe } from "@typesafe-ai/sdk";
const client = new TypeSafe(); // reads TYPESAFE_API_KEY
const resp = await client.systemOne({
model: "jev-latest",
state: "Customer: I was charged twice and I am furious.",
questions: {
topic: {
type: "choice",
instructions: "What is the issue about?",
criteria: { billing: "money problems", bug: "broken product" },
},
urgent: {
type: "noul",
instructions: "Escalate to a human now?",
},
},
});
// typed, calibrated — branch on it directly
if (resp.answers.urgent.noul > 0.7) escalate(ticket);
routeTo(resp.answers.topic.choice); // "billing" | "bug"注意:没有输出解析、没有 schema 校验、没有针对坏 JSON 的重试。resp.answers.topic.choice 是你的某个 criteria key,因为模型不可能返回别的;resp.answers.urgent.noul 是 0 到 1 之间的数字。这就是类型契约在起作用。
三种原语
- choice —— 返回你的某个 key,并带每个选项的概率。用于路由和分类。
- score —— 在你定义的有序刻度上返回一个数字,并带分布。用于评估质量、风险、优先级。
- noul —— 一个带概率的校准是/否。用于闸门和检查。
你可以在一次调用里同时问好几个 —— 上面的示例问了两个 —— 每个都独立地类型化返回。这能减少往返:一次请求就能对同一输入完成分类、打分和设闸。
关于校准的说明
Jev 返回的概率是校准过的,意思是在大量调用里,0.8 应当约有 80% 的时间是对的 —— 但校准是整体的性质,不是对任何单个答案的保证。所以请针对你自己的带标注数据设阈值,而不是假定某个原始数字就"足够自信"。托管、固定版本的模型的好处是:一旦你调好了一个阈值,它在多次部署之间会保持有意义,而不会在你脚下漂移。
不想用 SDK?
它就是一次 POST —— 用 fetch 加一个 Bearer key 直接打网关:
const r = await fetch("https://jevtypesafeai.com/api/v1/decide", {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${process.env.JEV_API_KEY}`,
},
body: JSON.stringify({ state, questions }),
});
const { answers } = await r.json();需要批量、现成的 endpoints,或完整字段参考?docs 覆盖了整个接口面。
常见问题
从 TypeScript 用 Jev 需要 TypeSafe SDK 吗?
不需要。SDK 只是一层轻便封装;Jev 就是一次 POST,所以你可以用普通 fetch 加一个 Bearer key 调用它。SDK 只是给你类型化的辅助函数,并从环境变量读取你的 key。
Jev 的输出真的是类型安全的吗?
是的 —— 一个 choice 问题只会返回你定义的某个 criteria key,别的都不会;score 会返回你刻度上的一个数字。模型无法产出无效类型,所以你可以省掉在裸 LLM 外围写的防御式解析。
从 TypeScript 调用 Jev 和调用 LLM 有什么不同?
LLM 返回自由文本(或你必须校验、有时还得重试的 JSON)。Jev 在 70–500ms 内返回一个类型化、校准过的值 —— 一个 key、一个数字或一个概率 —— 所以你能直接对它分支。用 LLM 来写,用 Jev 来决策。
一次 Jev 调用要多少钱?
大约每次决策 $0.001。仅按输入 token 计费,约每百万 $0.42,输出免费 —— 所以在一次调用里问好几个问题很便宜。
我能在一次请求里问多个问题吗?
可以。在 questions map 里放多个条目,每个都会在 resp.answers 里独立类型化返回,这样你只需一次往返。
另见:API 文档与参考 · 如何使用 API · Jev 对比 LLM