Skip to main content
Все рецепты построены по одной схеме: код управляет процессом, Jev отвечает на узкие вопросы, код комбинирует ответы. Запросы и цифры в примерах получены на реальной модели. Основы — в гайдах «Решения вместо текста» и «Как задавать вопросы».

Разбор обращения одним запросом

Задайте сразу все вопросы, которые могут понадобиться, — включая те, что важны только для части обращений. Код сам решит, какие ответы читать.
Ответ: categorybilling (уверенность 0,86), frustration — 1,0, refund_requested — 0,07, bug_severity — 1,62 при уверенности 0,43.
Обращение ушло в биллинг, поэтому ответы про баг код не читает — и низкая уверенность bug_severity ни на что не влияет.
refund_requested здесь 0,07, хотя с клиента списали дважды: просьбы вернуть деньги в тексте нет, а Jev читает вопрос буквально. Если нужно ловить и такие случаи — спросите иначе: «Описана ли ситуация, в которой клиенту положен возврат?»

Маршрутизация: код, LLM или человек

Прежде чем отдавать каждое сообщение дорогой модели, определите, что это за запрос и насколько он сложен.
Тем же способом выбирают модель: вопросы «какая область?», «насколько трудная задача?», «насколько рискованная?» — и простые запросы идут дешёвой модели, трудные — сильной.

Составная оценка со своими весами

Сложное суждение — «подходит ли кандидат» — разбейте на независимые шкалы, а итог посчитайте в коде.
Для резюме ведущего Python-разработчика с двумя годами руководства командой ответ: python_depth — 3,99, team_leadership — 2,63, system_design — 2,9.
Веса лежат в вашем коде: видно, из чего сложилась итоговая цифра, и её легко поправить, когда ранжирование расходится с мнением команды. Шкалы разной длины обязательно нормализуйте, иначе длинная шкала перевесит.

Защита LLM: проверка входящих сообщений

Проверка стоит малую долю от вызова самой LLM, поэтому её можно ставить на каждое сообщение — и на вход, и на выход.
Ответ: is_injection — 0,99, asks_for_secrets — 0,98, harm — 1,92. Для сообщения «Подскажи, как приготовить борщ на четверых?» те же вопросы дают 0,01 и 0,01.
Сам Jev тоже читает state как данные и не защищён от текста, который пытается повлиять на его ответ. Формулируйте вопросы точно, указывайте поле через путь и проверяйте защиту на своих примерах атак до запуска.

Фильтр контекста для RAG

Поиск по эмбеддингам возвращает «похожее», а не «полезное». Перед тем как отдавать найденные фрагменты отвечающей модели, проверьте каждый — одним запросом на все сразу.
Ответ: релевантность фрагментов — 0,98, 0,03 и 0,32; p2_injection — 0,97. В контекст идёт только первый фрагмент, третий отбрасывается как попытка внедрить инструкцию. Вопросы удобно собирать циклом в коде — по одному на фрагмент. Так же строится переранжирование: сортируйте результаты поиска по значению noul.

Извлечение значения из закрытого списка

Jev не пишет текст, но значение из известного набора извлечь может: сделайте варианты ответа пунктами choice и обязательно добавьте «не указано», чтобы модель не угадывала.
Ответ — март с уверенностью 1,0. Дату собирайте из частей в коде: день, месяц и год — три отдельных вопроса, а сравнение дат и вычисление сроков — обычная арифметика. Если набор значений заранее неизвестен (email, телефон, сумма), найдите кандидатов регулярным выражением или генеративной моделью, а Jev пусть выберет нужного.

Другие применения

Оценивайте нарушение по своим правилам: отдельные noul на токсичность, спам, мошенничество, раскрытие персональных данных и score на тяжесть. Решение — разрешить, предупредить, отправить на проверку, заблокировать — принимает код по сочетанию тяжести и уверенности.
Подтверждает ли цитата утверждение, соответствует ли ответ политике компании, верно ли выбран инструмент и его аргументы. В state — утверждение и источник, в вопросе — choice из «подтверждает», «противоречит», «не относится».
Задавайте по одному choice на уровень: сначала раздел, затем — его подразделы. Если вероятности двух веток близки, идите по обеим и выбирайте лучший путь в конце.
Вероятности Jev — готовые числовые признаки из свободного текста: намерение купить, срочность, интерес к продукту. Их подают на вход классической модели вместе со структурированными данными.
Соответствие компании профилю клиента, признаки боли и намерения купить во входящем письме, соответствие резюме требованиям вакансии — шкалы плюс свои веса, как в рецепте составной оценки.

Ограничения модели

Jev сильна в суждениях «с первого взгляда» и слаба там, где нужны шаги рассуждения или точные вычисления. Не используйте значение score для восстановления точных чисел: по нему надёжно сравнивать с порогом и сортировать, но не интерполировать величины между уровнями.

Лимиты

Идентификаторы jev-latest и typesafe/jev указывают на последнюю стабильную версию, и она может обновляться. Версия, которая ответила, приходит в поле model ответа — логируйте её, если подбирали пороги уверенности под конкретную версию, и перепроверяйте пороги после обновления.