В этом руководстве мы покажем, как включить вызов функций в Mistral Agents с помощью стандартного формата JSON Schema. Определив входные параметры вашей функции с помощью чёткой схемы, вы сможете сделать свои пользовательские инструменты легко вызываемыми агентом, что обеспечит мощные динамические взаимодействия.
Мы будем использовать AviationStack API для получения данных о статусе рейсов в режиме реального времени, демонстрируя, как внешние API могут быть интегрированы в качестве вызываемых функций в рамках Mistral Agent.
Шаг 1: настройка зависимостей
Установка библиотеки Mistral
«`
pip install mistralai
«`
Загрузка ключа API Mistral
Вы можете получить ключ API на сайте https://console.mistral.ai/api-keys.
«`
from getpass import getpass
MISTRALAPIKEY = getpass(‘Enter Mistral API Key: ‘)
«`
Загрузка ключа API Aviation Stack
Вы можете зарегистрироваться и получить бесплатный ключ API на панели управления.
«`
AVIATIONSTACKAPIKEY = getpass(‘Enter Aviation Stack API: ‘)
«`
Шаг 2: определение пользовательской функции
Далее мы определяем функцию Python `getflightstatus()`, которая вызывает AviationStack API для получения текущего статуса рейса. Функция принимает необязательный параметр `flight_iata` и возвращает ключевые данные, такие как название авиакомпании, статус рейса, аэропорты отправления и прибытия, а также запланированное время. Если соответствующий рейс не найден, функция возвращает сообщение об ошибке.
«`
import requests
from typing import Dict
def getflightstatus(flight_iata=None):
«»»
Retrieve flight status using optional filters: depiata, arriata, flight_iata.
«»»
params = {
«accesskey»: AVIATIONSTACKAPI_KEY,
«flightiata»: flightiata
}
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, который использует вызов инструментов для получения информации о статусе рейсов в режиме реального времени. Агент, названный Flight Status Agent, настроен на использование модели «mistral-medium-2505» и оснащён пользовательским инструментом с именем `getflightstatus`. Этот инструмент определён с помощью JSON-схемы, которая принимает один обязательный параметр: код IATA рейса (например, «AI101»). После развёртывания агент может автоматически вызывать эту функцию всякий раз, когда обнаруживает соответствующий запрос пользователя, обеспечивая плавную интеграцию между естественными языковыми запросами и структурированными ответами API.
«`
from mistralai import Mistral
client = Mistral(MISTRALAPIKEY)
flightstatusagent = 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»: «getflightstatus»,
«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: начало разговора и обработка вызова функции
На этом этапе мы инициируем разговор с агентом Flight Status Agent, задав вопрос на естественном языке: «Каков текущий статус рейса AI101?». Модель Mistral обнаруживает, что должна вызвать функцию `getflightstatus`, и возвращает запрос на вызов функции. Мы анализируем аргументы, запускаем функцию локально с помощью AviationStack API и возвращаем результат обратно агенту с помощью `FunctionResultEntry`. Наконец, модель включает ответ API и генерирует ответ на естественном языке с текущим статусом рейса, который мы выводим на консоль.
«`
from mistralai import FunctionResultEntry
import json
User starts a conversation
response = client.beta.conversations.start(
agentid=flightstatus_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 == «getflightstatus»:
args = json.loads(response.outputs[-1].arguments)
# Run the function
functionresult = json.dumps(getflight_status(args))
# Create result entry
result_entry = FunctionResultEntry(
toolcallid=response.outputs[-1].toolcallid,
result=function_result
)
# Return result to agent
response = client.beta.conversations.append(
conversationid=response.conversationid,
inputs=[result_entry]
)
print(response.outputs[-1].content)
else:
print(response.outputs[-1].content)
«`