前提
- 生成AIを使って作ってみたいのものがいくつかあるが、まずは何らかの生成AIサービスのAPIを使えるようにならないと話にならない。
- → ChatGPTのAPIを使えるようになるところまでをやってみることにした。
試行錯誤したこと
APIの画面が見つからない
APIを使うためにAPIキーが必要ということは把握していた。
普段使っているChatGPTの画面のどこかにAPIの画面への導線があるのかと思ったが見つからない。
Googleで「chatgpt api」と検索すると、上から3番目くらいに以下のリンクがヒットした。
左のメニューから introduction に遷移すると、導入っぽいドキュメントが出てきた。
以下のドキュメントのProject API keysとAPI Keysの部分がリンクになっていて、そこからAPIキー作成画面に辿り着ける。

Project API keyという概念がよくわからないので、2番目の個人ユーザー用のAPIキーっぽいリンクから作成する。
OpenAIにおけるProjectやPermissionsといった概念がよく分かっていないが、動作確認できたらすぐ破棄するAPIキーなのでいったんデフォルトで作ってみる。

古いモジュールを使ってしまう
とりあえず早く動かしてみたかったので、ググってヒットした適当な2023年の記事のサンプルコードをベースに以下のようなコードを書いてみた。
requirements.txt
openai python-dotenv
main.py
import os import openai from dotenv import load_dotenv load_dotenv() # APIキーの設定 openai.api_key = os.environ["OPENAI_API_KEY"] response = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=[ {"role": "user", "content": "北インド料理と南インド料理の違いを教えてください。"}, ], ) print(response.choices[0]["message"]["content"].strip())
すると、以下のようなエラーが出た。
You tried to access openai.ChatCompletion, but this is no longer supported in openai>=1.0.0 - see the README at https://github.com/openai/openai-python for the API.
ここでChatCompletionというモジュールはもう古いということを知る。
ChatGPTの有料契約とは別に課金が必要っぽい
最近の情報を参照して、コードを以下のように書き換えてみた。新しいAPIではOPENAI_API_KEYという環境変数を渡してあげればOpenAIインスタンス作成時に自動でAPIキーを読み込んでくれる仕様らしい。
from openai import OpenAI from dotenv import load_dotenv load_dotenv() client = OpenAI() completion = client.chat.completions.create( model="gpt-3.5-turbo", messages=[ {"role": "system", "content": "あなたはインド料理研究家です。"}, {"role": "user", "content": "北インド料理と南インド料理の違いを教えてください。"}, ] ) print(completion.choices[0].message.content)
今度こそいけるかと思ったが、以下のエラーが出てしまった。
openai.NotFoundError: Error code: 404 - {'error': {'message': 'The model `gpt-4-turbo` does not exist or you do not have access to it.', 'type': 'invalid_request_error', 'param': None, 'code': 'model_not_found'}}
(.venv) masataka@delhi09-business chatgpt-api-practice % python main.py
Traceback (most recent call last):
The model gpt-4-turbo does not exist or you do not have access to it.'とのことだが、gpt-4-turboは存在するモデルなので後者のアクセス権がない方っぽい。
https://platform.openai.com/docs/models#gpt-4-turbo-and-gpt-4
ここで原因をググっていたら、別途課金が必要そうということに気づいた。
課金する
課金に関する画面がどこにあるのか調べた。 → 課金に関するドキュメントはこれっぽかった。
https://openai.com/ja-JP/api/pricing/
FAQに「APIは別料金」とちゃんと書いてあった。

ただ、ここには支払い方法を登録するような導線はなさそうだなーと思っていたら、OpenAI PlatformのドキュメントにBillingというメニューを見つけた。
https://platform.openai.com/settings/organization/billing/overview
ここから支払い方法を登録できそう。

→ 住所の入力が英語形式で面倒だったが、クレカを登録できた。
クレカ登録後にInitial credit purchaseというのを聞かれる。5ドルから100ドルまで設定できるようだが、『LangChainとLangGraphによるRAG・AIエージェント[実践]入門』という本に、「本書の内容を進める上では10ドル程度で十分だと思われます」と書いてあったので、10ドルにした。
Would you like to set up automatic recharge?という項目があり、デフォルトではONになっているが、勝手に追加で課金されるの怖いし、設定する場合に閾値を設定するのが面倒なので一旦OFFにした。
あとは、Limitsという設定があり、Usage limitが120ドルに設定されていた。
https://platform.openai.com/settings/organization/limits
私の解釈が正しければ、何かやらかしても120ドル以上は飛ばないということだと思うので、この点は安心できる。
API呼び出しに再チャレンジ
課金設定をした上で、先のコードを何も変えずに再度実行してみたところ、数秒レスポンスをwaitした後に以下のように結果が表示された。
$ python main.py 北インド料理と南インド料理は、地域の気候や文化の違いにより異なる特徴があります。 北インド料理: 1. 主に穀物(主に小麦)をベースとした料理が特徴です。 2. 乳製品(ヨーグルト、バター、パニールなど)を多用します。 3. 使用されるスパイスは、カルダモン、クローブ、シナモン、クミン、ターメリックなどが一般的です。 4. 代表的な料理には、バターチキン、ナン、ビリヤニなどがあります。 南インド料理: 1. 主に米をベースとした料理が特徴です。 2. ココナッツやタマリンドを頻繁に使用します。 3. スパイスの組み合わせはより複雑で、クメン、マスタードシード、コリアンダーなどが使われます。 4. 代表的な料理には、ドーサ、イドリ、サンバー、ラッサムなどがあります。 北インド料理は一般的に濃厚でクリーミーな味わいが特徴であり、南インド料理はスパイシーかつ酸味のバランスが取れた料理が多いです。どちらも美味しい料理がたくさんありますので、一度試してみる価値があります。
めでたしめでたし。