커스텀 에이전트 가이드
설치, 계측, 이벤트 메서드, 실제 예제, 그리고 자주 발생하는 문제들을 다룹니다.
프레임워크를 사용 중이신가요?
LangChain, CrewAI, LlamaIndex, Pydantic AI는 한 번의 호출로 자체 계측됩니다.
설치
failproofai-sdk로 설치되며, Python에서는 failproofai_sdk로 임포트합니다. failproofai-sdk[langgraph]와 같은 프레임워크 extras는 해당 프레임워크를 함께 설치하지만, 어댑터는 항상 기본 wheel에 포함되어 있습니다.
Failproof 데몬 연결
- 대시보드
- CLI
-
Admin → Keys로 이동하여
events:add권한을 가진 키를 생성합니다. - 에이전트 머신에서 Failproof 데몬을 클라우드에 연결합니다.
- 계측된 세션을 한 번 실행한 후, Observe → Events에서 정확한 ID를 확인합니다.
-
Observe → Sessions으로 이동하여 동일한 환경을 선택하고 재구성된 트레이스를 엽니다.

설정
환경 변수로 설정할 수도 있습니다.
이벤트는 메모리에 큐잉되었다가
flush_interval초마다 백그라운드에서 기록되며, 인터프리터 종료 시 최종 플러시가 이루어집니다. 프로세스가 강제 종료되면 아직 기록되지 않은 이벤트는 손실됩니다.
식별자
모든 이벤트는 세션과 에이전트에 속합니다. 스코프가 두 가지를 모두 채워주므로, 직접 전달하는 경우는 드뭅니다.session_id나 agent_id를 명시적으로 전달하면 해당 값이 우선합니다. 스코프에 바인딩되지도 않고 인수도 전달하지 않으면, 클라우드가 조용히 버릴 이벤트를 내보내는 대신 TypeError가 발생합니다.
식별자는 컨텍스트 변수에 의존합니다.
asyncio 태스크에서는 자동으로 전파되지만, 새 스레드에서는 그렇지 않습니다 — 워커를 failproofai_sdk.propagate()로 감싸지 않으면 해당 이벤트가 미연결 상태로 남습니다.이벤트 카탈로그
15개의 메서드가 있습니다. 대부분은 쌍으로 구성되어 있어, 시작 메서드를 호출한 후 종료 메서드를 호출하면 SDK가 그 사이의 시간을 측정합니다.error, human_pause, human_interrupt는 단독으로 사용됩니다.
메서드별 전체 필드
메서드별 전체 필드
모든 메서드는
session_id와 agent_id도 받으며, 스코프가 이를 자동으로 채워줍니다. None으로 남겨진 값은 JSON null로 전송되는 대신 제거되며, 모든 메서드는 None을 반환합니다.쌍 매칭과 소요 시간
규칙은 하나입니다: 종료 이벤트에 시작 이벤트와 동일한 id를 전달하세요. 이것이 두 이벤트를 쌍으로 묶고 SDK가 소요 시간을 측정하는 방법입니다.duration_ms는 직접 전달하지 마세요. SDK가 측정하며, 전달하면 ValueError가 발생합니다.
유일한 예외는 model_response로, 실제 제공자 지연 시간을 오직 사용자만 알 수 있습니다. 정수 밀리초를 전달하세요 — 해당 컬럼은 32비트 정수이므로 float를 전달하면 예외가 발생하여 값이 비어있게 됩니다.
예외 케이스
예외 케이스
- id는 종류별, 세션별로만 고유하면 됩니다. 도구 호출과 훅이 동일한 id를 공유할 수 있으며, 동시에 실행 중인 두 세션도 id가 겹쳐도 충돌하지 않습니다.
- id는 에이전트 범위로 한정되지 않습니다. 한 에이전트에서 시작되고 다른 에이전트에서 종료된 쌍도 정상적으로 매칭됩니다 — 이는 멀티 에이전트 코드에서 일반적인 경우입니다.
request_id는 선택 사항이지만 권장합니다. 없을 경우, 모델 이벤트는 도착 순서대로 쌍을 맞추므로 동일 에이전트 내에서 두 개의 동시 호출이 잘못 매칭될 수 있습니다.- 프로세스를 가로지르는 쌍도 클라우드에서는 매칭되지만, SDK는 시간을 측정할 수 없습니다 — 어느 프로세스도 양쪽 절반을 모두 보지 못했기 때문입니다.
- 최대 10,000개의 시작 이벤트만 종료 이벤트를 기다릴 수 있습니다. 그 이상이 되면 가장 오래된 것이 제거되어, 누수가 무한히 커지지 않습니다.
커스텀 필드
추가로 전달하는 키워드는 이벤트와 함께 저장됩니다.Decimal, set, bytes, 모델 객체 등 그 외의 타입은 문자열로 저장됩니다.
다음 다섯 가지 이름은 예약되어 있으며 사용이 거부됩니다: timestamp, session_id, agent_id, type, environment.
전달 및 검증
- 대시보드
- CLI
Observe → Events에서
agent_start가 첫 번째로, agent_end가 마지막으로 존재하는지 확인합니다. 그런 다음 Observe → Sessions을 열고 모델, 도구, 사람, 훅, 오류 이벤트가 의도한 순서로 나타나는지 확인합니다. 세션 ID를 기본 문제 해결 키로 사용하세요.$FAILPROOFAI_HOME/custom-agents/events 또는 ~/.failproofai/custom-agents/events를 확인하세요. JSONL 파일이 있으면 SDK 방출이 이루어진 것이고, 스풀이 계속 커진다면 데몬 설정이나 전달 문제이며, 스풀이 비어있다면 계측이나 프로세스 수명 문제입니다.
데몬이 중지된 상태에서만 스풀을 검사하세요. 실행 중에는 데몬이 밀리초 단위로 배치를 수집하고 삭제하므로, 디렉터리 목록이 수집기와 경쟁하여 실제로 방출된 이벤트보다 훨씬 적은 수를 표시할 수 있습니다.

