# Агент vs не-агент

> [HTML-версия](https://learnvibecoding.ru/publiclessons/agent-vs-ne-agent) · [Индекс для LLM](https://learnvibecoding.ru/llms.txt) · [Политика использования материалов](https://learnvibecoding.ru/politika-materialov)
> Материалы защищены. Обучение LLM без согласия запрещено. При разрешённом использовании — обязательна прямая ссылка на страницу-источник.

**Курс:** Создаем своего агента обновленный

# Урок 5.1: Агент vs не-агент — где граница?

## Блок 1: Зачем это нужно

### Проблема

Вот типичная история:

```
Ты: "Хочу сделать AI-ассистента что будет помогать менеджерам продаж"

Что ты видишь в голове:
  "Я прикреплю LLM к CRM, и он будет предлагать что писать клиентам"

Что на самом деле нужно:
  "Менеджер просит: 'Отправь письмо клиенту что не платит 3 месяца'"
  Система не может просто ответить "вот текст письма"
  Она должна:
    1. Проверить в CRM есть ли такой клиент
    2. Посмотреть историю платежей
    3. Написать письмо
    4. Найти нужный email
    5. Отправить письмо
    6. Создать задачу менеджеру "следи за ответом"

  Это не просто "дай LLM инструмент и всё получится"
  Это АГЕНТ — система что сама решает какие инструменты использовать и в каком порядке.
```

### Если ты это не понимаешь

- Напишешь обычный LLM-код, потом поймёшь что система не может ничего делать (только отвечать)
- Будешь писать костыли (вызывать инструменты по одному через UI, вместо того чтобы агент сам)
- Не сможешь контролировать что система вообще способна делать

---

## Блок 2: Чем агент отличается от обычного LLM

![Чат-бот vs Агент](https://supabase.learnvibecoding.ru/storage/v1/object/public/Pictures%20for%20course/Product,%20AI%20product,%20vibecoding/chatbot_vs_agent.png)

### Давай сравним три типа систем

```
ТИП 1: ОБЫЧНЫЙ ЧАТБОТ (не-агент)
═══════════════════════════════════════

Пользователь: "Сколько у меня непрочитанных писем?"

ВХ: вопрос → LLM → ВЫХОД: текст с ответом
                ↓
            Система не может
            заглянуть в почту

Результат: "Для этого напиши в техподдержку"
Проблема: LLM не знает и не может узнать правду


ТИП 2: LLM + ИНСТРУМЕНТ (не совсем агент)
═════════════════════════════════════════════

Пользователь: "Сколько у меня непрочитанных писем?"

ВХ: вопрос → LLM → LLM решает "нужно вызвать get_unread_emails"
                  → Вызов инструмента → Результат
                  → LLM формирует ответ → ВЫХОД: "У тебя 5 непрочитанных"

Результат: правильный ответ
Но это работает только если инструмент ровно один или человек сказал какой инструмент нужен


ТИП 3: АГЕНТ (самостоятельно решает что делать)
═════════════════════════════════════════════════

Пользователь: "Напомни мне про звонок с Иваном завтра в 10:00 и отправь ему письмо что мы звоним"

ВХ: задача
  ↓
LLM думает: "Нужно:
  1. Создать встречу в календаре
  2. Отправить письмо

Хорошо, какие инструменты есть?"

  ↓
Вызывает инструмент 1: create_meeting("Звонок с Иваном", "завтра 10:00")
Получает результат: "ID встречи: 123"

  ↓
Вызывает инструмент 2: send_email("ivan@company.com", "Напоминаем что звоним завтра в 10:00")
Получает результат: "Email отправлен"

  ↓
LLM думает: "Хорошо, обе задачи выполнены"

ВЫХОД: "Встреча создана, письмо отправлено" + встреча реально в календаре + письмо реально отправлено
```

### Ключевое отличие

| | Чатбот | LLM+инструмент | Агент |
|---|--------|---|---|
| **Может ответить** | Да | Да | Да |
| **Может использовать инструменты** | Нет | Да, если одного достаточно | Да |
| **Решает какие инструменты использовать** | Нет | Условно (пользователь указывает) | Да |
| **Может использовать несколько инструментов подряд** | Нет | Нет | Да |
| **Может переговориться с собой если что не получается** | Нет | Нет | Да |
| **Может рассуждать** | Нет | Да | Да |

---

## Блок 3: Примеры что является и что не является агентом

### Не-агент (это просто LLM)

#### Пример 1: Telegram-бот что переводит

```
Пользователь: "Переведи 'hello' на русский"
Бот: обращается к LLM → "привет"
Результат: просто текст в ответ

Это не агент потому что:
  ✗ Нет никаких инструментов
  ✗ Нет рассуждений (input → output, end)
  ✗ Нет взаимодействия с внешним миром
```

#### Пример 2: Приложение "улучшить текст"

```
Пользователь: вводит текст "я хочу лучше писать" 
Приложение: отправляет в Claude → Claude его улучшает → показывает результат

Это не агент потому что:
  ✗ Одно преобразование
  ✗ LLM не выбирает как действовать
  ✗ Заранее известно что LLM будет делать
```

#### Пример 3: FAQ-бот на основе документов

```
Пользователь: "Как сбросить пароль?"
Бот: ищет в FAQ → находит ответ → отправляет

Это не агент потому что:
  ✗ Просто поиск по базе
  ✗ LLM не принимает решения
  ✗ Нет цикла Мысль→Действие→Наблюдение
```

### ЧТО ЯВЛЯЕТСЯ агентом

#### Пример 1: Ассистент для анализа данных

```
Пользователь: "Сколько денег мы потеряли за счет отмен в августе?
Покажи график по дням и какая была причина в каждый день"

Агент:
  Шаг 1 (Мысль): "Мне нужно:
    1. Получить данные по отменам в августе
    2. Посчитать сумму потерь
    3. Сгруппировать по дням
    4. Для каждого дня найти причину в баззе
    5. Построить график"

  Шаг 2-5 (Действия): 
    → Вызывает get_refunds(month=8)
    → Вызывает sum_losses(refunds)
    → Вызывает group_by_day(refunds)
    → Для каждого дня: search_in_database(cause, date)
    → Вызывает generate_chart(data)

  Шаг 3-6 (Наблюдение):
    ← Смотрит результаты каждого инструмента
    ← Если чего-то не хватает → переделает шаг
    ← Если новые данные противоречат плану → пересчитает

Результат: реальный график + анализ что случилось в каждый день

Это АГЕНТ потому что:
  ✓ Сам выбрал какие инструменты использовать
  ✓ Использовал их в правильном порядке
  ✓ Наблюдал результаты
  ✓ При необходимости переделал бы заново
```

#### Пример 2: Система обработки заказов

```
Пользователь/система: "Обработай заказ #123 от клиента"

Агент:
  1. Думает: "Что делать с заказом?"
  2. Проверяет заказ в БД
  3. Если товар в наличии:
     → Заказывает доставку
     → Отправляет письмо клиенту
  4. Если товара нет:
     → Проверяет у других складов
     → Если есть → организует доставку с другого склада
     → Если нет → отправляет письмо "скоро будет"
  5. В конце отправляет уведомление менеджеру

Это АГЕНТ потому что:
  ✓ Сам принимает решение в зависимости от ситуации
  ✓ Использует инструменты в нужном порядке
  ✓ Может самостоятельно найти решение если стандартного нет
```

#### Пример 3: AI Product Manager

```
Задача: "Проанализируй фичи которые просили в этом месяце.
Найди топ-3 по impact и effort, дай рекомендацию что делать первым"

Агент:
  1. Думает: "Мне нужны данные о фичах и их метрики"
  2. Получает список фичей из GitHub issues
  3. Для каждой фичи:
     → Читает комментарии (impact)
     → Оценивает сложность (effort)
     → Считает score
  4. Сортирует по score
  5. Для топ-3: генерирует аргументы почему именно эти
  6. Рисует таблицу и диаграмму

Это АГЕНТ потому что:
  ✓ Самостоятельно спроектировал как найти ответ
  ✓ Собрал данные из разных источников
  ✓ Обработал их в нужном порядке
  ✓ Правильно представил результат
```

---

## Блок 4: Граница между агентом и программой

![Программа vs Агент](https://supabase.learnvibecoding.ru/storage/v1/object/public/Pictures%20for%20course/Product,%20AI%20product,%20vibecoding/program_vs_agent.png)

### Это может запутать

Кажется, что это описание подходит и для обычного кода:

```python
def process_order(order_id):
    order = get_order(order_id)
    if order.stock > 0:
        ship_order(order)
        send_email(order.customer)
    else:
        order.status = "waiting"
    notify_manager(order)
```

Это тоже "делает несколько шагов в нужном порядке".

**На самом деле — разница в этом:**

| Программа | Агент |
|-----------|-------|
| **Ты решаешь** как действовать и пишешь это в коде | **LLM решает** как действовать, ты даёшь инструменты |
| Логика жёсткая: if/else, циклы | Логика гибкая: LLM выбирает |
| Новая задача = новый код | Новая задача = можешь не менять код |
| Масштабирование = писать новый код | Масштабирование = добавить инструменты |

### Пример той же задачи

**ПРОГРАММА:**
```python
def process_order(order_id):
    order = get_order(order_id)
    if order.status == "new":
        if warehouse_check(order.items):
            ship_order()
        elif second_warehouse_check(order.items):
            arrange_second_warehouse_shipping()
        else:
            send_apology_email_with_discount()
    
    # Если добавится правило что нужно проверить ещё третий склад?
    # Пишешь ещё else if и меняешь весь код
```

**АГЕНТ:**
```python
agent.tools = [
    get_order,
    check_warehouse_A,
    check_warehouse_B,
    check_warehouse_C,
    ship_from_warehouse,
    send_email,
    add_discount
]

agent.run("Обработай заказ #123, используй доступные инструменты")

# Если добавится третий склад?
# Просто добавляешь check_warehouse_C в tools, код агента не меняется
```

**Вывод:** агент это не просто программа со сложной логикой. Это **система что сама выбирает логику** в зависимости от задачи.

---

## Блок 5: Легко ли отличить в реальности

### На собеседовании это звучит как

"Вот агент просто делает то же самое, только с LLM"

"Не совсем," — и вот это важно:

**Агент должен:**

1. **Понять задачу** — "что от меня хотят?"
2. **Спланировать** — "какой порядок действий?"
3. **Выбрать инструменты** — "какие инструменты мне нужны?"
4. **Выполнить в цикле** — делать шаг, смотреть результат, переделать если нужно
5. **Остановиться когда готово** — понять что достаточно

Программа это не делает. Программа просто выполняет команды которые ты дал.

### Чек-лист: это агент или нет?

```
Ответь на эти вопросы про твою систему:

[ ] Может ли система сама выбрать какие инструменты использовать?
    (не пользователь выбирает, а LLM решает)

[ ] Может ли система использовать несколько инструментов подряд?
    (инструмент 1 → инструмент 2 → инструмент 3)

[ ] Может ли система понять результат инструмента и действовать по-разному?
    (если результат не то, что ожидалось → переделать)

[ ] Может ли система самостоятельно разложить задачу на подзадачи?
    (не пользователь сказал шаги, а LLM их придумал)

[ ] Может ли система остановиться сама, когда готово?
    (не нужна очередная команда "стоп")

Если ДА на 4+ вопроса → это агент.
Если ДА на 2-3 → это что-то между (LLM + инструменты, но не полный агент).
Если ДА на 0-1 → это просто LLM или программа с LLM.
```

---

## Блок 6: Мультиагентные системы — несколько агентов вместе

![Мультиагентная система](https://supabase.learnvibecoding.ru/storage/v1/object/public/Pictures%20for%20course/Product,%20AI%20product,%20vibecoding/multiagent_system.png)

### Когда нужна мультиагентная система

Иногда одного агента недостаточно. Нужно чтобы несколько агентов работали вместе.

```
ПРИМЕР: Обработка сложного заказа

Одного агента недостаточно потому что нужны РАЗНЫЕ компетенции:

┌──────────────────────────────────────────────────────────┐
│ Пользователь: "Хочу заказать ноутбук. Но у меня бюджет  │
│ максимум $1500, мне нужно чтобы был SSD 512GB, и я      │
│ хочу доставку завтра. Посоветуй что лучше взять."      │
└──────────────────────────────────────────────────────────┘

Для решения нужны разные "специалисты":

1. АГЕНТ-КОНСУЛЬТАНТ (знает про товары)
   "Какие ноутбуки подходят под параметры?"
   
2. АГЕНТ-ЛОГИСТ (знает про доставку)
   "Какие товары могут доставиться завтра?"
   
3. АГЕНТ-ФИНАНСИСТ (знает про бюджет и скидки)
   "Есть ли скидки? Можем ли вложиться в $1500?"
   
4. МЕНЕДЖЕР-АГЕНТ (координирует остальных)
   "Собираю советы от всех. Вот окончательная рекомендация..."

Каждый агент это специалист в своей области.
```

### Архитектура мультиагентной системы

```
                         USER
                          ↑
                          │ (ввод)
                          ↓
                    ┌─────────────┐
                    │ COORDINATOR │  ← ГЛАВНЫЙ АГЕНТ
                    │  (Manager)  │    Распределяет задачи
                    └──────┬──────┘
                           │
         ┌─────────────────┼─────────────────┐
         ↓                 ↓                 ↓
    ┌─────────┐      ┌─────────┐      ┌─────────┐
    │  AGENT  │      │  AGENT  │      │  AGENT  │
    │ Analyst │      │ Planner │      │Developer│
    │ (Data)  │      │ (Logistics)    │ (Tech)  │
    └────┬────┘      └────┬────┘      └────┬────┘
         │ (tools)        │ (tools)        │ (tools)
         ↓                ↓                ↓
    [databases]   [logistics API]   [tech specs DB]
         
         Каждый агент имеет:
         - Свои инструменты (tools)
         - Свой system prompt (он специалист)
         - Свою область компетенции
         
         Но все координируются менеджером.
```

### Пример работы мультиагентной системы

```
════════════════════════════════════════════════════════════════════

ЗАДАЧА: Клиент просит "Помогите мне найти ноутбук под мой бюджет"

════════════════════════════════════════════════════════════════════

ШАГ 1: МЕНЕДЖЕР ПОЛУЧАЕТ ЗАДАЧУ
────────────────────────────────
Manager Agent читает: "Нужно найти ноутбук. Бюджет? Требования? Доставка?"

Manager думает: "Это сложная задача. Нужны эксперты. Делю её на подзадачи:
  - Data Analyst: узнай какие ноутбуки в наличии и их цены
  - Logistics Agent: узнай сроки доставки
  - Tech Specialist: убедись что техспеки подходят"

════════════════════════════════════════════════════════════════════

ШАГ 2: АГЕНТЫ РАБОТАЮТ ПАРАЛЛЕЛЬНО
──────────────────────────────────

DATA ANALYST AGENT:
  Мысль: "Нужно найти ноутбуки в цене до $1500"
  Действие: query_inventory(price_max=1500, type="laptop")
  Наблюдение: Найдено 23 ноутбука. Топ-5 по рейтингу:
    1. MacBook Air M3 - $1299
    2. Dell XPS 13 - $1199
    3. HP Pavilion - $899
    ... и т.д.

LOGISTICS AGENT:
  Мысль: "Можно ли доставить завтра?"
  Действие: check_shipping_availability(items=[...], zip_code="10001")
  Наблюдение: Из 23 ноутбуков 8 могут доставиться завтра (express shipping)

TECH SPECIALIST AGENT:
  Мысль: "Проверю что все соответствуют техническим требованиям"
  Действие: verify_specs(models=[...], requirements={SSD: 512GB, RAM: 16GB})
  Наблюдение: 6 моделей полностью соответствуют требованиям

════════════════════════════════════════════════════════════════════

ШАГ 3: МЕНЕДЖЕР СОБИРАЕТ РЕЗУЛЬТАТЫ
─────────────────────────────────────
Manager видит результаты от всех трёх агентов:
  ✓ Data: есть доступные товары
  ✓ Logistics: есть срочная доставка
  ✓ Tech: спеки подходят

Manager создаёт финальный ответ:
  "На основе анализа моих экспертов рекомендую:
   1. MacBook Air M3 ($1299) - лучший для работы
   2. Dell XPS 13 ($1199) - лучший для портативности
   3. HP Pavilion ($899) - лучший по цене
   
   Все три могут доставиться завтра (express)."

════════════════════════════════════════════════════════════════════
```

### Типы мультиагентных систем

#### 1. ИЕРАРХИЧЕСКАЯ (есть главный менеджер)

```
         MANAGER
        /   |   \
       /    |    \
   Agent1 Agent2 Agent3

Manager распределяет задачи и собирает результаты.
Остальные агенты выполняют свои роли.

Примеры:
- Обработка заказов (менеджер + специалисты по разным областям)
- Анализ данных (аналитик + аналитик по финансам + аналитик по маркетингу)
```

#### 2. ГОРИЗОНТАЛЬНАЯ (все равны, договариваются)

```
Agent1 ↔ Agent2
  ↑        ↑
  └────────┘
    ↕
Agent3

Агенты общаются друг с другом, договариваются.
Нет главного менеджера.

Примеры:
- Две модели спорят какой подход лучше (debate)
- Несколько агентов работают над одной задачей независимо, потом сравнивают
```

#### 3. РАУНД-РОБИН (по очереди)

```
User → Agent1 (думает + действует) → Agent2 (думает + действует) → Agent3 (думает + действует) → Результат

Агенты работают по очереди. Каждый видит результат предыдущего.

Примеры:
- Написание статьи: Agent1 план → Agent2 черновик → Agent3 редактор
- Отладка кода: Agent1 написал → Agent2 проверил → Agent3 оптимизировал
```

### Пример реального мультиагента: CodeReview система

```
Задача: "Проверь этот код на баги и дай рекомендации"

┌─────────────────────────────────────────────────────────────┐
│  MANAGER AGENT                                               │
│  "Распределю задачу на специалистов"                        │
└──────────┬──────────────────────────────────────────────────┘
           │
    ┌──────┴──────────────────┐
    ↓                         ↓
┌──────────────┐      ┌──────────────┐
│ SECURITY     │      │ PERFORMANCE  │
│ SPECIALIST   │      │ SPECIALIST   │
└──────┬───────┘      └──────┬───────┘
       │                     │
       ↓                     ↓
   "Есть SQL        "Функция вызывается
    injection       в цикле 1000 раз,
    на строке 42"   слишком медленно"

       ↓                     ↓
       └──────────┬──────────┘
                  ↓
           ┌────────────────┐
           │ MANAGER        │ (собирает результаты)
           │ собирает отчет │
           └────────────────┘
           
           Результат:
           "Найдено 2 проблемы:
            1. Security: SQL injection (критичная)
            2. Performance: неоптимизированный цикл
            
            Рекомендую сначала исправить security,
            потом оптимизировать performance."
```

### Когда использовать мультиагент

```
ИСПОЛЬЗУЙ один агент, если:
  ✓ Задача простая (одна область компетенции)
  ✓ Один LLM может справиться
  ✓ Нет конфликта между разными подходами

ИСПОЛЬЗУЙ мультиагент, если:
  ✓ Нужны РАЗНЫЕ СПЕЦИАЛИСТЫ (аналитик, логист, разработчик)
  ✓ Задача сложная и многоаспектная
  ✓ Нужна ДЕБОЛЬНАЯ ПРОВЕРКА (один агент проверяет другого)
  ✓ Нужны РАЗНЫЕ ИНСТРУМЕНТЫ для разных частей задачи
  ✓ Хочешь ЛУЧШЕЕ КАЧЕСТВО (несколько мнений лучше одного)
```

---

## Блок 7: Карта понятий

```
СИСТЕМА ДЛЯ РАБОТЫ С LLM
│
├─ ЧАТБОТ (LLM без инструментов)
│  └─ Просто отвечает на вопросы
│     Примеры: ChatGPT интерфейс, FAQ-бот
│
├─ LLM + ИНСТРУМЕНТ (инструмент известен заранее)
│  └─ LLM может вызвать инструмент
│     Примеры: "переведи текст", "улучши текст"
│
└─ АГЕНТ (LLM сам выбирает инструменты и стратегию)
   │
   ├─ Простой агент (один инструмент)
   │  └─ Может использовать один инструмент
   │     Пример: агент что поет у поисковой системы
   │
   ├─ Сложный агент (несколько инструментов)
   │  └─ Может использовать несколько подряд в нужном порядке
   │     Пример: обработка заказов, анализ данных
   │
   └─ МУЛЬТИАГЕНТ (несколько агентов вместе)
      └─ Несколько агентов координируются
         Пример: "менеджер" агент + "аналитик" агент
```

---

## ✅ Проверь себя

- [ ] **Чем отличается агент от программы?** Агент сам выбирает стратегию, программа выполняет её
- [ ] **Чем отличается агент от чатбота?** Агент может действовать, чатбот только отвечает
- [ ] **Когда нужен агент, а когда нет?** Нужен когда система должна **сама решить** как выполнить задачу
- [ ] **Приведи пример что является агентом** (например, помощник для анализа данных)
- [ ] **Приведи пример что не является агентом** (например, переводчик)
- [ ] **Что такое мультиагентная система?** Несколько агентов с разными компетенциями работают вместе, координируются менеджером
- [ ] **Когда нужен мультиагент?** Когда задача сложная и нужны РАЗНЫЕ СПЕЦИАЛИСТЫ (аналитик + логист + разработчик и т.д.)

[Все уроки](https://learnvibecoding.ru/publiclessons.md) · HTML: https://learnvibecoding.ru/publiclessons