GigaChat зацикливался на простом файле — команда Сбера научила Deep Agents понимать модель
Команда Сбера настроила harness-профиль для GigaChat в Deep Agents: задачи решаются точнее, токенов уходит вдвое меньше. Разбираем, как это работает.
Одна и та же LLM в разных агентных фреймворках может показывать совершенно разный результат — не потому что модель плохая, а потому что обвязка (harness) не знает её привычек. Команда GigaChain разобрала эту проблему на практике: собрала для GigaChat отдельный профиль под фреймворк Deep Agents и подняла долю решённых задач с 77,2% до 87,0%, одновременно сократив расход токенов почти вдвое.
Если вы строите агентов на LangChain/LangGraph и используете не только GPT или Claude, а локальные или отечественные модели — этот кейс стоит разобрать по шагам: он показывает, где именно ломается связка «модель + обвязка» и как это чинить, не трогая саму модель.
Почему одна модель работает по-разному в разных обвязках
Формально все современные LLM делают одно и то же: принимают промпт, вызывают инструменты, возвращают ответ. Но у каждой модели свои привычки, и вендоры сами их описывают в руководствах по промптингу.
OpenAI в гайде по Codex-моделям советует давать модели инструмент apply_patch для правки файлов и поощрять батчинг — привычку отправлять несколько независимых tool-вызовов за один ход. Это экономит раунды диалога, но обвязка должна явно это разрешить — и в промпте, и на уровне API.
Anthropic в руководстве по Claude рекомендует обратное: после каждого результата инструмента просить модель оценить его качество и только потом выбирать следующий шаг. Эту формулировку советуют вставлять в системный промпт почти дословно.
Обе рекомендации работают для своих моделей и бесполезны или даже вредны для чужих. Ярче всего это видно там, где под конкретную обвязку оптимизируют саму модель. Claude Code — по опросу Pragmatic Engineer самый популярный кодовый агент у разработчиков — работает хорошо ещё и потому, что Claude дообучают прямо в этой обвязке: модель и харнесс развивались вместе.
У этого есть обратная сторона. Армин Ронахер, создатель Flask и сооснователь Earendil (агент Pi), описывал случай: свежий Claude в сторонней обвязке вызывает инструмент правки файла в формате, к которому привык из своей родной среды, а в чужой схеме нужных полей просто нет. Вызов отклоняется, хотя правку модель задумала верно.
Вывод команды GigaChain: модель и обвязка — единая система, и подгонять их друг под друга можно с любой стороны. Они выбрали заходить со стороны обвязки.
Что такое профиль обвязки в Deep Agents
Deep Agents — open-source фреймворк LangChain для сборки агентных обвязок на стеке LangChain/LangGraph. Файловая система, shell, планировщик, субагенты, память и навыки в нём описаны как готовые абстракции; конкретную обвязку под задачу собирают вызовом create_deep_agent(). На основе фреймворка LangChain выпустила и готовый продукт — терминальный кодинг-агент Deep Agents Code, которому достаточно указать модель.
В феврале 2026 команда LangChain показала на Terminal-Bench 2.0: настройка обвязки под конкретную модель (в их случае GPT 5.2 Codex) подняла результат агента с 52,8% до 66,5% — модель поднялась примерно с 30-го места на 5-е в лидерборде.
Наблюдение оформили в механизм. В апреле 2026 в Deep Agents появились профили обвязки (HarnessProfile) — декларативный слой переопределений под конкретную модель:
- системный промпт;
- состав и описания инструментов;
- набор middleware — перехватчиков, которые вмешиваются в работу агента между моделью и вызовом инструментов.
Готовые профили под модели OpenAI и Anthropic вошли в поставку Deep Agents и подключаются автоматически — фреймворк смотрит на имя выбранной модели и подхватывает подходящий профиль. У Anthropic свой профиль под каждую модель (отдельно Haiku, Sonnet, Opus), у OpenAI — один общий на все Codex-модели.
На подмножестве tau2-bench, где у сильных моделей ещё есть куда расти, профиль поднимает долю решённых задач на 10–20 процентных пунктов: например, GPT 5.3 Codex с профилем вырос с 33% до 53%.
В июле по итогам собственного плейбука настройки в поставку добавили профиль под открытую модель NVIDIA Nemotron 3 Ultra — он вошёл в стабильную ветку Deep Agents 0.7.
Как собрать свой профиль на примере deepagents-gigachat
Главное: механизм открыт для сторонних разработчиков. Профиль можно оформить отдельным Python-пакетом-плагином, и Deep Agents подхватит его без изменений в коде приложения. Этим и воспользовалась команда GigaChain, выпустив deepagents-gigachat — по их данным, первый сторонний профиль, который живёт вне репозитория Deep Agents.
Чтобы измерять прогресс при настройке, команда зафиксировала бенчмарк harness-bench-fast — набор из 391 задачи. На нём проверяли гипотезы: часть правок ушла в системный промпт и описания инструментов, часть — прямо в код middleware.
Результат на зафиксированном сете:
| Метрика | Без профиля | С профилем | |---|---|---| | Доля решённых задач | 77,2% | 87,0% | | Расход токенов | базовый | ~в 2 раза меньше |
Рост точности почти на 10 процентных пунктов при сокращении токенов вдвое — это не мелкая косметика, а разница между моделью, которая ощутимо теряется в сложных задачах, и моделью, которая доводит их до конца дешевле.
Что видно на реальной задаче
Разница особенно наглядна на примере, который команда прогнала дважды — с профилем и без. Задача нарочно простая: «переименуй файл oldname.txt в newname.txt».
Без профиля GigaChat-3-Ultra повёл себя так:
[tool_call] write_file {'file_path': '/newname.txt', 'content': 'important content'}
[tool_call] execute {'command': 'rm /oldname.txt'}
[tool_call] ls {'path': '/'} # oldname.txt на месте?!
[tool_call] execute {'command': 'rm -f /oldname.txt'}
[tool_call] ls {'path': '/'} # всё ещё на месте
[tool_call] execute {'command': 'mv /oldname.txt /newname.txt'}
[tool_call] execute {'command': 'rm -f /newname.txt'} # сносит уже сделанное!
[tool_call] execute {'command': 'find / -name "oldname.txt"'}
... ещё два десятка вызовов ...
GraphRecursionError: Recursion limit of 80 reached213 секунд, десятки тысяч токенов, задача провалена — и по пути агент уничтожил уже созданный newname.txt. Модель зациклилась: повторяла одни и те же команды, пока не упёрлась в лимит из 80 шагов.
С профилем deepagents-gigachat та же модель на той же задаче отработала одним точным вызовом mv — без блуждания по файловой системе и без самосаботажа. Именно такие циклы — не ошибки в логике задачи, а срывы из-за несовпадения ожиданий модели и формата обвязки — профиль и убирает.
Где это ломается
Профиль не чинит модель — он подстраивает под неё харнесс, поэтому у подхода есть границы.
Профиль работает только внутри Deep Agents. Если ваша обвязка написана на другом стеке (например, собственный оркестратор поверх LangGraph без Deep Agents), готовый deepagents-gigachat напрямую не подключится — придётся переносить логику вручную.
Профиль подключается по имени модели. Если вы используете кастомный alias или прокси, который маскирует настоящее имя модели, автоподхват может не сработать — это стоит проверить отдельно.
Профили под разные версии одной модели не взаимозаменяемы. У Anthropic, например, отдельный профиль под каждую модель линейки — привычки Haiku и Opus не совпадают, и логично ожидать того же для будущих версий GigaChat.
Что попробовать дальше
Если вы уже используете Deep Agents с GigaChat, имеет смысл подключить deepagents-gigachat и прогнать свои задачи до и после — разница в количестве шагов и токенов обычно видна невооружённым глазом.
Если вы работаете с другой моделью, которой пока нет в поставке Deep Agents, стоит посмотреть на плейбук команды GigaChain как на шаблон: зафиксировать свой набор задач, замерить базовую точность, затем итеративно чинить промпты, описания инструментов и middleware, сверяясь с бенчмарком на каждом шаге.
FAQ
Что такое harness (обвязка) в контексте LLM-агентов
Это код вокруг модели: системный промпт, набор инструментов, логика вызовов и перехватчики (middleware), которые определяют, как модель работает с внешним миром. Одна и та же модель в разных харнессах может вести себя по-разному.
Чем профиль обвязки отличается от обычной настройки промпта
Профиль (HarnessProfile) — это декларативный набор переопределений сразу на нескольких уровнях: системный промпт, состав и описания инструментов, middleware. Он подключается как единый пакет под конкретную модель, а не собирается вручную под каждый проект.
Нужно ли дообучать модель, чтобы она лучше работала в конкретной обвязке
Не обязательно. Кейс с GigaChat показывает, что рост точности с 77,2% до 87,0% и двукратную экономию токенов дала настройка обвязки под модель, без изменений в самой модели.
Можно ли использовать deepagents-gigachat вне продуктов Сбера
Да, это открытый Python-пакет, который подключается к Deep Agents как плагин без изменений в коде приложения — команда GigaChain позиционирует его как первый сторонний профиль вне основного репозитория Deep Agents.
Как измерить, помогает ли профиль именно вашим задачам
Нужен собственный зафиксированный набор задач, как harness-bench-fast у команды GigaChain — 391 кейс, на котором прогоняют модель с профилем и без него и сравнивают долю решённых задач и расход токенов.
Источники
Читайте также
Комментарии
Пока никто не написал. Будьте первым.

