Microsoft autogen, ローカルLLMでAI同士を会話させる
初めに
AIが勝手に判断してタスクをこなしてくれると嬉しいです(GPTAutoに期待を込めて)。そんな大それた事でなくてもAI同士の会話を見て参考にするのも良いでしょう。というわけで、今回はautogenというMicrosoft提供のライブラリを使ってローカルLLM同士を会話させてみました。
会話だけでなく、Pythonコードのコーディング、デバックなどをさせたり、チェスなどのゲームをさせたりと色々できますが、今回は単純な会話です。
結論
期待して読み進めるとガッカリするので最初に結論を書いておきます。
そもそもGPT-4APIを前提としているライブラリなのでローカルLLMでは精度が悪い。
英語ならばまだマシであるが日本語では使えたものではない。
精度の問題か不明だが会話が進むと崩壊する。
githubのディスカッションでも不具合を報告している人がそれなりに多く、どうやらライブラリ自体の問題の可能性もある。
まだまだ発展途上なので実験的である事を念頭に入れる必要がある。
ざっくりとしたやり方
事細かな方法は公式サイトを見た方がいいです。なぜならアップデートが激しく調べても古い方法で説明されていたりと混乱するからです。
ローカルサーバー
OpenAI OAPIと相互性のあるローカルサーバーを作れればなんでもいいです。私はllama cpp pythonを使いました。
LLMモデル
マシンスペックに合わせて選びます。モデルによっては何も出力しない場合があるので、色々と試してみた方がいいです。ELYZA-japanese-Llama-2-13b-fast-instruct-q6_K.ggufを私は使いました。日本語チューニングモデルです。
コード
user_proxy.initiate_chatで渡すmessageが開始のプロンプトとなるようです。ChatGPTでいう一番最初に入力するメッセージです。
autogen.AssistantAgentで渡すsystem_messageはキャラクター付けです。キャラクターを維持できるかは元のLLMモデルの精度次第です。
llm_configで何が渡せて何が渡せないのか不明です。max_tokensは可能でしたがtop_kなどは無理でした。そもそもOpenAI OAPIでも渡せない?
import autogen
api_keys = ["sk-********************"]
base_urls = ["http://localhost:8000/v1"] # 必要に応じて、API ベース URL を指定できます。 例: ローカルホスト:8000
api_type = 'openai' # API のタイプ (例: 'openai'または'aoai')。
api_version = 3.1 # 必要に応じて API バージョンを指定します。
config_list = autogen.get_config_list(
api_keys,
base_urls=base_urls,
#api_type=api_type, ←なぜか受け付けないのでコメントアウト
api_version=api_version,
)
# print(config_list) 確かめる用プリント
llm_config= {"config_list": config_list, "cache_seed": 40, "temperature": 0.5}
user_proxy = autogen.UserProxyAgent(
name="Admin", # デフォルトで渡される名前がAdminなのでここを変えると引数で渡す必要が出てきてめんどくさい。
system_message="次期アメリカ大統領が共和党か民主党かについて議論したいと思います。",
human_input_mode="TERMINATE", # この値を変えると人間が解答するタイミングが選べる。
)
hiroyuki = autogen.AssistantAgent(
name="バイデン",
system_message="あなたはアメリカの民主党支持者になり議論に参加します。共和党支持者の意見に反論し、民主党の良い点を述べてください。80文字で解答してください。",
llm_config=llm_config,
)
narita = autogen.AssistantAgent(
name="トランプ",
system_message="あなたはアメリカの共和党員になり議論に参加します。民主党支持者の意見に反論し、共和党の良い点を述べてください。80文字で解答してください。",
llm_config=llm_config,
)
groupchat = autogen.GroupChat(agents=[user_proxy, hiroyuki, narita], messages=[], max_round=12, speaker_selection_method="round_robin",)
manager = autogen.GroupChatManager(groupchat=groupchat, llm_config=llm_config)
# print(llm_config) 確かめる用プリント
user_proxy.initiate_chat(manager, message="回答に制限はありません。次のアメリカ大統領選挙では共和党と民主党のどちらに投票するべきでしょうかで議論を展開してください。箇条書きは使用しない事。同じ事を繰り返さない。あなたの意見を80字で述べて相手に質問してください。")
AI同士のやり取り全文
全く同じような内容の事を繰り返す。しかしよく見ればちょっと違う箇所もある。と言った感じです。英語で聞いた方がもう少しマトモでした。やはりモデルの精度の問題かと思いますがどうでしょうか?
この記事が気に入ったらサポートをしてみませんか?