Share
Embed
Создание мультиагентной системы на базе AI Studio
Мастер-класс на конференции Yandex NeuroScale 2025
Dmitri Soshnikov
September 24, 2025
Transcript
43 slides
-
План Responses API Новый OpenAI Compatible API для работы с
LLM в Yandex Cloud RAG и Function Calling Мультиагентные системы С использованием OpenAI Agent SDK и LangGraph 01 02 03 -
Прежде чем мы начнём Получите грант на Yandex Cloud Если
у вас нет доступа, то в целях экономии времени на мастер-классе, мы предлагаем зарегистрироваться заранее ― в перерыве или дома Используйте свой Yandex Cloud Если у вас есть доступ к своему облаку, вы можете эксперимен- тировать. Это не потребует больших вложений! Используйте временные ключи Если у вас есть своё Python-окружение, которое вы готовы использовать, и хотите попробовать прямо сейчас -
Прежде чем мы начнём Получите грант на Yandex Cloud Используйте
свой Yandex Cloud Если у вас есть доступ к своему облаку, вы можете эксперимен- тировать. Это не потребует больших вложений! Используйте временные ключи -
Responses API Новый Stateful API для работы в AI Studio
Совместим с OpenAI API Поддержка LLM и VLM Опенсорс идёт в поддержку Responses: vLLM уже поддерживает Responses API -
Эволюция LLM API 02 01 03 Я люблю… …программировать [
{ “role” : “System”, “content” : “Ты ассистент”}, { “role” : “user”, “content” : “Что ты любишь?” } ] Программировать -
Responses API [ { “role” : “System”, “content” : “Ты
ассистент”}, { “role” : “user”, “content” : “Что ты любишь?” } ] { “role” : “Assistant”, “content” : “Программировать”} Response_id = 42 [ { “role” : “user”, “content” : “Почему?” } ] previous_response_id : 42 { “role” : “Assistant”, “content” : “Так вышло!”} Response_id = 13 -
from openai import OpenAI model = f"gpt://{folder_id}/qwen3-235b-a22b-fp8/latest" client = OpenAI(
base_url="https://rest-assistant.api.cloud.yandex.net/v1", api_key=api_key, project=folder_id) res = client.responses.create(model = model, instructions = "Ты опытный сомелье…", input = "Привет! Какое вино посоветуете?") print(res.output_text) Работаем с Responses API -
res = client.responses.create( model = model, reasoning = { "effort"
: "low" }, store = True, previous_response_id = res.id, input = "Я буду есть стейк!" ) printx(res.output_text) Работаем с Responses API -
Function Calling Найди Мерло подешевле LLM Func = SearchWinesPriceList Args
= { wine_name = “Мерло”, sort_order = “Cheapest” } Диспетчер LLM Это Мерло из Краснодара, стоит 120 руб. -
tools = [{ "type": "function", "name": "Exercise", "description": "Вызывай, когда
пользователь хочет получить информацию о конкретных винах или их стоимости", "parameters": SearchWinePriceList.model_json_schema()}] res = client.responses.create( model = model, store = True, tools = tools, instructions = instruction, input = "Какое самое дешёвое вино из Австралии?" ) Function Calling на практике Чёткое описание параметров JSON-схемой -
tool_calls = [item for item in res.output if item.type ==
"function_call"] if tool_calls: out = [] for call in tool_calls: args = json.loads(call.arguments) result = find_wines(args) out.append({ "type": "function_call_output", "call_id": call.call_id, "output": result }) res = client.responses.create( model=model, input=out, tools=tools, previous_response_id=res.id, ) Function Calling на практике А есть ли Function Call? Вызываем реальную функцию Передаём результаты LLM -
Удалённый Function Calling = MCP Конфигурация MCP-тула Получение списка тулов
Апрув вызова тула Вызов тула Возврат пользователю результата 01 02 03 04 05 -
from fastmcp import FastMCP mcp = FastMCP("Restaurant") @mcp.tool() def get_food_menu()
-> str: """Получить меню блюд ресторана в виде таблицы в формате Markdown""" return open("../data/menu/food.md",encoding="utf8").read() @mcp.tool() def get_drinks_menu() -> str: """Получить меню напитков в виде таблицы в формате Markdown""" return open("../data/menu/drinks.md",encoding="utf8").read() Реализация MCP-сервера Используем библиотеку Декорируем все MCP-функции Обязательно пишем описания для LLM! -
instruction = """Ты опытный сомелье, в задачу которого входит…""" wine_agent
= Agent( instruction=instruction, tools=[mcp_tool, AddToCart, ShowCart, Handover]) Прячем всё в специальный класс -
mcp_tool = {"type": "mcp", "server_label": "Wine-Shop", "server_description": "Функция для запроса
цен на вино", "server_url": "http://cathy.ycloud.eazify.net:8000/sse" } class AddToCart(BaseModel): """Эта функция позволяет положить или добавить вино в корзину""" wine_name: str = Field(description=“Название вина", default=None) count: int = Field( description="Количество бутылок", default=1) def process(self, session_id): … Прячем всё в специальный класс 01 02 Обязательно пишем описания для LLM! Функция для обработки -
Реализация файлового поиска vector_store = client.vector_stores.create(name='rag_store') for x in tqdm(files):
f = client.files.create(file=open(x,’rb’), purpose="assistants“) client.vector_stores.files.create( file_id=f.id,vector_store_id=vector_store.id) search_tool = { "type" : "file_search", "vector_store_ids" : [vector_store.id], "max_num_results" : 5, } Загружаем файл Добавляем в индекс -
Мультиагентность в 1990-x Автономность Реактивность Проактивность Социальность Коммуникация Теория коммуникативных
актов Теория аукционов Общие знания (онтологии) -
Многоагентные системы в 2024–2025 LLM LLM Спасибо! Что надо? Привет,
как дела? Общение на естественном языке = интерпретируемость Знания в LLM = онтология -
Выбор блюд и вина в ресторане Посетитель Хочет есть Не
всегда знает, что хочет Но иногда знает Официант Знает меню Передаёт запрос сомелье в случае необходимости Сомелье Знает соответствия блюд и вина -
Выбор блюд и вина в ресторане Посетитель Хочет есть Не
всегда знает, что хочет Но иногда знает Официант Знает меню Передаёт запрос сомелье в случае необходимости Сомелье Знает соответствия блюд и вина -
OpenAI Agents SDK from agents import Agent, FileSearchTool sommelier =
Agent( name="Sommelier_Agent", instructions="Ты профессиональный сомелье, который может рекомендовать соответствие еды и вина или других напитков. Используй доступные тебе данные ― таблицу соответствий блюд и напитков", model=model, tools=[FileSearchTool( max_num_results=5, vector_store_ids=[vector_store.id], )] ) ADK реализовал класс, похожий на наш! -
Умный агент (ReAct) Посетитель Меню ресторана Доступно удалённо по протоколу
MCP ReAct Agent Think Act Observe Функция-сомелье Подбор на основе семантического поиска Инструменты (Tools) -
Передача управления = многоагентная система rest_server = MCPServerSse( name="Restaurant", params={
"url": "http://cathy.ycloud.eazify.net:8001/sse"}) await rest_server.connect() waiter = Agent( name="Waiter_Agent", instructions="Ты профессиональный официант…“, mcp_servers=[rest_server], handoffs=[sommelier]) res = await Runner.run(waiter, "Сколько стоит самый дорогой стейк?",run_config=rc) print(res.final_output) Официант может передать работу сомелье! -
Вызов = многоагентная система waiter = Agent( name="Waiter_Agent", instructions="Ты профессиональный
официант…", mcp_servers=[rest_server], tools=[ sommelier.as_tool( "Sommelier", "Агент-сомелье, который может подобрать еду к вину и наоборот") ] Агент может выступать как инструмент -
Библиотеки для построения агентных процессов LangChain Построение ассистентов: Языковые модели
Векторные БД Память Function Calling LangGraph Построение агентных конфигураций: Граф взаимодействия между агентами Сохранение состояния системы Трассировка взаимодействий ReAct-агенты Agentic Workflows OpenAI Agents SDK SmolAgents -
Опишем процесс взаимодействия агентов Посетитель Хостес Смотрит на предпочтения Передаёт
дальше официанту или сомелье Состояние Диспетчер Официант Знает меню Передаёт запрос сомелье в случае необходимости Сомелье Знает соответствия блюд и вина -
Состояние Диспетчер Официант Знает меню Передаёт запрос сомелье в случае
необходимости Сомелье Знает соответствия блюд и вина { message: хочу стейк, foodpref: стейк, maindish : бык на взводе, winepref: Мерло, wine: Мерло резерв 2015, answer: Закажите… } -
Граф состояний 1. { message: “хочу стейк” } 2. {
message: “хочу стейк”, foodpref: “стейк” } 3. { message: “хочу стейк”, foodpref: “стейк”, maincourse: “стейк бык на взводе” } 5. { message: “хочу стейк”, foodpref: “стейк”, maindish : “СБнВ“, winepref: “Мерло”, wine: “Мерло резерв 2015” } 6. { message: “хочу стейк”, foodpref: “стейк”, maindish : “СБнВ“, winepref: “Мерло”, wine: “Мерло резерв 2015”, answer: “Закажите…” } 4. { message: “хочу стейк”, foodpref: “стейк”, maindish : “СБнВ“, winepref: “Мерло” } -
Спектр агентных технологий LangGraph LlamaIndex Ригидность Предcказуемость Менее мощные LLM
Явная оркестрация Динамическое планирование/ кодогенерация SmolAgents Microsoft AutoGen Гибкость Непредсказуемость Мощные LLM -
Мораль 01 02 03 Пока что агентные технологии различаются между
разными фреймворками и представляют собой спектр от явной и предска- зуемой оркестрации агентов, используемой в реальных индустриальных системах, до планирующих агентов с кодогенерацией, которые лучше подходят для исследовательских задач Агентные технологии позволяют создавать на основе LLM более сложные системы из коммуницирующих между собой автономных рассуждающих агентов. Сам по себе агент — это метарассуждения с инструментами Yandex Cloud поддерживает OpenAI Responses API, что позволяет использовать множество готовых фреймворков (OpenAI Agents SDK, LangGraph и др.)