Что такое AI-агент и чем он отличается от чат-бота
Содержание курса
Агент, чат-бот и промпт-цепочка
Слово «агент» сейчас вешают почти на всё, где есть языковая модель. Разложим по полкам три конструкции, которые чаще всего путают, — на одной и той же задаче про клиентов и баланс.
Чат-бот
Чат-бот — диалоговый интерфейс к модели. Пользователь пишет сообщение, бот отвечает текстом. Внутри может быть что угодно: правила, поиск по базе знаний, вызов модели с историей переписки. Но результат работы — всегда сообщение в диалоге.
Задачу «посчитай и отправь на почту» чат-бот не решает не потому, что модель слабая, а потому, что в этой конструкции никто не выполняет действий: последовательность шагов задаёт человек, отправляя следующее сообщение.
Промпт-цепочка
Промпт-цепочка — фиксированная последовательность шагов, которую вы написали сами. Модель встроена в неё как один из шагов.
from langchain_core.prompts import ChatPromptTemplate
prompt = ChatPromptTemplate.from_template(
"Преобразуй вопрос в SQL-запрос к таблице clients(name, account_balance). "
"Верни только SQL, без пояснений и без markdown-разметки.\nВопрос: {question}"
)
chain = prompt | llm
sql = chain.invoke({"question": "Сколько клиентов с балансом выше 1000?"}).text
print(sql)
rows = conn.execute(sql).fetchall()
print(rows)
Задача решена, данные из базы получены. И это по-прежнему не агент: шаги здесь заданы жёстко — сгенерировать SQL, выполнить, напечатать. Если модель ошибётся в имени колонки, цепочка упадёт с исключением и на этом закончится. Исправиться она не может: второго прохода не предусмотрено.
Такая конструкция часто оказывается правильным выбором. Она дешевле — один вызов модели вместо пяти, — предсказуема и отлаживается как обычный код.
Про запись через |: это LCEL, способ сборки цепочек из ранних версий LangChain. Он рабочий и никуда не делся, но набор готовых цепочек вынесен в отдельный пакет langchain-classic, а основным строительным блоком в документации стал агент. Так что не удивляйтесь, если в свежих руководствах цепочек почти не встретите — сам приём от этого хуже не стал.
Агент
Агент отличается от цепочки одним: последовательность шагов выбирает модель во время выполнения. Автор кода задаёт, что доступно (инструменты) и когда остановиться, но не задаёт порядок. Именно поэтому в разобранной ранее трассе агент смог после ошибки сходить за структурой таблицы — этот шаг не был предусмотрен заранее.
Отсюда берутся и плюсы, и минусы. Один и тот же агент справляется с задачами, которые вы не перечислили заранее. Он же на одинаковый запрос может дважды выбрать разные пути.
Три ряда отличаются тем, кто задаёт порядок шагов: в чат-боте — пользователь, каждым следующим сообщением; в цепочке — автор кода, до запуска; в агенте — модель, прямо во время выполнения. Отсюда и петля в нижнем ряду: агент возвращается к модели столько раз, сколько понадобится.
Сводная таблица
| Чат-бот | Промпт-цепочка | Агент | |
|---|---|---|---|
| Кто определяет следующий шаг | Пользователь в диалоге | Автор кода, до запуска | Модель, во время выполнения |
| Действия во внешних системах | Нет | Есть, в заданном порядке | Есть, порядок и набор выбирает модель |
| Вызовов модели на задачу | Один на сообщение | Фиксированное число | Заранее неизвестно, нужен лимит |
| Реакция на ошибку шага | Отвечает текстом | Падает или идёт по заранее описанной ветке | Видит ошибку и может выбрать другой шаг |
| Повторяемость | Разный текст ответа | Одинаковый путь, разный текст на шагах с моделью | Путь может отличаться от запуска к запуску |
Про память и «обучение на опыте»
Частая формулировка «агенты, в отличие от чат-ботов, учатся на опыте» неверна и мешает потом отлаживать систему. Веса модели во время работы не меняются — ни у агента, ни у чат-бота. Всё, что выглядит как обучение, — это текст, который вы положили в контекст следующего вызова: история диалога, результаты инструментов, записи из хранилища.
Отсюда практическое следствие: «агент запомнил» означает «кто-то сохранил это и подставил обратно». Если такого механизма в коде нет, следующий запуск начнётся с чистого листа.
Как выбирать
Рабочий вопрос ровно один: можете ли вы заранее нарисовать последовательность шагов?
Если да и она не меняется — берите цепочку. Она дешевле, быстрее и её проще тестировать. Если следующий шаг зависит от того, что вернул предыдущий, вариантов много и перечислить их ветвлениями в коде не выходит — вот тогда нужен агент, и вы сознательно платите за это деньгами и предсказуемостью.
