В этом руководстве мы рассмотрим, как создавать интеллектуальные мультиагентные рабочие процессы с помощью функции передачи задач в Mistral Agents API. Это позволяет различным агентам работать вместе, передавая задачи друг другу, что позволяет решать сложные задачи модульным и эффективным способом.
Мы создадим систему, в которой агенты сотрудничают для ответа на вопросы, связанные с инфляцией — выполняют расчёты, извлекают данные из интернета и создают визуализации — чтобы предоставлять чёткие, точные и динамичные ответы.
Шаг 1: Настройка зависимостей
Установка библиотек
“`
pip install mistralai pydantic
“`
Загрузка ключа API Mistral
Вы можете получить ключ API на сайте https://console.mistral.ai/api-keys.
“`
from getpass import getpass
MISTRALAPIKEY = getpass(‘Enter Mistral API Key: ‘)
“`
Шаг 2: Предварительные условия и настройка агента
Инициализация агента
“`
from mistralai import CompletionArgs, ResponseFormat, JSONSchema
from pydantic import BaseModel
from mistralai import Mistral
client = Mistral(MISTRALAPIKEY)
“`
Создание пользовательской функции
Функция `adjustforinflation` вычисляет, сколько будет стоить данная сумма денег с учётом инфляции за определённый период времени. Она использует формулу сложных процентов на основе количества лет и годового уровня инфляции.
“`
def adjustforinflation(amount: float, startyear: int, endyear: int, annualinflationrate: float):
“””
Calculates inflation-adjusted value using compound formula.
“””
if endyear < startyear:
return {“error”: “End year must be greater than or equal to start year.”}
years = endyear – startyear
adjustedvalue = amount ((1 + annualinflation_rate / 100) * years)
return {
“original_amount”: amount,
“startyear”: startyear,
“endyear”: endyear,
“inflationrate”: annualinflation_rate,
“adjustedvalue”: round(adjustedvalue, 2)
}
“`
Шаг 3: Создание агентов
Определение различных агентов
В этой настройке мы определяем мультиагентную систему с помощью Mistral Agents API для обработки экономических запросов, связанных с инфляцией. Основной агент (economics-agent) действует как координатор, который направляет задачи специализированным агентам.
“`
Main Agent
economics_agent = client.beta.agents.create(
model=”mistral-large-latest”,
name=”economics-agent”,
description=”Handles economic queries and delegates inflation calculations.”,
)
Inflation Function Agent
inflation_agent = client.beta.agents.create(
model=”mistral-large-latest”,
name=”inflation-agent”,
description=”Agent that calculates inflation-adjusted value using a custom function.”,
tools=[inflation_tool],
)
Web Search Agent
websearch_agent = client.beta.agents.create(
model=”mistral-large-latest”,
name=”websearch-agent”,
description=”Agent that can search the internet for missing economic data such as inflation rates.”,
tools=[{“type”: “web_search”}]
)
Calculator Agent
from pydantic import BaseModel
class CalcResult(BaseModel):
reasoning: str
result: str
calculator_agent = client.beta.agents.create(
model=”mistral-large-latest”,
name=”calculator-agent”,
description=”Agent used to make detailed calculations.”,
instructions=”When doing calculations, explain step by step.”,
completion_args=CompletionArgs(
response_format=ResponseFormat(
type=”json_schema”,
json_schema=JSONSchema(
name=”calc_result”,
schema=CalcResult.modeljsonschema(),
)
)
)
)
Graph Agent
graph_agent = client.beta.agents.create(
model=”mistral-large-latest”,
name=”graph-agent”,
description=”Agent that generates graphs using code interpreter.”,
instructions=”Use code interpreter to draw inflation trends.”,
tools=[{“type”: “code_interpreter”}]
)
“`
Шаг 4: Запуск агента
Пример A: Каков текущий уровень инфляции в Индии?
В этом примере запрос «Каков текущий уровень инфляции в Индии?» передаётся основному агенту `economicsagent`, который является основной точкой входа для обработки экономических запросов. Поскольку вопрос требует данных в реальном времени, которые не включены в статические знания агента, `economicsagent` автоматически передаёт запрос агенту `websearch_agent`, который оснащён возможностями веб-поиска.
“`
prompt = “What is the current inflation rate in India?”
response = client.beta.conversations.start(
agentid=economicsagent.id,
inputs=prompt
)
print(response.outputs[-1].content[0].text)
“`
Пример B: Каково значение 5000 с учётом инфляции с 2010 по 2023 год при годовом уровне инфляции 6,5%? Объясните шаги расчёта и постройте график с метками данных
Этот код отправляет запрос агенту `economicsagent`, проверяет, вызывает ли агент вызов определённой функции (`adjustfor_inflation`), выполняет эту функцию локально с предоставленными аргументами и возвращает вычисленный результат обратно агенту.
“`
import json
from mistralai.models import FunctionResultEntry
prompt = “””What is the inflation-adjusted value of 5,000 from the year 2010 to 2023 with annual inflation rate of 6.5%.
Explain calculation steps and plot a graph with data labels”””
response = client.beta.conversations.start(
agentid=economicsagent.id,
inputs=prompt
)
Check for function call
if response.outputs[-1].type == “function.call” and response.outputs[-1].name == “adjustforinflation”:
args = json.loads(response.outputs[-1].arguments)
# Run local function
functionresult = json.dumps(adjustfor_inflation(args))
# Return result to Mistral
result_entry = FunctionResultEntry(
toolcallid=response.outputs[-1].toolcallid,
result=function_result
)
response = client.beta.conversations.append(
conversationid=response.conversationid,
inputs=[result_entry]
)
print(response.outputs[-1].content)
else:
print(response.outputs[-1].content)
“`