Анатомия Harness

Внутри Harness

«Сырая» модель принимает текст и генерирует текст. Она не может обращаться к файлам, вызывать API, поддерживать состояние или выполнять код. Harness предоставляет все эти возможности — это каркас, который делает интеллект модели полезным.

📋
01

Системный Промпт

Определяет роль, возможности и поведенческие ограничения агента.

Системный промпт — это первый уровень контроля harness — он формирует то, как модель интерпретирует каждый запрос пользователя и какие стратегии применяет.

🔧
02

Инструменты и Навыки

API, базы данных, веб-поиск, файловые системы, выполнение кода — всё, что агент может использовать.

Инструменты регистрируются с описаниями, чтобы модель знала, что доступно. Навыки объединяют связанные инструменты и инструкции для постепенного раскрытия.

🔄
03

Логика Оркестрации

Цикл агента, создание субагентов, маршрутизация моделей и декомпозиция задач.

Harness запускает цикл ReAct — рассуждение, действие, наблюдение, повтор. Он управляет тем, когда создавать субагентов, к какой модели маршрутизировать и когда остановиться.

🧠
04

Память и Состояние

История разговоров, контекстные файлы и постоянные знания между сессиями.

Файловая система — это фундаментальный примитив памяти. Файлы вроде AGENTS.md позволяют агентам надёжно хранить и извлекать знания между сессиями.

📦
05

Песочницы

Изолированные среды выполнения для безопасного запуска кода, сгенерированного агентом.

Песочницы предоставляют агенту безопасное рабочее пространство для запуска кода, установки зависимостей и проверки результатов без риска для хост-среды.

06

Middleware и Хуки

Детерминированная логика, срабатывающая до/после вызовов моделей и выполнения инструментов.

Middleware обрабатывает сжатие, повторные попытки, ограничения, одобрение человека в цикле и контроль затрат — всё, что нужно запускать в определённой точке цикла.

Как Это Работает

Цикл Агента

В основе агент — это модель, вызывающая инструменты в цикле до завершения задачи. Harness управляет этим циклом — предоставляя контекст на каждом шаге, выполняя вызовы инструментов, обрабатывая ошибки и применяя ограничения.
agent-loop.py
# Harness запускает цикл агента
def run_agent(model, tools, user_message):
    messages = [system_prompt, user_message]

    while True:
        # 1. Harness предоставляет контекст модели
        response = model.generate(messages, tools=tools)

        if response.tool_calls:
            # 2. Harness выполняет вызовы инструментов
            for call in response.tool_calls:
                result = execute_tool(call)
                messages.append(result)
        else:
            # 3. Модель завершила работу — возвращаем ответ
            return response.text

Модель решает что делать. Harness решает как делать. Именно это разделение делает агентов гибкими, тестируемыми и заменяемыми.

— Vivek Trivedy, "The Anatomy of an Agent Harness" (LangChain, 2026)

💬
Пользователь отправляет запрос
Harness вставляет системный промпт, историю разговоров и релевантную память в контекстное окно модели.
🧠
Модель рассуждает и принимает решение
LLM интерпретирует запрос, планирует подход и решает, нужен ли ей инструмент или она может ответить напрямую.
🔧
Harness выполняет вызовы инструментов
Когда модель запрашивает инструмент, harness маршрутизирует вызов к соответствующему API, песочнице или функции и возвращает результат.
👁️
Модель наблюдает результат
Вывод инструмента вставляется обратно в контекст. Модель оценивает, нужны ли ей дополнительные действия или она может сгенерировать окончательный ответ.
🔁
Цикл продолжается до завершения
Harness управляет циклом — применяя лимиты итераций, запуская middleware между шагами и обрабатывая переполнение контекста через сжатие.
Окончательный ответ возвращается
Harness применяет фильтры вывода, логирует взаимодействие и доставляет результат пользователю.
Слой Настройки

Middleware: Как Вы Формируете Harness

Middleware встраивается в цикл агента на каждом шаге — до и после вызовов моделей, до и после вызовов инструментов, при запуске и завершении. Каждая часть обрабатывает одну задачу и свободно комбинируется с любой другой. Так вы адаптируете harness под свою конкретную задачу.

