Разработка ИИ-агентов · Модуль 1 · Урок 1.1
Что такое ИИ-агент: LLM + инструменты + цикл
Три составляющие агента
ИИ-агент — это программа, в которой языковая модель (LLM) сама решает, какие действия предпринять, чтобы выполнить задачу. У агента три части. Модель — это «мозг»: она рассуждает и выбирает следующий шаг. Инструменты (tools) — это «руки»: функции, которыми модель может что-то узнать или изменить во внешнем мире (поиск, запрос к базе, вызов API). Цикл (agentic loop) — это то, что связывает их вместе: программа снова и снова спрашивает модель, выполняет запрошенные инструменты, возвращает результаты обратно модели — и так до тех пор, пока задача не решена.
Ключевая идея: управление потоком (control flow) отдаётся модели. В обычной программе порядок шагов жёстко задаёт разработчик. В агенте модель на каждом ходу динамически выбирает, что делать дальше, опираясь на то, что уже произошло. Именно поэтому агент справляется с задачами, у которых нет заранее известного плана.
Агент vs чат-бот vs workflow
Эти три понятия легко спутать, но разница принципиальная.
- Чат-бот отвечает текстом на сообщение. Один вход — один ответ, без действий во внешнем мире и без цикла. Это просто обёртка над вызовом модели.
- Workflow — это система, где LLM и инструменты соединены по заранее заданному разработчиком маршруту: сначала классифицируем запрос, потом достаём данные, потом генерируем ответ. Шаги фиксированы в коде; модель не выбирает порядок.
- Агент сам определяет последовательность действий во время выполнения. Сколько раз и какие инструменты вызвать, когда остановиться — решает модель, а не заранее написанный сценарий.
Грубое правило: если задачу можно разложить на предсказуемые шаги — это workflow, и он надёжнее. Если шаги и их число заранее неизвестны (исследование, отладка, работа с открытым вводом) — нужен агент.
Когда агент оправдан, а когда нет
Гибкость агента стоит денег: больше вызовов модели — выше задержка, стоимость и риск ошибки на каждом шаге. Поэтому начинать стоит с самого простого решения. Если хватает одного вызова модели — берите его. Если нужен фиксированный конвейер — стройте workflow. Полноценный агент оправдан там, где ценность гибкости перевешивает потерю предсказуемости: открытые задачи, динамическое число шагов, необходимость реагировать на промежуточные результаты.
В этом курсе мы сознательно строим агентов с нуля на Go, без фреймворков. Так видно, что «магии» внутри нет: есть HTTP-запрос к модели, разбор ответа и цикл. Понимая механику, вы сможете и пользоваться фреймворками осознанно, и обходиться без них.
// messages — растущая история диалога; tools — доступные инструменты.
for {
resp := callLLM(messages, tools) // 1. спросить модель
// 2. модель закончила? выходим с финальным ответом.
if resp.StopReason == "end_turn" {
return resp.Text
}
// 3. модель попросила вызвать инструменты — выполняем их.
results := runTools(resp.ToolCalls)
// 4. дозаписываем ход модели и результаты в историю — и повторяем.
messages = append(messages, resp.AssistantMessage)
messages = append(messages, results...)
}Anti-patterns
| Анти-паттерн | Почему плохо | Как правильно |
|---|---|---|
| Называть «агентом» любой вызов LLM | Размывает понятие; маркетинг вместо архитектуры | Агент — это цикл, где модель выбирает действия. Нет цикла и инструментов — это чат-бот |
| Строить агента там, где хватит workflow | Лишние вызовы, выше стоимость и непредсказуемость | Сначала простейшее решение; агент — только при динамическом числе шагов |
| Цикл без условия остановки | Бесконечный цикл, расход токенов, зависание | Чёткий стоп по структурному сигналу модели плюс safety-cap на число итераций |
| Жёстко зашить порядок инструментов в «агенте» | Это уже workflow, выдаваемый за агента | Если порядок фиксирован — честно делайте workflow; агент сам выбирает шаги |
Практическое задание
- Возьмите конкретную задачу (например, «ответить на вопрос по документации») и решите: это чат-бот, workflow или агент? Обоснуйте.
- Нарисуйте на бумаге агентный цикл из 4 шагов для этой задачи: что отправляем модели, как понимаем «готово», какие инструменты нужны.
- Выпишите 2–3 инструмента, которые понадобятся агенту, и для каждого — что он принимает и что возвращает.
- Сформулируйте условие остановки структурно (по сигналу модели), а не «по словам в тексте».
Проверка знаний
Чем агент принципиально отличается от workflow?
Верный ответ: B
B верно. Суть агента — динамический control flow: модель сама решает, какой шаг сделать следующим. В workflow маршрут фиксирован в коде. A — размер модели ни при чём. C — агент как раз построен вокруг вызовов LLM. D — наоборот, гибкость агента обычно дороже и медленнее предсказуемого workflow.
Задача: классифицировать входящее письмо в одну из 5 категорий и отправить шаблонный ответ. Шаги известны и неизменны.
Что разумнее построить?
Верный ответ: B
B верно. Шаги предсказуемы и фиксированы — это идеальный случай для workflow: он надёжнее, дешевле и проще в отладке. A и D — избыточная сложность без выгоды. C — чат-бот не умеет совершать действие (отправку).
Какой из компонентов делает программу именно агентом, а не разовым вызовом модели?
Верный ответ: C
C верно. Именно agentic loop с выполнением инструментов и дозаписью результатов превращает вызов модели в агента. Системный промпт, температура и streaming полезны, но сами по себе агента не образуют.