DEV Community на русском
Подписаться
От плоских логов к деревьям выполнения: отладка современных ИИ-агентов
Агентские трассировки по сути являются последовательностями событий, но разработчикам необходимо визуализировать их причинно-следственную структуру в виде деревьев выполнения. Построение этих деревьев требует большего, чем просто сортировка по временным меткам, поскольку события могут поступать вне порядка, дочерние элементы могут выполняться параллельно, а интервалы могут быть неполными или повторяться. Минимальный контракт событий обеспечивает стабильные идентификаторы трассировок и интервалов, причем начальные события устанавливают родительскую связь, а конечные события определяют результаты. Одних только временных меток недостаточно для правильного установления родительской связи, что требует явной сборки начальных и конечных событий в интервалы.Сборщик интервалов управляет состоянием, буферизуя конечные события до прибытия соответствующих начальных событий и сообщая диагностические сведения о таких проблемах, как отсутствие начальных событий или дублирование событий. Он явно представляет собранные интервалы и обрабатывает потенциальные будущие проблемы с неограниченными потоками, предлагая ограничения по размеру и политики истечения срока действия. Построение леса деревьев выполнения позволяет корректно обрабатывать несколько корней и "осиротевшие" интервалы, предотвращая сбои и обеспечивая представление всей информации. Проверка родительских ссылок на циклы имеет решающее значение перед рендерингом, чтобы избежать бесконечной рекурсии."Осиротевшие" интервалы, не имеющие явного родителя, следует отображать отдельно, чтобы не скрывать пробелы в инструментировании. Дочерние элементы сортируются по времени начала для стабильного отображения, но не подразумевают причинно-следственной связи, поскольку параллельные дочерние элементы могут значительно перекрываться. Полезный пользовательский интерфейс сочетает древовидное представление, показывающее родительские связи и повторные попытки, с представлением временной шкалы, иллюстрирующим перекрытие и задержку. Суммирование длительностей интервалов завышает время трассировки из-за включенных длительностей дочерних элементов и параллельной работы.Вместо этого, время выполнения трассировки, длительность интервала, собственное время и критический путь являются более точными метриками. Повторные попытки и резервные варианты следует моделировать как дочерние элементы операции, позволяя родительской операции успешно завершиться, даже если дочерние элементы завершатся с ошибкой. Частичные трассировки должны сохраняться, отображая неполные интервалы отдельно с указанием причины их неполноты, избегая вымышленных длительностей или статусов. Сравнение деревьев включает инвариантные свойства, такие как типы интервалов, отношения родитель-потомок и конечные статусы, а не точные снимки. Хранилище событий должно оставаться удобным для добавления, с событиями, индексированными по идентификатору трассировки, и конфиденциальными данными, исключенными по умолчанию. Валидация обеспечивает целостность трассировки, отделяя ошибки валидации от фактических ошибок агента. Основное изменение заключается в переходе от рассмотрения порядка поступления событий как порядка выполнения к сборке событий жизненного цикла в надежные структурные деревья для лучшего анализа.