Guides / 视频转图文攻略

Jev API 实战示例:第一条 curl、载荷结构与三种问题类型

一页集齐可复制的 Jev API 示例:官方 Sample cURL 命令、state + questions 载荷、三种问题类型合并一次调用,以及直接从真实终端输出里读类型化答案。事实另行对照 azamsharp 的 28 分钟 API 入门视频交叉核验。

速览结论

本页所有示例都打同一个端点:POST https://api.typesafe.ai/v1/systemone,鉴权用 Authorization: Bearer $TYPESAFE_API_KEY,再加 Content-Type: application/json。载荷三件套:state(待判断的文本)、model(“jev-latest”)、questions——每个问题声明自己的类型:noul 出 yes/no 概率,choice 从带描述的选项里挑,score 在带描述的刻度上定位。演示把三种类型叠进一次调用——is_refund_request、urgency_rating、department_routing——两轮运行讲清全部行为:state 为 “i cannot open” 时返回 noul 0.1、score 0.93、choice technical;换成 “i need refund ASAP” 立刻跳到 noul 0.98、score 1.39(概率 0.6 Medium / 0.4 High)、choice billing 且置信度 1.0。每次调用在模型 jev-1.13.0 上花约 442 输入 / 75 输出 token,而创作者跑了一周的 Usage 面板总共只花了 $0.0008。事实另行对照 azamsharp 的 28 分钟教程《Getting Started with JEV: API Keys, HTTP Requests, JavaScript & Python SDKs》交叉核验——那支视频补充了两个细节:新账号带约 $5 月度额度,密钥明文只在创建时展示一次。

视频来源

United Top Tech

12:04S5fTMSk_2Es

