DEV Community на русском
Подписаться
Как я создал отладчик для LLM-агентов с функцией путешествия во времени на Burr, и что на самом деле означает «переиграть неизмененную ветку и доказать, что ничего не изменилось».
Существующие инструменты трассировки агентов ограничены, заставляя пользователей повторно запускать полные конвейеры для отладки проблем, что затрудняет изоляцию изменений от недетерминированного поведения модели. Rewind решает эту проблему, позволяя пользователям форкать завершенный запуск на любом этапе, изменять один входной параметр и воспроизводить только последующие этапы. Это обеспечивает точное сравнение траекторий, отличая реальные изменения от "дрожания" модели. Архитектура Rewind включает браузерный интерфейс, бэкенд FastAPI и приложение Burr, с состоянием, сохраняемым в SQLite, и телеметрией, собираемой для каждого узла.Ключевой принцип проектирования заключается в том, что состояние является только семантическим, исключая недетерминированные элементы, такие как задержка или количество токенов, из самого состояния. Ключи, специфичные для фреймворка, которые могли бы вызвать расхождение, также удаляются из состояния перед тем, как оно повлияет на подсказки или хэши. Переопределения для форкнутых запусков управляются вне состояния, гарантируя, что неизмененные ветви по-прежнему могут использовать кэш. Хэши артефактов генерируются из байтов содержимого, а не из пути к содержащему файлу, что предотвращает ложные различия.Механизм кэширования использует детерминированный ключ на основе модели, температуры, подсказки и результата инструмента. Узлы инструментов имеют отдельный кэш с ключом по имени инструмента и каноническим аргументам. Движок сравнения разворачивает вложенные словари для выявления конкретных расхождений на уровне полей, предоставляя четкую и действенную информацию для отладки. Rewind реализует надежную обработку ошибок, громко сообщая об ошибках парсинга или непригодных переопределениях.Тесты верификации подтверждают, что Rewind достигает 100% попаданий в кэш и нулевого инкрементального использования токенов для неизмененных воспроизведений. Эта детерминированность оказывается полезной, поскольку запуск может пережить сбой поставщика, если все вызовы LLM кэшированы. Потенциальные подводные камни включают SDK, которые неправильно обрабатывают метаданные, и несогласованную проверку идентификаторов моделей различными поставщиками. Инструмент также решает распространенные проблемы среды разработки, такие как конфликты портов и настройки IPv6 по умолчанию в Vite. Будущие улучшения включают сетку "что, если" для параллелизации нескольких переопределений и поддержку нелинейных топологий графа.