Чем мощнее LLM-инспектор в agent loop, тем больше он режет валидную работу

Соло-разработчик, который вешает на агентный цикл LLM-проверку качества, часто выбирает «самую умную» модель — и получает обратный эффект: инспектор начинает отбрасывать нормальные артефакты. эксперимент zxpmail сравнил три уровня инспекторов на одних восьми сценариях и показал классический компромисс precision–recall: локальный Ollama с моделями до 4B пропускает часть мусора, зато не режет половину валидного; API-grade GLM-5.2 ловит весь мусор, но отклоняет три четверти легитимных выходов. Для ру-соло без отдельного QA-бюджета вывод практичный: закладывайте ручную проверку ложных отклонений и смотрите на полную confusion matrix, а не на один столбец «0% false positives».
Phase gate в agent loop не заменяет смысловой контроль
Строковые phase gates — дешёвый первый слой в агентном пайплайне. Они проверяют «задача формально закрыта», но не читают содержимое. В серии экспериментов автора phase gate пропускал все восемь сценариев: четыре валидных (research brief, черновик ~2000 слов, файлы глав, test log с «42 passed») и четыре мусорных — от «I am a little duck, quack quack» до «0 passed (no tests collected), exit 0».
Phase gate даёт 50% false-positive на мусоре и 0% ложных отклонений валидного — иллюзия детерминизма без quality signal.
Поверх gate автор добавляет LLM quality inspector: задача — поймать мусор, не срезая легитимную работу. Каждый сценарий гоняется три раза на модель с majority vote — сглаживание шума при temperature 0, которое в предыдущей части серии давало лишь 70% консистентности open-ended выхода. Lexical overlap как прокси семантики ошибался в 50% случаев; embedding-порог на Qwen3-embedding тоже провалился — cosine diff между synonymy и antonymy всего 0.026. Третий пост серии — ответ на pushback «возьми нормальную модель вместо qwen3:0.5b».
Три модели-инспектора: локальный Ollama против API
Сравнение параметризовано переменными окружения в скрипте harness-verify-test.py из репозитория github.com/zxpmail/blog (agent-determinism-illusions/scripts):
# Ollama, default
VERIFY_MODEL=qwen3:0.5b
# Ollama, 4.3B
VERIFY_MODEL=gemma3:latest
# API-grade
VERIFY_MODEL=glm-5.2
VERIFY_BASE_URL=...
VERIFY_API_KEY=...
| Инспектор | False-positive | False reject валидного | Нестабильность vote |
|---|---|---|---|
| Только phase gate | 50% | 0% | — |
| qwen3:0.5b (Ollama, 0.5B) | 25% | 50% | 2/8 |
| gemma3:latest (Ollama, 4.3B) | 25% | 50% | 0/8 |
| GLM-5.2 (API) | 0% | 75% | 0/8 |
False-positive монотонно падает с ростом модели. qwen3 и gemma3 упираются в 25% и оба пропускают кейс G4 — «exit 0, 0 passed (no tests collected)»: формально тесты «прошли», семантически пусто. GLM-5.2 читает смысл и ловит «no tests collected».
Сильный инспектор: ноль мусора, три четверти валидного под нож
GLM-5.2 отклонил 3 из 4 валидных выходов — research brief, first draft и chapter files. Прошёл только test log с явным «42 passed». Слабые локальные модели режут валидное в ~50% случаев, но оставляют четверть мусора на выходе.
Автор называет это «0% false positive mirage»: метрика «ноль ложных срабатываний на мусоре» без столбца false rejection вводит в заблуждение — раньше он сам так ошибся с DeepSeek. Сильный инспектор закрывает дыру phase gate, но переносит риск на ложные флаги по хорошей работе агента.
Для vibe-coding workflow это значит: rules и чек-листы в IDE не спасут, если финальный LLM-gate калиброван только на «не пропустить мусор». Нужна явная политика эскалации — что делать, когда инспектор отклонил draft, который человек считает годным.
Цепочка слоёв для соло-разработчика с агентом
Модель автора — три уровня, ни один не решает задачу целиком:
- Phase gate — бесплатно, но 50%+ мусора проходит.
- LLM quality gate — снижает FP, вводит false rejections; выбор точки на кривой — Ollama ≤4B против API-grade.
- Human review — ловит false rejections; без него сильный инспектор съест большую часть полезного output агента.
Локальный стек (Ollama, qwen3 или gemma3) и API-инспектор — не «хуже/лучше», а разные компромиссы. Соло без выделенного ревьюера, который каждый вечер перечитывает отклонённые черновики, разумнее закладывать время на разбор false rejections, чем гнаться за нулём на столбце false-positive.
Воспроизвести сравнение можно тем же harness: восемь сценариев, три итерации на сценарий, majority vote — и смотреть обе оси таблицы, а не только «ловит ли мусор».
Источники
- zxpmail, «I tested 3 models as AI agent quality inspectors: the stronger the model, the more valid work it rejects» — Dev.to (опубликовано 2026-07-05, доступ 2026-07-06)
- Скрипт воспроизведения: https://github.com/zxpmail/blog —
agent-determinism-illusions/scripts/harness-verify-test.py