Перейти к тексту

Claude Code: работа с coding-агентом2. Как устроен coding-агент

Lab

Lab: что агент отправляет модели

Засчитывается, когда отвечены все вопросы квиза

В этом разделе мы говорили о turn, сессии, контексте и стоимости на словах. Теперь посмотрим на них в сыром виде: что именно Claude Code отправляет модели и что получает в ответ.

Что получится

У вас будет папка request-logger/logs/ с записями одного короткого разговора с Claude Code в учебном репозитории. По ним вы сможете показать пальцем на system prompt, на описание tool, на tool call и tool result, на историю, которая растёт от запроса к запросу, и на блок usage с токенами, включая чтение из кэша.

Request logger из учебного репозитория — небольшой proxy между агентом и провайдером модели. Он передаёт всё без изменений и пишет читаемую копию каждого запроса на диск.

Request logger стоит между Claude Code и провайдером моделиClaude Code отправляет запрос в request logger на localhost. Logger передаёт его провайдеру без изменений, получает ответ, возвращает его агенту и записывает копию обмена в папку logs.Claude Coderequest logger,localhost:8787Провайдермоделиrequest-logger/logs

Подготовка

  • Стенд из первого раздела: установленный Claude Code с рабочим входом.
  • Клон учебного репозитория ai-hero-dev/ai-coding-crash-course с установленными зависимостями.
  • Два окна терминала, открытые в корне репозитория, и редактор, в котором удобно смотреть файлы.
  • Чистая папка request-logger/logs/: если в ней остались записи с прошлых запусков, перенесите их, чтобы не перепутать.

Шаги

  1. В первом терминале запустите logger:

    npm run request-logger

    При первом запуске он спросит, каким агентом вы пользуетесь, и предложит запомнить ответ. Выберите Claude Code. Logger начнёт слушать localhost:8787 и напечатает команду для запуска агента.

  2. Скопируйте напечатанную команду во второй терминал и выполните её. Не пишите её сами: logger собирает её под ваш агент. Claude Code запустится как обычно, только теперь его запросы идут через logger.

  3. Откройте request-logger/logs/. Даже до первого сообщения там может появиться запись: по описанию курса, Claude Code при старте отправляет короткий служебный запрос, и он ложится отдельным файлом, иногда с ошибкой 429. Это не ваш turn.

  4. Напишите агенту короткое приветствие, например hello. Дождитесь ответа и обновите папку логов. Для каждого запроса там три файла: .md — читаемая версия, с неё и начинайте; .request.txt — тело запроса как есть; .response.txt — сырой поток ответа. Время в именах файлов — UTC.

  5. Откройте самый новый .md. Пролистайте сверху вниз и найдите: служебную информацию и заголовки; system prompt — большой блок инструкций; описания tools с JSON schema параметров; ваше hello; ответ модели в конце. Отметьте, насколько запрос больше ответа.

  6. Внизу ответа найдите блок usage и выпишите четыре числа: input_tokens, output_tokens, cache_creation_input_tokens, cache_read_input_tokens.

  7. Отправьте второе сообщение, тоже короткое. Откройте новую запись и снова выпишите четыре числа из usage. Сравните с первым запросом: что ушло в cache_read_input_tokens?

  8. Дайте задачу, которой нужен tool:

    Create compliments.md in the repository root with three compliments for me.

    Когда агент ответит, обновите папку логов. Новых записей будет несколько.

  9. Найдите запрос, в ответ на который модель вернула не текст, а tool call: блок вызова инструмента с параметрами пути файла и содержимого. Затем откройте следующий по времени запрос и найдите в нём tool result — сообщение о том, что файл создан. Эти два запроса — части одного turn.

  10. В последнем запросе этого turn найдите ваш hello и второе сообщение. Они там: каждый запрос несёт всю историю сессии.

  11. Перейдите в Claude Code и выполните /usage. Блок Session покажет итог сессии: стоимость и токены по моделям — input, output, cache read и cache write.

  12. Остановите 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-пользователей; подписчики видят полосы использования тарифа.

Проверь себя

Источники

Текст подготовлен с помощью LLM и может содержать неточности.