SSD Nodes Learn Hosting plans →
Руководства Matt ConnorАвтор: Matt Connor · Обновлено 2026-08-27

Что такое агентная обвязка (agent harness) в LLM

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

Что такое агентная обвязка (agent harness)

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

Последнее предложение — ключевое. Сама по себе модель отвечает на вопрос и забывает о вас. Обвязка спрашивает модель, что делать дальше, выполняет запрошенную моделью команду, возвращает результат и спрашивает снова. Именно это повторение люди имеют в виду, когда говорят «агент». Если терминология всё ещё кажется неясной, разница между AI-агентом, LLM и ассистентом поможет разобраться в понятиях, прежде чем вы выберете инструмент.

Инструментарий — это не модель

Эти понятия часто путают, так как вендоры выпускают их под одним брендом.

dsh и DeepSeek — это разные продукты. DeepSeek Harness, опубликованный на github.com/deepseek-ai/deepseek-harness 13 августа 2026 года под лицензией MIT, представляет собой программу на Node, которую вы устанавливаете на машину. Модели DeepSeek — это веса, доступные через API (интерфейс прикладного программирования). Укажите dsh на модель от другого вендора, и она продолжит работать, так как инструментарию нужно лишь то, что принимает сообщения и возвращает вызовы инструментов.

Claude Code и Claude — это такая же пара. Claude Code — это инструментарий: терминальная программа с циклом работы, системой разрешений, а также инструментами для работы с файлами и оболочкой. Claude — это семейство моделей, которое программа вызывает по умолчанию. Codex и Gemini CLI разделены таким же образом.

Вот тест, который всегда расставляет всё по местам. Вы устанавливаете инструментарий. Вы вызываете модель. Если у программы есть версия на вашем диске и конфигурационный файл в домашней директории, это инструментарий. Если это строка внутри такого конфигурационного файла, например deepseek-chat, то это модель.

Что на самом деле делает цикл

Один виток цикла обвязки (harness) выглядит следующим образом. Читайте внимательно, так как почти все различия между реализациями обвязок кроются именно в этих пяти шагах.

  1. Обвязка отправляет текущую историю диалога вместе со списком определений инструментов в модель.
  2. Модель отвечает текстом или запросом на вызов одного из этих инструментов.
  3. Обвязка проверяет этот запрос на соответствие своим правилам доступа и либо выполняет его, либо останавливается, чтобы спросить вас.
  4. Обвязка запускает инструмент, захватывает вывод и код завершения, а если вывод слишком длинный — обрезает его.
  5. Обвязка добавляет полученный результат в историю диалога и возвращается к шагу 1.

Шаг 3 — это то, чем обвязки чаще всего различаются в повседневном использовании. Обвязка, которая запрашивает подтверждение перед каждой командой, безопасна, но утомительна. Обвязка, которая никогда не спрашивает, рано или поздно выполнит деструктивную команду по неверному пути, который выбрала модель. В каждой серьезной обвязке сейчас есть промежуточный вариант: список разрешенных команд (allowlist), которые выполняются без подтверждения, и запрос для всего остального.

Шаг 1 — это то, где кроются остальные различия. Обвязка также записывает системный промпт, который сопровождает каждый из этих запросов. Claude Code предоставляет вам прямой доступ к этой настройке, поскольку редактирование стиля вывода меняет системный промпт, что влияет на каждый последующий ответ. Диалог растет с каждым витком, а у модели есть фиксированное окно контекста, поэтому обвязка должна решать, что отбросить, что обобщить, а что записать в файл и прочитать позже. Это решение — основная причина, по которой две разные обвязки, управляющие одной и той же моделью, выдают разное качество работы. Если эти пять шагов все еще кажутся абстрактными, лучше всего один раз написать простейший цикл самостоятельно — именно это предлагается сделать в начале пути в поэтапном руководстве по изучению AI-агентов.

Большинство обвязок сейчас подключают внешние инструменты через MCP (model context protocol) — стандартный способ предоставления инструмента любой обвязке, поддерживающей этот протокол, благодаря чему одна интеграция работает с несколькими обвязками. Запуск MCP-серверов на VPS охватывает эту сторону вопроса. Веб-поиск обычно является первым инструментом, который добавляют пользователи, а настройка агента на собственный экземпляр SearXNG позволяет избежать сторонних запросов, при этом четко обозначая, что каждая страница, которую читает агент, является недоверенным вводом, поступающим внутрь цикла.

Агентный каркас (harness) против агентного фреймворка

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

