💪

OpenAIのAPIをPython初心者でも簡単にできるJupyterで挙動確認してみよう!

2024/03/22に公開

はじめに

実務でFastAPIにて、OpenAIのAPI関連の実装をしている私の備忘録です。
FastAPIについては載っておりません。

読んでいただきたい方
・ポートフォリオでAI機能つけたい方
・OpenAIのAPI気になるけど難しいんでしょ・・・な方

ぜひ、ご自分の環境で試され、実装して欲しいです。
Pythonが初めての方でも、環境構築せずにUI上でPythonのコードを実行することができるJupyterを採用しております。

使用技術

下記、バージョンにて動作確認致しました。

バージョンを合わせて実行してください。

  • Python3
    • 3.11
  • OpenAIのAPI
    • 1.12.0
  • VSCodeの拡張機能
    • Jupyter

Jupyterについて

Jupyterとは

ブラウザ上(VSCodeのファイル内)で、動作する対話型実行環境とのこと。
PCにPythonをインストールせずに入力・実行することができるため、試験実装や勉強の際に便利です。
今回は、APIの挙動を確認し、ストリーミング機能を実装することが目的なので、こちらで一つ一つ返答を確認しつつ、進めていきたいと思います。
また、私の都合上詳しい説明はVSCode上のJupyterとなります。

PythonをインストールしないとVSCode上では動きませんので、Python初めての方は、公式を参考にブラウザ上での挙動確認をお願い致します。
公式
https://jupyter.org/

1.VSCodeに拡張機能Jupyterをインストールする

下記の拡張機能をインストール

2..ipynbファイルを作成する

VSCode上に.ipynb拡張子のファイルを作成

下記のように、セルが表示されているファイルが作成される

3.セルに実装

セルにコードを記入し、セルの左上の再生ボタンを押す

4.カーネルの選択

どの環境で実行するか選択する。
また、ここでjupyterパッケージインストールのダイアログが出た際は、「OK」を選択する。
自動的にパッケージがインストールされます。

5.実行結果

実行結果は以下の通りに、セルの下に結果が出る仕様です!

セルの増やし方

赤丸の三点マークをクリック → 緑の四角 → 選択

または、
ショートカットも存在しておりますので、下記記事参考にしつつ、試してみてください。
https://qiita.com/k_maki/items/78e50a4a8a7694e7dd3a

OpenAIのAPIのコードの書き方を調べる

OpenAIのAPIとは

OpenAI社が提供する人工知能のAPIのこと。
OpenAI社が提供する多岐にわたるAIモデルへのアクセスを簡単に可能にするインターフェースのこと。
(私は、ChatGPTの機能を自分のアプリに導入可能にするAPIと認識しております。)

1.公式を調べる

下記、URLにて公式に飛べます。
導入から、例のコードまで載せてくれているので、APIを動かすのはかなり楽に行えると思います。
公式
https://platform.openai.com/docs/api-reference/introduction

2.keyの取得

keyの取得も、とても簡単に行えます。課金しなくてもkeyは取得できます。

ただし、OpenAIにログインされたのが3ヶ月以上前だと、無料で動かすことができません。

(使用の際に、ログインして3ヶ月以上の方は課金が必要です。4.エラーが出る方へを参考にして、課金してください)

また、ChatGPTとOpneAPIの課金は違います。

よって、GPTへ課金されている方もAPIに課金を行わなければ動きませんので、ご注意ください。

1.下記公式のURLです。こちらからログインしてください(Googleログインなどがありめちゃ楽!)
https://openai.com/blog/openai-api

2.OpenAIのページに遷移 → 「API」を選択

3.選択後の遷移画面の左のAPI keysを選択

4.遷移先の画面にて、keyを作成してください

a.新しい秘密鍵(Create new secret key)

b.名前(name)に好きな名前を入れてください。

c.右下のCrete secret key(秘密鍵)を押す

5.keyは一度しか表示されませんので、メモしてください。また、keyの取り扱いには十分に注意して、.env等をしようして、GitHub上にあげないでください

3.Jupyterにて、OpenAIのAPIの挙動を確認する

本題です!

APIを動かして、AIに返答させてみましょう!

1.Jupyterのセルで、PythonのOpenAIライブラリーをインストール

pip install openai==1.12.0

下記のように表示されます

2.OpenAIの環境変数の設定(先ほど取得したkeyを設定)

  • まず、下にセルを増やす

  • 同じくJupyterのセルで、python-dotenv  をインストール

    https://pypi.org/project/python-dotenv/

  • .envファイルの作成し、key作成時にコピーした秘密鍵を記述

    .envファイル

    OPEN_AI_KEY='key作成時にコピーした秘密鍵'
    
    
  • .gitignoreファイルを作成して、git管理時にGitHub上に入れないようにしましょう

    .gitignore

    .env
    
    
  • .envファイルを読み込んでkeyを使用しましょう

    下記コードをそのままコピペで実行

    import os
    from dotenv import load_dotenv
    
    # .envから環境変数を取る。
    load_dotenv()
    # 上記で得た環境変数をos.environで取得する
    os.environ['OPEN_AI_KEY']
    

    青線の場所に.envファイルに記述したkeyが現れます

3.公式のコードをコピぺして、挙動を確認します。

https://platform.openai.com/docs/api-reference/streaming

import os
from dotenv import load_dotenv
from openai import OpenAI

load_dotenv()

openai_key = os.environ['OPEN_AI_KEY']

client = OpenAI(api_key=openai_key)

