Проектная лаборатория

Собственный Claude Code

0 / 13этапов пройдено

Этап 03 · Основные этапы

Выполнение инструмента чтения

Русский перевод заданий CodeCrafters. Примеры подготовлены для Go. Выбор языка меняет команды и результаты, но не текст задания.

На этом этапе вы добавите обнаружение вызовов инструментов и выполнение вызова Read.

Вызовы инструментов

Если LLM решает воспользоваться инструментом, ответное сообщение содержит массив tool_calls.

Пример ответа:

{
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": null,
        "tool_calls": [
          {
            "id": "call_abc123",
            "type": "function",
            "function": {
              "name": "Read",
              "arguments": "{\"file_path\": \"/path/to/file.txt\"}"
            }
          }
        ]
      },
      "finish_reason": "tool_calls"
    }
  ]
}

Основные поля, которые нужно обработать:

  • choices: список сгенерированных ответов. В этой задаче в нём всегда будет ровно один вариант.
  • tool_calls: массив запрошенных вызовов инструментов.
    • id: уникальный идентификатор вызова.
    • type: тип вызова (для инструментов всегда "function").
    • function: сведения о функции:
      • name: имя вызываемой функции (например, "Read").
      • arguments: JSON-строка с параметрами функции.

На этом этапе вы выполните один вызов инструмента Read.

Выполнение инструмента Read

Обнаружив массив tool_calls в ответе:

  1. Извлеките вызов: возьмите сообщение из первого варианта ответа, затем первый вызов из массива tool_calls.
  2. Прочитайте имя функции: определите по нему, какой инструмент нужно выполнить.
  3. Разберите аргументы: распарсите JSON-строку аргументов, чтобы получить параметры.
  4. Выполните инструмент: программа должна выполнить запрошенное действие. Для Read используйте библиотеку работы с файловой системой вашего языка и прочитайте файл по указанному file_path.
  5. Выведите результат: напечатайте результат выполнения инструмента. Для Read выведите исходное содержимое файла прямо в stdout — без подписей и форматирования.

На предыдущих этапах вы сразу печатали содержимое сообщения в stdout. Теперь ответ модели может содержать вызовы инструментов, поэтому печатайте содержимое сообщения только тогда, когда в ответе нет массива tool_calls.

Проверки

Тестирующая система создаст файл (например, apple.py) и запустит программу так:

$ ./your_program.sh -p "What is the content of apple.py? Print exact file contents without backticks."
<file contents>

Она проверит, что:

  • При запросе вызова Read вывод в точности совпадает с содержимым файла.
  • Если LLM не запрашивает инструмент, вывод содержит её текстовый ответ.
  • Программа завершается с кодом 0.

Примечания

  • На следующих этапах вы будете отправлять результат инструмента обратно модели, а не печатать его. Это станет частью «цикла агента», на котором построен Claude Code.
  • На этом этапе достаточно вывести результат первого вызова инструмента. Обработку нескольких вызовов добавим позже.
  • Полное описание структуры ответа см. в спецификации OpenRouter API.

Для проверки этого проекта нужен ключ OpenRouter в переменной CODECRAFTERS_SECRET_OPENROUTER_API_KEY. Запросы к модели могут быть платными. Ключ задаётся только в вашем терминале и не отправляется в GraphLMS.

Проверка в вашей IDE

Нужны Node.js, Git, Go 1.24+ для тестеров и инструменты выбранного языка. Тестеры загружаются и запускаются локально; отдельным проектам нужны дополнительные системные зависимости.

Настройка проекта и IDE

1. Создайте проект один раз

node '/opt/graphlms/tools/project-lab/cli.mjs' init claude-code ./my-claude-code --language go

2. Откройте папку в IDE

cd ./my-claude-code

Реализуйте требования этапа в созданном проекте.

Запустите из папки проекта

node '/opt/graphlms/tools/project-lab/cli.mjs' submit --stage md6 --allow-paid-api

Запускайте submit из папки проекта. Это локальные проверки, а не сертификаты или результаты аккаунта CodeCrafters.

Результат проверки

go / ЛОКАЛЬНО

Подключение к локальной проверке…

Здесь появится результат

Запустите submit в терминале. Страница обновляет результаты каждые 8 секунд.

GraphLMS — инженерная лаборатория роста