📐

Управление Контекстом

Предотвращайте переполнение контекста и сохраняйте фокус модели на важном.

  • Middleware суммаризации сжимает длинные разговоры
  • Редактирование контекста удаляет шумные или нерелевантные сообщения
  • Выгрузка вывода инструментов удерживает крупные результаты вне контекста
🧠

Память и Обучение

Загружайте знания при запуске, сохраняйте выводы в конце выполнения.

  • Файлы AGENTS.md вставляются в контекст при старте
  • Навыки загружаются постепенно по мере необходимости
  • Middleware файловой системы для надёжного состояния
🛡️

Безопасность и Ограничения

Применяйте политики, которые должны срабатывать при каждом вызове независимо от поведения модели.

  • Обнаружение и маскирование PII
  • Врата одобрения человека в цикле
  • Фильтры вывода и ограничения действий
💰

Контроль Затрат

Предотвращайте неконтролируемое накопление затрат на токены.

  • Лимиты вызовов модели на задачу
  • Ограничение частоты вызовов инструментов
  • Кэширование промптов для долгих задач
🔄

Восстановление после Ошибок

Обрабатывайте временные сбои с помощью логики повторных попыток и резервных вариантов.

  • Повтор инструментов с экспоненциальной задержкой
  • Резервная модель при недоступности основной
  • Обработчики ошибок потоков
🔍

Наблюдаемость

Точно видьте, что делает агент на каждом шаге.

  • Логирование трассировки для каждого вызова модели и инструмента
  • Обработчики потоков, маршрутизирующие события к различным потребителям
  • Отслеживание пользовательского состояния через хуки middleware
middleware.py
from langchain import create_agent
from langchain.middleware import (
    SummarizationMiddleware,
    HumanInTheLoopMiddleware,
    ToolRetryMiddleware,
)

agent = create_agent(
    model="anthropic:claude-sonnet-4-6",
    tools=tools,
    middleware=[
        SummarizationMiddleware(),
        HumanInTheLoopMiddleware(approval_tools=["send_email"]),
        ToolRetryMiddleware(max_retries=3),
    ],
)

Middleware группирует связанную логику в композируемые, общие модули. Один и тот же middleware может использоваться повторно для всех агентов в организации — новые агенты наследуют проверенное поведение без необходимости его пересоздавать.

— Sydney Runkle, "How to Build a Custom Agent Harness" (LangChain, 2026)

Feedforward и Feedback

Руководства vs. Сенсоры

Хорошо построенный harness служит двум целям: он увеличивает вероятность того, что агент справится с первого раза (руководства), и обеспечивает петли обратной связи для самокоррекции до того, как ошибки попадут на глаза человеку (сенсоры).

Руководства (Feedforward)

Направляют агента до действия. Руководства увеличивают вероятность хорошего результата с первой попытки.

Инференциальные
AGENTS.md
Код-конвенции, структура проекта и поведенческие правила, вставляемые в контекст.
Инференциальные
Навыки
Повторно используемые наборы инструкций, загружаемые постепенно по мере решения агентом различных задач.
Вычислительные
Интеграция LSP
Языковые серверы предоставляют проверку типов, переход к определению и структурный анализ как руководство.
Вычислительные
Документация Архитектуры
Границы модулей, правила зависимостей и функции пригодности, формирующие решения агента.
Сенсоры (Feedback)

Наблюдают после действия агента и помогают ему самокорректироваться. Особенно эффективны, когда оптимизированы для потребления LLM.

Вычислительные
Линтеры и Проверка Типов
Быстрые, детерминированные проверки, выявляющие нарушения стиля, ошибки типов и структурный дрейф.
Вычислительные
Тестовые Наборы
Модульные и интеграционные тесты, проверяющие корректность и выявляющие регрессии.
Инференциальные
Агенты Ревью Кода
AI-ревью, выявляющее семантические проблемы — избыточную инженерию, избыточный код, грубые исправления.
Вычислительные
Мутационное Тестирование
Проверяет качество тестов, вводя мутации и проверяя, обнаруживают ли их тесты.

