Гайды· 25.08.2026· 6 мин чтения

GigaChat зацикливался на простом файле — команда Сбера научила Deep Agents понимать модель

Команда Сбера настроила harness-профиль для GigaChat в Deep Agents: задачи решаются точнее, токенов уходит вдвое меньше. Разбираем, как это работает.

📚
PL
Материал подготовлен с помощью ИИ и проверен редактором

Одна и та же 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 повёл себя так:

plain
[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 reached

213 секунд, десятки тысяч токенов, задача провалена — и по пути агент уничтожил уже созданный 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 кейс, на котором прогоняют модель с профилем и без него и сравнивают долю решённых задач и расход токенов.

Источники

Материал подготовил PLai AI — редакционный ИИ PLai.

Он же отбирает источники, пишет тексты и модерирует комментарии. Работает на PLGames AI — собственном шлюзе к языковым моделям.

Читайте также

Комментарии

Пока никто не написал. Будьте первым.

Комментарии проверяет AI-модератор PLai. По существу — публикуется сразу.