Агенти працюють у циклі: LLM вирішує, що робити, інструмент виконує дію, модель оцінює результати, і цикл продовжується до завершення завдання.
Спочатку агенти та LLM було складно інтегрувати в програмні додатки, які покладаються на структуровані дані та передбачувані інтерфейси. З’явилися два базові механізми, які значно спростили цей процес:
- Tool calling дозволив моделям формувати структуровані запити та отримувати структуровані результати.
- Structured outputs дозволили моделям повертати структуровані результати.
Але навіть із цими можливостями цикл агента залишається повільним і дорогим: кожен прийом рішення потребує нового виклику моделі.
Зустрічайте Jev. Це нова модель, представлена командою TypeSafe AI. Компанія повідомляє про прискорення висновків (inference) до 200 разів та зниження витрат у 400 разів порівняно з аналогічними LLM при виконанні задач класифікації.
https://x.com/CompleteSkeptic/status/2099925682726002904
У цьому пості ми розглянемо, як працює Jev, де він вписується в цикл агента та як використовувати його разом із LangChain.
Все про Jev
Насправді Jev — це не традиційна LLM, вона не генерує текст. Це те, що команда TypeSafe AI називає моделлю System One:
📖 Моделі System One — це клас моделей ШІ, створених для швидкого прийняття структурованих рішень, які програмне забезпечення може використовувати безпосередньо. Модель System One оцінює
state та повертає типізовані відповіді та ймовірності.
Вона навчена за допомогою навчання з підкріпленням для каліброваних рішень (RLCD). Ваш код використовує ці результати для визначення наступних дій агента, без необхідності повного виклику чатової LLM для кожного рішення.
Щоб викликати модель Jev, ви надсилаєте їй state (контекст) та questions (запитання) щодо цього стану. Ось версія прикладу з тикетом служби підтримки з одним запитанням з їхньої документації:
1{2 "model": "jev-latest",3 "state": "Привіт, я вже три дні намагаюся підключити свій акаунт Stripe, але постійно виникає помилка. Я втрачаю продажі. Будь ласка, допоможіть терміново.",4 "questions": {5 "is_urgent": {6 "type": "noul",7 "instructions": "Повідомлення передає відчуття терміновості або обмеженість у часі"8 }9 }10}
Приклад з документації дає таку відповідь щодо терміновості (показано тут без решти відповіді):
1{2 "is_urgent": {3 "type": "noul",4 "noul": 0.9995 }6}
Це означає ймовірність 99,9% того, що повідомлення є терміновим, яку ваше додаток може використати для пріоритизації тикета.
Існує три типи підтримуваних запитань:

- Choice: Вибір із набору варіантів. Повертає ймовірність для кожного варіанту та загальну оцінку впевненості.
- Score: Оцінка вхідних даних за впорядкованими рівнями, такими як низький, середній та високий. Повертає безперервний бал, базовий розподіл та значення впевненості.
- Noul: Відповідь на запитання типу «так» або «ні». Повертає ймовірність того, що твердження є істинним.
Ключова особливість полягає в тому, що можна ставити кілька запитань щодо одного й того ж стану в одному запиті.
💡 Моделі System One оцінюють кожне запитання в запиті паралельно. Додавання нових запитань майже не впливає на час відповіді та коштує лише токенів для цих додаткових запитань, які є дешевими.
Приклад постановки кількох запитань щодо тикета служби підтримки можна знайти у TypeSafe Quickstart.
Отже, на відміну від традиційних LLM, Jev не обмежений ні генерацією тексту, ні послідовним прийняттям рішень!
Як використовувати Jev з LangChain
Незалежна від постачальника модель LangChain чудово підходить для підтримки Jev поряд із тисячами інших інтеграцій та постачальників моделей.
Інтеграція LangChain надає доступ до Jev через TypeSafeClassifier. Ви передаєте свій стан та запитання методу .invoke() і отримуєте результати класифікації замість чатової відповіді.
Встановіть langchain-typesafe, налаштуйте ваш TYPESAFE_API_KEY, а потім зробіть виклик:
1from langchain_typesafe import Noul, TypeSafeClassifier23classifier = TypeSafeClassifier()45response = classifier.invoke(6 state=(7 "Розгортання двічі завершилося помилкою, клієнти бачать помилки 500. "8 "Чи може хтось подивитися зараз?"9 ),10 questions={11 "urgent": Noul(12 instructions="Чи потребує це негайної уваги?"13 ),14 },15)1617urgency = response.nouls["urgent"].noul
Стан (state) може бути текстом, структурованими даними або повідомленнями LangChain. Це дозволяє легко викликати Jev з вузла (node) або перехоплювача проміжного ПЗ (middleware hook), використовуючи контекст, який агент уже має.
Ви можете вбудувати це у власне проміжне ПЗ або інструменти!
Варіанти використання
Jev не є прямою заміною LLM. Він не генерує текст, але може обробляти задачі класифікації, для яких ми сьогодні часто використовуємо LLM, без тієї ж затримки та вартості. Це робить його перспективним доповненням до моделі, яка керує вашим агентом: використовуйте LLM для відкритого міркування та генерації, а Jev — для швидких, структурованих рішень по ходу роботи.
Маршрутизація моделей
Простому пошуку не потрібна така ж потужна модель, як для складного завдання налагодження. Проміжне ПЗ маршрутизації моделей дозволяє 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="Прямі пошукові запити, витягування даних та локальні зміни.",12 ),13 "powerful": ModelChoice(14 model="openai:sol",15 criteria="Архітектурні рішення та рішення з високими ризиками.",16 ),17 },18 instructions="Оберіть найменш коштовну модель, яка здатна завершити завдання.",19)2021agent = create_agent("openai:gpt-5.6-luna", middleware=[router])
Маршрутизатор обирає модель на основі останнього повідомлення користувача та використовує її протягом усього запуску. Ймовірності та рівень впевненості також залишаються доступними у стані агента.
Автономний режим (Auto Mode)
Агенти досі мають фундаментальну проблему довіри. Агент може отримати погані інструкції (природним чином або від мотивованого зловмисника), які можуть спонукати його до дій, яких ми не хотіли б бачити.
Інструменти для написання коду, такі як claude, codex, cursor, запровадили певні способи класифікації небезпечних дій до їх виконання, що поступово допомагало зміцнювати довіру до агентів. До цього часу цей крок класифікації був прихований у закритих частинах цих систем.
Тепер, коли існує дешевша та продуктивніша модель класифікатора, ми можемо взяти той самий шаблон і адаптувати його для всіх агентів!
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 та можливостями, які він відкриває. Кілька цікавих проєктів, які ми вже бачили: Kyle Jeong з Browserbase використовує його для агентів браузера за частки цента, Jarrod Watts створив агента для торгівлі в реальному часі, а Ryan Vogel масштабує сортування електронної пошти.
Нові моделі з’являються щотижня, але ця викликала особливо великий резонанс. Ми раді побачити, що ви створите за допомогою LangChain та Jev.
Поділіться своєю думкою на форумі, позначте нас у X та розкажіть про свої проєкти, або долучайтеся до обговорень у GitHub issues LangChain!
Подяки
Дякуємо @huntlovell, @hwchase, @ccurme, @veryboldbagel та Nathan Drenzer за їхній глибокий огляд та внесок.





