Agents SDKのエージェントオーケストレーションパターン - 入力ガードレール
Agents SDKには,ユーザー入力やエージェントの出力をチェックするGuardrailsという仕組みがあります。ユーザーの入力をチェックするのが入力ガードレール,エージェントの出力をチェックするのが出力ガードレールです。ガードレールは,メインエージェントの前後にフックされる補助エージェントとして実装されるので,エージェントオーケストレーションの一種といえます(と思います)。
入力ガードレールの動作
入力ガードレールの動作をざっくり図にすると,こんなイメージです。

メインエージェントとガードレールエージェントは,デフォルトでは並列で動作し,ガードレールエージェントによってTripwireが発動されると,メインエージェントの実行が中断されます。run_in_parallel=Falseを指定すると,ガードレールエージェントがメインエージェントの実行前に動作し,Tripwireが発動されたらメインエージェントはスキップされます。(後述)
入力ガードレールの実装例(並列実行)
Agents SDKのリポジトリに含まれるサンプル examples/agent_patterns/input_guardrails.py を参考にしました。
「終末のワルキューレ」のブリュンヒルデとチャットするアプリに,ネタバレ禁止ガードレールを挟む,というものです。
入力ガードレールに必要なのは2つ。
- ガードレールエージェント
- tripwire判定に必要な推論を行う
- ガードレール関数 (
@input_guardrailデコレータをつけた関数)- ガードレールエージェントを実行して,その出力に基づいて,Tripwireを発動するかどうかを判定する
# 16-input-guardrail.py
# ネタバレ判定用の出力モデル
: # tripwireを発動させるかどうか
: # 判断の根拠
# ネタバレガードレールエージェント
=
# ガードレール関数
# run_in_parallel=True により、メインエージェントの実行と並列してガードレールが実行される(デフォルト)
= await
=
return
=
=
: =
=
pass
=
=
=
break
実行してみます。
想定通りにTripwire発動はしたけれど,メインエージェントに速いモデルを使っていると,メインエージェントが最初に致命的なことを話し始めてしまい(*1),止めるのが間に合わなかったということが,並列実行だとありえます。これでいい場合もあるでしょうが,困る場合,ブロッキング実行にモードを切り替えます。
*1) この例だとネタバレした内容が間違っていますが
入力ガードレールの実装例(ブロッキング実行)
@input_guardrailデコレータのrun_in_parallel引数をFalseにすると,ガードレールがメインエージェントの実行をブロックします。
# run_in_parallel=False により、メインエージェントの実行前にガードレールが実行されるようにする
こうすると,ガードレールがTripwireを発動させた場合,メインエージェントはスキップされるので,時遅し,ということはなくなります。
ブロッキング実行することでレスポンスが開始されるまでの時間は長くなるので,ガードレールでメインエージェントの実行を絶対に防ぎたいかどうかで使い分けるのが良さそうです。
ガードレールの出力
ガードレールエージェントの出力は,ユーザーからは隠蔽されますが,普通のエージェントであるため,ガードレール関数の中でログに出力したり,またはOpenAIのダッシュボードのLogsから確認できます。

これは Agents SDK+αのTipsを一人で書いていくアドカレ Advent Calendar 2025の16日目の記事です。