Jev 不生成文本,专做快速结构化分类决策,推理快至 200 倍、成本低至 400 倍,与 LLM 分工驱动智能体。

SYDNEY RUNKLE(@SYDNEYRUNKLE)教程 · 已翻译 · 约 12 分钟
阅览室 · AI 最佳实践#Jev#结构化#分类#决策#调用原文

智能体在一个循环中运行:LLM 决定做什么,工具执行,模型评估结果,然后继续这一循环,直到任务完成。

智能体和 LLM 最初很难集成到软件应用中,因为软件应用依赖结构化数据和可预测的接口。后来出现了两个原语,让这件事变得容易得多:

但即便有了这些,智能体循环依然缓慢且昂贵:每一次决策都需要再调用一次模型。

于是,Jev 登场了。Jev 是 TypeSafe AI 发布的一款新模型。该公司报告称,在分类任务上,其推理速度最高可提升 200 倍,成本降低 400 倍,优于同类 LLM。

查看原推文

本文将介绍 Jev 的工作原理、它在智能体循环中的定位,以及如何配合 LangChain 使用它。

关于 Jev 的一切

Jev 其实不是传统意义上的 LLM,它不生成文本。它是 TypeSafe AI 团队所称的 System One 模型:

📖 System One 模型是一类 AI 模型,旨在做出快速、结构化的决策,供软件直接使用。System One 模型会评估一个 状态,并返回带类型的答案和概率。

它使用用于校准决策的强化学习(RLCD)进行训练。你的代码利用这些结果来指导智能体下一步做什么,而无需为每个决策都调用完整的聊天 LLM。

要调用 Jev 模型,你需要向它发送一个状态(即上下文)以及关于该状态的问题。下面是其文档中支持工单示例的单问题版本:

{
  "model": "jev-latest",
  "state": "Hi, I've been trying to connect my Stripe account for 3 days and it keeps failing. I'm losing sales. Please help ASAP.",
  "questions": {
    "is_urgent": {
      "type": "noul",
      "instructions": "The message conveys urgency or time-sensitivity"
    }
  }
}

文档中的示例给出了这样的紧急程度答案,此处省略了响应的其余部分:

{
  "is_urgent": {
    "type": "noul",
    "noul": 0.999
  }
}

这表示该消息有 99.9% 的概率是紧急的,你的应用程序可以据此对工单进行优先级排序。

支持三种类型的问题

  • 选择(Choice): 从一组选项中挑选。为每个选项返回一个概率,以及一个整体置信度分数。
  • 评分(Score): 按照有序等级对输入进行评分,例如低、中、高。返回一个连续分数、底层分布以及一个置信度值。
  • Noul: 回答一个是非题。返回某个陈述为真的概率。

这里的一个关键特性是,你可以在一次请求中针对同一状态提出多个问题。

💡 System One 模型会并行评估一次请求中的每个问题。增加问题几乎不会改变响应时间,只会消耗额外问题对应的 token,而这些 token 很便宜。

关于针对一张支持工单提出多个问题的示例,请参阅 TypeSafe 快速入门

总之,与传统 LLM 不同,Jev 既不受文本生成的限制,也不受顺序决策的限制!

如何将 Jev 与 LangChain 配合使用

LangChain 的提供商无关模型非常适合在支持 Jev 的同时,兼容数千种其他集成和模型提供商。

LangChain 集成通过 TypeSafeClassifier 暴露 Jev。你将状态和问题传给 .invoke(),得到的是分类结果,而不是聊天响应。

安装 langchain-typesafe 并设置你的 TYPESAFE_API_KEY,然后发起调用:

from langchain_typesafe import Noul, TypeSafeClassifier

classifier = TypeSafeClassifier()

response = classifier.invoke(
    state=(
        "The deploy failed twice and customers are seeing 500s. "
        "Can someone look now?"
    ),
    questions={
        "urgent": Noul(
            instructions="Does this need attention right now?"
        ),
    },
)

urgency = response.nouls["urgent"].noul

状态可以是文本、结构化数据或 LangChain 消息。这样一来,使用你的 agent 已有的上下文,从节点或中间件钩子中调用 Jev 就变得非常简单。

你可以把它构建到自定义中间件或工具中!

使用场景

Jev 并不是 LLM 的即插即用替代品。它不生成文本,但能处理我们如今常用 LLM 完成的分类任务,且没有同样的延迟和成本。这使它成为驱动你智能体的模型的有力补充:用 LLM 进行开放式推理和生成,用 Jev 在过程中做快速、结构化的决策。

模型路由

一个简单的查询不需要和困难的调试任务使用同一个模型。模型路由中间件让 Jev 评估请求,并根据你定义的标准选择模型,从而让简单任务用快速且低成本的模型,复杂任务用能力更强的模型。

from langchain.agents import create_agent
from langchain_typesafe.experimental.middleware import (
    ModelChoice,
    ModelRouterMiddleware,
)

router = ModelRouterMiddleware(
    choices={
        "fast": ModelChoice(
            model="openai:luna",
            criteria="Direct lookups, extraction, and localized changes.",
        ),
        "powerful": ModelChoice(
            model="openai:sol",
            criteria="Architecture and high-stakes decisions.",
        ),
    },
    instructions="Choose the least costly model that can complete the task.",
)

agent = create_agent("openai:gpt-5.6-luna", middleware=[router])

路由器从最新的用户消息中选择一个模型,并在整个运行过程中使用它。概率和置信度同样保留在智能体状态中。

自动模式

智能体本质上仍然不值得信任。智能体可能接收到糟糕的指令(无论是自然产生的,还是来自一个足够有动机的攻击者),这些指令可能说服它采取我们并不希望它采取的行动。

像 claude、codex、cursor 这样的编码工具链已经推出了某种方式,在危险操作被采取之前对其进行分类,这逐渐帮助建立了对智能体的信任。到目前为止,这个分类器步骤一直被锁在工具链的闭源部分中。

既然现在已经有了一个廉价且高性能的分类器模型,我们就可以采用同样的模式,并将其应用到所有智能体上!

from langchain.agents import create_agent
from langchain_typesafe.experimental.middleware import (
    AutoModeMiddleware,
)

guardrail = AutoModeMiddleware(tools=["bash"])

agent = create_agent("openai:gpt-5.6-luna", middleware=[guardrail])

AutoModeMiddleware 使用 Jev 检查工具调用中可能采取的冒险决策,并在工具执行之前阻止这些调用。

开始使用!

我们对 Jev 以及它带来的各种可能性感到非常兴奋。我们已经看到了一些很酷的项目:BrowserbaseKyle Jeong 正以极低的成本驱动浏览器使用代理,Jarrod Watts 构建了一个实时交易代理,而 Ryan Vogel 正在大规模地进行邮件分类处理。

如今几乎每周都有新模型发布,但这一款的反响格外热烈。我们很期待看到你用 LangChain 和 Jev 构建出什么。

欢迎在论坛上告诉我们你的想法,在 X 上标记我们并分享你正在构建的东西,或者参与 LangChain issues 的讨论!

致谢

感谢 @huntlovell、@hwchase、@ccurme、@veryboldbagel 和 Nathan Drenzer 的悉心审阅与贡献。

已读完 · 本文由熊猫易读翻译重排