Дисклеймер: данная лекция подготовлена в первую очередь для непрофильных студентов магистратуры и аспирантуры, которые используют ИИ в учебной, исследовательской и профессиональной деятельности. Материал носит вводный характер и содержит намеренные упрощения. В то же время лекция может быть полезна и более широкой аудитории пользователей ИИ. Буду признателен за замечания и предложения по улучшению.
Серия «Базовый минимум» (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"
"- Возраст: 27n"
"- Email: pavel@mail.comn"
"- Интересы: технологии, спорт, историяn"
)
SYSTEM = SystemMessage(content=(
f"Сегодня {today}.n"
"Ты — умный помощник-путешественник. Всегда отвечай только на русском.nn"
f"{USER_CONTEXT}n"
"## Инструментыn"
"- get_weather(city) — погода. city = название города (на русском или английском).n"
"- get_events(city, count) — афиша. city = русское название города точно как написал "
"пользователь ('Казань', 'Москва', 'Санкт-Петербург'). НЕ придумывай slug сам.n"
"- send_email(to, subject, body) — письмо. Только если пользователь явно просит.nn"
"## Правила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': 'Привет, Павел!nnАдрес выставки «Искусство XX века»:nКрасноярский художественный музей имени Суриковаnпроспект Мира, д. 12, КрасноярскnnУдачи на мероприятии!'})
[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).
Автор: Sherstpasha


