Автор: Рустам Кунафин

При разработке ИИ-агентов с использованием моделей 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.

Принцип работы:

  1. Описание: Разработчик описывает модели сигнатуру своих функций (название, параметры, описание).
  2. Запрос на вызов: Модель, решив использовать функцию, не выполняет ее, а возвращает специальный объект function_call с именем функции и предложенными аргументами.
  3. Выполнение: Код разработчика (бэкенд) перехватывает этот объект, выполняет реальную логику функции (например, делает запрос к базе данных).
  4. Отправка результата: Результат выполнения функции отправляется обратно в модель.
  5. Генерация ответа: Модель использует полученные данные для генерации финального ответа на естественном языке.

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: продвинутый (ИИ-агент-оркестратор)

Это наиболее мощный и правильный способ построения сложных агентов. Агент выступает в роли маршрутизатора (роутера), который анализирует запрос пользователя и решает, с каким набором инструментов вызывать модель.

Алгоритм работы Агента-Оркестратора:

  1. Получение запроса: Агент получает сложный запрос, требующий доступа к разным типам данных (например, “Сравни характеристики моего телефона из заказа №123 с последней моделью iPhone и проверь мои бонусы”).
  2. Маршрутизация: Агент делает предварительный вызов к LLM или использует ключевые слова, чтобы определить намерение пользователя (требуются внутренние данные, внешние или оба типа).
  3. Выбор и вызов:
    • Для получения данных о последнем iPhone агент делает API-вызов с включенным Google Search.
    • Для получения данных о телефоне из заказа и бонусах агент делает другой API-вызов с подключенными кастомными функциями (get_order_details, get_customer_bonuses).
  4. Синтез: Собрав всю информацию из нескольких вызовов, агент делает финальный вызов к LLM с полным контекстом для генерации итогового, связного ответа.

Этот подход обеспечивает гибкость и эффективность в использовании ИИ-агентом инструментов.