Skip to main content

Установка

Поддерживаются версии pydantic-ai-slim с 2.0 по 3.0. В версии 2.0 был удалён параметр Agent(instrument=...) и введён протокол возможностей, на котором строится этот адаптер, поэтому версия 1.x не может быть инструментирована таким образом.

Инструментирование

Функция instrument() должна быть вызвана до создания Agent. Возможность добавляется при конструировании, поэтому агент, созданный ранее, не будет иметь её и ничего не будет записывать, без ошибок, так как ничего не пошло не так. Это наиболее частая причина пустой трассировки при использовании этого адаптера.
Чаще всего проблема возникает с агентами на уровне модуля:
Убедитесь, что это сработало:
Pydantic AI объединяет переданный вами список в единственный root_capability, поэтому нет атрибута agent.capabilities для чтения. Агенты, созданные во время инструментирования, сохраняют возможность, поэтому вы можете вызвать uninstrument() и повторно инструментировать без пересоздания.

Что записывается

Здесь нет пары hook и нет пары human-in-the-loop. Pydantic AI не имеет границы узла или шага для заключения и не имеет встроенной паузы для человека, поэтому нечего преобразовывать. Если вы создадите что-либо из этого, генерируйте события самостоятельно — см. Пользовательские агенты. Значение output_type никак не влияет на трассировку. Типизированный запуск и запуск со строкой создают одинаковые события.

Пример

В трассировке restock_eta отображается как tool_result с ошибкой, за которым следует другой вызов модели, где агент её обходит, и запуск всё ещё заканчивается success. Оба факта фиксируются.

Ошибки, повторные попытки и управление потоком

Pydantic AI вызывает исключения для трёх разных вещей, и адаптер их разделяет: ModelRetry намеренно находится в первой группе. Это означает, что попытка действительно не удалась и модель была попрошена попробовать снова, что именно то, для чего предназначено поле ошибки инструмента. Классификация её как управления потоком скрыла бы реальные отказы инструментов за зелёным запуском.

Назовите ваши span-ы

Собственный span запуска Pydantic AI называется agent. Заключите вызов в контекст, чтобы дать ему выбранный вами ярлык:
Span фреймворка затем вложен в inventory, и именно там висят события модели и инструмента. Держите agent_id с низкой кардинальностью. Это первичный аспект на каждой поверхности панели, поэтому используйте имя роли, никогда UUID или строку для каждого запуска.

Управление сеансом

Разрешается в этом порядке, первое совпадение побеждает:
  1. instrument("pydantic_ai", session_id=...)
  2. Содержащий failproofai_sdk.session() scope
  3. conversation_id запуска, затем его run_id
  4. Сгенерированный uuid4().hex

Опции

Распространённые проблемы

Agent был создан до запуска instrument(). См. предупреждение выше и проверьте agent.root_capability.capabilities.
Простой raise распространяется; это дизайн Pydantic AI. Чтобы позволить модели его обойти, вызовите ModelRetry с сообщением, на которое она может действовать. Отказ записывается в любом случае.
Этот дочерний элемент — собственный span запуска Pydantic AI, и именно там висят события модели и инструмента. Отбросьте собственный scope, если хотите один span, ценой пользовательского имени.
Граф асинхронного стека Pydantic AI длиннее предела поля полезной нагрузки, и последняя строка трассировки — это само исключение. Это поле обрезается спереди, а не сзади, поэтому нужная вам строка выживает.

Далее

Как это работает

Пары, идентификаторы, жизненный цикл сеанса и доставка.

Прочитайте трассировку

Следите за причинностью через только что захватанный сеанс.

Другие фреймворки

LangGraph, CrewAI, LlamaIndex и пользовательские агенты.