Дисклеймер: данная лекция подготовлена в первую очередь для непрофильных студентов магистратуры и аспирантуры, которые используют ИИ в учебной, исследовательской и профессиональной деятельности. Материал носит вводный характер и содержит намеренные упрощения. В то же время лекция может быть полезна и более широкой аудитории пользователей ИИ. Буду признателен за замечания и предложения по улучшению.
Серия «Базовый минимум» (4 части):
Базовый минимум. Часть 1: большие языковые модели;
Базовый минимум. Часть 2: промпт-инжиниринг;
Базовый минимум. Часть 3: RAG-системы;
Базовый минимум. Часть 4: ИИ-агенты (вы здесь).
«Что такое воля, как не мысль, переходящая в дело?» — Александр Александрович Бестужев-Марлинский
Содержание
От RAG-систем к ИИ-агентам
RAG хорошо решает проблему доступа к актуальной информации, но сам по себе является лишь механизмом подстановки контекста перед генерацией ответа. В базовом варианте он не контролирует процесс: не планирует, не проверяет себя и не делает повторных попыток. Если поиск вернул нерелевантные фрагменты, модель просто сгенерирует ответ на основе того, что получила.
В реальных сценариях запросы часто многошаговые: нужно собрать данные из разных источников, сравнить, переформулировать вопрос, проверить промежуточные выводы.

В такой ситуации нужен не просто доступ к базе знаний, а управляемый процесс — система, которая выбирает стратегию и действует до тех пор, пока не достигает цели. Здесь и появляется агентный подход.
Согласно официальной документации Google Cloud, ИИ-агент (AI agent) — это система, которая использует ИИ для достижения поставленных целей и выполнения задач от имени пользователя. Он анализирует задачу, формирует план, выбирает инструменты и выполняет последовательность шагов до достижения результата.
Агент может обращаться к внешним сервисам и выполнять операции: запускать код, изменять файлы, делать запросы к API или взаимодействовать с базами данных. То есть он влияет на окружение, а не только описывает решения текстом.

Еще одна важная особенность — это самокоррекция. Если агент видит, что информации недостаточно или результат некорректен, он может уточнить запрос, повторить поиск, пересчитать данные и только после этого сформировать итоговый ответ.
Во многих реализациях он сам предлагает следующие шаги и может выполнять их автоматически или с подтверждением пользователя для критичных действий.
Благодаря этому агент подходит для задач, которые не укладываются в один шаг генерации текста: анализ больших массивов документов, автоматизированная работа с кодом или создание презентаций.
Компоненты ИИ-агента
Чтобы агент работал как автономная система, ему нужны несколько ключевых элементов.

В центре остаётся LLM. На каждом шаге она пишет инструкции и промежуточные выводы, формирует запросы к инструментам, генерирует или редактирует текст и код.
Для взаимодействия со средой он использует инструменты. Это могут быть уже упомянутые поиск в базе знаний, запрос к API, выполнение кода и любые другие.
Далее появляется память. Краткосрочная хранит текущий контекст и промежуточные результаты, чтобы агент не забывал, что делал на прошлом шаге. Долгосрочная — это, например, векторные базы или корпоративные знания, которые позволяют накапливать полезную информацию и использовать ее в будущем.
Так как задачи бывают многоэтапные, нужен планировщик. Он разбивает большую задачу на шаги, выбирает инструменты и следит за тем, чтобы агент не зациклился и довел процесс до результата.
Еще один важный компонент — это контроль ошибок. Агент оценивает свои результаты, ищет несогласованности, сверяет с фактами и делает повторные попытки, если что-то пошло не так. И, наконец, окружение: все, с чем агент может взаимодействовать.
Что такое ReAct
Один из ранних и практичных паттернов агентного поведения для LLM — это паттерн ReAct. Его идея проста: модель действует согласно определенному набору шагов.

