Справка

Что тут происходит и как читать цифры.

English

Шпаргалка: что куда вписывать

ПолеЧто ставитьЗачем
Task and constraintsОпиши задачу своими словами, по-английскиПо ключевым словам определяется тип задачи. По-русски распознаётся хуже.
Modelqwen2.5:7bТочное имя модели в Ollama. Быстрая, не думающая.
Model classmediumРазмер модели. 3B → small, 7–13B → medium, больше → large. Часть техник не годится для мелких.
ProviderollamaОткуда брать модель. Второй вариант — свой OpenAI-совместимый сервер.
Structured outputМодель умеет выдавать JSON по схеме принудительно. Для извлечения обязательно.
System messagesПонимает системную инструкцию. Есть почти у всех.
Tool callingТолько для агентских задач с инструментами.
Reasoning controlТолько если модель «думающая» и хочешь ускорить её, отключив размышления.
Datasetmulticoner-enНа чём проверять. Бери от 100 примеров, иначе цифры ничего не значат.
Repeats3Сколько раз прогнать каждый пример. При 1 стабильность показывает фальшивую единицу.
Optimizer rounds2Работает только для кнопки Optimize. На Benchmark и Compare не влияет.
Optimizer searchDSPy MIPROv2Тоже только для Optimize. Из четырёх вариантов только он давал прирост.

Порядок кнопок: Create my prompt → Create with this technique → Benchmark this prompt → Compare all recommended. Optimize the prompt — в последнюю очередь, если захочешь выжимать дальше.

Что это делает

Обычно промпт пишут наугад и правят, пока не покажется, что стало лучше. Проверить это нечем.

Здесь по-другому: инструмент подбирает способ составить промпт, показывает готовый текст и прогоняет его на настоящей модели по десяткам примеров. В конце ты видишь цифры вместо ощущений.

Четыре кнопки, по порядку

1. Create my prompt

Описываешь задачу своими словами. Получаешь ранжированные методы с объяснением, почему именно эти, и готовый промпт для первого из них.

2. Create with this technique

На любом другом методе из списка. Показывает промпт, в который собирается он, — ровно тот текст, который уйдёт в модель.

3. Benchmark this prompt

Проверяет этот промпт на живой модели по всем примерам датасета. Это главная кнопка.

4. Compare all recommended

То же самое, но сразу для всех трёх способов, чтобы выбрать лучший.

Две главные цифры

quality — насколько ответы правильные
ниже 0.5 — плохо
0.5–0.8 — терпимо
выше 0.8 — хорошо

Считается с частичным зачётом. Если из четырёх нужных вещей модель нашла три — это примерно 0.85, а не ноль. Поэтому 0.78 значит «в основном справляется, но регулярно теряет по одной штуке».

reliability — насколько ответ правильно оформлен

Это про форму, а не про смысл. Ответ пришёл как надо: правильный JSON, все нужные поля, ничего лишнего вокруг.

Не путай эти две. Бывает reliability 1.00 при quality 0.4. Это значит: модель аккуратно и в правильном формате выдаёт неправильные ответы.

Остальные цифры

mean latencyСколько секунд уходит на один пример.
mean tokensСколько токенов тратится на один пример. Это прямо деньги, если модель платная.
mean callsСколько раз дёргается модель на один пример. Больше вызовов — дороже и медленнее.
failuresСколько примеров вообще не отработало. Должно быть 0.
stabilityДаёт ли модель один и тот же ответ на один и тот же вопрос.

Три вещи, на которых легко обжечься

1. Поставь Repeats = 3. При Repeats = 1 стабильность всегда показывает 1.000. Это не значит «стабильно» — это значит «никто не проверял». Модель может выдавать разное на один и тот же вход, и ты этого не увидишь.

2. Мало примеров — цифрам верить нельзя. На 6 примерах разница в 5% ничего не значит. Бери датасет от сотни примеров, если собираешься что-то решать по результату.