stream = client.chat.completions.create(
    model="gpt-4",
    messages=[{"role": "user", "content": "Say this is a test"}],
    stream=True,
)
for chunk in stream:
    if chunk.choices[0].delta.content is not None:
        print(chunk.choices[0].delta.content, end="")

ちゃんと、APIが返答が来ました!

modelにてAPIのバージョンを渡しています。"gpt-4”は高いので、確認取れたら安いもの(例:gpt-3.5-turbo-0125)に変更をすることをおすすめします。

エラーが出る方へ

429等のAPI側のエラーコードが出る場合があります。

API公式のエラー集を参考に解決してみてください。

https://platform.openai.com/docs/guides/error-codes/api-errors

主なエラーは下記に記述しています。

1.OpenAIのAPIは、5ドル分無料枠を使えます

しかし、無料期間決まっており、3ヶ月過ぎると残っていても使えなくなります。3ヶ月以降のAPIの使用の際はプリペイド式に前払いし使います。(2024年3月現在)

支払いは、従量課金制(使用トークン量で支払われる)です。

https://help.openai.com/en/articles/4936830-what-happens-after-i-use-my-free-tokens-or-the-3-months-is-up-in-the-free-trial

https://help.openai.com/en/articles/8264644-what-is-prepaid-billing

課金の際の参考記事
あとは、公式サイトを翻訳して進めば大丈夫です!
https://prtn-life.com/blog/openai-billing#toc5

2.429エラー

下記のエラーが出た場合はAPIの無料期間(3ヶ月)を過ぎてしまっているので、私と同じく課金してください(泣)

RateLimitError: Error code: 429 - {'error': {'message': 'You exceeded your current quota, please check your plan and billing details. For more information on this error, read the docs: <https://platform.openai.com/docs/guides/error-codes/api-errors.'>, 'type': 'insufficient_quota', 'param': None, 'code': 'insufficient_quota'}}

3.404エラー

こちらのエラーは、 model のgpt-4が存在しないか、アクセス権がないというエラーです。model の誤字がないか・残高が残っているか確認を行ってください。

NotFoundError: Error code: 404 - {'error': {'message': 'The model `gpt-4` does not exist or you do not have access to it. Learn more: <https://help.openai.com/en/articles/7102672-how-can-i-access-gpt-4.'>, 'type': 'invalid_request_error', 'param': None, 'code': 'model_not_found'}}

4.OpenAIのImportError

---------------------------------------------------------------------------
ImportError                               Traceback (most recent call last)
Cell In[12], line 2
      1 import os
----> 2 from openai import OpenAI
      3 from dotenv import load_dotenv
      5 load_dotenv()

ImportError: cannot import name 'OpenAI' from 'openai' (/opt/homebrew/lib/python3.11/site-packages/openai/__init__.py)
  • OpenAIのバージョンが違う
  1. セルを増やし、コピペで実行し、バージョンを確認

    %pip show openai
    

    Version: 1.12.0以外のバージョンが出た場合

  2. 再起動を押す

  3. インストールするopenaiのバージョンを指定して再度インストールする

    pip install openai==1.12.0
    

  4. これまでに行っていた変数や関数、インストールしたものがなくなりますのでopenai以外もセルの右上の再生ボタンを押す(再起動の左のすべて実行でも可能)

  • OpenAIのインストールをセル内で行っていない
    1. .ipynbファイル内のセルにて以下を再実行

      pip install openai==1.12.0
      

      (セルは同じファイル内で何個も実行可能です)

    2. エラーの出たコードを再実行する

5..env書き換えた場合

load_dotenvの引数にoverride=Trueを入れて実行。オーバーライドしてください

Trueと返答がくれば、前の環境変数が無効になり、新しい環境変数をとって来れるようになります。

from dotenv import load_dotenv
load_dotenv(override=True)

APIのコードの説明

stream = client.chat.completions.create(
    model="gpt-3.5-turbo-0125",
    messages=[
       {"role": "system", "content": "今日の天気を教えてください"},
       {"role": "user", "content": "東京"}
    }],
    stream=True,
    temperature=0.0①
)

“messages”とは

API側に受け渡す会話を構成するメッセージにリストのこと。

"role"には、種類が5種類があります。

  • "system"→システム側の入力を渡す
  • "user”→userの入力を渡す
  • “assistant”→アシスタントメッセージの内容を渡す
  • “tool”→ツールメッセージの内容を渡す
  • “function”→廃止されました

上記入力して、メッセージが何に当たるかを渡して、"content"にメッセージの詳細値を入れることで、会話をすることができる

create()のかっこ内にOpneAPIのパラメータ(Temperature)等を記載して、設定することもできます。Temperatureとは、回答の自由度です。
OpneAPIのパラメータについては、面白いので調べてみてください。

Jupyterでの挙動確認はあくまでも挙動確認ですので、ストリーミングは適応されないようです。
また、このままアプリ等にすることはできませんので、次回からはPythonのフレームワークFastAPIでAPIを使用できるようにしていきます。

あとがき

OpenAIのAPIのコードは、実装を一回してしまえばとても簡単で、わかりやすいコードでした。
みなさん、OpenAIのAPIやストリーミング等やってみたい技術ではないでしょうか?
今回は、挙動確認が目的で、Jupyterを使用しました。Pythonが初めての方でもかなりスムーズに行えたのではないでしょうか?
ぜひ、このハンズオンを一度試していただき、ポートフォリオや自作アプリにご使用ください。

Arsaga Developers Blog

Discussion