title: “Python SDK” description: “Посмотрите, что именно сделали ваши AI-агенты в продакшене: каждый запуск агента, вызов инструмента, запрос к модели, хук и вмешательство человека.”
Посмотрите, что именно сделали ваши AI-агенты в продакшене: каждый запуск агента, вызов инструмента, запрос к модели, хук и вмешательство человека. Python SDK Failproof AI Observability записывает эту цепочку событий изнутри кода вашего агента, чтобы вы могли отлаживать, аудировать и оценивать происходящее. Используйте его, когда захотите, чтобы Failproof AI Observability наблюдал за вашими агентами. Под капотом SDK записывает структурированные события в локальные JSONL-файлы, а демон сборщика подхватывает их и автоматически отправляет на платформу. Вам не нужно самостоятельно управлять этими файлами.Совет: Новичок в Failproof AI Observability? Эта страница является полным справочником событий SDK.
Установка
SDK распространяется клиентам как приватный wheel, а не из публичного индекса пакетов. В процессе подключения объясняется, как его получить, установить и зафиксировать версию — обратитесь к вашему контакту Failproof AI, если вам нужен доступ. После установки проверьте её наличие:Быстрый старт
Инструментирование реального вызова
На практике вы оборачиваете существующий код агента. Заключите вызов модели сmodel_request перед и model_response после, чтобы два события охватывали реальный запрос и Failproof AI Observability смогла их связать:
tool_use и tool_result, переиспользуя один tool_call_id для обеих операций.
Вот как выглядят эти события на дашборде — они раскрашены по типам и фильтруются по среде, агенту и сессии:

configure()
event.*. Безопасно опустить; значения по умолчанию работают из коробки. Все аргументы являются только именованными; передавайте их по имени, как показано выше.
Когда base_dir равен None (по умолчанию), SDK читает $AGENTEYE_HOME, если он установлен,
в противном случае возвращается к ~/.agenteye. Это соответствует собственному разрешению сборщика,
поэтому одна переменная окружения AGENTEYE_HOME настраивает общую очередь событий для обоих
SDK и сборщика.
Окружение
Помечайте каждое событие средой развёртывания (production, staging, qa, canary и т. д.). Установите один раз; SDK автоматически прикрепляет его к каждому событию.
Вариант 1: через configure():
configure(environment=...) имеет приоритет над переменной окружения. Если ничего не установлено, по умолчанию используется "dev".
Значение окружения появляется как фильтр первого уровня на дашборде и хранится на сервере для быстрых запросов.
Предупреждение: Значения окружения не должны содержать буквальную запятую,. Фильтры дашборда используют множественный выбор, разделённый запятыми (?environment=prod,staging), поэтому окружение с именемprod,blueбыло бы разделено на два значения. События с окружениями, содержащими запятые, отклоняются при приёме.
Данные и приватность
SDK записывает только поля, которые вы явно передаёте. Подсказки, сообщения, входные и выходные данные инструментов, а также содержимое модели захватываются исключительно потому, что вы передаёте их в вызовevent.*. Ничто не читается из вашего процесса и не захватывается неявно. Любое поле, которое вы не установили, полностью опускается из события; оно не записывается на диск.
Это делает редактирование вашим выбором и вашей ответственностью. Если подсказка или полезная нагрузка инструмента содержит PII или секреты, которые вы не хотите хранить, очистите или замаскируйте их перед передачей методу события.
Справочник событий
Большинство событий поступают в парах начало/конец, которые разделяют идентификатор корреляции:tool_use и tool_result разделяют tool_call_id, hook_triggered и hook_completed разделяют hook_id, а human_wait и human_input разделяют input_id. Выпустите событие начала, выполните работу, затем выпустите событие завершения с тем же ID. Failproof AI Observability соответствует паре и вычисляет duration_ms за вас, поэтому вы никогда не передаёте duration_ms сами.

Все методы также принимают произвольные
**kwargs для пользовательских метаданных (см. Пользовательские поля).
event.agent_start()
Выпускается, когда агент начинает работу.
event.agent_end()
Выпускается, когда агент завершает работу.
event.tool_use()
Выпускается, когда агент вызывает инструмент. Сопарьте с tool_result; SDK автоматически вычисляет duration_ms.
event.tool_result()
Выпускается, когда инструмент возвращает результат. Коррелирует с tool_use через tool_call_id.
event.model_request()
Выпускается непосредственно перед отправкой подсказки в LLM.
messages принимают либо простую строку content, либо список блоков в стиле Anthropic content. Параметры выборки (temperature, max_tokens и т. д.) можно передать в виде дополнительных kwargs.
event.model_response()
Выпускается, когда LLM возвращает ответ.
content принимает либо простую строку (универсальные провайдеры), либо список блоков контента в стиле Anthropic. Вызовы инструментов находятся внутри content как блоки {"type": "tool_use", ...}, без отдельного поля tool_calls.
event.hook_triggered()
Выпускается, когда срабатывает хук. Сопарьте с hook_completed; SDK автоматически вычисляет duration_ms.
event.hook_completed()
Выпускается, когда хук завершается. Коррелирует с hook_triggered через hook_id.
event.error()
Выпускается, когда возникает необработанная ошибка.
События взаимодействия человека и системы
События взаимодействия человека и системы предоставляют вам контроль над моментами, когда человек вступает в выполнение агента (ожидание одобрения, предоставление ввода, пауза или остановка агента). Они позволяют измерить, сколько времени люди берут для ответа (SDK автоматически вычисляетduration_ms для парных событий), аудировать, кто приостановил или прервал агента, и создавать рабочие процессы одобрения и контроля, которые отображаются на дашборде.
event.human_wait()
Выпускается, когда агент приостанавливает выполнение в ожидании ввода человека. Сопарьте с human_input; SDK автоматически вычисляет duration_ms (сколько времени человек занял на ответ).
event.human_input()
Выпускается, когда человек предоставляет ввод и агент возобновляет работу. Коррелирует с human_wait через input_id. duration_ms вычисляется автоматически и не должна передаваться вызывающей стороной.
event.human_pause()
Выпускается, когда человек активно приостанавливает агента (например, через управление дашборда). Агент приостановлен, но не завершен.
event.human_interrupt()
Выпускается, когда человек активно останавливает агента во время выполнения. В отличие от human_pause, работа агента завершается, а не приостанавливается.
Пользовательские поля
Любые дополнительные аргументы ключевого слова добавляются к событию после стандартных полей:timestamp, type и environment зарезервированы и вызывают ValueError (Reserved field names cannot be used as custom fields: [...]), если переданы как пользовательские поля. session_id и agent_id являются обязательными параметрами для каждого метода события и не могут быть переданы второй раз; Python вызовет TypeError, если вы это сделаете. Вместо этого установите окружение с помощью configure(environment=...) (или переменной AGENTEYE_ENVIRONMENT).
Сохраняйте полезные нагрузки как структурированный JSON, если хотите запрашивать их поля. Значения, которые JSON не поддерживает изначально — такие как даты/время, UUID, десятичные числа, наборы, байты или объекты моделей — преобразуются в строки, чтобы запись продолжалась безопасно.
Как записываются события
События буферизуются в процессе и записываются на диск каждыеflush_interval секунд (по умолчанию 500 мс). Каждая запись в буфер записывает один JSONL-файл:
Дальнейшие шаги
- Поток событий: смотрите эти события в прямом эфире, раскрашенные и фильтруемые по среде, агенту и сессии.
- Сессии: смотрите, как парные события реконструируют каждый запуск агента как граф выполнения и временную шкалу.

