所有集成集成 · SDK

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/sdk

2. 设置你的 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 之间的数字。这就是类型契约在起作用。

三种原语

你可以在一次调用里同时问好几个 —— 上面的示例问了两个 —— 每个都独立地类型化返回。这能减少往返:一次请求就能对同一输入完成分类、打分和设闸。

关于校准的说明

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

接入前先试试 Jev

在浏览器里跑一次真实、类型化的决策 —— 免费、无需注册 —— 然后把你的 key 填进上面的示例。

▶ 免费试用 Jev获取 API key →
Jev TypeScript 快速上手 —— 30 行内完成类型化决策 · Jev by TypeSafe AI