Полный разбор: чем агент отличается от чат-бота, из каких компонентов состоит (LLM, память, инструменты, планирование) и как собрать своего первого агента на Python. Реальный код, архитектурная схема и честный список ограничений.
AI-агент (агент на базе ИИ) — это система, которая не просто отвечает на вопрос, а самостоятельно добивается цели: планирует шаги, вызывает инструменты, читает результат и решает, что делать дальше. Обычный чат-бот — это один вызов языковой модели «вопрос → ответ». Агент — это цикл из множества вызовов, в котором модель сама управляет процессом.
Ключевое различие удобно запомнить так:
Простой пример: вы просите чат-бота «найди цены на билеты». Он ответит текстом, что надо зайти на сайт авиакомпании. Агент же сам откроет браузер, сравнит несколько сайтов, выберет лучший вариант и пришлёт готовую ссылку с ценой. Разница — в наличии автономности и инструментов.
Практически любой агент, от минималистичного AutoGPT до сложных продакшен-систем, собирается из четырёх блоков:
Модель отвечает за то, что делать; инструменты — за то, как это сделать физически; память хранит контекст между шагами; планировщик склеивает всё в единый цикл. Уберите любой блок — и агент превращается в обычный чат-бот или слепой скрипт.
Самый распространённый способ заставить LLM «действовать» — паттерн ReAct (Reason + Act). На каждом шаге модель выдаёт либо мысль и действие (вызов инструмента), либо финальный ответ. Цикл повторяется, пока цель не достигнута или не исчерпан лимит шагов.
# Минимальный ReAct-агент на Python (без фреймворков) import openai client = openai.OpenAI(api_key="sk-...") def search_web(query): # заглушка: здесь реальный вызов поискового API return f"Результаты по запросу '{query}': ..." # Описываем инструмент, чтобы модель знала, что он существует tools = [{ "type": "function", "function": { "name": "search_web", "parameters": {"query": "строка поиска"}, }, }] messages = [{"role": "user", "content": "Кто выиграл Лигу чемпионов в 2026?"}] for _ in range(5): # максимум 5 шагов resp = client.chat.completions.create(model="gpt-4o", messages=messages, tools=tools) msg = resp.choices[0].message if msg.tool_calls: # модель хочет вызвать инструмент messages.append(msg) for tc in msg.tool_calls: result = search_web(tc.function.arguments) messages.append({"role": "tool", "content": result, "tool_call_id": tc.id}) else: # финальный ответ print(msg.content) break
Обратите внимание на структуру: модель сначала возвращает tool_calls (хочет поискать), мы выполняем поиск, возвращаем результат обратно в историю, и модель либо вызывает инструмент снова, либо выдаёт итог. Именно этот цикл «думать → действовать → наблюдать» и делает систему агентом.
Инструмент — это любая функция, которую модель может запросить по имени. Через механизм function calling вы описываете сигнатуру функции в JSON-схеме, а модель сама решает, когда и с какими аргументами её вызвать. Вот пример инструмента, который читает файл с диска:
import os def read_file(path: str) -> str: """Читает текстовый файл. path — путь относительно рабочей папки.""" if not os.path.exists(path): return "Файл не найден" return open(path, encoding="utf-8").read() # JSON-схема, которую видит модель read_file_tool = { "type": "function", "function": { "name": "read_file", "description": "Читает текстовый файл", "parameters": { "type": "object", "properties": {"path": {"type": "string"}}, "required": ["path"], }, }, }
В реальных агентах набор инструментов шире: веб-поиск, запуск кода в песочнице, SQL-запросы, отправка писем, обращение к CRM. Например, кодинг-агенты вроде Claude Code или Cursor используют инструменты чтения/правки файлов и запуска тестов, чтобы самостоятельно чинить код в репозитории.
Контекстное окно модели ограничено, поэтому агенты используют два уровня памяти. Краткосрочная — это история сообщений, которая живёт внутри одного запуска. Долгосрочная — векторная база данных (Chroma, Qdrant, Pinecone), куда складываются факты, и откуда их достают по смыслу через поиск по эмбеддингам. Такой подход называется RAG.
import chromadb db = chromadb.PersistentClient(path="./memory") collection = db.get_or_create_collection("facts") # Сохраняем факт в долгосрочную память collection.add( ids=["1"], documents=["Клиент предпочитает отчёты по пятницам"], ) # Достаём релевантные факты по смыслу (не по точному совпадению) result = collection.query(query_texts=["когда отправлять отчёт"], n_results=1) print(result["documents"]) # вернёт про пятницы
Именно память отличает «одноразового» агента от системы, которая накапливает знания о пользователе, проекте или предметной области. Без долгосрочной памяти агент каждый раз начинает с чистого листа.
Писать ReAct-цикл вручную полезно для понимания, но в бою используют готовые фреймворки. Самые заметные: LangChain/LangGraph (графовые воркфлоу), CrewAI (команды агентов с ролями), AutoGen от Microsoft (мультиагентные диалоги) и AutoGPT (классический автономный агент). Пример минимальной команды на CrewAI:
from crewai import Agent, Task, Crew researcher = Agent(role="Исследователь", goal="Собрать факты", backstory="Аналитик") writer = Agent(role="Автор", goal="Написать текст", backstory="Копирайтер") t1 = Task(description="Найди 5 фактов о AI-агентах", agent=researcher) t2 = Task(description="Напиши статью на основе фактов", agent=writer) Crew(agents=[researcher, writer], tasks=[t1, t2]).kickoff()
Подробнее про фреймворк команд — в нашем разборе CrewAI, а про классического автономного агента — в обзоре AutoGPT. Если нужен агент именно для написания кода, начните с гайда по оплате и настройке Claude Code из России.
Честно о слабых местах — чтобы не разочароваться при первом запуске:
Правило выбора простое: если задача — один ответ на вопрос, хватит чат-бота. Если нужна цепочка действий с инструментами и памятью — собирайте агента. Начните с малого: один инструмент, строгая цель, лимит шагов, и только потом наращивайте сложность.
AI-агент — это LLM, дополненная памятью, инструментами и циклом планирования. Именно эта четвёрка превращает «говорящую» модель в систему, которая реально выполняет задачи: ищет, читает, пишет код, обращается к API и повторяет шаги до результата. Начать проще всего с паттерна ReAct на Python, а когда поймёте цикл — переходите на фреймворки уровня CrewAI или LangGraph. Помните про ограничения (зацикливание, стоимость, безопасность) и начинайте с одной узкой задачи, а не с «универсального агента».
Больше разборов, гайдов и сравнений AI-агентов — в Telegram-канале Qantcore
Подписаться на @qantcore