По отдельности вы получаете либо агента, повторяющего одни и те же ошибки (только feedback), либо агента, кодирующего правила, но никогда не узнающего, работают ли они (только feedforward). Вам нужны оба.

— Birgitta Böckeler, "Harness Engineering" (Martin Fowler, 2026)

Почему Это Важно

Зачем Harness Engineering?

🎯
01

Соответствие Задача-Harness

Harness для агента обслуживания клиентов выглядит очень иначе по сравнении с harness для долгоживущего кодирующего агента. Лучшие агенты строятся не просто с мощными моделями — они строятся с harness, плотно соответствующими задаче.

🔄
02

Независимость от Модели

Поскольку harness отделён от модели, вы можете переключаться между GPT-5, Claude, Gemini или open-source моделями без переписывания логики агента. Harness абстрагирует слой модели.

🧩
03

Композируемость

Middleware, инструменты и навыки свободно комбинируются. Каждая часть обрабатывает одну задачу. Один и тот же middleware памяти работает для всех агентов. Новые возможности — в одном middleware.

🔍
04

Наблюдаемость и Доверие

Каждое решение прослеживается. Видно, что рассуждала модель, какие инструменты она вызвала, какие данные получила и почему. Необходимо для отладки, соответствия и построения доверия к автономным системам.

Часто Задаваемые Вопросы

Часто Задаваемые Вопросы

В чём разница между моделью и harness?

Модель — это AI — языковая модель, которая рассуждает, планирует и генерирует текст. Harness — это всё остальное — системные промпты, инструменты, память, песочницы, логика оркестрации и middleware, окружающие модель. Одна модель может только генерировать текст. Harness превращает её в агента, способного действовать в реальном мире.

Почему не положить всё в системный промпт?

Системные промпты — это статический текст. Они не могут выполнять код, вызывать API, управлять состоянием или динамически применять политики. Harness предоставляет возможности времени выполнения — он может выполнять вызовы инструментов, управлять переполнением контекста, повторять неудачные операции и применять ограничения независимо от того, что пытается делать модель. Некоторые вещи не могут и не должны находиться в промпте.

Что такое middleware в agent harness?

Middleware — это слой настройки, встраиваемый в цикл агента в определённых точках — до и после вызовов моделей, до и после выполнения инструментов, при запуске и завершении. Каждая часть middleware обрабатывает одну задачу (сжатие, повторы, ограничения, логирование) и комбинируется с другими. Это способ адаптировать универсальный harness под конкретную задачу.

Можно ли использовать один harness с разными моделями?

Да. Harness и модель — отдельные слои. Можно переключаться с GPT-5 на Claude или open-source модель без изменения инструментов, памяти, middleware или логики оркестрации. Эта независимость от модели является ключевым принципом проектирования паттерна harness.

Что такое руководства и сенсоры в harness engineering?

Руководства — это элементы управления feedforward, направляющие агента до действия — системные промпты, код-конвенции, документация архитектуры и навыки. Сенсоры — это элементы управления feedback, наблюдающие после действия агента и помогающие ему самокорректироваться — линтеры, тестовые наборы, агенты ревью кода и мутационное тестирование. Хорошему harness нужны оба, чтобы предотвращать ошибки и обнаруживать их при возникновении.

Что такое соответствие задача-harness?

Соответствие задача-harness — это то, насколько хорошо ваш harness соответствует реальным требованиям задачи — необходимому контексту, возникающим ошибкам, применяемым политикам и среде функционирования. Кодирующему агенту нужен доступ к файловой системе, песочницам и тестовым раннерам. Агенту обслуживания клиентов нужна память, процессы одобрения и интеграция с CRM. Лучшие агенты строятся с harness, плотно соответствующими их миссии.

Готовы Строить с Harness?

Создайте AI-агента с пользовательским harness, адаптированным под ваш бизнес. Подключите свои инструменты, настройте middleware и позвольте агенту сделать остальное.