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

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

Наличие инструментов — важная составляющая эффективности работы агентов. Без доступа к инструментам у магистров права (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]: «»»
Такой парсинг вывода значительно упрощает обработку результатов инструмента поиска по ключевым словам. Убедитесь, что строка документации инструмента поиска по ключевым словам описывает формат вывода, который предоставит инструмент поиска по ключевым словам.
Избегайте возврата всех результатов
При использовании таких инструментов, как поиск по ключевым словам, они иногда могут возвращать сотни, если не тысячи, результатов. Это мгновенно перегрузит контекст вашего агента. Чтобы избежать этого, следует добавить опции для сортировки результатов инструмента и возврата только максимального количества элементов, как показано в примере ниже:
def keyword_search(query: str, url: str, sort_ascending=True, max_return_items=10) -> list[KeywordSearchResult]: «»» Обычно модели достаточно увидеть 10 или 20 лучших результатов, чтобы извлечь наиболее полезную информацию (при поиске по ключевым словам лучшие результаты обычно являются наиболее релевантными) и понять формат вывода. Информативная обработка ошибок — критически важный инструмент безопасности, который необходимо иметь на случай, если ваши агенты неизбежно столкнутся с проблемами. Эти проблемы могут быть вызваны: def keyword_search(query: str, url: str) -> list[KeywordSearchResult]: «»» Такая информативная обработка ошибок значительно упрощает для вашего агента обработку ситуаций, связанных со сбоем инструмента. В целом, при обработке ошибок следует обеспечить следующее: Теперь, когда у вас есть как функциональные, так и правильно настроенные инструменты, пришло время предоставить их вашим агентам. Однако при предоставлении инструментов агентам следует учесть ряд моментов. Что касается первого пункта, я считаю важным продумать, сколько инструментов следует использовать в вашем контексте. Предоставление агенту слишком большого количества инструментов затрудняет ему выбор, когда и какие инструменты использовать, и, следовательно, модель будет испытывать трудности с их эффективным использованием. Поэтому вам следует пересмотреть свои инструменты и решить, все ли они необходимы для эффективной работы агента. Продолжая эту тему, вы также можете подумать о том, когда следует предоставлять инструменты. Например, инструмент поиска по ключевым словам может быть неактуален, когда агент выполняет простые задачи по резюмированию для пользователя. Вы можете изменить контекст агента, чтобы сделать некоторые инструменты доступными только тогда, когда они необходимы. Наконец, вам следует продумать, как сделать инструменты доступными. В вашем запросе необходимо создать отдельный раздел для инструментов, используя либо заголовок в формате Markdown, либо отдельный XML-тег. В этом разделе следует разместить все инструменты и описания того, как и когда их использовать. В этой статье я рассказал о том, как работать с инструментами для ваших агентов. Я рассказал, что инструменты — важнейший аспект работы ИИ-агентов, позволяющий им быть максимально эффективными. Кроме того, я рассказал о том, как создавать правильные определения инструментов и специализированные инструменты. Я считаю, что работа с инструментами, совершенствование их определения и того, как ваш агент их использует, — это самый важный аспект, которому вы можете уделить время при работе над своим ИИ-агентом. 👉 Найдите меня в соцсетях: 🧑💻 Свяжитесь с нами 🔗 LinkedIn 🐦 X / Твиттер ✍️ Средний Вы также можете прочитать некоторые другие мои статьи: Источник: towardsdatascience.com Информативная обработка ошибок
Предоставьте своим агентам доступ к инструментам
Заключение



























