Image

Создание эффективных инструментов для агентов ИИ: ключевые аспекты проектирования

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

Делиться

a0ed9b7e19604bd09bd54b7a5a54673e

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

Цель этой статьи — подчеркнуть, на что следует обратить внимание при разработке инструментов для агентов ИИ. Правильные инструменты крайне важны для высокопроизводительных агентов, поэтому я более подробно расскажу об использовании инструментов агентами. Я рассмотрю такие темы, как грамотные определения и описания инструментов, а также оптимальный способ предоставления инструментов вашему агенту.

Почему инструменты важны для агентов ИИ

4f35d3a0cf6975c2e7fd61a5aa98a557

Наличие инструментов — важная составляющая эффективности работы агентов. Без доступа к инструментам у магистров права (LLM) не было бы таких возможностей, как поиск в интернете или поиск информации в таблицах баз данных. Поэтому то, как вы определяете и используете инструменты агента, имеет решающее значение для его эффективности.

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

  • Инструменты должны быть четко определены, иметь правильные названия и описания.
  • Инструмент должен иметь одну конкретную цель
  • У вас должны быть правильные определения типов, как для входных, так и для выходных данных инструмента.

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

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

Я обнаружил, что этот принцип очень применим, например, при работе с машинным обучением, а также при анализе подсказок, которые вы даёте своим магистрам права. Всегда следует задавать себе вопрос: может ли человек понять задачу, предложенную в подсказке? Если нет, подсказку необходимо уточнить.

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

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

  • Ваши инструменты должны иметь четкое название, отражающее функцию инструмента.
  • Ваши инструменты должны иметь хорошо описательную строку документации, включающую краткое описание того, что делает инструмент, описание всех входных параметров вместе с их типами и определение того, что возвращает инструмент.

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

# плохое определение инструмента def search(query): results = search_database() return results

Это плохое определение инструмента из-за следующих проблем:

  • Название инструмента не является описательным. Термин «поиск» неоднозначен; он может, например, также относиться к выполнению семантического поиска.
  • Отсутствует строка документации, определяющая типы входных и выходных данных, а также то, что делает инструмент.
  • В инструменте отсутствуют типы входных и выходных параметров. LLM, использующий этот инструмент, вероятно, сможет определить, что запрос представляет собой строку. Однако модели придётся потратить время на понимание формата выходных данных после использования инструмента.

Вместо этого вам следует определить инструмент следующим образом:

@dataclass class KeywordSearchResult: id: str filename: str document_content: str # хорошее определение инструмента def keyword_search(query: str) -> list[KeywordSearchResult]: «»» Выполняет поиск по ключевым словам в базе данных. Входные параметры: query: str — ключевые слова для поиска Вывод: список всех результатов поиска по ключевым словам, каждый из которых содержит: — id (str) — идентификатор документа, определенный в базе данных; — filename (str) — имя файла документа; — document_content (str) — текстовое содержимое документа. «»» results = search_databse() return results

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

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

Функциональность инструмента

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

Изготовление специальных инструментов

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

  • Использование инструмента в неподходящее время. Например, использование ключевого слова (keyword_search) вместо семантического поиска (semantic_search).
  • Использование модели с неверными параметрами
  • Неправильная обработка выходных данных инструмента

Поэтому ваши инструменты всегда должны иметь четкое и единственное предназначение.

Обеспечить чистые результаты

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

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

@dataclass class KeywordSearchResult: id: str filename: str document_content: str uneccesary_field_a: str uneccesary_field_b: str def _parse_keyword_search_output(keyword_search_results: list[KeywordSearchResult]) -> str: «»»Преобразовать выходные данные инструмента поиска по ключевым словам в структурированную строку, содержащую только необходимую информацию»»» output_string = «» tot_num_documents = len(keyword_search_results) for i, result in enumerate(keyword_search_results): document_id, filename, document_content = result[«id»], result[«filename»], result[«document_content»] output_string += f»»»nn Документ {i+1}/{tot_num_documents}: ID: {document_id} filename: {filename} content: {document_content} «»» return output_string def keyword_search(query: str, url: str) -> list[KeywordSearchResult]: «»»«»» results = search_databse() return parse_results(results)

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

Избегайте возврата всех результатов

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

def keyword_search(query: str, url: str, sort_ascending=True, max_return_items=10) -> list[KeywordSearchResult]: «»»«»» results = search_databse() if sort_ascending: results = sort(results, ascending=True) else: results = sort(results, ascending=False) results = parse_results(results) if max_return_items < len(results): return results[:max_return_items] return results

Обычно модели достаточно увидеть 10 или 20 лучших результатов, чтобы извлечь наиболее полезную информацию (при поиске по ключевым словам лучшие результаты обычно являются наиболее релевантными) и понять формат вывода.

Информативная обработка ошибок

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

  • Агент неправильно использует инструмент. В этом случае вам следует сообщить агенту, почему он неправильно использовал инструмент, а также, возможно, как это исправить.
  • Сбой API происходит из-за стороннего поставщика. В этом случае вы можете указать модели подождать или сообщить пользователю о проблеме.
  • Отсутствуют пакеты. В этом случае вам следует сообщить своему агенту, чтобы он установил требуемые пакеты.