分步图文攻略

  1. 1

    先建 API key——没 key,什么都调不了

    一切从 console.typesafe.ai 的 API Keys 页开始,点 Create key。控制台把每把密钥列成一行:名字、Active 状态、打码后的密文(视频里是 apikey_228c…a2c0)和创建日期,底部还注明 key 是组织级(organization-scoped)的——就算创建人被移除,key 依然有效。点按钮前先记两件事:密钥明文只在创建那一刻展示一次,立刻存进安全的地方;新账号自带约 $5 的月度额度,按 Jev 的价格这能换非常多次决策。同一个面板的 Usage 标签页能看到每个 key 的花费、token 和请求数,调阈值时盯着它。

    TypeSafe 控制台 API Keys 页面:列表里一把 Active 状态的密钥打码为 apikey_228c,右上角是 Create key 按钮。
    一把组织级密钥,只展示一次——创建时立刻保存。跳转至 0:54
  2. 2

    抄下官方 Sample cURL,在终端里发出第一个请求

    快速开始文档的「Call it: the API」一节把整个接口契约摆在一屏里:POST https://api.typesafe.ai/v1/systemone,Authorization: Bearer <API_KEY> 头,Content-Type: application/json,外加一条现成的 Sample cURL command——从 $TYPESAFE_API_KEY 环境变量里读密钥,JSON 体用 heredoc 灌进去。最小载荷只有三个键:state(待判断的文本,这里是「Hi, I’ve been trying to connect my Stripe account for 3 days…」)、model(“jev-latest”)、questions——先只放一个问题 urgency,type 填 “noul”,instruction 是「Does this message express urgency?」。整条命令贴进任何终端、换上你的 key,第一个 Jev 答案就回来了。这就是纯 HTTP,curl、Postman 或任何 HTTP 客户端都能发——没有官方 SDK 的语言也走这条路。

    TypeSafe 快速开始文档里的 Sample cURL command:用 heredoc 向 api.typesafe.ai/v1/systemone 发 JSON,Bearer 头引用 TYPESAFE_API_KEY。
    端点加两个头加三键载荷——请求的全部要素。跳转至 1:12
  3. 3

    读懂请求体:一个 state,一张类型化问题表

    文档的完整 Request body 示例演示了载荷怎么扩展。state 仍是一段待判断的文本;questions 是一张映射表,你定义的每个键都会变成一条答案。每个问题声明 type 加 instructions,criteria 的形状跟着 type 走:department 是 choice,criteria 是对象——billing「Payment or subscription issues」、technical「Bugs or integration problems」、sales「Pricing or account questions」;frustration 是 score,criteria 是有序数组——「Calm, just stating facts」「Frustrated but civil」「Very angry, strong language」,因为 score 返回的就是在这条刻度上的位置;is_urgent 是 noul,只有一句 instruction「The message conveys urgency or time-sensitivity」。instructions 和 criteria 的描述要认真写——它们就是模型对照的评分标准,而所有问题在同一次调用里独立评估。

    TypeSafe 文档的 Request body 示例:一条 Stripe 投诉作 state,配 department choice、frustration score、is_urgent noul 三个问题。
    choice 的 criteria 是对象;score 的 criteria 是有序数组。跳转至 1:36
  4. 4

    用 Python requests 发出第一个最小调用

    VS Code 里,视频用纯 Python 重建了同一个请求——不装任何 SDK:import requests,一个 api_key 变量,然后 response = requests.post("https://api.typesafe.ai/v1/systemone", headers={...}, json={...})。请求头就是 curl 块里那两个——Authorization 带你的 Bearer 密钥、Content-Type application/json——载荷从最小开始:state「Hi, I’ve been trying to connect my Stripe account for 3 days…」、model“jev-latest”、单个 urgency 问题,type 填 “noul”。作者的做法很实在:先把 cURL 的头原样贴进来,再一行行改成 Python 字面量——正好说明免 SDK 版本就是披着 Python 语法的 curl 命令。结尾 print(response.json()),python new.py 一跑就出结果。

    VS Code 里的 new.py:用 Python requests.post 向 api.typesafe.ai/v1/systemone 发首个请求,带 Authorization Bearer 与 Content-Type 头。
    curl 命令逐行翻译成 requests.post。跳转至 3:44
  5. 5

    把三种问题类型叠进一个载荷

    正式演示时,作者起草了一份更丰富的载荷,整体替换掉最小版。state 换成「i cannot open」;questions 把三种原语叠进同一次调用:is_refund_request 是 noul,问「Is the customer asking to get their money back?」;urgency_rating 是 score——「Rate how critically urgent this message is based on potential business impact」——刻度是三级描述:「Low (general question, no immediate rush)」「Medium (customer has an issue but isn’t losing money)」「High (system down, or active financial loss)」;department_routing 是 choice——「Which internal team is best equipped to handle this request?」——billing、technical、sales 各配描述。一次 POST,三个判断:所有问题搭同一班请求,各自独立打分。

    记事本里的 Jev questions 草稿:is_refund_request noul、带低中高三级刻度的 urgency_rating score 与 department_routing choice 合并在一个载荷里。
    noul 加 score 加 choice:一次 POST,三个判断。跳转至 4:56
  6. 6

    读类型化答案:概率、带刻度的 score、带分布的 choice

    同一载荷跑两遍,答案怎么动一目了然。state 为「i cannot open」时:is_refund_request.noul = 0.1(基本不像退款请求),urgency_rating.score = 0.93、置信度 0.64(概率压在 1 级:0.76 / 0.16 / 0.08),department_routing.choice = 「technical」、置信度 1.0。把 state 改成「i need refund ASAP」再跑:noul 跳到 0.98,score 跳到 1.39——legend 里 1 是 Medium、2 是 High,概率在两者间分成 0.6 / 0.4——choice 翻成「billing」、置信度 1.0(technical 0.0、sales 0.0)。模型 jev-1.13.0 每次都返回同样的结构:noul 只给概率,score 给数值 + 置信度 + legend + 各级概率,choice 给胜出项 + 置信度 + 完整分布。每轮调用花约 442 输入 / 75 输出 token。

    两轮 python new.py 的终端输出:模型 jev-1.13.0 依次返回 noul 0.1 与 0.98、score 0.93 与 1.39、choice technical 与 billing。
    同一载荷,两个 state——数字跟着证据走。跳转至 7:28
  7. 7

    同样的调用,换 Node 的 fetch 来发

    JavaScript 只需要改语法:把调用包进 async 函数(视频里叫 jevCall),requests.post 换成 await fetch 加 method: "POST",两个请求头原样保留——Authorization 用模板字符串写 `Bearer ${api_key}`,Content-Type: application/json——载荷原封不动塞进 body: JSON.stringify(...)。console.log(await response.json()) 就能打印;顶层日志会把嵌套对象截断,换 console.dir(await response.json(), { depth: null }) 全部展开。node test2.js 跑出熟悉的形状:model jev-1.13.0,is_refund_request noul 0.98,urgency_rating score 1.37、置信度 0.43——和 Python 那轮差一点点,因为每次请求都是独立采样,答案结构则完全一致。同一份载荷现在可以直接搬进 Express 路由、Serverless 函数或任何 Node 脚本。

    VS Code 终端跑 node test2.js:async jevCall fetch 返回模型 jev-1.13.0、noul 0.98、score 1.37 置信度 0.43。
    同端点同载荷——fetch 配模板字符串 Bearer 头。跳转至 11:14
  8. 8

    看一眼 Usage 页——跑一周也花不了几个钱

    回到控制台,Usage 标签页汇总了一切:Spend $0.0008,Tokens 21,314,Requests 47,近七天、按小时出图,还能按 API key 拆分。这就是把本页所有示例反复构建、调试的总成本。它和创始人 2026 年 9 月 15 日 Jev 发布时推文里的经济账对得上——比 LLM 调用快 20–200 倍、便宜 40–400 倍——也解释了为什么新账号自带的约 $5 月度额度对个人玩家约等于不限量。调阈值时盯着这页:如果某个问题的答案不再值回票面,就从载荷里删掉它;token 成本跟输入大小走,跟问题数量关系不大。

    TypeSafe 控制台 Usage 页:近七天共 47 次请求、21,314 个 token、总花费 0.0008 美元。
    开发调用跑一周 $0.0008——价格从来不是瓶颈。跳转至 11:46

