はじめに
AutoGenのAgentChat機能は、複数のエージェントが協調して会話やタスク処理を行うフレームワークである。その際、チャットの無限継続や処理の暴走を防ぐために、終了条件(Termination Condition)を明確に設計・設定することが不可欠である。本稿では、AutoGenにおける終了条件の種類、実装方法、運用上の注意点について解説する。
終了条件の基本設計
AutoGenでは「termination_condition」というパラメータを用いて終了判定ロジックを指定することができる。これにより、特定の条件に到達した時点で自動的にチャットセッションが終了する。
組み込み終了条件一覧
AgentChatが標準搭載する主な終了条件は以下の通りである。
| 終了条件種別 | 概要・用途 |
|---|---|
| MaxMessageTermination | 一定数のメッセージに達した時点で終了 |
| TextMentionTermination | 指定したテキスト(例:「TERMINATE」)が出現したら終了 |
| TokenUsageTermination | トークン消費量が上限値に達した時点で終了 |
| TimeoutTermination | 実行開始からの経過時間が指定値を超えた時点で終了 |
| HandoffTermination | エージェント間のハンドオフ発生時に終了 |
| SourceMatchTermination | 特定エージェントが応答した場合に終了 |
| ExternalTermination | 外部シグナル(API等)によって強制終了 |
| StopMessageTermination | StopMessageを受信した時点で終了 |
| TextMessageTermination | TextMessageを受信した時点で終了 |
| FunctionCallTermination | 指定ツールによるFunction Callの完了時に終了 |
| FunctionalTermination | ユーザー定義関数がTrueを返した時点で終了 |
終了条件はORおよびAND演算子により複数組み合わせて設定可能である。
実装例1:批評エージェントとの連携
典型的な応用例として、生成系エージェント(Primary Agent)と批評系エージェント(Critic Agent)の2段構成によるレビュー工程が挙げられる。
- Primary Agentがアウトプット(案や提案)を生成する。
- Critic AgentがPrimary Agentのアウトプットに対してフィードバックを返す。
- 批評の結果、「APPROVE」という合格サインが返された場合、TextMentionTermination(“APPROVE”)を
termination_conditionとして指定し、以降の処理を即時終了とする。
コード例:
pythonCopyEdittermination = TextMentionTermination("APPROVE")
team = RoundRobinGroupChat(
[primary_agent, critic_agent],
termination_condition=termination
)
この設定により、RoundRobinGroupChat形式で両者が順番に応答し、「APPROVE」というキーワードが出現したタイミングで、チャットセッション全体が自動的に停止する。
この手法は、成果物の妥当性や品質保証の観点で、批評工程を自動ワークフローに組み込む場合に有効である。
実装例2:複合条件の設定
最大メッセージ数上限とキーワード検出を組み合わせる場合は以下のように記述する。
pythonCopyEdittermination = MaxMessageTermination(10) | TextMentionTermination("DONE")
team = RoundRobinGroupChat(
[agent1, agent2],
termination_condition=termination
)
この例では、「最大10回の応答または“DONE”が出現した場合」に終了する条件となる。
終了条件の内部動作とリセット機構
終了条件は状態管理を内部的に行っているが、run()またはrun_stream()メソッド呼び出しごとに自動リセットされる。したがって、同じ終了条件オブジェクトを複数回使い回しても影響はない。
また、グループチャット(RoundRobinGroupChatやSelectorGroupChat)では各エージェントの応答後に終了条件を判定する仕組みとなっている。
カスタム終了条件の実装
標準終了条件で要件を満たせない場合、FunctionalTerminationを用いてPython関数として任意の終了条件を記述することができる。例えば「特定の形式の応答が来たら終了」など柔軟なロジックも実装可能である。
運用上の注意
- 必要に応じて複数の終了条件を組み合わせて使用することが望ましい。
- 無限ループ防止のため、いずれかの「物理的」終了条件(メッセージ上限、トークン上限、タイムアウト等)は必ず設定することを推奨する。
- 外部からの制御が必要な場合はExternalTerminationを適用する。
まとめ
AutoGen AgentChatの終了条件設計は、安定運用および誤動作防止のための重要な要素である。標準終了条件の理解と適切な組み合わせによって、多様なタスクやチャットの自動制御が実現可能となる。要件によってはカスタム終了条件の実装も活用し、柔軟な対話システム構築を目指すべきである。


コメント