Как включить функции вызова в агентах Mistral, используя стандартный формат схемы JSON

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

Мы будем использовать API API AviationStack для получения данных о состоянии полета в реальном времени, демонстрируя, как внешние API могут быть интегрированы в виде вызывных функций в агенте Mistral.

Шаг 1: Настройка зависимости

Установка библиотеки Мистраль

Загрузка ключа API Mistral

Вы можете получить ключ API от https://console.mistral.ai/api-keys

from getpass import getpass
MISTRAL_API_KEY = getpass('Enter Mistral API Key: ')

Загрузка клавиши API авиационного стека API

Вы можете подписаться на бесплатный ключ API с их приборной панели, чтобы начать.

AVIATIONSTACK_API_KEY = getpass('Enter Aviation Stack API: ')

Шаг 2: Определение пользовательской функции

Затем мы определяем функцию Python get_flight_status (), которая называет API Aviationstack, чтобы получить статус в реальном времени полета. Функция принимает необязательный параметр Flight_iata и возвращает данные ключей, такие как имя авиакомпании, статус полета, аэропорты вылета и прибытия, и запланированное время. Если соответствующий рейс не найден, он изящно возвращает сообщение об ошибке.

import requests
from typing import Dict
def get_flight_status(flight_iata=None):
    """
    Retrieve flight status using optional filters: dep_iata, arr_iata, flight_iata.
    """
    params = {
        "access_key": AVIATIONSTACK_API_KEY,
        "flight_iata": flight_iata  
    }

    response = requests.get("http://api.aviationstack.com/v1/flights", params=params)
    data = response.json()

    if "data" in data and data("data"):
        flight = data("data")(0)
        return {
            "airline": flight("airline")("name"),
            "flight_iata": flight("flight")("iata"),
            "status": flight("flight_status"),
            "departure_airport": flight("departure")("airport"),
            "arrival_airport": flight("arrival")("airport"),
            "scheduled_departure": flight("departure")("scheduled"),
            "scheduled_arrival": flight("arrival")("scheduled"),
        }
    else:
        return {"error": "No flight found for the provided parameters."}

Шаг 3: Создание клиента и агента Mistral

На этом этапе мы создаем агента Mistral, который использует инструменты для получения информации о полете в реальном времени. Агент, названный агентом состояния полета, настроен на использование модели «Мистер-Медий-2505» и оснащена пользовательским инструментом функциональной работы с именем get_flight_status. Этот инструмент определяется с использованием схемы JSON, которая принимает один необходимый параметр: код IATA полета (например, «AI101»). После развертывания агент может автоматически вызывать эту функцию всякий раз, когда он обнаруживает соответствующий пользовательский запрос, обеспечивая бесшовную интеграцию между входами естественного языка и структурированными ответами API.

from mistralai import Mistral
client = Mistral(MISTRAL_API_KEY)

flight_status_agent = client.beta.agents.create(
    model="mistral-medium-2505",
    description="Provides real-time flight status using aviationstack API.",
    name="Flight Status Agent",
    tools=(
        {
            "type": "function",
            "function": {
                "name": "get_flight_status",
                "description": "Retrieve the current status of a flight by its IATA code (e.g. AI101).",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "flight_iata": {
                            "type": "string",
                            "description": "IATA code of the flight (e.g. AI101)"
                        },
                    },
                    "required": ("flight_iata")
                }
            }
        }
    )
)

Шаг 4: Запуск разговора и обработки функций вызовы

На этом этапе мы начинаем разговор с агентом по статусу полета, задавая вопрос естественному языку: «Каков текущий статус AI101?». Модель Mistral обнаруживает, что она должна вызывать функцию get_flight_status и возвращает запрос вызова функции. Мы анализируем аргументы, запускаем функцию локально, используя API AviationStack и возвращаем результат обратно агенту, используя функциональные процессы. Наконец, модель включает в себя ответ API и генерирует ответ естественного языка с текущим статусом полета, который мы печатаем на консоли.

from mistralai import FunctionResultEntry
import json

# User starts a conversation
response = client.beta.conversations.start(
    agent_id=flight_status_agent.id,
    inputs=({"role": "user", "content": "What's the current status of AI101?"})
)

# Check if model requested a function call
if response.outputs(-1).type == "function.call" and response.outputs(-1).name == "get_flight_status":
    args = json.loads(response.outputs(-1).arguments)

    # Run the function
    function_result = json.dumps(get_flight_status(**args))

    # Create result entry
    result_entry = FunctionResultEntry(
        tool_call_id=response.outputs(-1).tool_call_id,
        result=function_result
    )

    # Return result to agent
    response = client.beta.conversations.append(
        conversation_id=response.conversation_id,
        inputs=(result_entry)
    )

    print(response.outputs(-1).content)
else:
    print(response.outputs(-1).content)

Проверьте ноутбук на GitHubПолем Весь кредит на это исследование направлено на исследователей этого проекта. Кроме того, не стесняйтесь следить за нами Twitter И не забудьте присоединиться к нашему 95K+ ML Subreddit и подписаться на Наша информационный бюллетеньПолем


Я выпускник гражданского строительства (2022) из ​​Jamia Millia Islamia, Нью -Дели, и у меня интерес к науке о данных, особенно в нейронных сетях и их применении в различных областях.

Source link

Scroll to Top