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