Agent 以循环方式运行:LLM 决定下一步操作,工具执行该操作,模型评估结果,然后继续该循环,直到任务完成。
起初,将 Agent 和 LLM 集成到依赖结构化数据和可预测接口的软件应用中非常困难。随后出现了两个基础原语,使这一过程变得容易得多:
- Tool calling 让模型能够发起结构化请求并接收结构化结果。
- Structured outputs 让模型能够返回结构化结果。
但即使具备了这些功能,Agent 循环仍然缓慢且昂贵:每个决策都需要再次调用模型。
这时,Jev 登场了。Jev 是 TypeSafe AI 发布的一款新模型。该公司报告称,在分类任务上,其推理速度比同类 LLM 快高达 200 倍,成本低 400 倍。
https://x.com/CompleteSkeptic/status/2099925682726002904
本文将介绍 Jev 的工作原理、它在 Agent 循环中的定位,以及如何将其与 LangChain 结合使用。
深入了解 Jev
Jev 实际上并不是传统的 LLM,它不生成文本。它是 TypeSafe AI 团队所称的 System One 模型:
📖 System One 模型是一类专为快速做出软件可直接使用的结构化决策而构建的 AI 模型。System One 模型会评估一个
state 并返回带类型的回答和概率。
它使用 用于校准决策的强化学习 (RLCD) 进行训练。你的代码利用这些结果来指导 Agent 的后续行动,而无需为每个决策都进行一次完整的聊天 LLM 调用。
要调用 Jev 模型,你需要发送一个 state(上下文)以及关于该 state 的 questions。以下是 官方文档 中支持工单示例的单问题版本:
1{2 "model": "jev-latest",3 "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.",4 "questions": {5 "is_urgent": {6 "type": "noul",7 "instructions": "The message conveys urgency or time-sensitivity"8 }9 }10}
文档中的示例给出了以下紧急程度判断结果,此处省略了响应的其余部分:
1{2 "is_urgent": {3 "type": "noul",4 "noul": 0.9995 }6}
这意味着该消息具有紧急性的概率为 99.9%,你的应用程序可以利用这一点来优先处理工单。
目前支持三种类型的 questions:

- Choice: 从一组选项中进行选择。返回每个选项的概率以及整体置信度分数。
- Score: 根据有序等级(如低、中、高)对输入进行评分。返回连续分数、底层分布和置信值。
- Noul: 回答是非题。返回陈述为真的概率。
这里的一个关键特性是,你可以在一次请求中针对同一个 state 提出多个问题。
💡 System One 模型并行评估请求中的每个问题。增加问题数量几乎不会改变响应时间,且仅额外消耗这些问题对应的 token,成本很低。
有关针对支持工单提出多个问题的示例,请参阅 TypeSafe Quickstart。
总之,与传统 LLM 不同,Jev 既不受文本生成的限制,也不受顺序决策的限制!
如何将 Jev 与 LangChain 结合使用
LangChain 的提供商无关模型非常适合支持 Jev,同时也兼容数千种其他集成和模型提供商。
LangChain 集成 通过 TypeSafeClassifier 暴露 Jev。你将 state 和 questions 传递给 .invoke(),从而获得分类结果而非聊天响应。
安装 langchain-typesafe 并设置你的 TYPESAFE_API_KEY,然后发起调用:
1from langchain_typesafe import Noul, TypeSafeClassifier23classifier = TypeSafeClassifier()45response = classifier.invoke(6 state=(7 "The deploy failed twice and customers are seeing 500s. "8 "Can someone look now?"9 ),10 questions={11 "urgent": Noul(12 instructions="Does this need attention right now?"13 ),14 },15)1617urgency = response.nouls["urgent"].noul
State 可以是文本、结构化数据或 LangChain 消息。这使得你可以轻松地在节点或中间件钩子中使用 Agent 已有的上下文来调用 Jev。
你可以将此功能构建到自定义中间件或工具中!
应用场景
Jev 不是 LLM 的直接替代品。它不生成文本,但可以处理我们通常使用 LLM 进行的分类任务,且没有同样的延迟和成本。这使其成为驱动你 Agent 的模型的有力补充:使用 LLM 进行开放式推理和生成,使用 Jev 在过程中进行快速的结构化决策。
模型路由
简单的查找不需要与困难的调试任务使用相同的模型。Model-routing middleware 允许 Jev 评估请求并根据你定义的标准选择模型,从而为简单任务选择快速且廉价的模型,为复杂任务选择更强大的模型。
1from langchain.agents import create_agent2from langchain_typesafe.experimental.middleware import (3 ModelChoice,4 ModelRouterMiddleware,5)67router = ModelRouterMiddleware(8 choices={9 "fast": ModelChoice(10 model="openai:luna",11 criteria="Direct lookups, extraction, and localized changes.",12 ),13 "powerful": ModelChoice(14 model="openai:sol",15 criteria="Architecture and high-stakes decisions.",16 ),17 },18 instructions="Choose the least costly model that can complete the task.",19)2021agent = create_agent("openai:gpt-5.6-luna", middleware=[router])
路由器从最新的用户消息中选择模型,并在整个运行过程中使用该模型。概率和置信度也保留在 Agent 状态中。
Auto Mode
Agent 本质上仍然不可信。Agent 可能会收到糟糕的指令(无论是自然产生的还是来自足够有动机的攻击者),这可能会诱导它执行我们不希望它采取的行动。
像 claude、codex、cursor 这样的编码框架已经推出了一些方法来在行动发生之前分类危险行为,这逐渐帮助建立了人们对 Agent 的信任。直到现在,这个分类步骤一直锁定在框架的闭源部分中。
既然现在存在一个廉价且高性能的分类器模型,我们可以采用相同的模式并将其应用于所有 Agent!
1from langchain.agents import create_agent2from langchain_typesafe.experimental.middleware import (3 AutoModeMiddleware,4)56guardrail = AutoModeMiddleware(tools=["bash"])78agent = create_agent("openai:gpt-5.6-luna", middleware=[guardrail])
AutoModeMiddleware 使用 Jev 检查工具调用可能做出的风险决策,并在工具执行前阻止这些调用。
开始使用!
我们对 Jev 及其带来的可能性感到非常兴奋。我们已经看到了一些很棒的项目:Browserbase 的 Kyle Jeong 正在以几分钱的成本驱动浏览器使用 Agent,Jarrod Watts 构建了一个实时交易 Agent,而 Ryan Vogel 正在进行大规模的邮件分类。
如今每周都有新模型发布,但这款模型引起了相当强烈的反响。我们很期待看到你使用 LangChain 和 Jev 构建什么。
请在 论坛 上告诉我们你的想法,在 X 上标记我们并分享你正在构建的内容,或者参与 LangChain issues 的讨论!
致谢
感谢 @huntlovell、@hwchase、@ccurme、@veryboldbagel 和 Nathan Drenzer 提供的深思熟虑的审阅和贡献。





