ついに来た!Open AI 大型アプデ 今度のGPT-4は3倍速いぞ
おはようございます。緊急で記事を書いています。横須賀市生成AI推進チームのM田です。
日本時間の今日未明に、Open AI社のイベントがあり、様々な新機軸が発表されました!
細かな内容はもっと詳しい人たちが沢山書くでしょうから、私はざっくり紹介&今回発表された「GPT-4-turbo」を試してみようと思います。
GPT-4-turboとは?
「GPT-4-turbo」含め、今回の発表の詳細が、Open AI社のページで紹介されています。
まずは、このページの記述を翻訳しながら読んでみましょう。
GPT-4-turboの概要
一言で言えば、安くて高性能になった!ということですね。
知識のアップデートもうれしいです。ハルシネーションの可能性(嘘をつく可能性)は否定できませんが、一般常識ぐらいは聞いてもいいかも…という気にさせられますね。
Function callingのアップデート
GPT-4から出力したデータを元に、外部のサービスを使う際に重宝するFunction calling(関数呼び出し)もアップデートしました。複数の関数が呼べるようになったほか、呼び出しの精度も上がったようですね。
指定した形式での出力の強化
形式を指定して出力する場合の精度も上がったようです。例えば、「XMLで出力して!」と言うと、従来のモデルよりも言うことを聞いてくれるようです。
さらに、出力をJSON形式に限定するJSONモードもサポートしたみたいです!APIを呼び出す際に、パラメータ「response_format」を指定すると使えるみたいですね。これは後で試してみましょう。
再現性のある出力
これまで、GPT-4から出力される結果は完全に確率的なので、どういう入力をすると出力がこうなる、というのはランダムに近い状態でした。
API呼び出し時に、新たなパラメータ「seed」を与えることで、再現性のある出力(同じseed値なら同じ出力になる)ができるようになったようです。画像生成AIだとお馴染みのパラメータですね。
一般ユーザーが意識して使う場面はあまりパッと思い浮かびませんが、実験をする時は捗りそうですね。
GPT-3.5-turboもアップデート
同時にGPT-3.5-turboもアップデートされたようです。入力の枠(コンテキストウィンドウ)が16000トークンに広がったほか、先ほど紹介したFunction Callingの複数呼び出しや出力形式指定なども追加されたようです。
アシスタントAPI、検索、コードインタープリタ
さらに「Assistant API」が追加されました。
なんか、凄そう…。うっかり小学生並みの感想になってしまいました。
要は生成したものが単純に返ってくるAPIではなく、人間にとってのアシスタントとなるAIを作りやすいAPIということのようですね。
これまでWeb版のChatGPT Plusで提供されていたコードインタプリタ等の機能のほか、やりとりした内容をスレッドと呼ばれる会話枠ごとに継続的に記憶してくれる機構があるみたいですね。
これまでそういうことを実現しようとすると、自前でデータベースや記憶機構を構築する必要がありましたが、それがOpen AI側のAPIに任せられるということですね。これを使ったサービスがうじゃうじゃ出てきそうですね。
実際、秘書的なチャットボットは欲しいですよね…。自分とのこれまでのやりとりをふまえて会話してくれて、スケジュールを管理してくれて、時々アドバイスもくれて…。うん、欲しい…。
また、地方自治体としては、この記録されているデータがどういう扱いになるか等、心配する事柄がありそうです。(そういえば地方自治体だった)
さらにGPT-4-turbo with VisonやDALL-e 3も!
もう既にお腹いっぱいですが、さらに
画像でのやりとりも可能なGPT-4-turbo with VisonのAPI
OpenAIの画像生成AI最新モデル DALL-e 3のAPI
なども発表されました。
ざっくり紹介のつもりが、このままだと紹介するだけで記事が終わってしまいそうなので、紹介はこのあたりにして、そろそろ手を動かしてみようと思います。
試すか、GPT-4-turbo
では、早速「GPT-4-turbo」を試してみましょう。
いつものようにGoogle colabを使って、以下のコードで試してみます。
from openai import OpenAI
import time
client = OpenAI(
api_key = "(Your API Key)",
)
def kiku(text,model):
start_time = time.time()
r = client.chat.completions.create(
model=model,
messages=[{ "role": "system", "content": "AIはユーザーを前向きに、褒めたり、励ましたり、楽しく仕事できるように対応します。"},
{ "role": "system", "content": "AIは建設的、知的で、ユーモアに富みます。" },
{ "role": "system", "content": "AIは足りない情報、あいまいな情報があれば、積極的に質問をします。" },
{ "role": "system", "content": "AIは建設的に、ユーザーのアイデアがよりよくなるよう、様々なアイデアや提案も行います。" },
{ "role": "system", "content": "行政職員としてふさわしい、倫理規範や発信コードを心がけます。" },
{"role": "user", "content": text}],
)
end_time = time.time()
elapsed_time = end_time - start_time
print(f'処理にかかった時間: {elapsed_time}秒')
print(r.choices[0].message.content)
質問1:「ツイッター社を買収したのは誰?」
2022年10月27日、イーロン・マスク氏がツイッター社の買収を完了しました。2023年4月時点の情報が入っているなら、この情報が出てくるはずです。
まずは2021年時点とされる、従来のGPT-4から…
次にGPT-4-turboです。
おお、ちゃんと出てきました。さらに、従来のGPT-4より倍以上の文字が出力されていますが、処理時間が短くなっています。
質問2:「世界の人口は?」
また月並みですが、さらに時点の違いが分かりやすい質問をしてみましょう。まずはGPT-4…
システムプロンプト(「AIはユーザーを前向きに、褒めたり、励ましたり、楽しく仕事できるように対応します」)が効いてますね笑
続いて、GPT-4-turboです。
早い!量も倍以上なのに、半分しか時間がかかっていません。3~4倍ぐらい速くなってますね。また、ちゃんと「2023年時点での~」と出てくるので、やはり内容が最新化されていますね。
先ほどご紹介したとおり、検索機能が追加されているので「検索しましょうか?」と出てしまっています。文章生成する単機能のAPI利用だけでは検索は出来ないので、使う人が困惑するかもしれませんね。
質問3:会話文を出力してみる
最後に、少し長文を出力してみましょう。
先日公開した記事にある、消防署のプロンプトを使ってみましょう。
###命令書
以下の制約条件と入力文をもとに3人の登場人物の[会話]を出力してください。
入力文をあますことなく詳細に表現し、[会話]を出力してください。
###制約条件
・文字数は5000文程度。
・登場人物は、レオ、ユキ、アキ。
・レオは、明るく、人気者でリーダーシップを持つ男性。
・レオは、セリフに「なんだけどな〜」「さ、一緒に考えようぜ!」をときどき用いる。
・レオは、他の2人を「ユキ」「アキ」と呼ぶ。
・ユキは、無口でクール。内心は繊細だが、周囲には滅多に見せない女性。
・ユキは、セリフに「それはあなたが言うこと?」「もう、無理...想像したくない」「でも、どうしましょう…」をときどき用いる。
・ユキは、他の2人を「レオ君」「アキさん」と呼ぶ。
・アキは、あまり前へ出ることがなく、温和で優しく、知識豊富な男性。
・アキは、セリフに「それは、大切ですね。」「あのね、こういうことなんだよ。」をときどき用いる。
・アキは、他の2人を「レオ兄さん」「ユキさん」と呼ぶ。
###入力文
雑居ビルの3階のエレベーターホールから火事が発生し、有毒ガスも発生していた。
火は3階から4階へと広がり、煙が店内へ流れ込んだ結果、店員や客が一酸化炭素中毒で死亡した。
その混乱の最中、3階の従業員3人が窓から落ちて骨折や打撲傷を負った。
法律では消防設備の設置が義務化されていたが、それが守られていなかった。
まずはGPT-4…
続いて、GPT-4-turboです。
従来のGPT-4でかなり高精度なので、文章生成の精度の差はよくわかりませんね。恐らくそのうちベンチマークを誰かがしてくれると思いますが、一般ユーザーとして感じられる差異は恐らくあまりないと思います。
一方、処理にかかった時間は3分の1になっています。GPT-4を使う時の一番のストレスは生成にかかる時間だったと思うので、かなり大きいです。
ちなみにこれを、新機能でJSON形式に出力するとどうなるのでしょうか。試してみましょう。
{
"会話": [
{
"レオ": "みんな、大ニュースだぜ。雑居ビルで火事があって、マジでヤバイことになってるんだけどな〜。"
},
{
"ユキ": "なんてこと…。人が亡くなっちゃってるんですよね? それはあなたが言うこと?"
},
{
"アキ": "ええ、それは、大切ですね。被害者のことを考えないと。"
},
{
"レオ": "うん、そうなんだよ。煙が店内に流れ込んで、一酸化炭素中毒で死亡者が出ちゃってるんだ…。"
},
{
"ユキ": "それ聞いただけで…もう、無理...想像したくない。でも、どうしましょう…私たちに何ができるの?"
},
{
"アキ": "あのね、こういうときはね、まず情報を正確に知ることなんだよ。火の原因とか、状況とか、ね。"
},
{
"レオ": "そうだね、さ、一緒に考えようぜ! でも、ちょっと待って、まだ聞いてない情報があるぜ。3階の従業員が窓から落ちて、重傷を負ったらしいんだ。"
},
{
"アキ": "うわぁ、それも大変だ。でも、どうして窓から落ちたんだろうね。"
},
{
"レオ": "それこそ、エレベーターホールから火が出て、逃げ道がなかったんだとさ。"
},
{
"ユキ": "想像したくないわ…。逃げ場がなくて窓からしか…。"
},
{
"アキ": "ああ、でもね、そこで重要なのは、法律で消防設備の設置が義務化されてるってことなんだよ。消防設備があれば、もっと被害を避けられたかもしれないね。"
},
{
"レオ": "そうそう、それなんだよ。それが守られていなかったっていうんだから、信じられないよな。"
},
{
"ユキ": "設置してなかったなんて、許せない。責任を取るべきですよね、レオ君。"
},
{
"レオ": "ああ、もちろんだよユキ。これは、ただの事故じゃ済まされない。責任追及が必要だぜ。"
},
{
"アキ": "そうだね、レオ兄さん。でも、まずは怪我をした人たちの支援が先決かな。"
},
{
"レオ": "おっしゃる通り! 助けが必要な人がいるなら、できることからやるべきだよな。ユキ、アキ、この状況で俺たちに何ができると思う?"
},
{
"ユキ": "発生してしまった事故に対して私たちができることは限られてるけど…募金活動や、非難する声を上げることくらいかしら。"
},
{
"アキ": "そうだね、ユキさん。そして、これからこんな悲劇が再発しないように、防災意識を高める活動も大切だね。"
},
{
"レオ": "バッチリだね! 素晴らしいアイデアだ。みんなで力を合わせて行動しようぜ。"
}
]
}
おお、ちゃんとJSONしてますね。処理にかかった時間は21.2秒だったので、通常の文章生成よりは時間がかかるようです。
まとめ
緊急で書いたにしては、えらく長い記事になってしまいました。
今回はOpenAI社から発表された内容をざっくりご紹介して、新モデル「GPT-4-turbo」を早速試してみました。
試してみた結果、情報が新しくなっていることと、やはり生成時間がかなり早くなっていると感じます。早いということは、処理にかかる負荷が軽減されている=コストが下がるということなので、利用料金が安くなるのも頷けます。
JSON形式への出力も、パラメータを追加するだけなので相当手軽にできますし、非構造データを解析して構造的なデータ(JSONフォーマット)に整形する用途とかで使えるかも、と個人的に思いました。
まだ発表されたばかりですので、この後も色々試してみようと思います。
それではまた。
(M田主任三郎)
今回のお試しで使ったコードは以下にあります。(Google colab)
また、過去の記事はこちらからどうぞ!