необходимый ввод для реализации обработки ответов vertex ai gemini

Вопрос или проблема

У меня есть две функции: одна для сложения и другая для умножения, обе функции имеют два входных параметра

def add(a: int, b: int) -> int:
print("Вызов функции сложения")
return a + b


def multiply(a: int, b: int) -> int:
print("Вызов функции умножения")
return a * b


Объявление функции:
add_function = FunctionDeclaration.from_func(add)
multiply_function = FunctionDeclaration.from_func(multiply)

# Определите инструмент с созданными функциями
math_tool = Tool(
function_declarations=[add_function, multply_function]
)

Инициализация модели Gemini

model = GenerativeModel(
    model_name="gemini-1.5-pro-001",
    generation_config=GenerationConfig(temperature=0),
    system_instruction=[
        "Выполните инструкции пользователя.",
        " Если вас просят сложить или умножить числа, вызовите предоставленные функции.",
        "Вы можете вызвать одну функцию после другой, если это необходимо.",
        "Повторите результат пользователю.",
    ],
    tools=[math_tool],
)
# Начните чат
chat = model.start_chat()

Мне нужен ввод, чтобы обработать ответ от модели

def handle_response(response):

# Если есть вызов функции, то вызовите его
# В противном случае распечатайте ответ.
if response.candidates[0].function_calls:
    function_call = response.candidates[0].function_calls[0]
else:
    print(response.text)
    return

if # вызов функции запрашивает вашу функцию сложения
    # Извлеките аргументы для использования в вашей функции
    # Вызовите вашу функцию
    # Отправьте результат обратно в чат-сессию с моделью
    # Сделайте рекурсивный вызов этой функции-обработчика

elif # вызов функции запрашивает вашу функцию умножения
    # Извлеките аргументы для использования в вашей функции
    # Вызовите вашу функцию
    # Отправьте результат обратно в чат-сессию с моделью
    # Сделайте рекурсивный вызов этой функции-обработчика

else:
    # Вы не должны оказаться здесь
    print(function_call)

если вызов функции запрашивает функцию сложения, извлеките аргументы, выполните функцию и верните ответ

иначе, если вызов функции запрашивает функцию умножения, извлеките аргументы, выполните функцию и верните ответ

Ответ или решение

Для того чтобы успешно обработать результаты, полученные от модели Vertex AI Gemini, необходимо правильно реализовать функцию handle_response. Данная функция должна учитывать возможные вызовы функций, выдвинутые моделью, и корректно обрабатывать их. Рассмотрим ключевые шаги, которые помогут добиться этого, используя предоставленную логику.

Шаги для реализации функции handle_response

  1. Проверка наличия вызовов функций:
    Первым делом необходимо проверить, содержит ли ответ от модели вызовы к функциям. Если они присутствуют, мы будем продолжать, иначе просто выводим текст ответа.

  2. Обработка вызова функции:
    В зависимости от того, какую именно функцию запрашивает модель (сложение или умножение), мы извлекаем аргументы и вызываем соответствующую функцию. Обязательно следует обрабатывать случаи, когда функция добавления или умножения могла быть окончена не совсем правильно.

Этапы реализации

Вот пример кода, который можно использовать для обработки ответа от модели:

def handle_response(response):
    # Проверка наличия вызова функции
    if response.candidates[0].function_calls:
        function_call = response.candidates[0].function_calls[0]
    else:
        print(response.text)
        return

    # Обработка вызова функции сложения
    if function_call.function_name == "add":
        # Извлечение аргументов из вызова функции
        args = function_call.arguments
        a = args['a']
        b = args['b']

        # Вызов функции сложения
        result = add(a, b)

        # Отправка результата обратно в чат
        chat.send_message(f"Результат сложения: {result}")

        # Рекурсивный вызов этой функции для обработки следующего ответа
        new_response = chat.get_response()  # Получение следующего ответа
        handle_response(new_response)

    # Обработка вызова функции умножения
    elif function_call.function_name == "multiply":
        # Извлечение аргументов из вызова функции
        args = function_call.arguments
        a = args['a']
        b = args['b']

        # Вызов функции умножения
        result = multiply(a, b)

        # Отправка результата обратно в чат
        chat.send_message(f"Результат умножения: {result}")

        # Рекурсивный вызов этой функции для обработки следующего ответа
        new_response = chat.get_response()  # Получение следующего ответа
        handle_response(new_response)

    else:
        # Обработка непредвиденных случаев
        print("Неизвестный вызов функции:", function_call)

Пояснения к коду

  • Проверка на наличие функций: Сначала мы проверяем, есть ли какие-либо вызовы функций в ответе. Если нет — просто выводим текст ответа.

  • Извлечение аргументов: Мы предполагаем, что аргументы передаются в виде словаря, где ключи соответствуют именам параметров функции.

  • Рекурсивный вызов: Каждый раз, когда мы выполняем функцию и получаем результаты, мы делаем новый вызов к handle_response, чтобы продолжить процесс обработки ответа от модели.

Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...