← 文章 / 编程开发
vercel 3小时前 · 2026-10-03 01:51:32 · 1 阅读

面向Python工程师的Jev

你根本不可能没听说过 Jev。似乎每个人都在以某种方式把玩它,从用它来做交易决策(还能出什么岔子呢?)到生成 UI(说不定这事儿有点门道!)。

Jev 是一种新型 AI 模型。你喂给它数据并提出一系列多选题,它会返回答案及对每个答案的信心度。和其他模型一样,Jev 也会犯错,但它犯错的速度极快。​

​归根结底:Jev 专为做特定范围的决策而设计。它是否足够准确以满足你的使用场景,需要你自己去测试。

Vercel 的 Python 团队的工作,是方便 Python 开发者把玩 Jev 等少数几样东西。因此,请欢迎Python AI SDK的最新版本。

通过 uv add ai 安装它,即可使用新的实验性 evaluate() API,该 API 直接与 Jev 的神经系统对话。然后创建一个AI Gateway 密钥,设置 AI_GATEWAY_API_KEY,并尝试下面这个完整示例:

1import asyncio2
3import ai4from ai.ops import experimental as jev5
6async def main():7    result = await jev.evaluate(8        ai.get_model("typesafe-ai/jev"),9        "You're Neil deGrasse Tyson",10        {"bigger": jev.ChoiceQuestion(11            instructions="Which is bigger, the Sun or the Earth?",12            criteria={"Sun": None, "Earth": None},13        )},14    )15    print(result.value["bigger"])16
17if __name__ == "__main__":18    asyncio.run(main())

让我们从一个 Jev 绝不可能出错的地方开始。

现在,我想通过几个例子来解释 Jev 是什么,以及如何让它为你所用。一个例子是好的,另一个是傻的。问问 Jev 哪个是哪个吧。让我们玩得开心点!

复制链接到标题Jev 大白话解释

Jev 是一个通用分类器。

分类器是经典机器学习中基础的图原语。假设你需要一个垃圾邮件过滤器。你训练一个分类器,使用大量标记为“垃圾邮件”或“非垃圾邮件”的电子邮件,它就能学会判断新收到的邮件看起来是否像垃圾邮件。

问题在于,每增加一个新的分类任务,都得重新采集并标注数据,然后训练一个新的分类器来调整权重。不过,还有什么东西也有权重呢?大型语言模型!Jev 背后的团队琢磨出如何把 LLM 变成一个分类器,而且不需要针对特定领域进行训练,因为它已经学习过大量人类知识。

虽然 Jev 起源于 LLM,但它的行为更像是一个分类器。它既便宜又快速,返回的是结构化 JSON 而非生成的文本。其回答会严格遵循你在问题中定义的类型和选项。

复制标题链接API

Jev 的官方 API简直不能再简单了。为了保持这种简单,我们在 Python AI SDK 中几乎原封不动地实现了它。

只有一个函数 evaluate() 和几个辅助类型。该函数接受模型、状态(可以是简单的字符串,也可以是复杂的 JSON)以及一组问题映射。每个问题都是以下三者之一:ChoiceQuestion(选择一个答案)、ScoreQuestionNoulQuestion(估算某陈述为真的概率)。

完整的 API 参考文档,请让你的 Agent 查阅这份文档。至此,我们对 Jev 是什么以及如何使用它应该已经有了清晰的认识。是时候看看能用它构建什么了!

复制标题链接示例 1:Python 还是英文?

用 Jev 来做这件事非常合理:字面意义上就是把它当作一个分类器。

大约一年前,我有个想法:让 Python REPL 变得具有代理能力(agentic)。我希望它能拥有极佳的用户体验,觉得如果 REPL 能判断我输入的是英文还是 Python 代码而无需我在聊天和代码之间手动切换,那会很酷。

既然需要分类器,我花了两天时间,用随机挑选的 Python 代码和英文文本训练了一个自己的。

在流了一身汗并烧掉了大量愚蠢的 Opus 4.1 tokens 之后,我得出结论:我的水平不足以制作一个可靠的 Python 与英文分类器。UI 感觉抖个不停:输入 if i 时被高亮为 Python,if i i 切换成英文,if i is 又变回 Python。看似非常简单的问题,原来确实很难。

来看看 Jev 的实际表现:

下面是 Jev 对"这看起来像英文还是 Python?"的真实响应记录。背后的代码没什么特别的,本质上就是本文开头的代码片段,只是换了个问题。

更有意思的是,Jev 能不能解决我的 REPL 问题。它看起来确实比我手写的分类器好不少,但仍有漏洞。比如,"what's" + " up 在 Jev 眼里像英文,而我一眼就能看出这是一个没敲完的 Python 表达式。

Copy link to heading示例 2:Jev 写 Python 代码

那我们再退一步,让 Jev 像 LLM 一样生成文本怎么样?Jev 不会写字,所以让它"打字"的办法之一是让它一个字母一个字母地输出。每一步,它从一组字母、标点和空白字符中选出下一个字符。另一种方式是每次从包含某个 N 个英文单词的词表中选一个词。

看到这个时,我立刻想到必须测测 Jev 写 Python 代码的水平。

我最初用的是"字母 + Python 关键字 + 空白"的方法,但很快发现 Jev 连一个 if 语句都几乎敲不出来。想让它产出点有意义的东西,唯一的办法是让它生成程序的抽象语法树(AST)。

思路如下:

  1. 拿到用户 prompt 后,先用 LLM(这里是 GPT-5.6)把它扩展成一组具体的指令交给 Jev。我发现如果没有详细的"计划",Jev 连最简单的任务都难以完成。

  2. 让 Jev 通过一系列选择来构建 Python AST。每一步都向它展示当前程序,标记正在填充的字段,并提供可能的下一批节点选项,比如函数调用、算术运算或变量。每个选项都附带对应代码的预览。

  3. 把每个选择应用到语法树上,再渲染回 Python。标点和缩进由宿主代码处理;程序的整体结构和内容由 Jev 决定。如此反复,直到 Jev 完成整棵树。

用这种方法,我确实让 Jev 生成了语法有效(但内容大多仍不正确)的 Python 代码。但你也看出来了,让分类器去干 LLM 的活是相当有挑战的。如果你想做得更好,源码在 GitHub 上。

复制标题链接试用 Jev

这两个实验都没达到我预期的效果,但我对 Jev 依然充满热情。我们才刚刚开始探索这类新模型的能力边界!

现在就通过 Python AI SDK 试试吧,并告诉我们你做了什么。你只需要 uv add ai 和一个 AI Gateway 密钥。以下是可以直接复制给你的编程 Agent 的提示词:

编程 Agent 的提示词:

使用 Vercel 的 Python AI SDK 为 Jev 创建一个最小化演示项目。 使用 `uv` 初始化项目(需 Python 3.12 或更高版本),并通过 `uv add ai` 安装 SDK。调用 `ai.get_model("typesafe-ai/jev")`。编写 `main.py`,在循环中逐行读取输入,对每行使用 `ChoiceQuestion` 调用 `ai.ops.experimental.evaluate()`,将其分类为 Python 或英语,并输出选项、概率、置信度和延迟。支持通过 Ctrl+C 干净地退出。 SDK 文档:https://ai-python.dev/docs/reference/ops#experimentalevaluate 提示用户创建 AI Gateway 密钥,并解释如何设置 `AI_GATEWAY_API_KEY` 环境变量。设置完成后,用户即可运行 `uv run python main.py`。 Gateway 密钥配置文档:https://vercel.com/docs/ai-gateway/authentication-and-byok#quick-start

原始来源: vercel

评论 (0)