Agent Dev 101

Модуль 01 · Урок 1.2

Урок 1.2. Chatbot, Agent и Coding Agent

На этой странице
  1. Зачем это нужно
  2. Основная идея
  3. Ключевые термины
  4. От LLM к Coding Agent
  5. Когда нужен agent, а когда достаточно automation
  6. Agent Loop
  7. Чем chatbot response отличается от agent action
  8. Что добавляет coding agent
  9. Observable result
  10. Пример agent transcript
  11. Когда агент должен остановиться
  12. Мини-практика: разметить agent run
  13. Типичные ошибки
  14. Критерии готовности
  15. Краткое резюме
  16. Вопросы для самопроверки
  17. Что дальше

Зачем это нужно

В прошлом уроке мы разобрали, почему LLM может ошибаться: модель работает с ограниченным контекстом, генерирует вероятностный ответ и не является источником доказанной истины.

Теперь нужно сделать следующий шаг: понять разницу между LLM, chatbot, agent и coding agent.

Эти слова часто используют как синонимы, но для управляемой разработки это разные уровни системы. Chatbot обычно отвечает текстом. Agent может выбирать инструменты и действовать. Coding agent работает внутри репозитория: читает файлы, редактирует код, запускает команды, наблюдает ошибки и продолжает работу.

Если не различать эти уровни, легко ждать от chatbot поведения полноценного engineer assistant или, наоборот, дать coding agent слишком широкие права без контроля.

Главная цель урока - показать agent loop и объяснить, почему надежная AI-разработка строится как цикл наблюдения, действия и проверки, а не как один большой ответ модели.

Основная идея

LLM сама по себе генерирует текст. Agentic system появляется тогда, когда вокруг LLM есть runtime, который дает ей инструкции, инструменты, состояние задачи, правила, разрешения и способ наблюдать результаты действий.

Уровни можно представить так:

text
LLM
 ↓
Chat
 ↓
LLM + Tools
 ↓
Agent
 ↓
Coding Agent
 ↓
Agent Team

Каждый следующий уровень добавляет не "магическое понимание", а дополнительные возможности и ответственность:

  • chat добавляет диалог;
  • tools добавляют действия;
  • agent loop добавляет итеративное принятие решений;
  • coding agent добавляет работу с репозиторием;
  • agent team добавляет разделение ролей и координацию.

В этом курсе мы сначала строим надежный single-agent workflow. Multi-agent появится позже, когда уже есть specification, task graph, tests, Git safety и review.

Ключевые термины

Термин Что означает
LLM Модель, которая получает контекст и генерирует ответ.
Chatbot Интерфейс диалога с моделью, обычно ориентированный на текстовые ответы.
Tool Внешняя функция, которую агент может вызвать: прочитать файл, запустить тест, сделать запрос.
Agent LLM + instructions + tools + loop принятия решений.
Coding Agent Agent, работающий с кодовой базой, файловой системой, терминалом, diff и тестами.
Agent Loop Цикл observe -> reason/plan -> select tool -> act -> observe result -> continue.
Runtime Среда, которая управляет сообщениями, tools, permissions, состоянием и выполнением agent run.
Observable Result Наблюдаемый результат действия: diff, command output, test result, file content, error log.
Handoff Передача задачи, контекста или результата другому агенту или роли.

От LLM к Coding Agent

LLM

LLM получает контекст и возвращает текст. Она может объяснить идею, написать пример кода, предложить план или оценить ошибку по предоставленному фрагменту.

Пример:

text
User:
Объясни, зачем нужен rate limit для password reset.

LLM:
Rate limit снижает риск brute force и email abuse...

Это полезно для объяснения, но LLM сама не проверила проект, не изменила код и не запустила тесты.

Chatbot

Chatbot добавляет удобный диалоговый интерфейс. Он хранит историю разговора в рамках сессии, помогает уточнять вопрос и продолжать обсуждение.

Но chatbot все еще в основном отвечает текстом.

Типичный результат chatbot:

text
Вот пример endpoint на Express:
...

Это не равно изменению в вашем репозитории.

LLM + Tools

Когда модель получает tools, она может не только отвечать, но и инициировать действия. Например:

text
search_repository("reset token")
read_file("src/auth/service.ts")
run_tests("tests/auth")

Важно: модель не выполняет эти действия внутри себя. Она выбирает tool call, а runtime выполняет его и возвращает результат.

Agent

Agent - это система, которая может итеративно:

  1. наблюдать состояние;
  2. строить план;
  3. выбирать действие;
  4. выполнять действие через tool;
  5. анализировать результат;
  6. продолжать до достижения условия завершения.

Agent уже похож на исполнителя задачи, но не обязательно работает с кодом.

Он может быть research agent, support agent, data analysis agent или workflow agent.

Coding Agent

