Обновление навыков в Deep Agents

Источник: LangChain•

Обновление навыков в Deep Agents

Deep Agents теперь позволяет привязывать инструменты к навыкам, закреплять навыки во время выполнения и перезагружать их прямо в ходе диалога, благодаря чему агенты с обширными библиотеками навыков остаются эффективными и экономно используют контекст.

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

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

По мере масштабирования использования требования команд к навыкам меняются. Мы видим, как корпоративные реестры навыков разрастаются до тысяч элементов, которыми пользуются разные команды и агенты. Мы обновили поддержку навыков в Deep Agents, чтобы удовлетворить некоторые распространенные запросы:

  • Привязка инструментов к навыкам: инструменты, привязанные к навыку, загружаются только тогда, когда агент считывает этот навык.
  • Закрепленные навыки: когда пользователь явно запрашивает навык, например /meeting-prep, ваше приложение может загрузить его до следующего вызова модели.
  • Перезагрузка навыков: длительный поток выполнения может подхватывать новые или измененные навыки без необходимости начинать все сначала.

Как работают навыки

Навык представляет собой каталог с файлом SKILL.md: YAML-заголовок с названием и описанием, за которым следуют инструкции, которым должен следовать агент. Навык также может включать вспомогательные файлы в папках scripts/, references/ и assets/ ().

На протяжении этой статьи мы будем использовать наш GTM-агент в качестве примера. Он построен на базе Deep Agents, а его библиотека из более чем 50 навыков охватывает повседневную работу торгового представителя, такую как подготовка к встречам, анализ транскриптов звонков и карточки конкурентной разведки.

Навыки загружаются на трех уровнях:

  • Обнаружение. При запуске агент видит название и описание каждого навыка в своем системном промпте.
  • Активация. Когда задача соответствует навыку, агент считывает полный файл SKILL.md с помощью read_file.
  • Выполнение. Агент следует инструкциям и считывает скрипты или справочные файлы только тогда, когда они требуются.

Пока навык не используется, он занимает всего одну строку в системном промпте, поэтому библиотека может содержать ссылки на огромное количество навыков, не перегружая контекст. Теперь давайте перейдем к улучшениям, которые мы внесли в Deep Agents.

Привязка инструментов к навыкам

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

Теперь вы можете привязывать инструменты к навыку, чтобы навык и его инструменты раскрывались вместе. Привязанный инструмент не добавляется в контекст до тех пор, пока агент не прочитает соответствующий навык, а попытка вызова до этого момента приведет к ошибке «неизвестный инструмент». Это позволяет поддерживать контекст в чистоте и гарантирует, что агент прочитал инструкцию по использованию инструмента перед его вызовом. В нашем GTM-агенте навык call-transcripts объясняет, как искать звонки и читать транскрипты, поэтому это идеальное место для привязки соответствующих инструментов.

Перечислите инструменты в метаданных навыка в разделе metadata.include_tools:

Передайте эти инструменты в SkillsMiddleware вместо самого агента:

Добавление инструментов в процессе разговора раньше означало редактирование списка инструментов запроса, что приводило к инвалидации кэша промптов. Anthropic и OpenAI теперь позволяют новым моделям принимать инструменты в середине разговора, поэтому в этих моделях Deep Agents добавляет привязанные к навыку инструменты сразу после считывания навыка, а кэшированный префикс остается нетронутым (документация по интеграции Anthropic и OpenAI). В других моделях инструменты добавляются к запросу, как и раньше.

Список покрывает большинство навыков. Для большего контроля навык может указывать метку вместо имен инструментов, а функция, которую вы передаете в SkillsMiddleware, преобразует каждую метку в инструменты. Это позволяет:

  • Раскрывать целую группу инструментов, например, все инструменты на MCP-сервере, под одним именем, не перечисляя каждый инструмент в навыке.
  • Ограничивать доступ к инструментам на основе прав доступа во время выполнения. Функция получает среду выполнения графа, поэтому она может проверить, кто является пользователем, и вернуть только те инструменты, которые ему разрешено использовать.

Здесь call-transcripts получает все инструменты на MCP-сервере звонков, а pipeline-forecast получает инструменты CRM, но только менеджеры могут обновлять прогноз:

Подробнее см. в разделе «Добавление инструментов к навыкам».

Закрепленные навыки

Иногда пользователь уже знает, какой навык ему нужен. В нашем GTM-агенте представитель может ввести /meeting-prep для моего звонка Acme завтра. Без закрепления модель видит только описание навыка и должна его прочитать. Это добавляет лишний цикл обмена данными перед началом работы, и нет гарантии, что модель загрузит нужный навык. С закрепленными навыками ваше приложение находит имена навыков в сообщении (или анализирует их из интерфейса) и передает их в pinned_skills, а промежуточное ПО добавляет инструкции каждого навыка в разговор перед следующим вызовом модели. Deep Agents не анализирует сообщения самостоятельно, поэтому вы сами выбираете синтаксис:

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

Перезагрузка навыков в середине потока

Навыки загружаются в начале каждого потока и сохраняются в состоянии агента, поэтому каждый последующий шаг повторно использует тот же набор навыков. Теперь вы можете аннулировать этот список, установив skills_metadata в значение None при вызове агента. Если коллега добавит навык competitive-intel-card в библиотеку, приложение может выбрать аннулирование списка навыков, и при следующем запуске будет выполнено повторное сканирование всех источников:

Перезагрузка, которая находит новые навыки, изменяет системный промпт, что аннулирует кэш промптов. Для потока, который простаивал, эти затраты обычно уже оплачены: кэши провайдеров обычно истекают в течение нескольких минут или часа бездействия (Anthropic, OpenAI), поэтому кэш уже «холодный» к моменту возвращения пользователя.

Поскольку сброс — это просто входные данные для запуска, вы также можете передать управление пользователям. Например, команда /reload на стороне клиента:

Вы также можете выполнить сброс из update_state или из промежуточного ПО, чтобы ваше приложение контролировало момент перезагрузки навыков. См. «Перезагрузка навыков».

Начало работы

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

Все это доступно в последней версии deepagents. Прочитайте документацию по навыкам, чтобы начать работу, и дайте нам знать, что вы думаете, через GitHub issues, форум или X.

Благодарности

Спасибо Ричу Скарротту за руководство разработкой этих новых функций, а также Хантеру Лавеллу за проверку функций и обзор блога!

О чём эта статья