Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Создание мультиагентной системы на базе AI Studio

Создание мультиагентной системы на базе AI Studio

Мастер-класс на конференции Yandex NeuroScale 2025

Dmitri Soshnikov

September 24, 2025

Transcript

43 slides
  1. План Responses API Новый OpenAI Compatible API для работы с

    LLM в Yandex Cloud RAG и Function Calling Мультиагентные системы С использованием OpenAI Agent SDK и LangGraph 01 02 03
  2. Прежде чем мы начнём Получите грант на Yandex Cloud Если

    у вас нет доступа, то в целях экономии времени на мастер-классе, мы предлагаем зарегистрироваться заранее ― в перерыве или дома Используйте свой Yandex Cloud Если у вас есть доступ к своему облаку, вы можете эксперимен- тировать. Это не потребует больших вложений! Используйте временные ключи Если у вас есть своё Python-окружение, которое вы готовы использовать, и хотите попробовать прямо сейчас
  3. Прежде чем мы начнём Получите грант на Yandex Cloud Используйте

    свой Yandex Cloud Если у вас есть доступ к своему облаку, вы можете эксперимен- тировать. Это не потребует больших вложений! Используйте временные ключи
  4. Responses API Новый Stateful API для работы в AI Studio

    Совместим с OpenAI API Поддержка LLM и VLM Опенсорс идёт в поддержку Responses: vLLM уже поддерживает Responses API
  5. Эволюция LLM API 02 01 03 Я люблю… …программировать [

    { “role” : “System”, “content” : “Ты ассистент”}, { “role” : “user”, “content” : “Что ты любишь?” } ] Программировать
  6. 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
  7. 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
  8. res = client.responses.create( model = model, reasoning = { "effort"

    : "low" }, store = True, previous_response_id = res.id, input = "Я буду есть стейк!" ) printx(res.output_text) Работаем с Responses API
  9. Function Calling Найди Мерло подешевле LLM Func = SearchWinesPriceList Args

    = { wine_name = “Мерло”, sort_order = “Cheapest” } Диспетчер LLM Это Мерло из Краснодара, стоит 120 руб.
  10. 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-схемой
  11. 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
  12. Удалённый Function Calling = MCP Конфигурация MCP-тула Получение списка тулов

    Апрув вызова тула Вызов тула Возврат пользователю результата 01 02 03 04 05
  13. 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!
  14. instruction = """Ты опытный сомелье, в задачу которого входит…""" wine_agent

    = Agent( instruction=instruction, tools=[mcp_tool, AddToCart, ShowCart, Handover]) Прячем всё в специальный класс
  15. 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! Функция для обработки
  16. Реализация файлового поиска 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, } Загружаем файл Добавляем в индекс
  17. Многоагентные системы в 2024–2025 LLM LLM Спасибо! Что надо? Привет,

    как дела? Общение на естественном языке = интерпретируемость Знания в LLM = онтология
  18. Выбор блюд и вина в ресторане Посетитель Хочет есть Не

    всегда знает, что хочет Но иногда знает Официант Знает меню Передаёт запрос сомелье в случае необходимости Сомелье Знает соответствия блюд и вина
  19. Выбор блюд и вина в ресторане Посетитель Хочет есть Не

    всегда знает, что хочет Но иногда знает Официант Знает меню Передаёт запрос сомелье в случае необходимости Сомелье Знает соответствия блюд и вина
  20. 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 реализовал класс, похожий на наш!
  21. Умный агент (ReAct) Посетитель Меню ресторана Доступно удалённо по протоколу

    MCP ReAct Agent Think Act Observe Функция-сомелье Подбор на основе семантического поиска Инструменты (Tools)
  22. Передача управления = многоагентная система 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) Официант может передать работу сомелье!
  23. Вызов = многоагентная система waiter = Agent( name="Waiter_Agent", instructions="Ты профессиональный

    официант…", mcp_servers=[rest_server], tools=[ sommelier.as_tool( "Sommelier", "Агент-сомелье, который может подобрать еду к вину и наоборот") ] Агент может выступать как инструмент
  24. Библиотеки для построения агентных процессов LangChain Построение ассистентов: Языковые модели

    Векторные БД Память Function Calling LangGraph Построение агентных конфигураций: Граф взаимодействия между агентами Сохранение состояния системы Трассировка взаимодействий ReAct-агенты Agentic Workflows OpenAI Agents SDK SmolAgents
  25. Опишем процесс взаимодействия агентов Посетитель Хостес Смотрит на предпочтения Передаёт

    дальше официанту или сомелье Состояние Диспетчер Официант Знает меню Передаёт запрос сомелье в случае необходимости Сомелье Знает соответствия блюд и вина
  26. Состояние Диспетчер Официант Знает меню Передаёт запрос сомелье в случае

    необходимости Сомелье Знает соответствия блюд и вина { message: хочу стейк, foodpref: стейк, maindish : бык на взводе, winepref: Мерло, wine: Мерло резерв 2015, answer: Закажите… }
  27. Граф состояний 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: “Мерло” }
  28. Спектр агентных технологий LangGraph LlamaIndex Ригидность Предcказуемость Менее мощные LLM

    Явная оркестрация Динамическое планирование/ кодогенерация SmolAgents Microsoft AutoGen Гибкость Непредсказуемость Мощные LLM
  29. Мораль 01 02 03 Пока что агентные технологии различаются между

    разными фреймворками и представляют собой спектр от явной и предска- зуемой оркестрации агентов, используемой в реальных индустриальных системах, до планирующих агентов с кодогенерацией, которые лучше подходят для исследовательских задач Агентные технологии позволяют создавать на основе LLM более сложные системы из коммуницирующих между собой автономных рассуждающих агентов. Сам по себе агент — это метарассуждения с инструментами Yandex Cloud поддерживает OpenAI Responses API, что позволяет использовать множество готовых фреймворков (OpenAI Agents SDK, LangGraph и др.)

More Decks by Dmitri Soshnikov

Other Decks in Technology