Skip to main content
Что делает каждый параметр, метод и поле. Если вы инструментируете впервые, начните с руководства — эта страница предназначена для справок.

Руководство по пользовательским агентам

Установка, инструментирование, методы событий, рабочий пример и типичные проблемы.

Используете фреймворк?

LangChain, CrewAI, LlamaIndex и Pydantic AI инструментируют себя одним вызовом.
Python 3.10 или новее. Без зависимостей времени выполнения.

Установка

Пакет устанавливается как failproofai-sdk и импортируется в Python как failproofai_sdk. Дополнительные пакеты для фреймворков, такие как failproofai-sdk[langgraph], устанавливают сам фреймворк; адаптеры всегда поставляются в базовом пакете.

Подключение демона Failproof

  1. Перейдите в Admin → Keys и создайте ключ с правом events:add.
  2. Подключите демон Failproof к облаку на машине агента.
  3. Запустите одну инструментированную сессию, затем найдите её точный ID в Observe → Events.
  4. Перейдите в Observe → Sessions, выберите ту же среду и откройте восстановленный след. Сессия пользовательского агента на Python, восстановленная как граф выполнения и упорядоченный след событий.

Конфигурация

Устанавливается переменной окружения:
Без запятых в environment. Ingest разбивает это поле на запятые для построения фильтров и пропускает любое событие, метка которого содержит запятую — вся сессия молча исчезает. Пишите prod-eu, а не prod,eu.configure(environment="prod,eu") выбросит исключение, чтобы вы узнали немедленно. AGENTEYE_ENVIRONMENT не может выбросить — никто вас не вызывает — так что он предупреждает один раз и откатывается на dev.
События ставятся в очередь в памяти и записываются в фоне каждые flush_interval секунд, с финальной записью при выходе интерпретатора. Процесс, убитый силой, теряет всё, что ещё не было записано.

Идентичность

Каждое событие принадлежит сессии и агенту. Области заполняют обе, поэтому вы редко их передаёте:
Явная передача session_id или agent_id по-прежнему работает и имеет приоритет. Без ни одной из них вызов выбросит TypeError вместо того, чтобы излучить событие, которое облако молча отбросит.
Идентичность ездит на переменных контекста. Она автоматически следует за asyncio задачами, но не новыми потоками — оборачивайте рабочий процесс в failproofai_sdk.propagate() или его события окажутся неприкреплёнными.

Каталог событий

Пятнадцать методов. Большинство идут парами — вы вызываете открывающий, затем закрывающий, и SDK измеряет разницу. Три стоят отдельно: error, human_pause, human_interrupt.
Каждый метод также принимает session_id и agent_id, которые области заполняют для вас. Все оставленное как None удаляется вместо отправки как JSON null, и каждый метод возвращает None.
Чтобы пометить запуск как неудачный, outcome должен быть одним из failed, error, timeout или rejected. Что-либо ещё — включая близкое совпадение "failure" — считается успехом.

Спаривание и длительность

Одно правило: дайте закрывающему событию тот же идентификатор, что и его открывающий. Это то, что их спаривает и позволяет SDK измерить разницу. Не передавайте duration_ms сами. SDK измеряет это, и передача его выбросит ValueError. Единственное исключение — model_response, где только вы знаете реальную задержку провайдера. Передайте целое число миллисекунд — число с плавающей точкой выбросит, потому что столбец — это 32-битное целое число и в противном случае окажется пустым.
  • Идентификаторы нужно делать уникальными только для своего вида, в каждой сессии. Вызов инструмента и хук могут поделиться одним; две сессии, запущенные одновременно, могут переиспользовать одни и те же идентификаторы без столкновений.
  • Они не привязаны к агенту. Пара, открытая под одним агентом и закрытая под другим, по-прежнему совпадает — что является нормальным случаем в многоагентном коде.
  • request_id опционален, но рекомендуется. Без него события модели спариваются в порядке их поступления, поэтому два одновременных вызова в одном агенте могут неправильно спариться.
  • Пара, разбитая между процессами, по-прежнему совпадает в облаке, но SDK не может измерить это — ничто в обоих процессах не видело обе половины.
  • Максимум 10 000 открывающих событий ожидают закрывающего одновременно. Сверх этого самое старое выбрасывается, поэтому утечка не может расти бесконечно.

Ваши собственные поля

Любой дополнительный ключевой аргумент, который вы передаёте, хранится с событием:
Предпочитайте типы JSON, если хотите запрашивать их позже. Все остальное — UUID, datetime, Decimal, set, bytes, объект модели — хранится как строка.
Добавьте префикс к названиям своих полей. Дополнительные элементы применяются последними, поэтому поле с именем model, tool_name или outcome молча перезаписывает настоящее. Адаптеры фреймворков используют fw_; делайте то же самое и ничто не может столкнуться.Вот почему опечатка в опциональном поле никогда не вызывает ошибку — это просто становится новым пользовательским полем. Если стандартного поля нет в облаке, сначала проверьте орфографию.
Эти пять имён зарезервированы и отклоняются сразу: timestamp, session_id, agent_id, type, environment.

Доставка и проверка

В Observe → Events сначала проверьте наличие agent_start и agent_end в конце. Затем откройте Observe → Sessions и подтвердите, что события модели, инструмента, человека, хука и ошибки появляются в намеченном порядке. Используйте ID сессии как основной ключ для устранения неполадок.
Если облако пусто, проверьте $FAILPROOFAI_HOME/custom-agents/events, иначе ~/.failproofai/custom-agents/events. Файлы JSONL доказывают излучение SDK; растущий spooling указывает на конфигурацию демона или доставку, в то время как пустой spooling указывает на инструментирование или время жизни процесса.
Проверяйте spooling только когда демон остановлен. Пока он работает, он собирает и удаляет каждый пакет в течение миллисекунд, поэтому перечисление каталога расходится со сборщиком и показывает намного меньше событий, чем было излучено.

Предотвращение сбоев в пользовательском времени выполнения

Используйте результаты аудита и связанные следы для определения небезопасного действия, необходимых доказательств и предполагаемого ответа. Пользовательская интеграция обеспечения должна предоставить действие перед выполнением, передать его структурированный вход механизму политики и применить результирующее решение allow, instruct или deny. Свяжитесь с Failproof AI и мы поможем сопоставить границы модели, инструмента и жизненного цикла вашего времени выполнения с хуками политики, затем проверим интеграцию с вами.