メインコンテンツへスキップ
見出し画像

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」でも動作確認できます。

    画像

    次回



     
     

    npaka

     
     
    プログラマー。iPhone / Android / Unity / ROS / AI / AR / VR / RasPi / ロボット / ガジェット。年2冊ペースで技術書を執筆。アニソン / カラオケ / ギター / 猫 twitter : @npaka123

    あなたへのおすすめ