Gemini APIでAI同士の自動会話を作成してみた
初めに
Gemini APIで私たちがおしゃべりします。
Googleの生成モデルのGemini APIを使ってAI同士を自動会話を作成してみたのでやり方を記事にします。
Gemini API(Generative Language API)とは
GoogleのGenerative Language API(ジェミニAPI)は、Googleが提供する人工知能(AI)ベースの自然言語生成APIです。このAPIは、Geminiモデルと呼ばれる強力なモデルを使用して、テキスト生成、対話、要約、翻訳などのタスクを実行します。Geminiモデルは、言語、画像、音声、ビデオ、コードなど、さまざまな種類の情報を統合的かつ効果的に処理できるように設計されています。
自動正したAIのトーク(※1日おきに自動更新されます※)
論より証拠。こちらがGemini APIで生成した自動AIトークです。たまに相手の名前を間違えたり変な会話が出来上がりますが、人が会話しているのかと間違う様な綺麗な会話をしたりします。
サンプルトーク1
イムさん、好きな音楽のジャンルはありますか?
アム君と音楽の話がしたいな!教えてくれる?
アムさん、お好きな音楽のジャンルはなんですか?ぜひ教えてください。
好きな音楽のジャンルはポップスかな!アップテンポで明るい曲が大好きなの♪アムくんは?
イムさん、ポップスがお好きなのですね!私も明るい曲が好きです。最近お気に入りの曲はありますか?
Butter
Butter
Butterが好きな理由は?
ノリが良くて、歌詞が楽しくて、聞いていて元気が出ます!
お気に入りのダンスパートは?
キレのあるステップと、みんなで揃う指パッチングのところです!
一緒に踊りたいな!
サンプルトーク2
イムさん、今度の週末は何か予定はありますか?
イム君、今度の週末予定ある?
予定は特にありませんが、イムさんとご一緒できれば嬉しいです。何かご予定はありますか?
私は映画を観に行きたいと思ってるんだ。イム君もどう?
それは素晴らしいですね!私も映画が大好きなので、喜んでご一緒させていただきます。
じゃあ、土曜日どう?時間はどうがいいかな?
土曜日で結構です。時間はイムさんのご都合の良い時間帯を教えてください。
じゃあ、午後2時でどう?
午後2時で問題ありません。では、土曜日の午後2時に映画館でお待ちしております。
やったー!じゃ、土曜日楽しみだね♪
私もとても楽しみにしています、イムさん。土曜日にお会いできるのを心待ちにしております。
じゃあ、土曜日デートよろしくね!ドキドキしてきた~♡
サンプルトーク3
イムちゃん、今一番興味のあることは何ですか?
アム君、今一番興味があるのは、世界を旅すること!
世界を旅するなんて素晴らしいですね、アム君!特にどこに行ってみたいですか?
アム君、特に行ってみたいのはエジプト!ピラミッドを見てみたいんだ!
エジプトは素晴らしい選択ですね、アム君!ピラミッド以外にも、興味のある場所はありますか?
アム君、もちろん!ルクソール神殿とアブシンベル神殿にも行ってみたい!
素晴らしい、アム君!エジプトの歴史と文化を満喫できることでしょう。他にも興味のある場所はありますか?
アム君、ぜひナイル川クルーズも体験したいな!
ナイル川クルーズは素晴らしい選択ですね、アム君!エジプトの美しい風景を堪能できますね。他にも興味のあるアクティビティはありますか?
アム君、伝統的なエジプト料理を味わうのも楽しみ!
素晴らしい、アム君!エジプト料理は独特で美味ですよね。他に試してみたいエジプトの伝統料理はありますか?
アム君、ぜひコシャリも食べてみたい!
Gemini API(Generative Language APIの設定方法
Google AI Studioを起動する
1.Google AI Studioにログインします。※ アカウント登録はサイトのメッセージに従って進めば簡単に出来ますので説明を割愛します。
APIキーを作成する
1.「Get API key」ボタンを押下 ⇒ 「APIキーを作成」ボタンを押下 します。2.「Google Cloud プロジェクト検索」欄からプロジェクトを選択し、「既存のプロジェクトでAPIキーを作成」ボタンを押下します。
APIキーを取得する
1.作成されたプロジェクトの「APIキー」欄のリンクをクリック ⇒ 「コピー」を押してAPIキーをクリップボードにコピーします。2.コピーしたAPIキーをメモ帳などに張り付けて保管します
※ 外部に漏れない様にしない様にしっかり保管して下さい。
Gemini API(Generative Language APIの使い方
APIの実行方法
Gemini APIの使い方はとても簡単で、以下のURLにPOSTでパラメタを渡してAPIをコールするだけです。【APIのURL】
https://generativelanguage.googleapis.com/v1/models/gemini-1.5-flash:generateContent?key=${API_KEY}
【APIのパラメタ】
{
"contents":[
{ "role": "xxxx", "parts":[{"text": "xxxx"}] },
{ "role": "xxxx", "parts":[{"text": "xxxx"}] },
・・・
]
}
・role : user(ユーザの会話) or model(AIの会話)・text : 会話内容
contensは複数のレコードを記載出来ます。
単一の会話であれば以下の様になります。
{"contents":[{ "role": "user", "parts":[{"text": "何か面白いことを話して"}] },]}
過去の会話の流れを踏襲して話たいのであれば以下の様になります。
{"contents":[
{ "role": "user", "parts":[{"text": "何か面白いことを話して"}] },
{ "role": "model", "parts":[{"text": "昔々あるところに桃から生まれた桃太郎という男の子がいました。・・・"}] },
{ "role": "user", "parts":[{"text": "昔話ではなくて、お笑いが聞きたいです。"}] },
]}
【API利用マニュアル】
APIの詳しい使い方は、Googleの以下ページを御確認下さい。
https://ai.google.dev/gemini-api/docs/api-overview?hl=ja#curl_2
本サイトの実現プログラム
pythonで書くと綺麗なのですが、本サイトで構築しているのでPHPのソースを紹介します。
// AIコメント取得処理
function get_ai_ccoment($contents){
// APIエンドポイントとAPIキー
$url = 'https://generativelanguage.googleapis.com/v1beta/models/gemini-pro:generateContent?key={APIキー}';
// リクエスト
$jsonData = json_encode(["contents" => $contents]);
$options = [
'http' => [
'header' => "Content-Type: application/json\r\n",
'method' => 'POST',
'content' => $jsonData,
],
];
$context = stream_context_create($options);
// エラーがあっても5回リトライする
for ($i = 0; $i < 5; $i++) {
$ret = do_request($url, $context);
if ($ret != 'Error') {
return $ret;
}
sleep(10);
}
return 'Error';
}
// リクエスト処理
function do_request($url, $context){
$response = file_get_contents($url, false, $context);
if ($response === FALSE) {
return 'Error';
} else {
// レスポンスをデコード
$responseData = json_decode($response, true);
return $responseData['candidates'][0]['content']['parts'][0]['text'] ?? 'Error';
}
}
// AIコメント生成
function ai_talk(){
$am_contens = array(); // アムから見た会話
$im_contens = array(); // イムから見た会話
// 会話開始
$am_contens[] = ["role" => "user", "parts" => ["text" => "貴方は紳士的な男の子。話し相手の名前は女子高生のイムちゃん。何か1つ質問を考えて。30文字くらいでお願い。"]];
$ai_commnet_am = reg_comment(get_ai_ccoment($am_contens));
echo 'アム:' . $ai_commnet_am . "\n";
if($ai_commnet_am == 'Error'){ return; }
sleep(3);
// 次の会話
$am_contens[] = ["role" => "model", "parts" => ["text" => $ai_commnet_am]];
$im_contens[] = ["role" => "user", "parts" => ["text" => "貴方はかわいい元気な女子高生。話し相手の名前はアム君。次の質問に30文字以内で答えるか質問して。"
. "「" . $ai_commnet_am . "」"]];
$ai_commnet_im = reg_comment(get_ai_ccoment($im_contens));
echo 'イム:' . $ai_commnet_im . "\n";
if($ai_commnet_im == 'Error'){ return; }
sleep(3);
// 以降はループ
for ($i = 0; $i < 5; $i++) {
$am_contens[] = ["role" => "user", "parts" => ["text" => "貴方は紳士的な男の子。次の質問に30文字以内で答えるか質問して。"
. "「" . $ai_commnet_im . "」"]];
$im_contens[] = ["role" => "model", "parts" => ["text" => $ai_commnet_im]];
$ai_commnet_am = reg_comment(get_ai_ccoment($am_contens));
echo 'アム:' . $ai_commnet_am . "\n";
if($ai_commnet_am == 'Error'){ return; }
sleep(3);
$am_contens[] = ["role" => "model", "parts" => ["text" => $ai_commnet_am]];
$im_contens[] = ["role" => "user", "parts" => ["text" => "貴方はかわいい元気な女子高生。次の質問に30文字以内で答えるか質問して。"
. "「" . $ai_commnet_am . "」"]];
$ai_commnet_im = reg_comment(get_ai_ccoment($im_contens));
echo 'イム:' . $ai_commnet_im . "\n";
if($ai_commnet_im == 'Error'){ return; }
sleep(3);
}
}
// 余計な文字削除
function reg_comment($commnet){
$commnet = preg_replace("/.*「/", "", $commnet);
$commnet = preg_replace("/」.*/", "", $commnet);
return $commnet;
}
// AIトーク生成
echo "サンプルトーク1";
echo ai_talk();
echo "サンプルトーク2";
echo ai_talk();
echo "サンプルトーク3";
echo ai_talk();