Типичный пайплайн: одна модель пишет, другая проверяет. Промпт проверяющему выглядит примерно так: «Сверь текст с источником и перечисли проблемы. Если проблем нет — напиши OK».
Это работает на демо и разваливается на потоке. Разберём, почему, и как сделать надёжнее. Пример — конвейер, который пишет короткие новости по пресс-релизам и сверяет их с первоисточником.
Что идёт не так
Если прогнать один и тот же набор текстов через несколько проверяющих моделей с таким промптом, картина будет неприятной:
- Вердикты противоречат друг другу. Один и тот же текст одна модель пропускает, другая бракует.
- Одна модель противоречит сама себе. Включили «режим рассуждений» — вердикт по тому же тексту поменялся.
- Ошибка проскакивает за секунды. Текст с явным преувеличением («исследование доказало» вместо «нашли связь») проходит, потому что модель не нашла, к чему придраться в целом.
- Проверяющий придирается к стилю. Попросите найти «проблемы» — он найдёт разговорные обороты и назовёт их «ненаучными». Каждый раунд правок делает текст суше, пока он не превратится в канцелярский отчёт.
Корень один: вопрос «есть ли проблемы?» заставляет модель одним махом оценить весь текст и выдать общее впечатление. Общее впечатление плохо воспроизводится.
Как сделать надёжнее
1. Разметка по фразам. Текст режется на предложения кодом. Модель получает список и для каждого предложения ставит метку из короткого фиксированного набора:
ok— подтверждается источником;no_source— в источнике этого нет;number— цифра не совпадает;overstated— сказано сильнее, чем в источнике;style— не фактическая проблема.
Плюс короткая цитата из источника для каждой метки.
2. Вердикт считает код, а не модель. Правило в коде: если есть хоть одна метка no_source, number или overstated — текст не проходит. style в вердикт не идёт. Модель больше не решает «пропустить или нет», она только отвечает на узкий вопрос по каждой фразе.
3. Цифры сверяет код. Все числа из текста можно достать регуляркой и поискать в источнике. Модели для этого не нужны. Одна деталь: сравнивайте только цифры, без разделителей, иначе «27,6» и номера патентов вроде 9,168,698 дадут ложные срабатывания.
4. Проверяющий — модель другого семейства. Модель плохо замечает собственные выдумки: она «узнаёт» их как правдоподобные. Если пишет модель одного разработчика, проверяет модель другого.
5. Правится только отмеченное. Не просите переписать весь текст: при полной переписке появляются новые ошибки. Исправляются только отмеченные фразы. Если после двух раундов фраза всё ещё не подтверждается — её удаляют. Удаление не может добавить ошибку.
Как выбрать проверяющую модель
Не по двум-трём прогонам «понравилось/не понравилось». Соберите эталонный набор: 15–20 текстов, в которые вы специально внесли известные ошибки — неверную цифру, перепутанные роли («компания подала в суд» вместо «на компанию подали в суд»), преувеличение, выдуманную деталь. Для каждой модели посчитайте:
- сколько ошибок поймано;
- сколько пропущено;
- сколько раз забракован правильный текст.
Нередко оказывается, что дешёвая модель на такой разметке ловит столько же, сколько дорогая. Это видно только на эталоне.
Что всё равно пропускают
Две проверяющие модели подряд всё ещё могут пропустить перепутанные роли, латинские буквы внутри русских слов и ссылку на источник, которого нет в материалах. Поэтому последним звеном остаётся человек, который читает текст перед публикацией. Автоматика уменьшает объём его работы, а не заменяет его.
Коротко
- Узкий вопрос по каждой фразе вместо общего «есть ли ошибки».
- Метки ставит модель, вердикт считает код.
- Цифры сверяет код.
- Пишет одна модель, проверяет другая.
- Правьте только отмеченное; не подтвердилось — удалите.
- Модель-проверяющего выбирайте на эталоне с известными ошибками.