最近は OpenAI 互換の Web API が、LLM の機能を提供する上でデファクトに近い方法となっているように思う。 そこで、今回は本家の OpenAI の Web API を使い始めるまでの内容を自分用のメモを兼ねて残しておく。
使った環境は次のとおり。
$ sw_vers ProductName: macOS ProductVersion: 15.5 BuildVersion: 24F74 $ uname -srm Darwin 24.5.0 arm64 $ curl --version curl 8.7.1 (x86_64-apple-darwin24.0) libcurl/8.7.1 (SecureTransport) LibreSSL/3.3.6 zlib/1.2.12 nghttp2/1.64.0 Release-Date: 2024-03-27 Protocols: dict file ftp ftps gopher gophers http https imap imaps ipfs ipns ldap ldaps mqtt pop3 pop3s rtsp smb smbs smtp smtps telnet tftp Features: alt-svc AsynchDNS GSS-API HSTS HTTP2 HTTPS-proxy IPv6 Kerberos Largefile libz MultiSSL NTLM SPNEGO SSL threadsafe UnixSockets $ python -V Python 3.12.11 $ pip list | grep -i openai openai 1.90.0
もくじ
- もくじ
- OpenAI Platform について
- Organization を作る
- クレジットを追加する
- API トークンを作る
- curl(1) から Web API を呼び出す
- Python から Web API を呼び出す
OpenAI Platform について
OpenAI の Web API を利用する際の料金体系は、ChatGPT のサブスクリプションとは分離されている。 また、Web API に関する管理は OpenAI Platform というサービスを使うことになる。
Web API を利用するには、上記のサービスにあらかじめ前払いでクレジットを登録しておく必要がある。 Web API を利用することで生じた料金は、前払いしたクレジットの中から支払われる。
Organization を作る
OpenAI Platform を利用するには、まず Organization を作成する必要があるようだ。 現時点 (2025-06-21) の UI であれば、右上にある「Start Bulding」のボタンを押下する。 特に何も入力しないでウィザードを進めると Organization name が「Personal」になる。 個人による利用であれば、それで特に問題ないはず。 また、Organization の配下にデフォルトのプロジェクトとして「Default」も同時に作られるようだ。
クレジットを追加する
前述した通り Web API はクレジットが無いと使えない。 そこで、まずは「Settings > Billing」の画面でクレジットを追加する。
「Add payment details」ボタンを押下するとクレジットカードの登録画面が出てくる。 自身のカードの情報を入力したら、追加するクレジットをドルで指定する。 クレジットが少なくなったときに自動でチャージする設定は不要であればオフにする。
API トークンを作る
Web API を呼び出す際には OpenAI Platform のアカウントとの紐づけが必要になる。 そのために、API トークンを作成する。
現時点の UI であれば右上の「Create new secret key」を押下して作成する。 API トークンは作成したタイミングで一度しか表示されない。 忘れずにパスワードマネージャなどに記録しておこう。
curl(1) から Web API を呼び出す
まずは curl(1) を使って呼び出してみる。
先ほど発行したトークンを、シェルのセッション変数に取り込む。
パスワードなどのセンシティブな情報を扱うときは read
コマンドと -s
オプションを用いると良い。
こうすれば入力した内容がコマンドの履歴に残らない。
$ read -s OPENAI_API_KEY
上記を実行したら、先ほど記録したトークンをターミナルにペーストする。
現時点で最もベーシックな Web API として Chat Completions を試してみよう。 Chat Completions API のリファレンスは以下にある。
なお、今だと状態 (ステート) を API 側で管理してもらえる Chat Completions with Responses という API もあるようだ。 従来の API は状態を持たないステートレスだったので、クライアント側ですべて管理する必要があった。 Responses の API では、その点が改善されているようだ。 ただし、今回は使わない。
リファレンスの内容を元に curl(1) で HTTP リクエストを作る。
先ほどセッション変数に入れたトークンは Authorization
ヘッダの Bearer
以降に指定する。
model
キーにはモデルの名称を入力する。
messages
にはロール毎の指示を入力する。
たとえば "role": "developer"
の指示は、"role": "user"
の入力に関係なく従うべき内容と解釈される。
$ curl -X POST https://api.openai.com/v1/chat/completions \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $OPENAI_API_KEY" \ -d '{ "model": "gpt-4.1", "messages": [ { "role": "developer", "content": "あなたは親切なアシスタントです" }, { "role": "user", "content": "こんにちは!" } ] }'
結果は次のような JSON として得られる。
{ "id": "chatcmpl-XXX...", "object": "chat.completion", "created": 1750480953, "model": "gpt-4.1-2025-04-14", "choices": [ { "index": 0, "message": { "role": "assistant", "content": "こんにちは!😊 \nどうぞ、なんでもお気軽にご相談ください。", "refusal": null, "annotations": [] }, "logprobs": null, "finish_reason": "stop" } ], "usage": { "prompt_tokens": 23, "completion_tokens": 16, "total_tokens": 39, "prompt_tokens_details": { "cached_tokens": 0, "audio_tokens": 0 }, "completion_tokens_details": { "reasoning_tokens": 0, "audio_tokens": 0, "accepted_prediction_tokens": 0, "rejected_prediction_tokens": 0 } }, "service_tier": "default", "system_fingerprint": "fp_51e1070cf2" }
なお、クレジットが無い状態で呼び出すと次のようなエラーになる。
{ "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": null, "code": "insufficient_quota" } }
Python から Web API を呼び出す
次は公式の Python パッケージを使って Web API を呼んでみよう。
まずは openai
パッケージをインストールする。
$ pip install openai
また、先ほどトークンをセッション変数 OPENAI_API_KEY
に格納してあった。
これを、プロセスが fork した後の Python プロセスからも使えるように環境変数にする。
$ export OPENAI_API_KEY
openai
パッケージは環境変数 OPENAI_API_KEY
が定義されていると自動的に読んでくれる。
そして、Python インタプリタを起動する。
$ python
openai.OpenAI
クラスをインスタンス化する。
>>> from openai import OpenAI >>> client = OpenAI()
openai.OpenAI#chat.completions.create()
メソッドを使って Chat Completions API を呼び出す。
>>> completion = client.chat.completions.create( ... model="gpt-4.1", ... messages=[ ... {"role": "developer", "content": "あなたは親切なアシスタントです"}, ... {"role": "user", "content": "こんにちは!"} ... ] ... )
レスポンスを確認すると、ちゃんと結果が得られていることが確認できる。
>>> completion ChatCompletion(id='chatcmpl-XXX...', choices=[Choice(finish_reason='stop', index=0, logprobs=None, message=ChatCompletionMessage(content='こんにちは!😊 \n何かお手伝いできることはありますか?', refusal=None, role='assistant', annotations=[], audio=None, function_call=None, tool_calls=None))], created=1750477841, model='gpt-4.1-2025-04-14', object='chat.completion', service_tier='default', system_fingerprint='fp_51e1070cf2', usage=CompletionUsage(completion_tokens=17, prompt_tokens=23, total_tokens=40, completion_tokens_details=CompletionTokensDetails(accepted_prediction_tokens=0, audio_tokens=0, reasoning_tokens=0, rejected_prediction_tokens=0), prompt_tokens_details=PromptTokensDetails(audio_tokens=0, cached_tokens=0)))
いじょう。
[asin:B085BG8CH5:detai