Фреймворк — это библиотека, которую вы импортируете. Вы пишете цикл, вы решаете, когда обращаться к модели, вы самостоятельно обрабатываете результаты работы инструментов. LangChain — известный пример: вы получаете строительные блоки и собираете агента в коде.

Каркас (harness) — это программа, которую вы запускаете. Цикл уже написан, инструменты уже существуют, модель разрешений уже имеет настройки по умолчанию. Вы получаете работающего агента после первой команды и настраиваете его в процессе работы.

Тест на установку обычно расставляет всё по местам. Если вы устанавливаете решение, а затем пишете код — это фреймворк. Если вы устанавливаете решение, а затем начинаете с ним взаимодействовать — это каркас.

Граница между ними действительно размыта, и самое явное доказательство — документация самого LangChain. По состоянию на август 2026 года она описывает Deep Agents как «автономный фреймворк с набором готовых решений» (opinionated, batteries-included), построенный на базе LangGraph, в то время как репозиторий langchain-ai/deepagents называет себя «агентным каркасом с набором готовых решений». Оба описания верны. Deep Agents — это Python SDK (software development kit), который вы импортируете, поэтому тест на установку классифицирует его как библиотеку, но он поставляется с таким количеством стандартного поведения, что люди используют его как каркас. В августе 2026 года Microsoft выпустила каркас и хостинг для агентов в общедоступную версию, что доказывает: теперь это не просто жаргон, а категория продукта.

Поэтому задайте вопрос, который поможет определить ваш объем работы. Если вы пишете цикл, вы отвечаете за него: за повторные попытки, за обрезку контекста, за запросы разрешений и за логирование событий. Если цикл поставляется в готовом виде, вы наследуете чужое решение всех этих задач, что значительно ускоряет старт, но затрудняет внесение изменений в будущем.

Чем harness отличается от окна чата

Окно чата и harness отображают результат работы модели. Разница заключается в том, на чьём компьютере выполняются вычисления. В окне чата любой код, запускаемый моделью, выполняется внутри изолированной среды (sandbox) поставщика услуг, работает с загруженными вами файлами и удаляется по завершении сессии. Harness запускает инструменты на той машине, где вы его активировали, от имени пользователя, который его запустил, используя ваши реальные файлы и ваши реальные учётные данные в текущем окружении.

В этих двух предложениях заключены все преимущества и все риски. Агент наконец-то может выполнять работу. Агент также может эту работу удалить.

Используемые на практике среды исполнения

Этот список намеренно датирован 19 августа 2026 года. Категория инструментов меняется еженедельно, поэтому любые обзоры быстро устаревают.

  • Claude Code и Codex — это проприетарные среды исполнения. Они ориентированы на работу в терминале, по умолчанию привязаны к моделям своих разработчиков и обладают наиболее проработанной системой управления правами доступа. В статье Сравнение Claude Code, Cursor, Codex и Copilot приводится их подробный разбор.
  • DeepSeek Harness (dsh) распространяется по лицензии MIT и строится на одной идее: всё является плагином. Модели, инструменты, сессии, изолированные среды (sandboxes) и пользовательский интерфейс — это взаимозаменяемые компоненты. Каждый установленный плагин работает с правами самого агента, поэтому проверка доступа плагина dsh перед его установкой здесь важнее, чем в средах с фиксированным набором инструментов. На 19 августа 2026 года, через шесть дней после публикации, проект набрал около 166,800 звезд на GitHub.
  • Hermes от Nous Research — это скорее универсальный автономный агент, чем инструмент для написания кода. Он выпущен под лицензией MIT в феврале 2026 года и хранит свои воспоминания и навыки в локальной базе данных SQLite на вашей машине. В руководстве Самостоятельный хостинг Hermes на VPS описан процесс его развертывания.
  • Omnigent — это мета-среда: она управляет другими средами, включая Claude Code и Codex, через единый API с общими сессиями, лимитами расходов и изолированной средой на уровне операционной системы. В статье Omnigent как мультиагентная среда рассматриваются преимущества такого подхода.
  • OneCLI — это изолированная среда для командной работы, построенная вокруг шлюза, который внедряет реальные учетные данные в исходящие запросы, чтобы сам агент видел только ключи-заглушки.

Три из этих инструментов часто оказываются в одном шорт-листе, поэтому стоит прочитать статью Сравнение DeepSeek Harness, Claude Code и Omnigent, где рассматриваются вопросы привязки к моделям, лицензирования, зрелости продукта и требований к серверу для их запуска.