Coding agent специализируется на repository work. Он умеет:

  • читать файлы и искать по кодовой базе;
  • понимать существующие patterns;
  • редактировать файлы;
  • запускать tests, lint, typecheck, build;
  • читать ошибки компиляции и тестов;
  • анализировать diff;
  • соблюдать allowed scope;
  • возвращать evidence завершения.

Coding agent не просто "пишет код". Его ценность в том, что он может пройти маленький engineering loop.

Когда нужен agent, а когда достаточно automation

Не всякая задача с LLM должна становиться agent workflow. Иногда достаточно обычного script, rule engine, CI job или single-shot LLM call.

Agent полезен, когда workflow содержит:

  • несколько шагов с промежуточными наблюдениями;
  • необходимость выбирать tools по ситуации;
  • работу с неоднозначным natural language input;
  • чтение неструктурированных документов или кода;
  • exceptions и edge cases, которые трудно покрыть простыми rules;
  • потребность остановиться, задать вопрос или вернуть управление человеку.

Agent часто не нужен, когда:

  • поведение полностью детерминировано;
  • задача сводится к одной функции или одному shell command;
  • есть стабильный API и простая business rule;
  • все inputs структурированы;
  • действие рискованное, а качество нельзя проверить автоматически;
  • дешевле и безопаснее написать обычный script.

Примеры:

Задача Лучше начать с
Форматировать Markdown перед commit Hook/script
Проверить balanced code fences Script/test
Найти архитектурный способ добавить feature Coding agent в Plan Mode
Исправить bug по stack trace и existing tests Coding agent
Разослать production emails Deterministic workflow + approval gate
Обновить billing policy Human decision + controlled tooling

Практический вопрос:

text
Нужна ли здесь автономная серия решений,
или достаточно deterministic automation?

Если достаточно automation, не усложняйте систему агентом. Если нужна серия решений с tool use и feedback, agent становится подходящей абстракцией.

Agent Loop

Базовый agent loop выглядит так:

text
Observe
 ↓
Reason / Plan
 ↓
Select Tool
 ↓
Act
 ↓
Observe Result
 ↓
Continue or Stop

В Mermaid:

flowchart TD A[Observe task and context] --> B[Reason or plan next step] B --> C{Need tool?} C -->|No| D[Respond or ask clarification] C -->|Yes| E[Select tool and arguments] E --> F[Runtime executes action] F --> G[Observe result] G --> H{Goal reached?} H -->|No| B H -->|Yes| I[Return result with evidence]

Этот loop важнее, чем один красивый ответ. Управляемость появляется не потому, что модель "стала умнее", а потому что каждое действие возвращает observable result.

Чем chatbot response отличается от agent action

Сценарий Chatbot Coding Agent
Нужно понять ошибку теста Объясняет вероятную причину по вставленному логу Запускает тест, читает stack trace, открывает связанный файл
Нужно добавить endpoint Показывает пример кода Находит существующий style, правит controller/service/tests
Нужно проверить результат Говорит, какие команды запустить Запускает команды и читает output
Нужно соблюдать architecture Может перечислить правила Проверяет diff на нарушение layers и imports
Нужно завершить task Отвечает "готово" Возвращает changed files, commands, exit codes, AC status

Chatbot хорош для объяснения, brainstorming и анализа предоставленного контекста. Coding agent нужен там, где задача требует действий в repository и внешней verification.

Что добавляет coding agent

Coding agent находится ближе к реальной разработке, потому что работает с артефактами проекта.

Типовой набор возможностей:

text
Repository search
    +
File read/write
    +
Terminal commands
    +
Test output
    +
Diff review
    +
Git workflow

Но каждая возможность добавляет риск.

Возможность Польза Риск
Читать файлы Агент видит реальную реализацию Может выбрать нерелевантный файл
Редактировать код Агент выполняет задачу Может изменить лишний scope
Запускать команды Есть external feedback Может неверно интерпретировать output
Использовать Git Видно diff и checkpoints Может смешать unrelated changes
Работать долго Может завершить сложную задачу Может уйти в drift или loop

Поэтому coding agent требует не меньше дисциплины, чем human developer. Просто дисциплина выражается в specification, allowed scope, tests, review и permissions.

Observable result

Каждый шаг coding agent должен по возможности приводить к наблюдаемому результату.

Плохо:

text
Я проверил код, выглядит нормально.

Лучше:

text
Прочитал:
- src/auth/reset-token.service.ts
- tests/auth/reset-token.test.ts

Нашел:
- токен помечается consumed только после успешной смены пароля

Следующий шаг:
- добавить regression test для повторного использования token

Еще лучше:

text
Изменил:
- tests/auth/reset-token.test.ts

Проверка:
- pytest tests/auth/reset-token.test.ts -q
- exit code 0
- 4 passed

