カスタムエージェントガイド
インストール、インストルメント化、イベントメソッド、実装例、よくある問題。
フレームワークを使用していますか?
LangChain、CrewAI、LlamaIndex、Pydantic AI は1回の呼び出しで自動的にインストルメント化されます。
インストール
failproofai-sdk としてインストールされ、Python では failproofai_sdk としてインポートします。failproofai-sdk[langgraph] のようなフレームワーク追加パッケージはフレームワーク本体もインストールしますが、アダプターは常にベースのホイールに含まれています。
Failproof デーモンへの接続
- ダッシュボード
- CLI
-
Admin → Keys に移動し、
events:add権限を持つキーを作成します。 - エージェントマシン上で Failproof デーモンをクラウドに接続します。
- インストルメント化したセッションを1つ実行し、Observe → Events でその正確な ID を確認します。
-
Observe → Sessions に移動し、同じ環境を選択して再構成されたトレースを開きます。

設定
環境変数で設定する場合:
イベントはメモリ内でキューに入れられ、
flush_interval 秒ごとにバックグラウンドで書き込まれます。インタープリター終了時に最終フラッシュが行われます。プロセスが強制終了された場合、まだ書き込まれていないデータは失われます。
ID
すべてのイベントはセッションとエージェントに属します。スコープが両方を自動的に設定するため、通常は渡す必要はありません:session_id や agent_id を明示的に渡すことも可能で、その値が優先されます。バインドも渡しもされていない場合、クラウドが静かに破棄するようなイベントを送信するのではなく、TypeError が発生します。
ID はコンテキスト変数で管理されます。
asyncio タスクには自動的に引き継がれますが、新しいスレッドには引き継がれません — ワーカーを failproofai_sdk.propagate() でラップしないと、そのイベントは未紐付けになります。イベントカタログ
15のメソッドがあります。ほとんどはペアになっています — オープナーを呼び出してからクローザーを呼び出すと、SDK がその間隔を計測します。
単独で使用するものが3つあります:
error、human_pause、human_interrupt。
メソッドごとの全フィールド
メソッドごとの全フィールド
すべてのメソッドは
session_id と agent_id も受け取りますが、スコープが自動的に設定します。None のままの値は JSON の null として送信されるのではなく省略され、すべてのメソッドは None を返します。ペアリングと所要時間
ルールは1つ: クローズイベントにオープナーと同じ ID を渡すこと。 それがペアリングの方法であり、SDK が間隔を計測できる理由です。duration_ms を自分で渡さないでください。 SDK が計測し、渡すと ValueError が発生します。
唯一の例外は model_response で、実際のプロバイダーレイテンシを知っているのはあなただけです。ミリ秒の整数値を渡してください — float を渡すと例外が発生します。このカラムは 32 ビット整数のため、float だと空になってしまいます。
エッジケース
エッジケース
- ID はペアの種類ごと、セッションごとに一意であれば十分です。 ツール呼び出しとフックが同じ ID を共有することも、同時に実行中の2つのセッションが同じ ID を再利用しても衝突しません。
- エージェントにスコープされません。 あるエージェントの下でオープンされ、別のエージェントの下でクローズされたペアも正しくマッチします — マルチエージェントコードでは通常のケースです。
request_idは任意ですが推奨します。 これがないと、モデルイベントは到着順にペアリングされるため、同じエージェント内の2つの並行呼び出しが誤ってペアリングされる可能性があります。- プロセスをまたいだペアはクラウドでも正しくマッチしますが、SDK は計測できません — どのプロセスも両方のハーフを見ていないためです。
- 最大 10,000 個のオープナーがクローザーを待機できます。 それを超えると最も古いものが破棄されるため、リークが無限に増え続けることはありません。
独自フィールド
渡した追加のキーワードはイベントとともに保存されます:Decimal、set、bytes、モデルオブジェクト — は文字列として保存されます。
以下の5つの名前は予約済みで、使用すると拒否されます: 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 からの送信が証明されます。スプールが増加し続ける場合はデーモンの設定または配信の問題、スプールが空の場合はインストルメント化またはプロセスのライフタイムの問題です。
スプールはデーモンが停止しているときのみ確認してください。デーモンが動作中の場合、数ミリ秒ごとにバッチを収集・削除するため、ディレクトリ一覧はコレクターと競合し、実際に送信されたイベント数より大幅に少なく表示されます。

