Как включить вызов функций в Mistral Agents с помощью стандартного формата JSON Schema

В этом руководстве мы покажем, как включить вызов функций в 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)
«`

Источник

Оставьте комментарий