Перейти к содержанию

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).