def keyword_search(query: str, url: str) -> list[KeywordSearchResult]: «»»«»» try: results = search_database() return parse_results(results) except RatelimitError as e: raise RuntimeError( f»Ошибка ограничения скорости: {e}. » f»Подождите перед повторной попыткой. Если эта ошибка повторится, обратитесь в службу поддержки.» ) except APINotAvailableError as e: raise RuntimeError( f»API недоступен: {e}. » f»Проверьте правильность предоставленного URL-адреса и работоспособность конечной точки.» ) except Exception as e: raise RuntimeError( f»Неожиданная ошибка: {e}. Попробуйте еще раз.» )

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

  • Вы возвращаете описательное сообщение об ошибке, включающее как трассировку ошибки, так и строку, описывающую ошибку.
  • В идеале следует сообщить агенту, как ему следует действовать после получения этой ошибки. Например, если модель обнаруживает ошибку ограничения скорости, она должна выполнить метод time.sleep(), если это первый случай возникновения ошибки, в противном случае она должна уведомить пользователя.

Предоставьте своим агентам доступ к инструментам

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

  • Сколько инструментов вписываются в контекст?
  • Когда следует предоставлять инструменты?
  • Как сделать инструменты доступными в данном контексте?

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

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

Наконец, вам следует продумать, как сделать инструменты доступными. В вашем запросе необходимо создать отдельный раздел для инструментов, используя либо заголовок в формате Markdown, либо отдельный XML-тег. В этом разделе следует разместить все инструменты и описания того, как и когда их использовать.

Заключение

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

👉 Найдите меня в соцсетях:

🧑‍💻 Свяжитесь с нами

🔗 LinkedIn

🐦 X / Твиттер

✍️ Средний

Вы также можете прочитать некоторые другие мои статьи:

  • Создание глубоких исследовательских агентов с помощью LangGraph.
  • Как провести комплексную крупномасштабную проверку LLM

Источник: towardsdatascience.com

✅ Найденные теги: новости, Создание

ОСТАВЬТЕ СВОЙ КОММЕНТАРИЙ

Ваш адрес email не будет опубликован. Обязательные поля помечены *

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

галерея

Фото сгенерированных лиц: исследование показывает, что люди не могут отличить настоящие лица от сгенерированных
Нейросети построили капитализм за трое суток: 100 агентов Claude заперли…
Скетч: цифровой осьминог и виртуальный мир внутри компьютера с человечком.
Сцена с жестами пальцами, где один жест символизирует "VPN", а другой "KHP".
‼️Paramount купила Warner Bros. Discovery — сумма сделки составила безумные…
Скриншот репозитория GitHub "Claude Scientific Skills" AI для научных исследований.
Структура эффективного запроса Claude с элементами задачи, контекста и референса.
Эскиз и готовая веб-страница платформы для AI-дизайна в современном темном режиме.
ideipro logotyp
Image Not Found
Звёздное небо с галактиками и туманностями, космос, Вселенная, астрофотография.

Система оповещения обсерватории Рубина отправила 800 000 сигналов в первую ночь наблюдений.

Астрономы будут получать оповещения о небесных явлениях в течение нескольких минут после их обнаружения. Теренс О'Брайен, редактор раздела «Выходные». Публикации этого автора будут добавляться в вашу ежедневную рассылку по электронной почте и в ленту новостей на главной…

Мар 2, 2026
Женщина с длинными тёмными волосами в синем свете, нейтральный фон.

Расследование в отношении 61-фунтовой машины, которая «пожирает» пластик и выплевывает кирпичи.

Обзор компактного пресса для мягкого пластика Clear Drop — и что будет дальше. Шон Холлистер, старший редактор Публикации этого автора будут добавляться в вашу ежедневную рассылку по электронной почте и в ленту новостей на главной странице вашего…

Мар 2, 2026
Черный углеродное волокно с текстурой плетения, отражающий свет.

Материал будущего: как работает «бессмертный» композит

Учёные из Университета штата Северная Каролина представили композит нового поколения, способный самостоятельно восстанавливаться после серьёзных повреждений.  Речь идёт о модифицированном армированном волокном полимере (FRP), который не просто сохраняет прочность при малом весе, но и способен «залечивать» внутренние…

Мар 2, 2026
Круглый экран с изображением замка и горы, рядом электронная плата.

Круглый дисплей Waveshare для креативных проектов

Круглый 7-дюймовый сенсорный дисплей от Waveshare создан для разработчиков и дизайнеров, которым нужен нестандартный экран.  Это IPS-панель с разрешением 1 080×1 080 пикселей, поддержкой 10-точечного ёмкостного сенсора, оптической склейкой и защитным закалённым стеклом, выполненная в круглом форм-факторе.…

Мар 2, 2026

Впишите свой почтовый адрес и мы будем присылать вам на почту самые свежие новости в числе самых первых