Claude Code: работа с coding-агентом2. Как устроен coding-агент
Lab: что агент отправляет модели
Засчитывается, когда отвечены все вопросы квиза
В этом разделе мы говорили о turn, сессии, контексте и стоимости на словах. Теперь посмотрим на них в сыром виде: что именно Claude Code отправляет модели и что получает в ответ.
Что получится
У вас будет папка request-logger/logs/ с записями одного короткого разговора с Claude Code в учебном репозитории. По ним вы сможете показать пальцем на system prompt, на описание tool, на tool call и tool result, на историю, которая растёт от запроса к запросу, и на блок usage с токенами, включая чтение из кэша.
Request logger из учебного репозитория — небольшой proxy между агентом и провайдером модели. Он передаёт всё без изменений и пишет читаемую копию каждого запроса на диск.
Подготовка
- Стенд из первого раздела: установленный Claude Code с рабочим входом.
- Клон учебного репозитория ai-hero-dev/ai-coding-crash-course с установленными зависимостями.
- Два окна терминала, открытые в корне репозитория, и редактор, в котором удобно смотреть файлы.
- Чистая папка
request-logger/logs/: если в ней остались записи с прошлых запусков, перенесите их, чтобы не перепутать.
Шаги
-
В первом терминале запустите logger:
npm run request-loggerПри первом запуске он спросит, каким агентом вы пользуетесь, и предложит запомнить ответ. Выберите Claude Code. Logger начнёт слушать
localhost:8787и напечатает команду для запуска агента. -
Скопируйте напечатанную команду во второй терминал и выполните её. Не пишите её сами: logger собирает её под ваш агент. Claude Code запустится как обычно, только теперь его запросы идут через logger.
-
Откройте
request-logger/logs/. Даже до первого сообщения там может появиться запись: по описанию курса, Claude Code при старте отправляет короткий служебный запрос, и он ложится отдельным файлом, иногда с ошибкой429. Это не ваш turn. -
Напишите агенту короткое приветствие, например
hello. Дождитесь ответа и обновите папку логов. Для каждого запроса там три файла:.md— читаемая версия, с неё и начинайте;.request.txt— тело запроса как есть;.response.txt— сырой поток ответа. Время в именах файлов — UTC. -
Откройте самый новый
.md. Пролистайте сверху вниз и найдите: служебную информацию и заголовки; system prompt — большой блок инструкций; описания tools с JSON schema параметров; вашеhello; ответ модели в конце. Отметьте, насколько запрос больше ответа. -
Внизу ответа найдите блок
usageи выпишите четыре числа:input_tokens,output_tokens,cache_creation_input_tokens,cache_read_input_tokens. -
Отправьте второе сообщение, тоже короткое. Откройте новую запись и снова выпишите четыре числа из
usage. Сравните с первым запросом: что ушло вcache_read_input_tokens? -
Дайте задачу, которой нужен tool:
Create compliments.md in the repository root with three compliments for me.Когда агент ответит, обновите папку логов. Новых записей будет несколько.
-
Найдите запрос, в ответ на который модель вернула не текст, а tool call: блок вызова инструмента с параметрами пути файла и содержимого. Затем откройте следующий по времени запрос и найдите в нём tool result — сообщение о том, что файл создан. Эти два запроса — части одного turn.
-
В последнем запросе этого turn найдите ваш
helloи второе сообщение. Они там: каждый запрос несёт всю историю сессии. -
Перейдите в Claude Code и выполните
/usage. Блок Session покажет итог сессии: стоимость и токены по моделям — input, output, cache read и cache write. -
Остановите Claude Code, затем logger во втором терминале через
Ctrl+C. Дальше запускайте агента обычной командой.
Проверка результата
- В
request-logger/logs/есть записи для каждого вашего сообщения и несколько записей для задачи с файлом. - В корне репозитория появился
compliments.md. - У вас выписаны числа
usageдля двух первых запросов, и во второмcache_read_input_tokensзаметно больше, чем в первом. - Вы можете открыть запрос с tool call и следующий за ним запрос с tool result и объяснить, кто что сделал: модель попросила, harness выполнил.
Если не получилось
- Агент работает, а логов нет. Claude Code запущен не той командой, которую напечатал logger. Закройте его и запустите заново строго по напечатанной команде: настройки задаются при старте.
- Записей больше, чем сообщений. Так и должно быть: кроме вашего turn есть служебный запрос при старте и, если включены подсказки, отдельный запрос, который генерирует подсказку следующего промпта.
cache_read_input_tokensво втором запросе равно нулю. Между сообщениями прошло слишком много времени, и кэш успел остыть. Отправьте два сообщения подряд без паузы.- На подписке
/usageне показывает стоимость в долларах как счёт. Для Pro и Max документация называет цифру Session ориентиром для API-пользователей; подписчики видят полосы использования тарифа.
Проверь себя
Сравните usage первого и второго запросов в вашем логе. Где оказалась основная часть входных токенов второго запроса?
input_tokens
: каждый запрос считается заново полностью
cache_read_input_tokens
: начало запроса совпало с прошлым и прочитано из кэша
output_tokens
: история считается выходом модели
cache_creation_input_tokens
), второй начинался с того же префикса и прочитал его из кэша. Свежими input-токенами остались только новые сообщения.
Что вы нашли в ответе модели на запрос, после которого появился compliments.md?
git commit
Последний запрос в turn с файлом — что в нём было, кроме вашей задачи?
hello
, второе сообщение, tool call и tool result
Почему на одно ваше сообщение в логах может быть больше одной записи?
Источники
- Anthropic, How Claude Code works
- Anthropic, Manage costs effectively
- Anthropic, Customize your status line
- AI Hero, ai-hero-dev/ai-coding-crash-course — учебный репозиторий и request logger
- По мотивам AI Coding Crash Course, AI Hero
Текст подготовлен с помощью LLM и может содержать неточности.