(ヒューマン・イン・ザ・ループ)の要点
人間が AI チーム(複数のエージェント)が動作する途中や終了後に介入し、フィードバックを与えられる設計パターン。主に次の2つの方法がある:
- 実行中にフィードバックを与える方法 –
UserProxyAgentを使って、チームの実行中にユーザーからの入力を待つ:短くてすぐ判断が欲しいインタラクション - 終了後にフィードバックを与える方法 – Run が終わった後に、次の
run()呼び出しにユーザーの応答を含めて再開:長いやり取りや、UI や外部システムを経由する場合
Human-in-the-Loop — AutoGen
方法①:実行中のフィードバック(UserProxyAgent)
UserProxyAgentは特別なエージェントで、ユーザーからの入力をその場で受け取ります。- チーム(例:
RoundRobinGroupChat)に含めると、必要なタイミングで「ユーザーに確認」を促し、入力を受け取ると実行が再開します。 - ただし、この方法は実行のブロックを伴うため、即時の短いやりとり向けに限定されます(承認ボタンなど)gettingstarted.ai+4Microsoft+4Microsoft+4。

プログラム例(詩を生成して承認を得る)
"""
------------------------------------------------------------------------------
プログラム名 : AutoGen_HumanInTheLoop_SEC303.01.py
概要 : OpenAI GPT-4ベースのマルチエージェント対話システム(Human-in-the-Loop型)
目的 : AIによる詩の生成タスクに対し、ユーザーが対話的にフィードバックを与え、
指定のキーワード(APPROVE)で承認・終了できる簡易チャットボットを構築する。
主要機能 :
- OpenAI GPT-4モデルを用いたAIアシスタントエージェントの構築
- ユーザー入力を受け取るプロキシエージェントの実装
- ラウンドロビン方式によるエージェント間対話制御
- タスク開始時に4行詩の生成を依頼
- ユーザーのフィードバックや修正依頼を随時受付
- 「APPROVE」とユーザーが入力した時点で対話を終了
- 対話終了後にOpenAIクライアントを適切にクローズ
動作要件 :
- Python 3.9 〜 3.11
- autogen-agentchat 0.6.4
- autogen-core, autogen-ext, openai, rich, aiohttp ほか関連パッケージ
- 有効なOpenAI APIキー
実行例 :
$ python AutoGen_HumanInTheLoop_SEC303.py
備考
- GUI版は、FastAPIのWEB版などをユーザが実装すること
------------------------------------------------------------------------------
"""
# python --version # 3.8~3.11
#pip install "autogen-agentchat[cli,ui]" autogen-core autogen-ext openai rich aiohttp tiktoken
# 非同期処理を行う標準ライブラリ
import asyncio
# AIアシスタントエージェントとユーザー代理エージェントをインポート
from autogen_agentchat.agents import AssistantAgent, UserProxyAgent
# 指定した単語で終了させる終了条件クラスをインポート
from autogen_agentchat.conditions import TextMentionTermination
# エージェントのラウンドロビン実行(順番処理)チームクラスをインポート
from autogen_agentchat.teams import RoundRobinGroupChat
# 対話の表示用コンソールUIをインポート
from autogen_agentchat.ui import Console
# OpenAIモデル(GPT-4など)と接続するためのクライアントをインポート
from autogen_ext.models.openai import OpenAIChatCompletionClient
# ---- ここからmain()関数を定義 ----
# 非同期で全体のエージェント対話プロセスをまとめるメイン関数
async def main():
# OpenAIのGPT-4モデルを利用するクライアントを作成
model_client = OpenAIChatCompletionClient(model="gpt-4")
# AIアシスタントエージェントを生成
assistant = AssistantAgent("assistant", model_client=model_client)
# ユーザーの入力を受け取る代理エージェントを生成
user_proxy = UserProxyAgent("user_proxy", input_func=input)
# 「APPROVE」と入力したら終了する条件を設定
termination = TextMentionTermination("APPROVE")
# 上記エージェントでラウンドロビン型のグループチャットを生成
team = RoundRobinGroupChat([assistant, user_proxy],
termination_condition=termination)
# お題を与えてストリーム実行(詩を生成するタスク)
stream = team.run_stream(task="Write a 4-line poem about the ocean.")
# コンソール上でエージェントとの対話を表示・操作する
await Console(stream)
# OpenAIクライアントをクローズ(リソース解放)
await model_client.close()
# ---- ここからプログラムのエントリーポイント ----
# このファイルが直接実行された場合だけmain()を非同期で実行
if __name__ == "__main__":
asyncio.run(main())
この例では、生成した詩をユーザーが APPROVE と入力するまでチームが待機します。
方法②:実行後のフィードバック(次回に継続)
こちらは非同期的で、実行が終わった後にユーザー入力を得て、状態を保持したまま次の run() を呼び出す流れです。
max_turns=1のようにターン数で一旦止める方法HandoffTerminationとTextMentionTerminationを使って、条件に応じて「処理を終了→ユーザーへ返す」ことを明示する方法GitHub+4Microsoft+4Microsoft+4

