Автор: Рустам Кунафин
При разработке ИИ-агентов с использованием моделей Gemini через Google AI Studio или напрямую через API, возникает вопрос об использовании инструментов (Tools). Существует два фундаментально разных, взаимоисключающих типа инструментов, которые можно подключить в рамках одного API-вызова: управляемые инструменты Google и пользовательские инструменты через Function Calling.
1. Два режима работы с инструментами
API моделей Gemini не позволяет одновременно использовать встроенные инструменты Google и определенные пользователем функции в одном запросе. Необходимо выбрать один из двух режимов.
Режим 1: управляемые инструменты Google (Managed Tools)
Это набор готовых к использованию, предопределенных инструментов, которые Google выполняет на своей стороне. Разработчику нужно лишь активировать их.
- Code Execution: Позволяет модели писать и выполнять Python-код для решения задач, требующих вычислений или анализа данных.
- Grounding with Google Search: Дает модели доступ к поиску Google для получения актуальной информации из интернета. Это повышает достоверность ответов и снижает риск “галлюцинаций”.
- URL Context: Позволяет модели анализировать содержимое веб-страниц по предоставленным ссылкам.
Принцип работы: Модель самостоятельно решает, когда использовать один из этих инструментов. Она генерирует внутренний запрос, бэкенд Google его выполняет и возвращает результат обратно в модель для формирования финального ответа. Этот процесс полностью абстрагирован от разработчика.
Режим 2: пользовательские инструменты (Function Calling)
Этот режим позволяет разработчику определять собственный набор уникальных инструментов (функций), которые могут взаимодействовать с его внутренними системами, базами данных или частными API.
Принцип работы:
- Описание: Разработчик описывает модели сигнатуру своих функций (название, параметры, описание).
- Запрос на вызов: Модель, решив использовать функцию, не выполняет ее, а возвращает специальный объект
function_callс именем функции и предложенными аргументами. - Выполнение: Код разработчика (бэкенд) перехватывает этот объект, выполняет реальную логику функции (например, делает запрос к базе данных).
- Отправка результата: Результат выполнения функции отправляется обратно в модель.
- Генерация ответа: Модель использует полученные данные для генерации финального ответа на естественном языке.
2. Стратегии комбинирования инструментов
Хотя API-вызов ограничен одним режимом, на уровне логики самого ИИ-агента можно реализовать совместное использование всех возможностей.
Путь 1: простой (только управляемые инструменты)
Использовать только готовые инструменты Google. Подходит для задач, не требующих взаимодействия с закрытыми данными.
Путь 2: гибкий (эмуляция через Function Calling)
Полностью отказаться от управляемых инструментов и реализовать их функциональность самостоятельно через Function Calling.
- Для замены Grounding: Создать свою функцию
execute_google_search(query: str), которая обращается к внешнему поисковому API (например, Google Custom Search API). - Для замены Code Execution: Создать функцию
execute_python_code(code: str), которая безопасно (в песочнице) выполняет переданный Python-код.
Этот подход позволяет в одном вызове комбинировать как функции для доступа к внешним данным, так и функции для работы с внутренними системами.
Путь 3: продвинутый (ИИ-агент-оркестратор)
Это наиболее мощный и правильный способ построения сложных агентов. Агент выступает в роли маршрутизатора (роутера), который анализирует запрос пользователя и решает, с каким набором инструментов вызывать модель.
Алгоритм работы Агента-Оркестратора:
- Получение запроса: Агент получает сложный запрос, требующий доступа к разным типам данных (например, “Сравни характеристики моего телефона из заказа №123 с последней моделью iPhone и проверь мои бонусы”).
- Маршрутизация: Агент делает предварительный вызов к LLM или использует ключевые слова, чтобы определить намерение пользователя (требуются внутренние данные, внешние или оба типа).
- Выбор и вызов:
- Для получения данных о последнем iPhone агент делает API-вызов с включенным Google Search.
- Для получения данных о телефоне из заказа и бонусах агент делает другой API-вызов с подключенными кастомными функциями (
get_order_details,get_customer_bonuses).
- Синтез: Собрав всю информацию из нескольких вызовов, агент делает финальный вызов к LLM с полным контекстом для генерации итогового, связного ответа.
Этот подход обеспечивает гибкость и эффективность в использовании ИИ-агентом инструментов.