常见问题(FAQ)

第一次调用 Jev API,该打哪个端点?

POST https://api.typesafe.ai/v1/systemone。带两个头——Authorization: Bearer 加你的 TYPESAFE_API_KEY、Content-Type: application/json——JSON 体放三个键:state(待判断文本)、model(“jev-latest”)、questions。Jev 也有其他网关入口——本站的 Jev API 参考页对比了 TypeSafe 官方端点与 Vercel AI Gateway、OpenRouter——但本页所有示例用的都是官方裸端点,官方快速开始的 Sample cURL 命令打的也是它。

怎么用 curl 调 Jev API?

直接用官方快速开始的样例:curl -X POST https://api.typesafe.ai/v1/systemone -H "Authorization: Bearer $TYPESAFE_API_KEY" -H "Content-Type: application/json" -d @- <<'EOF' ‖ { "state": "...", "model": "jev-latest", "questions": { "urgency": { "type": "noul", "instructions": "Does this message express urgency?" } } } ‖ EOF。先 export TYPESAFE_API_KEY,密钥就不会落进 shell 历史;Bearer 头的写法是字面量 Bearer、一个空格、然后密钥。同一个请求原样搬进 Postman 也行——设好两个头,JSON 作为 raw body 粘进去。

Jev 的 questions 对象里能放哪几种问题类型?

三种,而且可以合并进一次调用。noul 用概率回答 yes/no(给 instructions);choice 从你的 criteria 里挑一项——criteria 是「标签: 描述」的对象,比如 billing / technical / sales;score 返回在一条刻度上的位置——criteria 是有序数组,像「Low (…)」「Medium (…)」「High (…)」,因为答案要对应到这个顺序。所有问题基于同一个 state 独立判断,所以把 is_refund_request、urgency_rating、department_routing 叠进一个载荷,只花一次请求,三种答案同时返回。

Jev API 的响应应该怎么读?

响应里有 model(视频中是 jev-1.13.0)、以你的问题名为键的 answers,以及带输入/输出 token 的 usage。noul 答案就是概率本身——「i cannot open」得 0.1,「i need refund ASAP」得 0.98。score 答案返回数值(两轮分别为 0.93 → 1.39)、置信度、你定义的 legend 和各级概率。choice 答案返回胜出选项、置信度和完整分布——「billing」置信度 1.0,technical 0.0、sales 0.0。像写普通 if 一样,拿概率或置信度对阈值做分支即可。

调 Jev API 一定要装 SDK 吗?

不用——API 就是纯 HTTPS 加 JSON,这正是视频里能用 curl、Python requests、JavaScript fetch 零依赖跑通的原因。Python 和 JavaScript/TypeScript 有官方 SDK,等载荷稳定后再引入不迟;但第一次测试、其他语言、或者不方便装包的环境里,本页的裸 HTTP 调用就是完整答案。密钥放环境变量(TYPESAFE_API_KEY),端点打 /v1/systemone,model 填 “jev-latest”。

相关推荐