8 принципов проектирования инструментов для ИИ-агентов: что мы узнали из архитектуры Claude Code

8 принципов проектирования инструментов для ИИ-агентов: что мы узнали из архитектуры Claude Code

Anthropic раскрыла внутреннюю архитектуру инструментов Claude Code. Мы разобрали их подход и собрали принципы, которые пригодятся каждому, кто строит системы на базе LLM — от чат-ботов до автономных агентов.

Когда компания проектирует API, она рассчитывает на разработчика: человек прочитает документацию, изучит примеры, при ошибке пойдёт в Stack Overflow. ИИ-агент работает принципиально иначе. Он видит только JSON-схему инструмента, интерпретирует описание — и за один проход принимает решение о вызове. Без возможности загуглить, уточнить или попросить коллегу.

Отсюда ключевой тезис: хороший инструмент для ИИ-агента — это не удобный интерфейс, а предсказуемый контракт с минимальной когнитивной нагрузкой.

Как устроен инструментальный слой Claude Code

Claude Code работает примерно с 20 инструментами. Они делятся на шесть категорий:

  • Чтение — Read, Grep, Glob: получение информации из файловой системы
  • Запись — Edit, Write: модификация и создание файлов
  • Исполнение — Bash: выполнение shell-команд
  • Оркестрация — Agent, Skill, ToolSearch: делегирование задач и динамическая загрузка
  • Планирование — TodoWrite, EnterPlanMode: управление задачами
  • Коммуникация — AskUserQuestion: взаимодействие с пользователем

Первое, что бросается в глаза: инструментов для чтения больше всего. Три штуки для одной задачи. Это не случайность — агент тратит большую часть рабочего цикла на сбор контекста, и каждый инструмент оптимизирован под свой сценарий.

Второе наблюдение: запись разделена на Edit и Write. Edit работает через поиск и замену конкретных строк, Write полностью перезаписывает файл. При этом Edit требует предварительного чтения — агент не может редактировать файл, который не видел. Это не баг, а сознательное архитектурное решение.

Принцип 1: Один инструмент — одно действие

Почему не сделать один универсальный file_tool с параметром «action: read | write | edit»?

Когда модель видит инструмент с множеством режимов, ей нужно принять решение на двух уровнях — выбрать инструмент и выбрать режим внутри него. Каждый дополнительный уровень выбора увеличивает вероятность ошибки.

Есть и прагматичная причина: разные действия несут разный риск. Чтение безопасно. Редактирование может сломать файл. Полная перезапись — ещё опаснее. Разделение позволяет системе применять разные уровни подтверждения.

Команда Anthropic проверила это эмпирически. Когда они попытались объединить план и вопросы пользователю в одном инструменте, модель путалась. Только выделение в отдельный инструмент дало стабильный результат.

Практический вывод: если вы ловите себя на добавлении параметра mode или action_type — скорее всего, перед вами два разных инструмента.

Принцип 2: Описание — единственная документация

У человека есть README, Swagger, примеры. У ИИ-агента — только поле description в JSON Schema. Это всё, что модель прочитает перед вызовом.

В Claude Code описания параметров работают как инструкции. Они содержат аналогии с знакомыми концепциями (equivalent to '| head -N'), значения по умолчанию и предупреждения о последствиях (large result sets waste context).

Ещё один приём: enum вместо свободного текста. Когда параметр ограничен тремя значениями, агент не может придумать четвёртый. Меньше свободы в типах данных — меньше галлюцинаций.

Принцип 3: Ограничивайте вывод по умолчанию

Контекстное окно модели — конечный ресурс. У Claude — до 200K токенов, но на практике полезная ёмкость меньше. Каждый инструмент в Claude Code учитывает эту экономику:

  • Чтение файла ограничено 2000 строками по умолчанию
  • Поиск возвращает максимум 250 результатов
  • Можно запросить только нужный фрагмент файла через offset и limit
  • Три режима вывода: полное содержимое, только имена файлов, или счётчик

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

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

Принцип 4: Ошибки должны быть инструкцией, а не сигналом

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

В Claude Code ошибки работают иначе. Вместо «error: invalid input» агент получает: «строка не найдена — укажите больше контекста или используйте другой метод». Не сигнал о проблеме, а инструкция по её решению.

Хуже всего — тихие ошибки. Если инструмент молча проглатывает проблему и возвращает пустой результат, агент решает, что операция прошла успешно.

Принцип 5: Категоризация по уровню риска

Claude Code делит инструменты на три уровня:

  • Безопасные — чтение, поиск: не меняют состояние, можно вызывать многократно
  • Модифицирующие — редактирование, запись: меняют файлы, но с защитными механизмами
  • Потенциально опасные — shell-команды: могут выполнить что угодно, включая удаление данных

Для каждого уровня — своя политика подтверждения. Деструктивные операции запрещены без явного запроса пользователя. Force push в основную ветку вызывает предупреждение даже при прямом запросе.

Для тех, кто строит агентные системы: если агент может удалить production-базу одним вызовом без подтверждения — это вопрос вероятности, не времени.

Принцип 6–7: Субагенты и экономия контекста

Один из самых интересных инструментов Claude Code — Agent. Он запускает отдельного агента с собственным контекстным окном и набором инструментов.

Зачем это нужно? Задача, требующая глубокого погружения — анализ большого файла, поиск по документации — может «съесть» контекст основного агента. Субагент берёт эту задачу на себя и возвращает только результат.

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

Интересный факт: изначально Claude Code строил контекст через RAG — векторную базу, которая индексировала код. Но пассивное получение контекста оказалось менее эффективным, чем активный поиск. RAG заменили на инструменты поиска, и по мере роста способностей моделей этот подход стал работать лучше.

Принцип 8: Компенсируйте ограничения восприятия

Вот что ИИ-агент принципиально не умеет — и не научится с ростом моделей:

  • Хранить состояние. Прочитал файл в начале диалога — через 50 сообщений уже не «помнит» содержимое
  • Видеть побочные эффекты. Команда могла создать файл в другой папке — агент этого не узнает
  • Чувствовать время. Фоновый процесс мог работать секунду или десять минут
  • Оценивать объём данных. Не знает заранее, вернёт поиск 3 результата или 30 000

Поэтому инструменты должны компенсировать: требовать чтение перед записью, возвращать побочные эффекты явно, уведомлять о завершении процессов, устанавливать разумные лимиты.

Что всё это значит для бизнеса

Эти 8 принципов — не академическая теория. Они извлечены из системы, которая обрабатывает миллионы агентных сессий, и отражают год итераций команды Anthropic.

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

Claude Code — не единственный способ строить агентные инструменты, но один из немногих публичных примеров, где дизайн-решения можно изучить в деталях.

Подписывайся на Телеграм VibeLab, чтобы наблюдать за тем, как мы строим AI-first компанию.

9
3
Начать дискуссию