3. Цифры привязаны к модели. Померил на одной модели — для другой это снова догадка. Инструмент честно пишет measured, если мерил, и prior only, если только предполагает.

Что делать по результату

Что видишьЧто делать
quality низкое, reliability высокоеФорма в порядке, смысл нет. Смотри блок Weakest examples внизу — там три худших примера. Обычно за низким качеством стоит одна повторяющаяся ошибка.
reliability низкоеМодель болтает лишнее вокруг ответа. Поставь галочку Structured output — формат начнёт применяться движком, а не просьбой.
failures больше нуляМодель не успевает отвечать. Возьми модель побыстрее — «думающие» модели тратят по 40 секунд на пример.
Всё хорошо, но дорогоСравни с более простым способом. Часто три вызова модели не окупаются качеством.
Цифры скачут между запускамиМало примеров или Repeats = 1. Увеличь и то и другое.

Кнопка Optimize

Пробует переписать промпт сама и проверяет, стало ли лучше.

Смотри только на таблицу Held-out validation — это проверка на примерах, которых оптимизатор не видел. Если там нули или минус, улучшения не было, что бы ни показывала таблица выше.

Так бывает часто. Оптимизатор легко подгоняется под те примеры, на которых учился, и на новых работает не лучше. Это нормально, просто не верь цифрам «сверху».

Свои данные

Встроенные примеры — чтобы разобраться. Выводы делай на своих. Файл — по одной задаче на строку:

{"id": "1", "input": "Мара вошла в Вейр с Капитаном Орином.",
 "expected": {"people": ["Мара", "Капитан Орин"], "places": ["Вейр"]}}

Обязательны только id и input. Остальное подберётся само.

Одно правило. Правильный ответ должен встречаться в тексте слово в слово. Если в тексте «Капитаном Орином», а в ответе «Капитан Орин» — модель получит незачёт за то, что не угадала твою форму записи.

Подробности — если нужно копать глубже

Откуда берётся quality

Это метрика field_f1: считает и то, что модель пропустила, и то, что она придумала лишнего. В таблице Graders она помечена как headline. Рядом лежит exact_match — совпало ли всё целиком, без поблажек. Он почти всегда сильно ниже, это нормально.

Проверки формата там же: json_validity (распарсился ли ответ), json_schema (совпал ли со схемой полностью), no_prose (нет ли болтовни вокруг). Если json_validity = 1.00, а field_f1 низкий — проблема в понимании задачи, а не в формате.

Откуда берётся reliability

Это доля ответов с правильным форматом, умноженная на стабильность. Отсюда и подвох с Repeats: при одном прогоне стабильность равна единице по определению, и reliability выглядит завышенной.

p95 latency

Время, в которое укладываются 95% примеров. Если оно намного выше среднего — бывают редкие очень долгие ответы. Для интерактивных сценариев это важнее среднего.

Measured против Declared

Declared — оценка из конфига техники, поставленная до всяких замеров. Measured — что получилось на самом деле. Расхождение — это польза, а не ошибка: после замера конфиг перестаёт учитываться.

Сравнение техник

Колонка Weighted — сводная оценка с твоими весами. Но если у стоимости токенов ненулевой вес, техника может выиграть за счёт дешевизны, будучи хуже по сути. Сверяйся с колонкой Quality.

Колонки latency и tokens в сравнении относительные — считаются от лучшей техники в этом же прогоне, и с другими прогонами не сопоставимы.

Pareto front в оптимизации

Список вариантов, которые никто не превзошёл сразу по всем признакам. Среди них иногда есть вариант и точнее, и дешевле того, что объявлен победителем.

Стадии промпта

У некоторых техник промпт разбит на несколько стадий — это несколько вызовов модели подряд. Надписи вида {previous} — места, куда во время работы подставится результат предыдущей стадии.

Пустые примеры в датасете

Оставляй в данных случаи, где правильный ответ — пустой. Без них промпт, который угадывает наугад, будет выглядеть хорошо: ошибкам не на чем проявиться.

Ещё подробнее — в README.md и папке docs/.