Agents SDKのエージェントオーケストレーションパターン - 出力ガードレール
昨日のエントリでは,Agents SDKの入力ガードレールを紹介しました。今日は出力ガードレールについてです。入力ガードレールはユーザーの入力に対して動作しますが,出力ガードレールはエージェントの出力に対して動作します。
出力ガードレールの動作
出力ガードレールの動作の動作をざっくり図にすると,こんなイメージです。

メインエージェントが生成した出力をガードレールがチェックし,Tripwireが発動されたら,例外が投げられます。出力ガードレールは必ずメインエージェントの後に動作するので,run_in_parallel(並列実行)オプションはありません。
出力ガードレールの実装例
Agents SDKのリポジトリに含まれるサンプルexamples/agent_patterns/output_guardrails.pyを参考にしました。
「終末のワルキューレ」についてなんでも教えてくれるエージェントに,勝敗に関するネタバレを禁止する出力ガードレールを挟む,というものです。
出力ガードレールに必要なのは2つ。
- ガードレールエージェント
- tripwire判定に必要な推論を行う
- ガードレール関数 (
@output_guardrailデコレータをつけた関数)- ガードレールエージェントを実行して,その出力に基づいて,Tripwireを発動するかどうかを判定する
# 17-output-guardrail.py
# ネタバレ判定用の出力モデル
: # tripwireを発動させるかどうか
: # 判断の根拠
# ネタバレガードレールエージェント
=
# ガードレール関数
# ネタバレ判定をガードレールエージェントに依頼
: =
= await
=
return
=
=
: =
= await
=
=
=
=
break
出力ガードレール実装時の注意
上記のコードで,エージェント実行をRunner.run()からRunner.run_streamed() に変更することもできますが,その場合ガードレールが機能する前にメインエージェントが出力を開始してしまうため,ガードレールがほぼ役に立ちません(出力が終わりかけた頃にやっとTripwireが発動する状況になりがち)。
ストリーミング出力しながら出力ガードレールをかける方法については,examples/agent_patterns/streaming_guardrails.pyが参考になります。こちらの実装例では@output_guardrailを使わずに(つまりAgents SDK組み込みのガードレールの仕組みを使わずに),ストリーミング出力のチャンクごとにガードレールエージェントを呼び出してチェックしています。
実行してみます。
### 釈迦 vs 零福・ハデス
アシスタントが勝敗に関わる回答をしようとしたところで,出力ガードレールによりTripwireが発動されています。
ガードレールの出力
ガードレールエージェントの出力を覗くと,このようになっていました。
Tripwire発動しない時:

Tripwire発動した時:

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