Сначала она рассуждает, что нужно сделать, затем выполняет действие (через инструменты), получает результат и только после этого выбирает следующий шаг. В терминах цикла это думать (reason), действовать (act), наблюдать (observe).
Преимущество ReAct в том, что процесс становится более прозрачным: мы видим цепочку шагов и действий агента (план, вызовы инструментов, результаты) и можем контролировать ход работы. Это один из базовых паттернов, на котором строятся многие современные агенты.
Мультиагентные системы
Когда один агент уже умеет планировать и действовать, следующий шаг состоит в том, чтобы разделить работу между несколькими специализированными агентами. Мультиагентная система (MAS, Multi-Agent System) — это система из нескольких агентов, которые координируют действия и совместно решают одну задачу. Идея похожа на команду: вместо одного универсального исполнителя есть несколько ролей (например, планировщик, исследователь, исполнитель и валидатор), а результаты собираются в общий ответ.
Почему это бывает полезно? Во-первых, появляется параллелизм: разные агенты могут одновременно выполнять подзадачи. Во-вторых, повышается качество: агенты могут взаимно проверять результаты, что снижает риск ошибок. В-третьих, становится проще масштабировать сложные сценарии со множеством инструментов, источников данных и промежуточных шагов.
Обычно мультиагентность реализуют через агента-координатора (или «оркестратор»), который разбивает цель на подзадачи, назначает их другим агентам и собирает итоговый результат. В более простом варианте это может быть «конвейер ролей», а в более продвинутом динамическая схема, в которой агенты могут повторно обращаться друг к другу.

