Harness-паттерны индустрии: синтез и внедрение (2026-08-23)¶
Синтез пяти источников о том, как индустрия строит надёжные «харнессы» (обвязки) вокруг стохастических LLM, и что из этого уже применимо к
opencode_initializer. Уровни доверия по лестнице источников:[L1]peer-review / первичный трек,[L2]авторитетный вторичный источник / практик,[L3]методология автора.
Источники¶
| # | Источник | Уровень |
|---|---|---|
| S1 | Хабр: «Что такое Harness?» (разбор Claude Code / OpenAI / LangChain), апр 2026 | [L2] авторитетный secondary |
| S2 | СТРАТУМ (aistratum.ru) + Хабр 1043198 «Как превратить стохастический ИИ в детерминированную машину» | [L3] методология автора |
| S3 | Mitchell Hashimoto, «My AI Adoption Journey», фев 2026 | [L2] практик |
| S4 | arXiv 2603.28052 «Meta-Harness: End-to-End Optimization of Model Harnesses» | [L1] peer-review трек |
| S5 | LangChain TerminalBench-кейс (из S1): инфраструктура без смены модели → топ-5 бенчмарка | [L2] |
Извлечённые паттерны → статус проекта → действие¶
| # | Паттерн | Источник | Что было в проекте | Что сделали |
|---|---|---|---|---|
| 1 | Verification triad (rules-based + visual + LLM-as-judge) — три независимых контура проверки | S1, S3 | CI-проверки и sandcastle-review существовали разрозненно, без общей доктрины | Доктрина зафиксирована в coprocessor skill |
| 2 | Error taxonomy, 4 класса: transient → retry/backoff; recoverable → вернуть ошибку как результат (модель скорректируется); user-fixable → interrupt + вопрос; unexpected → проброс через err(); retry ≤ 2 для неидемпотентных | S1 (Stripe) | _curl/_retry были, но без формальной таксономии | Конвенции добавлены в CONTRIBUTING |
| 3 | SCEI ordering (System → Context → Examples → Input): статичные тяжёлые блоки строго до динамического ввода ради KV-cache / prompt-cache hit | S2 | Модуль 60-caching ставил плагины кэширования, порядок блоков не был нормирован | Правило зафиксировано в coprocessor skill |
| 4 | PLA: слои конвейера общаются только JSON-контрактами (Extract / Analyze / Verify / Synthesize / Coordinate) | S2 | WAL в JSONL уже стандартизировал состояние | Частично принято; остальное явно отклонено (см. ниже) |
| 5 | Memory-as-hint: память — подсказка, верифицировать против актуального состояния перед действием | S1 | Принцип artifacts-over-specs уже действовал | Явная формулировка в skill |
| 6 | Harness-engineering loop: каждая ошибка агента → строка в AGENTS.md или запрограммированный инструмент | S3 (Mitchell) | Практика была стихийной | Правило в skill + CONTRIBUTING |
| 7 | Ralph Loop: Initializer + Coding-агент, преемственность через progress-файлы и git | S1 (Anthropic) | Оркестратор уже резюмировался через progress | Реализовано как har ralph v1.1.0 |
| 8 | Meta-Harness: следы исполнения харнесса на ФС доступны внешнему оптимизатору | S4 | .swarm/evidence + knowledge + consensus_mine уже фиксировали следы | Маппинг задокументирован; outer-loop отложен |
| 9 | Token-efficiency: кириллица ≈×2 токена → машинно-потребляемые артефакты на английском | S2 | Де-факто соблюдалось | Конвенция в CONTRIBUTING |
| 10 | Lost in the Middle: ключевой контекст в начало и конец окна | S1, S2 | Учитывалось исторически | Упомянуто в skill |
Карта применимости (что где живёт в проекте)¶
| Паттерн | Точка внедрения в проекте | Тип внедрения |
|---|---|---|
| 1. Verification triad | .opencode/skills/coprocessor/SKILL.md — doctrine-блок | Конвенция для агента |
| 2. Error taxonomy | CONTRIBUTING.md — подсекция Error handling | Норма для разработчика |
| 3. SCEI ordering | .opencode/skills/coprocessor/SKILL.md | Инструкция агента |
| 5. Memory-as-hint | .opencode/skills/coprocessor/SKILL.md | Инструкция агента |
| 6. Harness-engineering loop | SKILL.md + CONTRIBUTING.md | Норма + инструкция |
| 7. Ralph Loop | scripts/har — субкоманда ralph | Код + юнит-тест |
| 8. Meta-Harness | маппинг на .swarm/evidence + knowledge + consensus_mine + har evolve | Документация (outer-loop отложен) |
| 9. Token-efficiency | CONTRIBUTING.md — подсекция Token-efficiency | Норма для разработчика |
| 10. Lost in the Middle | .opencode/skills/coprocessor/SKILL.md | Инструкция агента |
| Глобально | ~/.config/opencode/instructions/harness-principles.md + kimi SYSTEM.md | Машинный слой (вне репозитория) |
Отклонено и почему¶
- Полный JSON-контракт между bash-модулями (PLA в чистом виде, S2) — избыточно: WAL в JSONL уже стандартизирует межмодульное состояние. Накладывать JSON-контракты ещё и на вызовы функций внутри оркестратора — двойная бухгалтерия без выигрыша.
- Автоматический outer-loop поиск по коду харнесса (как в S4) — отложено: требует eval-контура для измерения эффекта правок. Пока ограничиваемся фиксацией следов в
.swarm(см. паттерн 8), чтобы будущий оптимизатор имел материал для старта.
Внедрено в этой волне¶
har ralph— bounded health-convergence loop (паттерн 7), юнит-тест.- Doctrine-блок в coprocessor SKILL.md (паттерны 1, 3, 5, 6, 10).
- Конвенции ошибок и токенов в CONTRIBUTING.md (паттерны 2, 9, 6).
- Глобальные принципы:
~/.config/opencode/instructions/harness-principles.md+ компактный блок в kimi SYSTEM.md.
Применимость к проекту¶
Принцип выбора: берём то, что уже наполовину есть в проекте и что можно закрепить конвенцией или дешёвым кодом, — и откладываем то, что требует новой инфраструктуры (eval-контур, внешний оптимизатор).
- Verification triad и error taxonomy — «бесплатные» инварианты: они лишь формализуют существующую практику, не требуя нового кода.
- SCEI и token-efficiency — прямые инструкции для агентов; их выполнение напрямую снижает токен-стоимость (кириллица ≈×2) и повышает cache-hit.
- Ralph Loop — единственный новый код, и он опирается на уже существующие
setup.sh --health/--fix-config/--fix-zshrc, не выходя за границы известных «лечений». Преемственность через progress-файлы и git соответствует паттерну 7. - Meta-Harness — маппинг задокументирован, но автоматический outer-loop отложен до появления eval-контура; следы в
.swarm— это будущий тренировочный материал.
Вывод¶
Пять источников сходятся в одном: надёжность агента — свойство харнесса, а не модели. Индустрия не «уговаривает» LLM быть детерминированной, а строит вокруг неё детерминированные контуры: верификацию, таксономию ошибок, порядок контекста и фиксацию следов для следующей итерации. Проект уже шёл по этому пути (WAL, sandcastle, caching); данная волна закрепляет это явной доктриной и одним точечным инструментом (har ralph).