5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ChatGPT新機能"Assistants API"のRetrieval機能をpythonで試してみる

Last updated at Posted at 2023-11-11

はじめに

2023年11月7日OpenAIから数々のアップデートが発表されました。

そのアップデートの一つであるAssistants APIは、APIを利用することにより独自のアプリケーション内でAIアシスタントを構築できます。

Assistants APIは、

  • Code Interpreter(コードインタープリター)
  • Retrieval(あらかじめアップロードしたデータを元に検索して応答する機能)
  • Function Calling

の3つの機能を提供しており、それぞれの機能を使用して回答を得ることができます。

Assistants APIはまだベータ版ですが、 Playgroundで試してみることができます。

アシスタントAPIを使用すると、自分のプログラムとAIアシスタントを連携することができます。

この記事では、Playgroundで作成したAIアシスタントを、pythonで呼び出して、Retrievalの機能を実行するサンプルコードについて説明します。

サンプルコードはこちら(Google Colab)
https://colab.research.google.com/drive/16XvzZXHlU1aO8GZHGbvGCpi08MR150Pz?usp=sharing

PlaygroundでAIアシスタントを作成する

Playgroundにログインします。
https://platform.openai.com/
Gooleアカウントでもログインできます。

左のメニューのPlaygroundを選択します。
スクリーンショット 2023-11-11 19.54.56.png

Assistantsを選択します。
スクリーンショット 2023-11-11 19.55.21.png

+Create assistantをクリックします
スクリーンショット 2023-11-11 19.46.56.png

こんな感じで設定していきます。
スクリーンショット 2023-11-11 19.49.39.png

Modelで選択できるモデルは下記の通りです。
アップロードしたファイルに基づいてアシスタントに回答して欲しい場合は
gpt-4-1106-preview か gpt-3.5-turbo-1106 を選択する必要があります。
そのほかのモデルではダメでした。
スクリーンショット 2023-11-11 19.45.02.png

コードの処理の概要

シーケンス図

文章で説明するのは伝わりにくいと思い、シーケンス図で表現してみました。
スクリーンショット 2023-11-11 18.48.28.png

ざっくり説明

ざっくりとした手順として

  • アシスタントに問い合わせするため質問文のスレッドと、そのスレッドにぶら下がるメッセージを作成する
  • メッセージにぶら下がるアノテーション"annotation"(引用)を作成
  • 作成した質問文のスレッドを、事前に用意したアシスタントに送る
  • アシスタントが回答を生成し終わったかどうかを、一定間隔(このコードでは0.5秒おき)で確認する
  • アシスタントが回答を生成し終わると、回答が返ってくる

注意として、アシスタントに質問文を送ったら、アシスタントが回答の生成を終えたかどうかを、自分で確認する必要があることです。
ここの処理は wait_for_run_completion() で行ってます。
OpenAIによると、この辺の仕様も近いうちにアップデートして、もっとスマートな仕様になるとのことです。
なので、このコードで説明しているやり方は、暫定的なものと考えていただければ幸い。

my_assistant_id = Playgroundで作成したアシスタントのIDを指定します。
アシスタントIDはPlaygroundの左メニューでAssitantsを選ぶと、作成したAIアシスタントの一覧が表示されます。
その一覧の中のIDの項目がアシスタントのIDとなります。

スクリーンショット 2023-11-11 20.46.30.png

考察

コードについて

OpenAIのサンプルのコードはAPIでアシスタントを作成する方法を説明していたのですが、Playgroundで作成したアシスタントを呼び出すサンプルがなかったので、ちょっと試行錯誤で云々してました。

スレッドには複数のメッセージを入れることができます。
アシスタントへの質問文を複数のメッセージに分けて送ることもできます。
このコードでは、最初のメッセージのみアシスタントに送るようにしています。
複数のメッセージには対応しておりませんので、ご了承ください。

アシスタントが回答を生成し終わったかどうかを、自分で一定間隔で確認しなくてはいけない仕様は、不便ですね。
もっとスマートなコードがあるかと思いますが、ここは勘弁してください。
OpenAIもここは改善していきたいと、ドキュメントにあったので、今後のアップデートに期待です。

コストについて

気になるAssistants APIの費用は
1つのアシスタントに対して1日0.20ドル
→1ドル150円なら1日30円、1ヶ月で900円

アシスタントに対してエンドユーザーが何回呼び出しても、料金は変わりません。

ただ、GPTsのようにたくさん作って放置してしまうと、請求が結構なものになりますので、要注意です。
OpenAIの費用に関する資料

(2023.11.15追記)
上記のコストはRetrieval機能だけのコストでした。
エンドユーザーが呼び出せば呼び出すほと、コストがかかります。
また、Assistants APIで導入された「スレッド」という概念が、結構ヤバめ。

おわりに

GPTsで簡単に独自のチャットボットを作成して、ChatGPT Plusに課金している方にはシェアできるようになりました。

とはいえ、ChatGPTの日本人の普及率を考えると、ほんの一部の方のみGPTsの恩恵に与れない気がします。
もしかしたらOpenAIは、この機能をキラーとして、ChatGPT Plusを普及させる戦略なのかな?
個人的には懐疑的ですが、CEOのサム・アルトマンさんはもっと上をいくことを考えているかもしれません。
GPTsのチャットボットを公開して収益化が図れるようになるプラットホーム"GTP Store"の発表を待つしかないですね。
→2023年11月末にはリリースの予定です。

ChatGPT Plusを月30ドル払ってまで課金することを躊躇しているユーザー層に対して、Assistants APIをLINEに連携させて、ChatGPTの機能を多くの人に身近に感じてもらうのはアリと個人的には考えてます。

日本のLINE普及率80%以上は、群を抜いています。しかも若年層から高齢者層まで幅広い世代に普及しているので、プラットホームとして活用しない手はないです。

PythonでAssistants APIとLINE Messaging APIを連携させましたので、近いうちにコードと資料をシェアします。

ここまでご精読いただき、ありがとうございました。

参考資料

OpenAI Assistants APIのドキュメント
https://platform.openai.com/docs/assistants/overview

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?