LangChainの公式ドキュメントを見ていると、毎日のように興味深い例題が掲載されていて、とても勉強になります。
今回は討論のファシリテーター役を模擬する、特権エージェントの実装の記事が面白そうだったので、要点をまとめてみました。まとめ役がいると、議論がすっきり流れますね。
リアルの会議でも、Whisperとかと組み合わせれば、会議の司会進行を自動化したり、世間一般の中立的な意見や専門知識をアドバイスする役としてエージェントを会議に参加させるのも面白いかも。
DirectorDialogueAgentクラス
DirectorDialogueAgentは、次に話すエージェントを選択して発言を誘導し、しかるタイミングで、討論会をしめるタイミングを決める、特権エージェントです。討論を進めるため、DirectorDialogueAgentは以下のステップを実行します。
(1) 前の発言者の発言内容を反映する
(2) 次の発言者を選ぶ
(3) 次のエージェントに話すよう促す、
これらを1回の発言ごとに行う必要がありますが、LLM のプロンプトのみで3ステップをまとめて指示する場合、エージェントをさまざまな方法で選択する方法を表現できるため、動作の信頼性が低くなります。その代替案として、ステップ毎にLLM 呼び出しを行い明示的に分割する方針としています。
また、いつ会話を終了するかをDirectorDialogueAgentに単純に促すだけでは、会話が深まる前に、すぐに終了してしまう場合もあるため、ベルヌーイ変数をランダムにサンプリングして、会話を終了するかどうかを決定しています。
実行例
討論テーマとキャラの設定
topic = "新しい運動競技のトレンド: 競技着席 - 怠け癖が次のフィットネス・ブームになった理由"
director_name = "ジョン・スチュワート"
agent_summaries = OrderedDict({
"ジョン・スチュワート": ("日曜曜討論ショーのホスト役", "Tokyo"),
"サマンサ・ビー": ("ハリウッド特派員", "Los Angeles"),
"山田太郎": ("日本政府の諜報員", "北京"),
"Ronny Chieng": ("Average American Correspondent", "Cleveland, Ohio"),
})
"competitive sitting"って意味がわからなかったので直訳してみました。エクストリーム着席がよかったかなぁ。😅
具体的な討論内容
それでは、討論開始!
おしまい。🫠