Хватает ли «да или нет», выбора и уровня на язык?
Noul, Choice и Score — язык для кода. На отчёте о расходах видно, как три вопроса разнимаются и в какой момент этого языка уже не хватает.
Соавтор: folkbench.com (Folkbench — проверяемая платформа оценки и выбора для API ИИ, модельных сервисов и связанных сайтов. Она опирается на опубликованные сведения о сервисе, цены, доступность, задержку и окна доказательств, чтобы помочь пользователям сравнить варианты и выбрать путь.)
Десять текстов в этой серии:
- JEV - Суставу не нужен мозг
- JEV - Почему Jev, который не умеет общаться, подходит Agent
- JEV - Как далеко на самом деле заходит «не может галлюцинировать»
- JEV - Хватает ли «да или нет», выбора и уровня на язык?
- JEV - Лаборатория могла бы это собрать. Почему всё равно может не выпустить.
- JEV - Два demo, которые я прогнал
- JEV - Люди отходят от середины цикла к краю
- JEV - За этой чертой я уже не различаю, кто умнее
- JEV - Некоторые вопросы ему не принадлежат
- JEV - Предельно простая модель, комплект и одна, которая не говорит
Хватает ли этого языка, зависит от того, что вы хотите им сказать. Три закрытых вопроса покупают скорость и покупают собираемость. Цена в том, что всё, что надо развернуть, он сказать не может. Это язык для кода. Не для того, чтобы его читал человек.
Документация и сайт оценки делят его одинаково: Noul, Choice и Score. Четвёртого вида на странице нет.
Три вида в документации
Noul спрашивает только да или нет. Он возвращает вероятность. В документации это число идёт от 0 до 1. Близко к 1 — уверенное да. Близко к 0 — уверенное нет. Если оно останавливается около 0.5, это значит только, что обе стороны равновозможны. Это не значит «средняя степень». Документация называет эту ловушку: спросите, силён ли кто-то в Python, и 0.5 — не средний уровень. Если вы на самом деле хотите измерить уровень, перейдите на Score и напишите, как выглядит каждый уровень. Noul также не прикладывает отдельную уверенность. Сигнал — сама вероятность.
Choice выбирает один пункт из множества, которое уже зафиксировано. Обратно приходит выбранный пункт плюс всё распределение и уверенность. Уверенность меряет, острое ли распределение. Если вероятность размазана, уверенность низкая, и код знает, что этот вопрос неустойчив. Потолок числа вариантов у этого вопроса Jev — 255. Выше этого Jev идёт в два этапа. Два этапа значит сначала оценить независимо, потом сделать явный выбор. Иногда чуть медленнее. Медленность — лишний шаг, а не тот же узкий вопрос, который вдруг стал дорогим.
Score — уровни на шкале. В использовании это упорядоченная шкала от 2 до 10 уровней. Документация говорит: не меньше двух уровней, и интерфейс принимает не больше десяти. Уровень надо записать как ситуацию, которую можно сопоставить. Напишите только «немного высоко» или «нормально», и модели не с чем сопоставлять. Оценка может лечь между двумя уровнями. Это число — сумма положения каждого уровня, умноженного на его вероятность. Десятичная дробь между двумя уровнями нормальна. Это не сломанный расчёт. Он возвращает оценку и одновременно распределение по уровням и уверенность. Одна и та же оценка может быть всем, прижатым к среднему уровню, или расколом между двумя концами. Смотрите только на оценку — и сочтёте это одним и тем же. Читайте распределение и уверенность вместе.
Ни один из трёх ответов не может выйти из клеток, которые вы дали заранее. Вопросы по одному материалу независимы друг от друга. Добавьте один или уберите один — остальные вопросы не меняются. Если суждение зависит от нескольких вещей вместе, спросите их по отдельности и оставьте веса в коде. Позже, когда вы поправите политику, вы меняете эти числа. Целый prompt вы не переписываете.
Отчёт о расходах, разобранный на части
Официальная страница оценки берёт отчёт о расходах как игрушку. Слева абзац, который написал человек, такая политика, какую команда записала бы. Каждый отчёт должен нести чек. Если чек нельзя прочитать, попросите у сотрудника другой. Потом смотрите, трата — это еда, поездка или оборудование. Если еда больше $75 и описание не совпадает с чеком, должен подписать руководитель. Остальные отчёты считаются одобренными.
Справа тот же абзац разбит в поток. Каждая фраза политики — один вопрос или одно правило кода. Можно ли прочитать чек — «да или нет». Если нельзя, код просит новый, и этот шаг модель больше не спрашивает. Категория использует одиночный выбор, и варианты — еда, поездка или оборудование. Больше ли сумма $75, код сравнивает сам. Только полуфразу о том, что описание не совпадает с чеком, надо спросить у модели ещё раз. Вместе с суммой это решает, подписывает ли руководитель. Отчёты, которым подпись руководителя не нужна, код считает одобренными. Модель здесь комментарий не пишет.
Направление на странице оценки — одна фраза: структура всегда лучше одного большого prompt. В среднем по четырём примерным потокам у каждой модели на workflow точность выше, чем у всей политики как одного prompt, а трата и время ниже. Сторона prompt отдаёт всю политику и даёт модели пройти логику внутри одного ответа. Сторона workflow отдаёт коду всё, что можно записать как правило, и оставляет вопросами только узкие суждения.
Самый устойчивый настоящий поток обычно не один большой вопрос. Это много узких вопросов, независимых друг от друга. Поведение зависит от вероятности, а не только от одной дискретной метки. Категория может выглядеть решённой, пока другие варианты всё ещё держат долю вероятности. Код может сделать ещё один шаг на пороге, который вы написали, не выбрасывая распределение. Снаружи потока это всё ещё одна ветка. Слой посередине — инженерия области. Какой вопрос в этот раз не используется и какое число считается пересечением черты, надо записать для этого бизнеса и каждый раз прогонять одинаково. Когда ответы на узкие вопросы в коде, веса и пороги задаются в этом слое.
После отказа от генерации строк
Jev отказывается от генерации строк и берёт взамен параллельную выборку. Вопросы в одном запросе считаются вместе. Каждый выход выходит сразу. Не token за token. Чат-модели надо расти token за token, каждый глядя на предыдущий. Здесь нет шага буква за буквой. Добавьте несколько обычных узких вопросов, и время почти не растёт вместе с ними. Лишняя цена — в основном собственные token вопроса.
Официальная цена — не цена чатового интерфейса. Вход — $0.042 за миллион token. Выход — FREE. Без длинной полосы порождённых слов, считаемых по token, выход не тарифицируется. Задержка ложится на 70–500 миллисекунд. Этот диапазон для цепи вызовов, не для ожидания внутри окна чата.
Возвращаемое значение идёт прямо в код. Вероятность Noul может войти в if. Маршрутизация использует метку Choice. Порог оценки использует положение Score. Сначала разбирать не надо. Если чат-модель возвращает кусок Markdown, вам надо сначала разнять слова, и одна лишняя фраза может изогнуть формат так, что остальное не стыкуется. Три вопроса этот текст не возвращают, потому что Jev его не генерирует.
Объяснить, почему этот отчёт отклонили, в три вопроса не влезает, и извинение с переговором тоже. Причины, написанной, чтобы человек прочитал, в возвращаемом значении тоже нет. Это уходит модели, которая умеет говорить. Jev останавливается на суждении.
Когда его не хватает, случаи конкретны. Если варианты — имена в открытом мире, названия компаний и продуктов всё появляются, и множество нельзя зафиксировать заранее. 255 — потолок числа вариантов, а не бесконечный список. Когда причина должна процитировать фразу из источника, такой фразы отдать нечего. Когда пользователь ждёт человеческую фразу, интерфейс хочет читаемые слова. Насильно ставить тогда Jev — значит принимать сустав за рот.
Когда политику можно закрыть в «да или нет», одиночный выбор и уровни, дальше идёт ветка, и суждение собирается обратно в тот же код. Если вам нужна скорость и такая собираемость, его хватает. То, что надо развернуть, он сказать не может. Скорость и собираемость — это то, что покупает этот обмен.
Источники
- https://typesafe.ai/blog/introducing-system-one-models-and-jev
- https://evals.typesafe.ai/
- https://docs.typesafe.ai/primitives