Три режима промпта: RLHF, «компилятор» и сократический срез на глубине один

Три способа вести диалог с LLM в паре с кодом: один «палец вверх» на весь ответ, построчные императивы или сократический вопрос на первом ходе. Для соло в IDE с чат-агентом разница между ними измеряется вечерами: сколько циклов «исправь строку 14» вы готовы прожить, прежде чем модель снова сломает dispose. В эссе Randal L. Schwartz связывает scalar RLHF, «синтетические шрамы» и обрезку бесперспективных веток на глубине d=1 с той же усталостью от ручной компиляции вывода агента.
Когда thumbs up размазывает вину по всему маршруту
Автор сравнивает RLHF с поездкой в Google Maps: маршрут через узкий проулок экономит в функции стоимости около 3,2 секунды, но тащит риск; пользователь ставит «нравится» или «не нравится» уже после поездки, один скалярный сигнал на весь путь. Так же модель получает r ∈ [-1, +1] за цельный ответ, хотя ошибка могла сидеть в одном императиве на строке 14. Schwartz пишет, что scalar RLHF не справляется с credit assignment: нельзя честно понять, какой фрагмент промпта или какой шаг рассуждения «заслужил» провал.
Для разработчика, который кормит агента промптами под Flutter, React или Node, это не академика. Сколько раз вы готовы повторять «исправь строку 14», прежде чем модель снова сломает dispose? По привычке вы «лаете» прямые фиксы кода (barking direct code fixes) и постепенно превращаетесь в уставшего human compiler: модель генерирует сотни строк, а вы компилируете их в runtime пошаговыми командами. Schwartz описывает цикл из шести шагов, от запроса компонента до новых регрессий после каждого «поправь mounted». Именно этот образ и делает тему про промпты и обучение моделей, а не про чистый синтаксис Dart.
Somatic recoil и Synthetic Scar на глубине один
Schwartz переносит Somatic Marker Hypothesis Antonio Damasio на senior-инженера: «висцеральный откат», сжатие, wince ещё до формального доказательства, что план плох. Junior или «ванильная» LLM видит валидный синтаксис и happy-path; опытный человек (и задуманная зрелая модель) реагирует телом на ловушку. В эссе это названо somatic recoil и противопоставлено слепому следованию за красивым diff.
С точки зрения vibe coding это ближе к правилу «не принимай первый зелёный diff от Claude, GPT-4 или Gemini без проверки домена», но Schwartz не привязывает аргумент к конкретной IDE, только к роли Flight Director: вы не дописываете каждую строку, но и не отдаёте карту слепому автопилоту.
В начале серии фигурируют «topological scars»; в полном тексте термин Synthetic Scar означает то же. Анатомия из трёх частей: Wound (рана), Trap (ловушка), Permanent Reflex (устойчивый рефлекс). Scar задаёт утвердительный инвариант, а не запрет в духе «не делай X»; автор ссылается на Negation Representation Defect (образ «розового слона»).
Пример SCAR-ASYNC-04: план с Future.delayed(100ms) для гонки async встречается с известной ловушкой, score −∞, ветка отсекается на глубине 1, без тысяч thinking tokens на рационализацию. Метафора Stockfish / alpha-beta: отсечение при немедленном «−∞», не построение шахматного движка. Schwartz приводит псевдокод: если пересечение кандидата-плана с известным доменом ловушки не пусто, prune at depth 1.
Schwartz упоминает 96 production field tests и репозиторий Synthetic Scars Research Repository как «скоро публикуемый»; на странице поста кликабельной ссылки на репозиторий нет.
Meta-Model, сократика и отсечение на первом ходу
Заголовок отсылает к Richard Bandler и John Grinder (1975) и Noam Chomsky: Surface Structure против Deep Structure. Три класса искажений (Generalization, Deletion, Distortion) сопоставлены в таблице поста с кодами scar. Это рамка метакогниции («thinking about thinking»), не инструкция к терапевтическому NLP.
Поверхностный запрос «сделай как в туториале» часто выбрасывает контекст dispose/mounted; обобщение «всегда используй delayed future» превращает ловушку в «лучшую практику». Scar фиксирует deep structure ловушки, чтобы агент не раздувал combinatorial explosion; Schwartz напоминает про O(b^d) и «блестящие рационализации» при неограниченном reasoning budget (в тексте названы o1, o3-mini, Gemini Flash Thinking, Claude 3.7 Sonnet с extended thinking, без бенчмарков в эссе).
Контраст второго режима: прямая директива, zero-temperature quenching; точный сократический вопрос даёт kinetic impulse ΔK, ближе к simulated annealing. Вместо «перепиши строки 10–20» вопрос, который заставляет модель сама обнаружить race на StreamSubscription и setState after dispose. В эссе разобраны code blocks на Dart/Flutter: listen, dispose, mounted, post-Socratic вариант с CancelableOperation и onError.
Промпт как «камень в пруд»: одним шагом не поправить «береговую линию» внимания модели, как в отладчике C++, нужно менять контур задачи, а не только патчить симптом.
Flight Director вместо human compiler
Готового rule file под Cursor или упоминаний MCP / Copilot / .cursorrules в primary нет, перенос на ваш стек остаётся на вас. Практический вывод Schwartz: сменить роль с компилятора на дирижёра полёта, сократические вопросы, scars как depth-1 pruning, affirmative invariants вместо запретов. Анонсирован Part 4 (Rapid-Regret Commit Signature, Riverbank Theorem, Framework Poka-Yoke); текущий URL, часть серии, не финальный how-to.
Если вы соло и живёте в чате с моделью рядом с репозиторием, один эксперимент на неделю: для повторяющейся async-ловушки сформулируйте scar-инвариант своими словами и проверьте, сокращает ли он число императивных «исправь строку N», без ожидания реестра SCAR-* от автора.
Источники
- Randal L. Schwartz, «The Physics of Socratic Prompting: Somatic Recoil, Chess Alpha-Beta, & The NLP Meta-Model» (Dev.to, опубликовано 1 октября 2026 UTC): Dev.to, дата доступа 2026-10-02.
- Метрики вовлечения и время чтения (~14 мин) по карточке поста на Dev.to; число просмотров страницы в доступных полях не указано.