継続ループ例(max_turns 書き込み型)
"""
------------------------------------------------------------------------------
プログラム名 : AutoGen_HumanInTheLoop_SEC303.02.py
概要 : OpenAI GPT-4ベースの対話型AIアシスタントによるHuman-in-the-Loopシステム
目的 : ユーザーが逐次フィードバックやタスクを指示しながら、AIとのインタラクティブな詩生成や修正依頼を繰り返し実行できる対話フローを実現する。
主要機能 :
- OpenAI GPT-4モデルを利用したAIアシスタントエージェントの構築
- ラウンドロビン方式による1ターンごと停止の対話制御
- 初回タスクとして「海に関する4行詩」の生成を依頼
- ユーザーが任意のフィードバックや新タスク(プロンプト)を都度入力可能
- 'exit'入力時に対話ループを終了
- 終了時にOpenAIクライアントを適切にクローズしリソースを解放
動作要件 :
- Python 3.9 〜 3.11
- autogen-agentchat 0.6.4
- autogen-core, autogen-ext, openai, rich, aiohttp ほか関連パッケージ
- 有効なOpenAI APIキー
実行例 :
$ python AutoGen_HumanInTheLoop_SEC303.02.py
備考 :
- このCLI版はテキストコンソールで動作。Web GUI利用時はFastAPIやStreamlit等を別途実装のこと。
------------------------------------------------------------------------------
"""
# python --version # 3.8~3.11
#pip install "autogen-agentchat[cli,ui]" autogen-core autogen-ext openai rich aiohttp tiktoken
# 非同期処理用の標準ライブラリ
import asyncio
# AIアシスタントエージェントをインポート
from autogen_agentchat.agents import AssistantAgent
# ラウンドロビン型のグループチャットをインポート
from autogen_agentchat.teams import RoundRobinGroupChat
# OpenAIモデルクライアントをインポート
from autogen_ext.models.openai import OpenAIChatCompletionClient
# 対話UI(コンソール)をインポート
from autogen_agentchat.ui import Console
# 非同期で全体をまとめるmain関数
async def main():
# GPT-4クライアントを生成
model_client = OpenAIChatCompletionClient(model="gpt-4")
# アシスタントエージェントを生成
assistant = AssistantAgent("assistant", model_client=model_client)
# エージェント1人(Assistantのみ)、2ターンごとに止まるグループチャットを作成
team = RoundRobinGroupChat([assistant], max_turns=2)
# 初期タスク(お題)を設定
task = "Write a 4-line poem about the ocean."
while True:
# チームでタスクを実行(ストリームで返す)
stream = team.run_stream(task=task)
# コンソールUIでやりとりを表示・操作
await Console(stream)
# ユーザーから次の指示やお題を入力してもらう
task = input("Feedback or new task (or 'exit'): ")
# 'exit'が入力されたらループ終了
if task.strip().lower() == "exit":
break
# 最後にOpenAIクライアントを閉じる
await model_client.close()
# このスクリプトが直接実行された場合だけmain()を起動
if __name__ == "__main__":
asyncio.run(main())
この方法なら、ユーザーの応答を次のタスクとして入力でき、セッションを保持しながら対話を続けられます。Microsoft
まとめ表
| 方法 | 特徴 | 利用シーン |
|---|---|---|
| UserProxyAgent を使う | 実行中に即時フィードバック、ブロックする | 承認・選択など短いやりとり |
| max_turns / termination を使う | 一定ターン後に止めて再実行、状態保持可 | 非同期や複雑なタスクの分岐 |
おすすめ構成
- 短くてすぐ判断が欲しいインタラクション → UserProxyAgent + TextMentionTermination
- 長いやり取りや、UI や外部システムを経由する場合 → max_turns や HandoffTermination を使った非同期ループ


コメント