目的
AutoGen AgentChatでは、チャットセッションの途中経過や最終状態(State)をシリアライズ(保存)、デシリアライズ(復元)できます。これにより、一度終了したセッションの再開や、複数サーバ間での状態共有などが容易になります。
サンプルコード
以下は、会話の途中でstateを保存し、その後同じ状態から会話を再開する流れの例です。
pythonCopyEditfrom autogen_agentchat.agents import UserProxyAgent, AssistantAgent
from autogen_agentchat.teams import RoundRobinGroupChat
from autogen_ext.models.openai import OpenAIChatCompletionClient
# 1. エージェントとグループチャットの初期化
model_client = OpenAIChatCompletionClient(model="gpt-4")
user = UserProxyAgent("user", human_input_mode="NEVER")
assistant = AssistantAgent("assistant", model_client=model_client)
team = RoundRobinGroupChat([user, assistant], max_turns=2)
# 2. チャットを1ターンだけ進行
result = team.run("Count to 10.", max_turns=1) # 1ターンのみ
state = result.state
# 3. 状態(state)を保存
state.save_state("chat_state.json")
# 4. 別プロセスや別タイミングで、状態を復元して再開
from autogen_agentchat.teams import RoundRobinGroupChat
from autogen_agentchat.state import State
# エージェントやteamの初期化は同じ
team = RoundRobinGroupChat([user, assistant], max_turns=2)
# 保存済みstateをロード
loaded_state = State.load_state("chat_state.json")
# チャットを続行(前回の続きから)
result2 = team.run(state=loaded_state)
# 会話全体の履歴を表示
for msg in result2.state.messages:
print(f"[{msg.sender}] {msg.content}")
解説
- 状態の保存
state.save_state("ファイル名")で、現在のチャットの状態(履歴や各種プロパティ)をファイル(JSON形式など)にシリアライズして保存します。 - 状態の復元
State.load_state("ファイル名")で、保存しておいた状態をデシリアライズ(復元)します。
復元したstateをteam.run(state=復元したstate)のように引き渡すことで、前回終了時点から会話を継続できます。 - 応用例
- 長時間のチャットや対話型タスクで途中中断と再開を実現できる。
- 他サーバへのセッション引き継ぎや、エラー発生時のリカバリに利用可能。
- 会話ログとして全履歴や中間状態の保存・分析も容易になる。
注意点
- 状態ファイルの保存先(例: “chat_state.json”)や管理ポリシーは実運用要件に応じて調整してください。
- 再開時には、同じエージェント構成(user, assistant など)を再現する必要があります。
stateの保存・復元は、セッション単位で独立しており、複数セッションの並行管理にも適しています。
まとめ
save_state() と load_state() を用いることで、AutoGen AgentChatのセッション状態を安全かつ柔軟に管理でき、信頼性の高い対話システムやエンタープライズ向けの運用要件にも対応できます。
設計上も、この状態管理APIを活用することで、多様なチャット運用シナリオを効率よく実現できます。


コメント