Однако с ростом числа агентов усложняется координация, возрастают шансы появления противоречий между результатами, растут затраты (больше шагов — больше токенов и времени), а также повышаются требования к безопасности: если агенты используют внешние источники и инструменты, нужно защищаться от ошибок и вредных инструкций внутри данных.
ИИ-агенты в современных сервисах
Крупные компании внедряют агентов в продукты, которыми каждый день пользуются миллионы людей. Например, в ChatGPT появился Agent Mode и Codex. Например, в ChatGPT развиваются агентные сценарии работы, а также инструменты для помощи с кодом, такие как Codex. GitHub Copilot также развивается в сторону агентности: их система интегрируется в различные IDE, такие как VSCode, и способна анализировать проект, предлагать правки, создавать тесты и многое другое.
Microsoft представила Microsoft 365 Copilot — помощника, встроенного в привычные приложения Office (Word, Excel, PowerPoint, Outlook, Teams). Он обрабатывает документы, таблицы, письма и встречи, формирует отчеты и презентации. Вероятно, пока писался этот текст, появилось еще несколько новых инструментов.
Практический пример: минимальный ИИ-агент-помощник
Когда я делал пример для этой части, хотелось реализовать что-то максимально простое, без сложной инфраструктуры и множества компонентов, но при этом такое, чтобы было видно, что это действительно агент.
В итоге получился небольшой MVP помощника в путешествиях, который умеет:
Смотреть погоду в разных городах;
Смотреть мероприятия в разных городах;
Отправлять письма на почту.
Полный код можно посмотреть и запустить в Google Colab (если хочется поэкспериментировать). Ниже разберем только основные части.
Инициализация модели
В качестве модели я использовал одну из относительно новых — Qwen 3.5 (9B). Она была запущена в Colab локально через Ollama.
from langchain_openai import ChatOpenAI llm = ChatOpenAI( model="qwen3.5:9b", base_url="http://localhost:11434/v1", api_key="ollama", temperature=0.3, )
Выбор модели здесь был таким, чтобы модель была достаточно хорошей для задач агента и при этом умещалась в Colab, чтобы любой желающий мог повторить пример.
Инструменты агента
Далее в коде задаются три инструмента: get_weather, get_events и send_email. Идея здесь простая: агент может найти интересные события в городе, предложить их пользователю и, при необходимости, подсказать, как лучше одеться по погоде.
Снова подчеркну, что пример, конечно, игрушечный. Хотелось, с одной стороны, не усложнять, а с другой, чтобы агент всё-таки делал какие-то действия и решал, какие инструменты использовать.
Функции получились довольно объёмными, поэтому полностью их разбирать не будем, а для примера посмотрим только на функцию get_weather.
@tool def get_weather(city: str) -> str: """Возвращает текущую погоду в указанном городе. Принимает название города на русском или английском языке.""" try: geo = requests.get( "https://geocoding-api.open-meteo.com/v1/search", params={"name": city, "count": 1, "language": "ru"}, timeout=10, ).json() except Exception: return "Не удалось получить погоду, попробуйте позже." if not geo.get("results"): return f"Город '{city}' не найден." r = geo["results"][0] lat, lon, name = r["latitude"], r["longitude"], r["name"] try: weather = requests.get( "https://api.open-meteo.com/v1/forecast", params={ "latitude": lat, "longitude": lon, "current": "temperature_2m,wind_speed_10m,weathercode", "timezone": "auto", }, timeout=10, ).json()["current"] except Exception: return "Не удалось получить погоду, попробуйте позже." codes = { 0: "ясно", 1: "преимущественно ясно", 2: "переменная облачность", 3: "пасмурно", 45: "туман", 48: "туман с инеем", 51: "лёгкая морось", 53: "морось", 55: "сильная морось", 61: "лёгкий дождь", 63: "дождь", 65: "сильный дождь", 71: "лёгкий снег", 73: "снег", 75: "сильный снег", 77: "снежная крупа", 80: "ливень", 85: "снегопад", 95: "гроза", 99: "гроза с градом", } desc = codes.get(weather["weathercode"], f"код {weather['weathercode']}") return ( f"{name}: {weather['temperature_2m']}C, {desc}, " f"ветер {weather['wind_speed_10m']} км/ч" )
Здесь используется декоратор @tool из langchain_core.tools.
Он превращает обычную Python-функцию в инструмент, который может вызывать агент. Модель видит описание функции (docstring), понимает какие у неё аргументы и может сама решить, когда её использовать.
В более продвинутых вариантах инструменты часто делают через MCP (Model Context Protocol), например с использованием библиотеки fastmcp. Это даёт больше гибкости и позволяет выносить инструменты во внешние сервисы. Но нашего примера это избыточно, поэтому здесь используется простой вариант через @tool.
Промпт и контекст пользователя
Здесь мы описываем, как должен вести себя агент, и передаём информацию о пользователе, чтобы ответы были более осмысленными и персонализированными.
USER_CONTEXT = ( "Пользователь:\n" "- Имя: Павел\n" "- Возраст: 27\n" "- Email: pavel@mail.com\n" "- Интересы: технологии, спорт, история\n" ) SYSTEM = SystemMessage(content=( f"Сегодня {today}.\n" "Ты — умный помощник-путешественник. Всегда отвечай только на русском.\n\n" f"{USER_CONTEXT}\n" "## Инструменты\n" "- get_weather(city) — погода. city = название города (на русском или английском).\n" "- get_events(city, count) — афиша. city = русское название города точно как написал " "пользователь ('Казань', 'Москва', 'Санкт-Петербург'). НЕ придумывай slug сам.\n" "- send_email(to, subject, body) — письмо. Только если пользователь явно просит.\n\n" "## Правила\n" "1. Используй инструменты по одному, жди результата.\n" "2. В ответе укажи место и время начала из результата get_events — не придумывай.\n" "3. Если поле 'площадка не указана' или 'время не указано' — так и скажи.\n" "4. Не пиши JSON или технические блоки в финальном ответе.\n" "5. Давай рекомендации по одежде исходя из погоды.\n" "6. Учитывай интересы пользователя при выборе мероприятий.\n" "7. Будь лаконичен, не навязывай услуги.\n" )) tools = [get_weather, get_events, send_email] agent = create_agent(llm, tools)
Инструменты собираются в список, а модель вместе с ними передаётся в create_agent из langchain.agents и SystemMessage из langchain_core.messages. Именно на этом этапе обычная LLM превращается в агента.
В целом здесь и далее используется библиотека LangChain версии 1.2.12.
Цикл работы
Далее реализуется цикл взаимодействия с пользователем.
while True: query = input("Вы: ").strip() if not query or query.lower() in {"exit", "выход", "quit"}: break history.append(HumanMessage(content=query)) history = history[-10:] result = agent.invoke({"messages": [SYSTEM] + history}) for msg in result["messages"]: if isinstance(msg, AIMessage) and msg.tool_calls: for tc in msg.tool_calls: print(f" [tool] {tc['name']}({tc['args']})") elif isinstance(msg, ToolMessage): preview = msg.content[:300] + ("..." if len(msg.content) > 300 else "") print(f" [result] {preview}") final = next( (m for m in reversed(result["messages"]) if isinstance(m, AIMessage) and not m.tool_calls), None, ) if final: print(f"\nАгент: {final.content}\n") history.append(final)
Здесь всё достаточно просто: мы принимаем ввод, добавляем его в историю диалога и передаём вместе с системным промптом в агента. Внутри agent.invoke уже происходит вся логика.
Отдельно в коде выводятся промежуточные шаги (вызовы инструментов и их результаты), чтобы было видно, как агент рассуждает и действует.
Пример диалога
Ниже приведён пример диалога. Я немного сократил вывод инструментов, чтобы не перегружать, но суть сохранена.
Вы: Привет я в Красноярске пару дней и хочу вечером сходить куда то сегодня скажи куда можно и как по погоде одеться [tool] get_weather({'city': 'Красноярск'}) [tool] get_events({'city': 'Красноярск', 'count': 10}) [result] Красноярск: 3.5C, пасмурно, ветер 18 км/ч [result] Мероприятия в Красноярске: ... Агент: Привет, Павел! Сегодня в Красноярске +3.5°C, пасмурно... ... 3. **Выставка «Николай Константинович Ауэрбах: ученый-археолог, краевед, общественный деятель»** — Красноярский краевой краеведческий музей, ул. Дубровинского, д. 84. Также посвящена истории и науке. К сожалению, точное время начала этих мероприятий не указано в доступной информации. Рекомендую уточнить расписание на месте или на сайте музея. Также есть выставка «Искусство XX века» в красноярском художественном музее имени Сурикова (просп. Мира, д. 12), но время начала тоже не указано. Выбирай то, что ближе по интересам, и не забудь взять с собой тёплую одежду!
Здесь видно, что агент сначала сам решил вызвать два инструмента (погоду и события), получил данные и только после этого сформировал итоговый ответ. При этом он учитывает контекст пользователя (обращается по имени), даёт рекомендации по одежде на основе погоды и предлагает варианты мероприятий.
Дальше пользователь уточняет действие:
Вы: Хочу на Искусство XX века. Скинь мне адрес на почту Письмо сохранено: /content/email_061623.txt [tool] send_email({'to': 'pavel@mail.com', 'subject': 'Адрес выставки «Искусство XX века»', 'body': 'Привет, Павел!\n\nАдрес выставки «Искусство XX века»:\nКрасноярский художественный музей имени Сурикова\nпроспект Мира, д. 12, Красноярск\n\nУдачи на мероприятии!'}) [result] Письмо успешно отправлено на pavel@mail.com. Агент: Письмо с адресом выставки «Искусство XX века» отправлено на твой email (pavel@mail.com). Адрес: проспект Мира, д. 12, Красноярск. Удачи на мероприятии!
Как помните, отправка здесь реализована как заглушка, но сам инструмент вызван корректно, адрес пользователя подставлен правильно, и письмо действительно формируется. Ниже представлен файл, который был сохранён:
Кому: pavel@mail.com Тема: Адрес выставки «Искусство XX века» Привет, Павел! Адрес выставки «Искусство XX века»: Красноярский художественный музей имени Сурикова проспект Мира, д. 12, Красноярск Удачи на мероприятии!
Заключение
В этой серии мы прошли путь от базовой идеи языковой модели к практическим системам вокруг неё: RAG подключает внешние знания и делает ответы более точными и проверяемыми, агенты расширяют возможности LLM до сложных многошаговых действий, а промпт-инжиниринг помогает эффективно управлять качеством и форматом результата.
Не обошлось и без минусов. Среди них галлюцинации, чувствительность к формулировкам, ограничения контекстного окна, риски безопасности и необходимость выстраивать процессы так, чтобы результаты можно было проверять и воспроизводить.
Список используемых источников
1. Wang X., Fan Z., Hua W., Tang R., Zhang J., Zhou M., Li B. A Survey on Large Language Model based Autonomous Agents // arXiv. 2024. URL: https://arxiv.org/abs/2401.14554 (дата обращения: 05.11.2025);
2. Yao S., Zhao J., Yu D., Narasimhan K., Chen D. ReAct: Synergizing Reasoning and Acting in Language Models // arXiv. 2022. URL: https://arxiv.org/abs/2210.03629 (дата обращения: 05.11.2025);
3. AI-агенты: переход от инструментов к автономным исполнителям в бизнесе [Электронный ресурс] // Yandex Cloud : блог. — 28 октября 2025 г. — URL: https://yandex.cloud/ru/blog/ai-agents (дата обращения: 03.01.2026);
4. Skillfactory. Что такое AI-агенты и что они умеют [Электронный ресурс] // Skillfactory Blog. — 22 мая 2025. — URL: https://blog.skillfactory.ru/chto-takoe-ai-agenty-i-chto-oni-umeyut/ (дата обращения: 03.01.2026);
5. AI-агенты: что это и как они работают? [Электронный ресурс] // Developers.Sber.ru : база знаний (GigaChat API). — 26 сентября 2025. — URL: https://developers.sber.ru/help/gigachat-api/ai-agents (дата обращения: 03.01.2026);
6. Многоагентная система [Электронный ресурс] // Рувики : интернет-энциклопедия. — URL: https://ru.ruwiki.ru/wiki/Многоагентная\_система (дата обращения: 03.01.2026).
7. Мультиагентные системы на основе LLM: как работают и зачем нужны [Электронный ресурс] // Cloud.ru : блог. — 11 июля 2025. — URL: https://cloud.ru/blog/multiagentnyye-sistemy-na-osnove-llm (дата обращения: 03.01.2026).