Observable result снижает неопределенность. Он позволяет человеку, reviewer agent или CI понять, что реально произошло.

Пример agent transcript

Ниже не реальный лог конкретного инструмента, а учебный transcript. Его задача - показать фазы agent loop.

text
User:
Добавь проверку, что consumed reset token нельзя использовать повторно.

[OBSERVE]
Agent reads task and current spec.

[PLAN]
Agent:
1. Найду существующие тесты reset token.
2. Добавлю failing regression test.
3. Запущу тест и проверю, что он падает.
4. Исправлю service logic.
5. Запущу targeted tests.

[SELECT TOOL]
search_repository("reset token consumed")

[OBSERVE RESULT]
Found:
- src/auth/reset_token_service.py
- tests/auth/test_reset_token.py

[ACT]
edit tests/auth/test_reset_token.py

[SELECT TOOL]
run_tests("tests/auth/test_reset_token.py -q")

[OBSERVE RESULT]
1 failed, 8 passed.
Failure: consumed token accepted.

[ACT]
edit src/auth/reset_token_service.py

[SELECT TOOL]
run_tests("tests/auth/test_reset_token.py -q")

[OBSERVE RESULT]
9 passed.

[STOP]
Agent returns:
- changed files
- test command
- exit code
- acceptance criterion status

Что важно в этом transcript:

  • агент не начал с реализации;
  • сначала был найден существующий код;
  • regression test появился до fix;
  • результат проверен командой;
  • завершение связано с evidence.

Когда агент должен остановиться

Agent loop не должен продолжаться бесконечно. Надежный coding agent останавливается не только когда "готово", но и когда возник риск неправильного решения.

Остановиться и запросить уточнение нужно, если:

  • specification противоречива;
  • невозможно определить expected behavior;
  • нужный файл или API contract не найден;
  • verification command падает из-за старой unrelated проблемы;
  • task требует изменения forbidden scope;
  • действие высокорисковое: удаление данных, deploy, secrets, permissions, billing.

Такой stop не является слабостью агента. Это часть управляемого процесса.

Мини-практика: разметить agent run

Возьмите transcript работы coding agent или сгенерируйте короткий учебный пример. Разметьте каждую строку одним из тегов:

text
[OBSERVE]
[PLAN]
[SELECT TOOL]
[ACT]
[OBSERVE RESULT]
[STOP]

Затем ответьте:

  1. Был ли у агента явный plan перед изменениями?
  2. Какие tools он использовал?
  3. Какие действия дали observable result?
  4. Где агент мог уйти в drift?
  5. Есть ли evidence завершения задачи?

Итоговый артефакт практики:

text
labs/01-agent-loop/transcript-analysis.md

Типичные ошибки

Ошибка 1. Называть любой chat agent'ом

Если система только отвечает текстом и не может действовать через tools, это chatbot, а не agent в инженерном смысле курса.

Ошибка 2. Считать tool call доказательством

Tool call сам по себе не доказательство. Важен результат tool call и то, как агент его использовал.

Ошибка 3. Давать coding agent права без allowed scope

Если агент может менять любые файлы, он может решить задачу локально и одновременно сломать соседний модуль.

Ошибка 4. Принимать длинный план за выполненную работу

План полезен, но он не меняет код и не запускает тесты. Завершение требует observable result.

Ошибка 5. Продолжать loop после неясного требования

Если expected behavior не определен, агент должен перейти в clarification, а не угадывать.

Критерии готовности

После урока студент должен уметь:

  • объяснить разницу между LLM, chatbot, agent и coding agent;
  • описать agent loop: observe, reason/plan, select tool, act, observe result;
  • привести пример observable result для coding task;
  • отличить plan от выполненного действия;
  • разметить простой transcript agent run по фазам loop;
  • объяснить, почему coding agent должен работать итеративно.

Краткое резюме

Chatbot отвечает. Agent действует через tools. Coding agent действует внутри репозитория: читает файлы, изменяет код, запускает проверки и анализирует результаты.

Базовая единица agentic development - не "ответ", а loop:

text
Observe -> Plan -> Act -> Observe Result -> Continue or Stop

Чем лучше организован этот loop, тем проще контролировать качество результата. Но если дать агенту слишком большую задачу без specification, allowed scope и verification, даже хороший loop начнет терять фокус.

Вопросы для самопроверки

  1. Чем chatbot отличается от coding agent?
  2. Почему tool call сам по себе не является evidence?
  3. Что такое observable result в coding task?
  4. На каком этапе agent loop нужно запускать tests?
  5. Когда агент должен остановиться и запросить уточнение?

Что дальше

В следующем уроке мы разберем, почему one-shot development плохо масштабируется. Теперь, когда понятно, что coding agent работает итеративно, станет видно, почему задача "сделай всю фичу целиком" ломает управляемость loop и приводит к drift.

Обновлено 03.10.2026