【動画あり】GPT-3.5(davinci-003)で宇宙人と会話してみた!
2023年になりました。新年明けましておめでとうございます。
さて、ちまたではChatGPTが大変話題になっていますね。矢継ぎ早にプロンプトが開発されたり、Zapierとの統合が発表されたり、アドオンが開発されたり、色々話題に聞き及んでいます。
ChatGPTの話に入る前に簡単に2022年を振り返ってみると、8月にStable diffusionが発表されてから怒涛の勢いでGenerative AIが進歩し、画像だけでなく、アニメ、3D、深度マップ、音楽、ゲーム、PowerPointなど様々なものが生成できるようになりました。高速化、省メモリ化も活発に行われました。
- アニメ :Deforum Diffuson
- 3D :Point-E
- 深度マップ :depth2img
- 音楽 :Riffusion
- ゲーム :Inworld AI(2021年7月創業)
- PowerPoint :tome
モデルのチューニング手法含めAI界隈では次々に新しい技術が発表され目まぐるしく変化する中、11月30日(米国時間)にOpenAIから対話型AIチャットボット「ChatGPT」がリリースされ、それは衝撃を持って迎えられました。
2022年も終わろうとする中、トレンドに付いていくのに必死で正直お腹いっぱいという気持ちなのですが……
どうやらChatGPTの精度は驚くほど高いということで実際に私も触ってみましたが、
その精度の高さには舌を巻くほどでした。工夫次第では私も仕事で活用するかもしれません。
ChatGPTの使い方や工夫の仕方などは他の方々が積極的に発信されているのでこの記事では言及しませんが、
せっかくなので個人的に特に面白いなぁと思った情報だけ記載させていただきます。
↑こちらのツイートではChatGPTのプロンプト検索サイトを3つ紹介されています。
↑@itosinitosin123さんのツイートはChatGPTではなくLangChain(LLMのツールキット)の洗練された使い方を紹介されています。
直接的なツイートではないですが、ChatGPTに関連する話題ということで取り上げさせてもらいました。
ChatGPTが公式のAPIを実装してくれれば、同じようなことができるかもしれませんね。
さて、前置きが長くなりましたが、本題です。
GPT-3.5(davinci-003)で宇宙人と会話してみた!
ChatGPTが発表される直前にGPT-3.5シリーズから"text-davinci-003"が発表されました。
GPTシリーズの情報を整理した資料は下記が参考になりますが、"text-davinci-003"を微調整したものがChatGPTであると考えられています。
宇宙人の実装にあたり、本当はChatGPTで実装したかったのですが公式のAPIがなく、アップデートによって非公式の疑似APIもことごとく使えなくなったため、代わりに"text-davinci-003"を使って実装しました。こちらはOpenAIのAPIから利用可能で、最初の3か月間は18ドル分の無料枠があります。
では、Self-PoCとして実装したものをYoutubeにアップしましたので、ぜひ御覧ください。
[Self-PoC]宇宙人と会話するデモ動画
実際は下記のように聞こえています。
補足
では、実装について簡単に補足していきます。
一番左のタブがColabのコードです。無料Colab(GPUあり)を使って実装しました。実行するとStreamlitとFastAPIのサーバーが立ち上がります。
真ん中がStreamlitの画面で、右のタブがFastAPIのSwagger UIです。
フロント側をStreamlitで、APIサーバー側をFastAPIで、というようにそれぞれサーバーを立ち上げてお互い通信し合うようなデモアプリになっています。
無料Colabのスペックではどうしても応答にラグが発生するので、動画は適宣カットして編集しております。
・画質が悪くて見づらいため、宇宙人"ダーウィン"との会話履歴を一部掲載いたします。
・PoCのためダーウィンの動画は同じものを使いまわしており、音声とアニメーションは一致しておりません。
MakeitTalk や Thin Plate Spline Motion を使って動画を生成したり、
wav2lip でリップシンクさせることも検討しましたが、
毎回動画の生成をしていてはさらにUXが悪くなるため今回は採用しませんでした。
・最後のやり取りで上記のようなエラーが出ております。
これは、コンテキスト窓をオーバーしている、というエラーです。
davinci-003 は会話の記録をある一定量しか保持できないため、最後のやり取りでオーバーしてしまいました。
文脈を踏まえて会話するためには過去の会話ログを毎度追記してリクエストを送る必要がありますが、それが上限をオーバーしてしまった、というわけです。
これは会話の記録を要約して圧縮したり、別メモリに退避させたり、必要に応じて会話をリセットしたりすることで対応するエラーになります。
・FastAPIのSwagger UIからAPIを叩くことができます。会話の記録はログとして残しており、
APIのGETメソッドでログを取得することが可能です。
実装の参考にした記事
具体的な実装内容は上記の記事をご参照ください。
同じようなことをされている方々
UnityやVRChatで開発されていたり様々ですね。私の実装は既にN番煎じです。
改善点
LangChainのカスタムLLMChainを使って、ユーザーの入力に応じて会話と検索をうまく振り分けることができれば、
davinci-003 で回答できない質問に対しても対応することができるかもしれません。(例えば、2022年以降のイベントを問う質問など)
感想
地球人と友好的な宇宙人と会話をするのは子供の頃からの夢だったので、AIによって実現できたのは嬉しかったです。
AdeptのACT-1、ChatGPT、LangChainのようなツールが続々登場しAIでできる幅が急速に広がる昨今の状況を顧みるに、いずれはロックマンエグゼに登場するようなネットナビ的なものが誕生してもおかしくないのかなぁと考えています。
AIアシスタントに手助けしてもらう未来は私の想像よりも遥かに早いスピードで到来するかもしれません。
Discussion