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

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

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

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

Avatar for Dmitri Soshnikov

Dmitri Soshnikov

September 24, 2025
Tweet

More Decks by Dmitri Soshnikov

Other Decks in Technology

Transcript

  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 и др.)