Как включить вызов функций в 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)
“`

Источник

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