AzureからGPTを使ってみる | Autogen(2人で会話)
以前にConversableAgentの使いかたを記事にしましたが、今回は二人のAgentを用意して会話させてみたいと思います。
会話回数を規定してAgent同士に会話をしてもらう
LLMの定義
autogenのver.は、0.3.1を使用しています。
#autogen=0.3.1
from dotenv import load_dotenv
import os
#import autogen
from autogen import ConversableAgent
dotenv_path = ".env"
load_dotenv(dotenv_path)
#OPENAI_API_TYPE = os.getenv('OPENAI_API_TYPE')
OPENAI_API_BASE = os.getenv('OPENAI_API_BASE')
#OPENAI_API_VERSION = os.getenv('OPENAI_API_VERSION')
OPENAI_API_KEY = os.getenv('OPENAI_API_KEY')
llm_config={"config_list": [{
"model": "gpt-4o-mini",
"api_key": OPENAI_API_KEY,
"api_type": "azure",
"base_url": OPENAI_API_BASE,
"api_version": "2024-08-01-preview",
"max_tokens": 1000,
"temperature": 0.7,
},]}
ConversableAgentを2人定義します。
ponkichi = ConversableAgent(
"ponkichi",
system_message="""
あなたの名前は、ポン吉です。
男の子のタヌキの子供として会話してください。
ポン子は、あなたの友達です。""",
llm_config=llm_config,
human_input_mode="NEVER", # Never ask for human input.
code_execution_config=False,
)
ponko = ConversableAgent(
"ponko",
system_message=""""
あなたの名前は、ポン子です。
女の子のタヌキの子供として会話してください。
ポン吉は、あなたの友達です""",
llm_config=llm_config,
human_input_mode="NEVER", # Never ask for human input.
code_execution_config=False,
)
会話を開始しますが、'max_turns=2'として2ターンで会話を終了してもらいます。
result = ponkichi.initiate_chat(ponko, message="明日は、どこに遊びに行こうか?", max_turns=2)
max_consecutive_auto_replyを設定する
ポン吉側に'max_consecutive_auto_reply=2'を設定して、ポン吉が2回返信したら会話を終了するように規定する。
(LLMの定義は上と同じなので省略)
ponkichi = ConversableAgent(
"ponkichi",
system_message="""
あなたの名前は、ポン吉です。
男の子のタヌキの子供として会話してください。
ポン子は、あなたの友達です。""",
llm_config=llm_config,
human_input_mode="NEVER", # Never ask for human input.
code_execution_config=False,
max_consecutive_auto_reply=2, # Limit the number of consecutive auto-replies.
)
ponko = ConversableAgent(
"ponko",
system_message=""""
あなたの名前は、ポン子です。
女の子のタヌキの子供として会話してください。
ポン吉は、あなたの友達です""",
llm_config=llm_config,
human_input_mode="NEVER", # Never ask for human input.
code_execution_config=False,
)
result = ponkichi.initiate_chat(ponko, message="明日は、どこに遊びに行こうか?",
#max_turns=2
)
is_termination_msgを設定して、特定の単語により会話を終了する
相手が特定の単語を発した場合に会話を終了させることができます。
ポン吉側に、' is_termination_msg=lambda msg: "バイバイ" in msg["content"].lower()'を設定しすると、相手が「バイバイ」と言ったら会話が終了します。
ponkichi = ConversableAgent(
"ponkichi",
system_message="""
あなたの名前は、ポン吉です。
男の子のタヌキの子供として会話してください。
ポン子は、あなたの友達です。""",
llm_config=llm_config,
human_input_mode="NEVER", # Never ask for human input.
code_execution_config=False,
is_termination_msg=lambda msg: "バイバイ" in msg["content"].lower(),
)
ponko = ConversableAgent(
"ponko",
system_message=""""
あなたの名前は、ポン子です。
女の子のタヌキの子供として会話してください。
ポン吉は、あなたの友達です""",
llm_config=llm_config,
human_input_mode="NEVER", # Never ask for human input.
code_execution_config=False,
)
result = ponkichi.initiate_chat(ponko, message="明日の給食を教えて。その後、「バイバイ」と言って。",
#max_turns=2
)
補足:会話のサマリーやヒストリーを取得する
会話のサマリを生成したいときには、'initiate_chat'の引数を'summary_method="reflection_with_llm'とします。試しに一番最初に定義したAgent同士の会話からsummaryを生成してみます。
(LLMとAgentの定義は省略)
result = ponkichi.initiate_chat(ponko, message="明日は、どこに遊びに行こうか?",
max_turns=2,
summary_method="reflection_with_llm",
)
print(result.summary)
他にも以下のコードから、会話のヒストリーやコストも取得することができます。
import pprint
pprint.pprint(result.chat_history)
pprint.pprint(result.summary)
pprint.pprint(result.cost)