こんにちは。 ユニファで開発をしている安田です。 この記事は Unifa Advent Calendar 2023 の23日目の記事です。
ChatGPTが2022年11月30日にOpenAIから発表され、2023年3月1日にChatGPTのapi提供開始の発表があり、最近ではGPT-4 Turboの部分的な公開もありました。
そんなChatGPTですが、個人的に開発プロセス上で便利だなと恩恵を感じることはあっても、何かがもやもやし、もっと広い一般社会でどういう課題を解決できるのか、 より厳密にいうと今自分の周りにいる人の課題をどうやって解決できるようになるのか、もしくは楽しませることができるのか、というのがすぐにイメージできていませんでした。 でも世の中の注目度をみるとこれは私がこれが何かを良く知らないからそう思うのだろうなと感じたので知ってみようと思い試しながら理由を理解しようとしました。
記事を読み終わった時に課題を解決したい人が『全ての機能を理解していないけど、実装していく流れはわかったので周りの人の課題をきいて解決出来るか実装してみようかな。』という気持ちになって、課題を感じている人が『全てを理解していないけど出来ることはなんとなく掴めた、困ってることがあるので身近な開発者に相談してみよう。』というようなコミュニケーションがしやすくなったらいいなと思います。それでは書いていきます!
ChatGPTの一般的な流れ
基本的にChatGPTは以下のような動きがメインな動きになっているようです
- 入力をChatGPT(モデル)に渡す
- それに対してChatGPT(モデル)が返事を返す
これを繰り返せる。
提供されているモデル群
https://platform.openai.com/docs/introduction
- 文章の生成能力をもつモデル
- 解釈し何を実行すべきかを提案することのできるモデル
- 文字列のベクトルへの変換能力のあるモデル(これによりコンピュータが処理できるようになります)
- より精度の高いモデルを作るための学習処理を実行能力のあるモデル
- 画像の生成能力をもつモデル
- 画像読み込み機能を持つモデル (
gpt-4-vision-preview
のこと) - 音声をテキストにおこせる能力をもつモデル
- テキストを音声におこせる能力をもつモデル
これらの情報を見るだけでもなんか凄そう感があります。 環境構築に関する情報やそれぞれのモデルの詳細は公式サイトをご確認いただければと思います。
模索したこと
自分の周りを思いかえしたら課題かも?と思っていたあるサービス内でやりたいことを入力すると、こういう風にできる(画像付きでstep表示される)、という返答が返ってくるようにできるのだろうか?と思ったので
例えば以下のようなイメージの機能です。 旅行サイト上で、 画像は
- 予約するページの画像
- トップページの画像
- ログインページの画像
- 新規会員登録の画像
- 退会ページの画像
- ユーザページの画像
テキスト配列で サービス機能としてのリストで
- 予約ページ
- ログインページ
- トップページ
- 新規会員登録ページ
- 退会ページ
- ユーザページ
を用意しておき、 「予約をしたい」をフォームに入力した場合に、 予約ページ の選択肢が返却され、補足情報として、
- 予約するページの画像
or
- トップページの画像 -> ログインページの画像 -> 予約するページの画像
のいづれかがユーザに対しては戻される。
テキストを入力してそれに対するモデルが返す返事が正しい?
画像のinputに対する並び替えがされるのか?
の2点が試した方がいいと思いました。
semantec kernel をSDKから使って試しました。 github.com
似たような(この記事を書いてる人は初心者なので専門家の人は違うと思うかもしれないですが、許してください)ライブラリにlangchainもあると思いますが、semantec kernelを選択した理由は、ある程度自分が書くであろう処理が連続になるんだろうなと思ったので明示的にステップを書いていきたいと思ったからでした。サンプルコードを見た時にplannerという概念が理解しやすかったのもあります。
モデルには gpt-3.5-turbo
を指定して試した結果は以下でした。
- テキストを入力してそれに対するモデルが返す返事が正しい?
-> ある程度正しい。プロンプト改善したらいけた。
例えば
野菜を買いたい
と入力されたら
選択肢としてモデルが知ってる情報が、
- 八百屋さんにいきましょう。
- ケーキ屋さんにいきましょう。
- おもちゃ屋さんにいきましょう。
だった場合は、
八百屋さんにいきましょう。
が戻ってきました。
- inputに対する画像の並び替えがされるのか?
-> これはvision apiを使ったらできるかもと思いますが、私はgpt-3.5で検証していたため実装は難しかったです。 じゃあ他に方法はあるのか?と思いついたのは
①azureのAzure AI Vision で画像に tagをつけてもらう
②そのtagを配列で戻すpromptを書きsemantic function作成
③tagに入った文字列を抜き出しinputに沿うように並び替えてください。とpromptに前提をしっかり与える
④その並び替えた順番を画像のindexに戻す。
⑤戻した順番で画像を戻す。
ここの部分は引き続き試そうと思います。
まとめ
勉強したら、ChatGPTは今まで実装するのには色々な知識が必要だった部分が抽象化されて扱いやすくなってると思ったのでもっと書いてみようと思いました。一つ一つのモデルだけで既に強力ですが、組み合わせて使うとさらにたくさんのことが出来ます。あとは会話のインターフェイスのイメージが強かったのですが、そうではないこともわかりました。さらにGPT4では入力できるフォーマットが増えますます実装していける範囲が広がっています!
今の段階では自分はpythonを選択して勉強していますが、C#読めるようにしようかなとも思うきっかけになりました。
どんどんユニファ内部の人は開発チームに連絡いただいたら小さいものから大きな課題/手間でもいいので実装していける部分もあると思うので声かけていただければと思います。
ユニファではChatGPTなどのテクノロジーを使って保育をハックしていく仲間を募集してます!