OpenAI Assistants apiとは?使い方や料金、Retrieval機能について紹介!

第1章 「Assistants API」の概要

1-1 「Assistant API」とは

Assistants APIとは、OpenAIによって提供されているCode InterpreterやRetrievalなどの機能を利用できるAPIです。

こちらが指示したタスクに合わせて使用するツールをAssistants API側が自動で切り替えてくれる点が大きな強みです。

LangChainのAgents機能と似ていますが、使用できるツールが異なる点処理速度がAssistants APiの方が早い点などで異なります。

1-2 「Assistants API」にできること

Assistants APIは次の3つの機能を使い分けることが可能です。

Code Interpreter必要に応じてコードを自動で生成してくれる機能です。自然言語(日本語など)での指示を入力するだけでコードを生成してくれるほか、Pythonの実行結果をグラフなどの形でチャット画面に表示することもできます。

Code Interpreterについて詳しくはこちら

Retrievalエンコーディングなどの作業なしで、外部の情報を入れられる機能です。PDFなどのファイルをそのままアップロードできるので、情報の入力に手間がかからなくなります。

(※エンコード:データを一定の規則に従って変換すること

Function callingプロンプトに応じて関数を手軽に呼び出せる機能です。「明日の天気は?」といった質問に対し、位置情報を取得する外部APIなどを呼び、「明日は晴れです」のように返してくれます。

Assistants APIは上記の機能を使い分けながら指示したタスクをこなしてくれます。

第2章 「Assistant API」の使い方

Assistants APIには主に2つの使用方法があります。

①OpenAIが提供する動作確認環境である「Assistants Playground」上で使用

②Pythonでの使用

それぞれについて説明していきます。

2-1 Assistants playground

Assistants APIのお試し使用環境としてAssistantsプレイグラウンド(テスト実行環境)もOpenAIより用意されています(サインインが必要です)。

プレイグラウンドはこちらから利用できます。

Playgroundの基本画面

画像出典:Assistants Playground

このプレイグラウンドは、Assistants APIの機能を調べたり、コードを書かずに独自のアシスタントを構築する方法を学んだりするのに最適です

Assistantsを作成

Create」をクリックするとAssistantsを作成することができます。

PlaygroundにおけるAssistantsを作成するための画面

画像出典:Assistants Playground

画面左の欄に作成するAssistantsの詳細を入力します。具体的には以下のような情報を入力します。

Name:アシスタントの名称を入力します。

Instructions:アシスタントの役割を入力します。アシスタントとモデルがどのように動作するか、または反応するか命令します。

Model:ChatGPTのベースモデルを選択します。微調整されたモデルを含め、GPT-3.5またはGPT-4モデルを指定できます。検索ツールはgpt-3.5-turbo-1106gpt-4-1106-previewモデルを必要とします。

さらにPDFファイルなどの読み込みや外部機能の実装なども可能です。

実際の入力例は以下のようになります。

Name:生成AIコンサルタント

Instructions:あなたは生成AIに詳しいアシスタントです。アップロードしたPDFを参考にして質問に回答してください

Modelgpt-4-1106-previewモデル

作成したらチャットして挙動を確認しましょう。

作成したAssistantsとのチャット

画像出典:Assistants Playground

上記のように、PDFを読み込ませると「Retrival」機能を用いてPDFないから情報を探索し解答を返してくれます。

また、PDF内のどこから回答しているのかも明示してくれます。

2-2 Pythonでの使い方

次にAssitants APIのPython上での利用方法を紹介します。

まずは環境構築のため、以下のコードを入力しましょう。

pip install openai==1.3.6

import os

os.environ["OPENAI_API_KEY"] = "APIキーを入力"

OpenAI APIkeyの取得方法についてはこちらの記事を参照ください。

①アシスタントの作成

まずは、アシスタントを作成し、Assistant API側の役割や設定を定義します。

アシスタントは、次のようないくつかのパラメータを使用して設定を入力します。

Name:アシスタントの名称を入力します。

Description:アシスタントの簡単な説明を入力します。

Instructions:アシスタントの役割を入力します。アシスタントとモデルがどのように動作するか、または反応するか命令します。

Model:ChatGPTのベースモデルを選択します。微調整されたモデルを含め、GPT-3.5またはGPT-4モデルを指定できます。検索ツールはgpt-3.5-turbo-1106gpt-4-1106-previewモデルを必要とします。

Tools:連携するAPIを選択します。APIは、OpenAIによって構築されホストされているCode InterpreterRetrievalが入力できます。

Functions: APIでは、カスタム関数を定義することができます。

以下の例では、Code Interpreterツールを有効にして、個人的な数学の家庭教師であるアシスタントを作成しています。

assistant = client.beta.assistants.create(
name="生成AIコンサルタント",
descriptions="生成AIに関する質問に答えるチャットボット"
instructions="あなたは生成AIに詳しいアシスタントです。アップロードしたPDFを参考にして質問に回答してください",
tools=[{"type": "retrieval"}],
model="gpt-4-1106-preview"
)

②スレッドの作成

次にスレッドと呼ばれる会話のかたまりを作成します。

ユーザが会話を開始したらすぐに、ユーザごとに1つのThreadを作成することをお勧めします

スレッドは以下のような形で表します。

thread = client.beta.threads.create()

スレッドにはサイズ・文字数の制限がありません。

③スレッドにメッセージを追加する

先ほど作成したスレッド内に会話内容となるMessagesを作成します。Messagesを作成することで、このスレッドに文章とファイルを渡します。

スレッドにはいくつでもメッセージを追加できます。

Assistant APIではモデルへのリクエストが最大トークン数に収まるように、トークンの切り捨てが自動で使用されます。

つまり、Assistant APIを使用する場合、どれだけの入力トークン(入力文)がモデルに渡されるかが自動で決定されるのです。

実際のメッセージの入力例は以下のようになります。

message = client.beta.threads.messages.create(
thread_id=thread.id,
role="user",
content="ChatGPTとは何ですか?"
)

スレッドID(thread_id)、送信者の役割(role)、およびメッセージの内容(content)となります。

スレッド内のメッセージをリストアップしてみると、次のようなメッセージが追加されていることがわかります。

{
"object": "list",
"data": [
{
"created_at": 1696995451,
"id": "msg_abc123",
"object": "thread.message",
"thread_id": "thread_abc123",
"role": "user",
"content": [{
"type": "text",
"text": {
"value": "ChatGPTとは何ですか?",
"annotations": []
}
}],
...

メッセージはJSON形式で表されています。

"created_at": 1696995451 はメッセージが作成された時刻を表しています。

"object": "thread.message" は、このオブジェクトがスレッド内のメッセージを表していることを示します。

"annotations": [] は、テキストに適用される可能性のある追加情報やマークアップを含む配列ですが、この例では空です。

GPT-4Visionを使用したgpt4 Turbo with vision APIのように、メッセージオブジェクトを介して画像を追加することは、現在サポートされていませんが、今後数ヶ月のうちにサポートを追加される予定です。

gpt4 Turbo with vision APIについてはこちらの記事をご覧ください

④アシスタントの実行

アシスタントがこちらが入力したメッセージに応答するには、Runを作成する必要があります。

これにより、アシスタントはスレッド内のメッセージを読み取り、Code Interpreterなどのツールを呼び出すか(ツールが有効な場合)、単にモデルを使用してクエリに最適に応答するかを決定します。

また、アシスタントはモデルのコンテキストウィンドウに含める過去のメッセージを自動的に決定します。つまり、過去の会話内容をどこまで記憶するかが自動で決定されます。

Runは以下のようになります。

run = client.beta.threads.runs.create(
thread_id=thread.id,
assistant_id=assistant.id,
)

⑤Runステータスの確認

定期的にRunを取得し、実行が完了したかどうかを確認することができます。

run = client.beta.threads.runs.retrieve(
thread_id=thread.id,
run_id=run.id
)

in_progress」と表示される場合はまだ処理が完了していません。

completed」と表示されると処理が完了したことがわかります。

⑥アシスタントの応答の表示

実行が完了すると、アシスタントがスレッドに追加したメッセージを一覧表示できます。

messages = client.beta.threads.messages.list(
thread_id=thread.id
)
print(messages.data)
for message in messages.data: print(message)

これで応答を取得できます。

以上がAssistant APIの使い方となります。

第3章 「Assistant API」の料金

Assistant APIの料金は、用いるtool(Code InterpreterやRetrieval)によって異なります。

Code Interpreterは入力1セッションにつき0.03ドル(ただし、2023年12月1日までは無料)

Retrievalは入力1GBにつき0.20ドル(ただし、2023年12月13日までは無料)

となっています。それぞれトークン数が単位でない点に注意しましょう。

OpenAI APIの詳しい料金体系についてはこちらをご覧ください

第4章 まとめ

この記事ではOpenAIのAssistants APIの概要と使い方を詳しく解説しました。

エンジニアでなくてもImage Generation APIの概要を知り、Image Generation APIを使いこなすことができることは非常に大きい事だと思います。

今後GPT Storeが登場すれば収益化も見込めるので今のうちにとことん研究するのが良いかと思います!

執筆者:河津大誠

この記事は役に立ちましたか?

もし参考になりましたら、下記のボタンで教えてください。

関連記事

コメント

この記事へのコメントはありません。