見出し画像

Google Colab で OpenAI API の Code Interpreter を試す

「Google Colab」で「OpenAI API」の「Code Interpreter」を試したので、まとめました。

前回


1. Code Interpreter

Assistant API」は、さまざまなタスクを実行できる強力な「AIアシスタント」を作成するためのAPIです。

「Assistant API」は現在、次の3つのツールをサポートしています。

・Code Interpreter : Pythonコードを作成して実行
・Retrieval : モデル外部からの知識を取得
・Function Calling : 関数のレスポンスを取得

今回は、「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」でも動作確認できます。

次回



いいなと思ったら応援しよう!