Google Colab で OpenAI API の Code Interpreter を試す
「Google Colab」で「OpenAI API」の「Code Interpreter」を試したので、まとめました。
前回
1. Code Interpreter
「Assistant API」は、さまざまなタスクを実行できる強力な「AIアシスタント」を作成するためのAPIです。
「Assistant API」は現在、次の3つのツールをサポートしています。
今回は、「Code Interpreter」を使います。「Code Interpreter」は、「Assistant API」がサンドボックス実行環境でPythonコードを作成して実行できるツールです。さまざまなデータと形式を含むファイルを処理し、データとグラフの画像を含むファイルを生成できます。
2. セットアップ
Colabでのセットアップ手順は、次のとおりです。
(1) パッケージのインストール。
# パッケージのインストール
!pip install openai
(2) 環境変数の準備。
以下のコードの <OpenAI_APIキー> にはOpenAIのサイトで取得できるAPIキーを指定します。(有料)
import os
os.environ["OPENAI_API_KEY"] = "<OpenAI_APIキー>"
(3) クライアントの準備。
「クライアント」は「OpenAI API」にアクセスするインタフェースになります。
from openai import OpenAI
# クライアントの準備
client = OpenAI()
4. アシスタントの実行
アシスタントの実行手順は、次のとおりです。
(1) アシスタントの作成。
toolsに「code_interpreter」を指定します。
# アシスタントの作成
assistant = client.beta.assistants.create(
instructions="あなたは数学の個人家庭教師です。数学の質問に答えるコードを書いて実行します。",
model="gpt-4-1106-preview",
tools=[{"type": "code_interpreter"}],
)
(3) スレッドの作成。
会話するためスレッドを作成します。
# スレッドの準備
thread = client.beta.threads.create()
(4) ユーザーメッセージの追加。
# ユーザーメッセージの追加
message = client.beta.threads.messages.create(
thread_id=thread.id,
role="user",
content="方程式「3x + 11 = 14」を解く必要があります。手伝ってもらえますか?"
)
(5) スレッドのメッセージリストの確認。
ユーザーメッセージが1つ追加されています。
# スレッドのメッセージリストの確認
messages = client.beta.threads.messages.list(
thread_id=thread.id,
order="asc"
)
for message in messages:
print(message.role, ":", message.content[0].text.value)
user : 方程式「3x + 11 = 14」を解く必要があります。手伝ってもらえますか?
(6) アシスタントにリクエスト。
# アシスタントにリクエスト
run = client.beta.threads.runs.create(
thread_id=thread.id,
assistant_id=assistant.id,
)
(7) アシスタントへのリクエストの実行状況の確認。
以下を実行して、「in_progress」は実行中、「completed」は実行完了になります。
# 実行状況の確認
run = client.beta.threads.runs.retrieve(
thread_id=thread.id,
run_id=run.id
)
print(run.status)
completed
(8) スレッドのメッセージリストの確認。
ステータス「completed」の場合は、メッセージリストにアシスタントメッセージが追加されています。
# スレッドのメッセージリストの確認
messages = client.beta.threads.messages.list(
thread_id=thread.id,
order="asc"
)
for message in messages:
print(message.role, ":", message.content[0].text.value)
user : 方程式「3x + 11 = 14」を解く必要があります。手伝ってもらえますか?
assistant : 方程式「3x + 11 = 14」の解は x = 1 です。
(9) 「Run Step」の確認。
「Run Step」を確認することで、「Code Interpreter」が使われていることがわかります。
# Run Stepの確認
run_steps = client.beta.threads.runs.steps.list(
thread_id=thread.id,
run_id=run.id
)
print(run_steps)
MessageCreationStepDetails(
message_creation=MessageCreation(message_id='msg_94Nk8V8sKvI5JJMa15lsx8ap'),
type='message_creation'
)
ToolCallsStepDetails(
tool_calls=[
CodeToolCall(
id='call_wO9RpChBFcLKaQVn0iaSCLhG',
code_interpreter=CodeInterpreter(
input="from sympy import symbols, Eq, solve\r\n\r\n# Define the symbol\r\nx = symbols('x')\r\n\r\n# Define the equation\r\nequation = Eq(3*x + 11, 14)\r\n\r\n# Solve the equation\r\nsolution = solve(equation, x)\r\nsolution",
outputs=[CodeInterpreterOutputLogs(logs='[1]', type='logs')]
),
type='code_interpreter'
)
],
type='tool_calls'
)
5. Assistant Playground
作成した「アシスタント」は、「Assistant Playground」でも動作確認できます。