Быстрый старт dsh выполняется одной командой, и её однократный запуск — самый быстрый способ понять, что представляет собой среда исполнения. Для работы на машине требуется Node.js.

npx @deepseek-ai/dsh web

Эта команда запускает веб-интерфейс (user interface) по адресу http://127.0.0.1:3080. Прочитайте README, прежде чем использовать инструмент в работе, так как dsh позиционируется как версия для разработчиков (developer preview), и в ней прямо заявлено о возможных изменениях, нарушающих обратную совместимость. Если эта команда завершается ошибкой или загружает не ту сборку, которую вы ожидали, фиксация точной версии dsh и очистка кэша npx обычно решает проблему. В статье Запуск DeepSeek Harness на VPS описана установка на сервер, а почему этот адрес начинается с 127.0.0.1 объясняет использование loopback-интерфейса по умолчанию.

Маршрутизаторы располагаются над обвязкой

Модельный маршрутизатор — это локальный прокси между обвязкой и API провайдера. Claude Code Router является типичным примером: он по умолчанию привязывается к 127.0.0.1:3456, принимает запросы, которые Claude Code отправил бы своему поставщику, и перенаправляет их тому провайдеру, которого вы настроили. Обвязка не знает о том, что что-то изменилось.

Маршрутизаторы существуют, так как модель можно заменить, поэтому они служат хорошим доказательством основного тезиса этой статьи. Они также концентрируют риски, поскольку прокси видит каждый запрос и хранит ключи всех провайдеров. Относитесь к ним как к инфраструктуре, а не как к удобному инструменту. Где обвязка хранит свои API-ключи и настройки моделей — это та же проблема, но на уровень ниже.

Что меняется при запуске harness на VPS

При переносе harness с локального компьютера на арендованный сервер меняются четыре аспекта.

Процесс продолжает работу после закрытия крышки ноутбука. Длительная задача переживет вашу поездку и разрядку аккумулятора. Запустите её внутри tmux и отсоединитесь от сессии:

tmux new -s agent
# start the harness, then press Ctrl-b and then d to detach
tmux attach -t agent

Для задач, которые должны возобновляться после перезагрузки, пользовательский сервис (user service) надежнее терминальной сессии:

loginctl enable-linger $USER
systemctl --user status my-agent.service

loginctl enable-linger — это то, что часто упускают из виду. Без этой настройки systemd завершает пользовательские сервисы сразу после закрытия последней SSH-сессии. В результате агент прекращает работу при выходе из системы, не выводя сообщений об ошибках. В запуске dsh в фоновом режиме через systemd приведен пример файла юнита. Как только на сервере запущена одна сессия, вторая не требует дополнительных ресурсов, а две сессии Claude Code на одном узле могут обмениваться сообщениями. Это позволяет сессии, запущенной утром, передать задачу другой сессии без вашего участия.

Сервер хранит ваши ключи. Ключ провайдера теперь находится в конфигурационном файле на сервере. Проверьте права доступа к нему:

ls -l ~/.config

Любой процесс, запущенный от имени вашего пользователя, может прочитать этот файл, включая агента и всё, что агент запускает.

Сервер имеет доступ к другим вашим машинам. VPS в той же частной сети, что и другие ваши узлы, предоставляет агенту маршрут к ним. В этом и заключается основная цель, но это также определяет радиус поражения при инциденте.

Сервер доступен из любой точки. Большинство harness предоставляют веб-интерфейс, и обычно они привязаны к loopback не просто так. Проверьте настройки вашего экземпляра:

ss -tlnp | grep 3080

127.0.0.1:3080 означает, что подключиться может только сам сервер. 0.0.0.0:3080 означает, что доступ открыт любому, кто знает адрес. Получайте доступ к интерфейсу через SSH-туннель вместо изменения адреса привязки:

ssh -N -L 3080:127.0.0.1:3080 you@your-server

Затем откройте http://127.0.0.1:3080 в браузере на своем ноутбуке. Трафик передается внутри SSH-сессии, поэтому в интернет не выставляются новые порты.

Каждый из этих пунктов также является аргументом в пользу безопасности

Рассмотрите эти четыре свойства так, как их рассматривает злоумышленник.

Агент работает без присмотра, поэтому никто не заметит момент, когда модель неверно интерпретирует путь. Он хранит ваши ключи, поэтому один доступный для чтения файл конфигурации — это доступ ко всей вашей учетной записи у провайдера. Он имеет доступ к другим вашим машинам, поэтому prompt injection (инструкции, скрытые на веб-странице или в файле, который читает агент) открывает путь к хосту вашей базы данных. Он доступен отовсюду, поэтому веб-интерфейс, привязанный к 0.0.0.0 без пароля, становится командной оболочкой, открытой для всего интернета.

