🤖

Что такое AI-агенты и как они работают

Полный разбор: чем агент отличается от чат-бота, из каких компонентов состоит (LLM, память, инструменты, планирование) и как собрать своего первого агента на Python. Реальный код, архитектурная схема и честный список ограничений.

Основы ⏱ 14 мин
AI-АГЕНТ — АРХИТЕКТУРА LLM (МОЗГ) GPT-4o / Claude / DeepSeek рассуждение + генерация ПАМЯТЬ контекст + векторная БД ИНСТРУМЕНТЫ search / code / API ЦИКЛ ReAct Думай → Действуй → Наблюдай промпт + память Внешний мир: браузер, файлы, базы данных, другие API

# 1. Что такое AI-агент и чем он отличается от чат-бота

AI-агент (агент на базе ИИ) — это система, которая не просто отвечает на вопрос, а самостоятельно добивается цели: планирует шаги, вызывает инструменты, читает результат и решает, что делать дальше. Обычный чат-бот — это один вызов языковой модели «вопрос → ответ». Агент — это цикл из множества вызовов, в котором модель сама управляет процессом.

Ключевое различие удобно запомнить так:

Простой пример: вы просите чат-бота «найди цены на билеты». Он ответит текстом, что надо зайти на сайт авиакомпании. Агент же сам откроет браузер, сравнит несколько сайтов, выберет лучший вариант и пришлёт готовую ссылку с ценой. Разница — в наличии автономности и инструментов.

# 2. Из каких компонентов состоит агент

Практически любой агент, от минималистичного AutoGPT до сложных продакшен-систем, собирается из четырёх блоков:

Модель отвечает за то, что делать; инструменты — за то, как это сделать физически; память хранит контекст между шагами; планировщик склеивает всё в единый цикл. Уберите любой блок — и агент превращается в обычный чат-бот или слепой скрипт.

# 3. Как работает цикл агента: паттерн ReAct

Самый распространённый способ заставить 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 (хочет поискать), мы выполняем поиск, возвращаем результат обратно в историю, и модель либо вызывает инструмент снова, либо выдаёт итог. Именно этот цикл «думать → действовать → наблюдать» и делает систему агентом.

# 4. Инструменты: как агент взаимодействует с миром

Инструмент — это любая функция, которую модель может запросить по имени. Через механизм 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 используют инструменты чтения/правки файлов и запуска тестов, чтобы самостоятельно чинить код в репозитории.

# 5. Память: как агент помнит контекст между шагами

Контекстное окно модели ограничено, поэтому агенты используют два уровня памяти. Краткосрочная — это история сообщений, которая живёт внутри одного запуска. Долгосрочная — векторная база данных (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"])  # вернёт про пятницы

Именно память отличает «одноразового» агента от системы, которая накапливает знания о пользователе, проекте или предметной области. Без долгосрочной памяти агент каждый раз начинает с чистого листа.

# 6. Фреймворки и платформы для создания агентов

Писать 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 из России.

# 7. Ограничения AI-агентов

Честно о слабых местах — чтобы не разочароваться при первом запуске:

Правило выбора простое: если задача — один ответ на вопрос, хватит чат-бота. Если нужна цепочка действий с инструментами и памятью — собирайте агента. Начните с малого: один инструмент, строгая цель, лимит шагов, и только потом наращивайте сложность.

✅ Итог

AI-агент — это LLM, дополненная памятью, инструментами и циклом планирования. Именно эта четвёрка превращает «говорящую» модель в систему, которая реально выполняет задачи: ищет, читает, пишет код, обращается к API и повторяет шаги до результата. Начать проще всего с паттерна ReAct на Python, а когда поймёте цикл — переходите на фреймворки уровня CrewAI или LangGraph. Помните про ограничения (зацикливание, стоимость, безопасность) и начинайте с одной узкой задачи, а не с «универсального агента».

Больше разборов, гайдов и сравнений AI-агентов — в Telegram-канале Qantcore

Подписаться на @qantcore