Решение в каждом случае тривиально, и оно всегда одинаково. Предоставьте агенту его собственную непривилегированную учетную запись вместо вашей:

sudo adduser --disabled-password --gecos "" agent

Оставьте веб-интерфейс на loopback и подключайтесь к нему через SSH. Предоставьте агенту минимально необходимые учетные данные, позволяющие ему выполнить задачу, о чем подробно рассказано в как не хранить секреты в AI-агентах. Для всего, что работает без вашего присмотра, одноразовая машина лучше, чем тщательно настроенная: запуск агентов для программирования в одноразовых VM и безопасный запуск Claude Code на VPS используют именно этот подход.

Нужна ли вам обвязка для агента?

Если ваша работа состоит из одиночных вопросов, достаточно окна чата, а обвязка лишь добавит цикл, который придется контролировать. Обвязка начинает окупаться, когда задача требует множества шагов с реальными файлами или когда она должна выполняться, пока вы спите.

Большинство инструментов в этой категории еще молоды. dsh в своем README по состоянию на август 2026 года указывает статус developer preview, а остальные развиваются настолько быстро, что конфигурационный файл, написанный сегодня, может потребовать правок уже в следующем месяце. Это повод поддерживать настройку в минимальном и воспроизводимом виде, а также фиксировать все внесенные изменения. Та же сдержанность полезна и внутри цикла, где навык, подталкивающий агента к минимально возможным рабочим изменениям оставляет вам diff, который можно прочитать после завершения автоматического запуска. Начните с одной обвязки на одном сервере, дайте ей одну задачу и один ключ с ограниченными правами, а расширяйте доступ только после того, как первая задача станет для вас скучной в течение недели. Self-hosted агенты, которые стоит запускать сегодня — подходящее место для выбора первого инструмента.

FAQ

Что такое agent harness простыми словами?

Это программа, работающая вокруг модели. Модель генерирует текст и запросы на использование инструментов. Harness поддерживает цикл взаимодействия: запрашивает действия, выполняет инструменты, которые запрашивает модель, следит за правилами доступа к инструментам без подтверждения, а также сохраняет состояние сессии и файлы между итерациями. Если заменить модель, harness продолжит работу — это главный признак того, что они являются независимыми компонентами.

Claude Code — это модель или harness?

Claude Code — это harness. Это терминальная программа с циклом работы, системой разрешений и встроенными инструментами для работы с файлами и оболочкой. Claude — это семейство моделей, которые программа вызывает по умолчанию. Такое же разделение применимо к DeepSeek Harness (dsh), который представляет собой Node-программу для установки, и моделям DeepSeek, доступным через API. Harness устанавливается на машину. Модель вызывается по сети.

В чем разница между agent harness и agent framework?

Framework — это библиотека, которую вы импортируете и используете в своем коде; вы сами управляете циклом, повторными попытками и контекстом. Harness — это готовая программа, которую вы запускаете; все эти механизмы уже встроены, и вы их настраиваете, а не пишете с нуля. На практике грань размыта: например, Deep Agents от LangChain — это SDK, который в собственном репозитории по состоянию на август 2026 года называют agent harness с полным набором функций. Задайте себе вопрос: будете ли вы писать цикл обработки самостоятельно? Ответ на него определит, какой термин подходит для вашей ситуации.

Нужен ли мне VPS для запуска agent harness?

Нет. Каждый упомянутый здесь harness работает на ноутбуке. Использование сервера меняет четыре аспекта: агент продолжает работу, когда вы закрываете крышку ноутбука; ключи хранятся на постоянно включенной машине; агент получает доступ к другим вашим серверам; вы можете вернуться к одной и той же сессии с любого устройства. Каждый из этих пунктов требует внимания к безопасности, поэтому создайте для агента отдельную учетную запись пользователя и привязывайте любой веб-интерфейс к 127.0.0.1.

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

Обычно да, это определяющее свойство harness. Большинство из них позволяют указать имя модели и базовый URL в конфигурации, поэтому переключение на другого провайдера требует лишь правки настроек, а не переписывания кода. Если harness не поддерживает это напрямую, между ним и провайдером можно установить локальный маршрутизатор, такой как Claude Code Router, который будет транслировать запросы, по умолчанию привязываясь к 127.0.0.1:3456. Будьте осторожны с таким прокси, так как он видит все промпты и хранит все ключи.