openai

【Python】OpenAI APIの使い方の基本

【Python】OpenAI APIの使い方の基本

OpenAIのAPIを使用してGPTモデルにアクセスして使用する使い方の基本を解説します。

OpenAI API

OpenAIは、生成AIの代表格ともいえるChatGPTの開発元です。OpenAIは、大規模言語モデルに関するAPI (Application Programming Interface)の機能を提供しています。

私たちは、このAPIを使用することによって、自分たちが開発したシステムにOpenAIの強力なAIモデルを組み込んだサービスを創出することが可能です。この記事では、OpenAIのAPIを用いたGPTモデルの活用方法を説明します。

APIを使うためにはAPIキーの発行が必要であり、さらにAPIの利用には課金が伴います。この課金はChatGPTのサブスクリプションの課金とは別であるため注意が必要です。APIキーの発行方法からPythonを使って実際にAPIを使用する一連の流れをご紹介していきます。

OpenAIの画面・機能は日々進化しています。以降で紹介する画面キャプチャは記事執筆時点のものですので、画面構成などは変わっている可能性があることはあらかじめご容赦ください。

APIキーの発行方法

OpenAIのAPIを使用するには、APIキーを発行して使用する必要があります。OpenAIのダッシュボード画面にアクセスしてください。

使用するにはアカウントが必要です。アカウントを持っていない方はSign upからアカウント登録をしてください。基本的には画面に従っていけば簡単に作成ができます。以降はログインした状態からの説明になります。

「API Keys」をクリックすると以下のような画面になります。

OpenAI API keys

「Create new secret key」をクリックします。

OpenAI API keys

Nameフィールドには任意の名前を入れておくと分かりやすくなります。Permissions等細かく設定する項目がありますが、この記事は基本的なところを紹介することを目的とするため、一旦細かな設定はせずに進めます。「Create secret key」をクリックします。

OpenAI API keys

上記のようにKeyの表示がされます。このAPIキーはサービス利用時に必要ですので、安全な場所に保存しておいてください。

このAPIキーは、サービスを利用するのに必要な重要な文字列です。このキーが他人に渡ってしまうと勝手にAPI機能を使用されてしまうため十分に注意しましょう。

Billingの設定

APIを使用するには、支払いが必要です。支払情報は[Settings]-[Billing]-[Payment methods]から設定できます。

OpenAI Payment methods

クレジットカード情報を登録すると、以下のような画面が表示され、5ドル~100ドルの間で設定ができます。デフォルトでは10ドルで表示されていますが、APIの基本的な使い方を覚えるだけであれば0.1ドルもかからないと思いますので最低限5ドルの設定でも構いません。

オートチャージの機能もありますが、個人使用であれば使いすぎてしまわないようにOffにしておくと良いと思います。

OpenAI Configure payment

Continueを押すと支払い確認がでるので確認して支払いをしてください。

OpenAI Billing

完了すると、上記のようにCredit balanceが更新されます。APIのリクエストおよびレスポンスに基づいてトークン数が計算され、そのトークン数に応じて使用料が発生します。この使用料は、クレジットバランスから自動的に差し引かれます。

クレジットバランスが不足すると、APIリクエストが失敗する可能性があります。したがって、定期的にクレジットバランスを確認し、必要に応じて追加のクレジットを購入することが重要です。

API使用料の確認

OpenAIのAPIは、リクエストとレスポンスのトークン数に応じて使用量が決まります。また、ChatGPTの有料ユーザー向けのサブスクリプション料金とは別に課金されるため、注意が必要です。

OpenAIダッシュボード画面のサイドバーの[Usage]をクリックすることで利用状況と請求額の確認画面が開けます。

OpenAI Usage

API使用量の制限

個人利用の場合は特に使用量に制限をかけておくと良いでしょう。[Settings]-[Limits]からUsage limitsの項目で設定することが可能です。

項目概要
Set a monthly budget毎月の利用料がこの値に達した場合に、それ以降のリクエストは拒否されます。
Set an email notification threshold毎月の利用料がこの金額に達した場合にメールが送信されます。
OpenAI Usage limits

トークンとTokenizer

OpenAIのAPI呼び出しでは、入力文字列が「トークン」という数値のベクトルに変換されます。OpenAIのAPIの課金は、入力のトークンの総数が基準となります。

トークン数がいくつになるかは、文字数や単語数によって変わり、その計算方法は複雑です。しかし、OpenAIのプラットフォーム上にはTokenizerというものがあり、トークン数を確認することができます。

APIを呼ぶ前にTokenizerでトークン数を計算することがおすすめです。Tokenizerは、https://platform.openai.com/tokenizerにアクセスすることで使用できます。

OpenAI Tokenizer 使い方

例えば、「Pythonの概要について教えてください。」という文字列を入力とした場合、GPT-3.5やGPT-4では、Tokensは15と計算されます。このトークン数は入力した文字列により変わります。また、トークン計算は、GPTのモデルによって異なりますので注意してください。

また、記事執筆時点ではGPT-4oのTokenizerはcoming soonとなっていますが、最新では更新されている可能性がありますので、随時確認していただければと思います。

APIの料金体系

OpenAIのAPIの料金体系については、「1M tokens」=100万トークン当たりの利用料金となっています。APIの利用料金については、https://openai.com/api/pricingを参照してください。

なお、API利用料金計算での重要なポイントは、APIに入力したトークン数に対してのみ課金されるわけでなく、APIの出力結果のトークン数に対しても課金され、入力と出力で料金体系が異なる設定となっていることがありますので注意してください。

例えば、記事執筆時点で最新のGPT-4oでは、入力が100万トークンあたり5ドル、出力が100万トークンあたり15ドルと異なった設定となっています。また、モデルによって金額は違いますので公式の料金ページで確認してください。

※記事執筆時点での情報であり、料金は変更されている可能性がありますので最新の料金は公式のページを確認してください。

OpenAI APIの料金体系

上記まででAPIの概要について紹介してきました。以降では、Pythonを使って具体的にAPIを使う方法を簡単な例で紹介します。

Pythonを用いたOpenAI APIの使い方

以降では、Pythonを使って具体的にOpenAIを使う方法について紹介します。

OpenAI APIのインストール

Pythonで使用できるOpenAIのAPIは、pipを使用して以下のようにインストールすることができます。

pip install openai

上記が完了すればOpenAIのAPIを使用することができます。

PythonからOpenAIのAPIを呼び出す

PythonのプログラムからOpenAIのAPIを呼び出すサンプルプログラムを紹介します。以下のプログラムは、OpenAIのAPIを使用して、GPT-3.5-turboモデルを利用し、ユーザーの質問に対する回答を生成する例です。

from openai import OpenAI

# OpenAIクラスのインスタンスを生成する
client = OpenAI(
    api_key="xxxxxxxxxxxxxxxxxxxxxxxxxxx"   # ←に取得したAPIキーを貼り付けます。
)

# 役割(role)やコンテンツ(content)、モデル(model)の設定をする
response = client.chat.completions.create(
    messages=[{"role": "user", "content": "Pythonの概要について教えてください。"}],
    model="gpt-3.5-turbo",
)

# APIで生成されるテキストを取得する
generated_text = response.choices[0].message.content
print(generated_text)
【実行結果】
Pythonは、高水準のプログラミング言語であり、汎用性が高く、初心者からプロまで幅広いユーザーに利用されています。Pythonは構文がシンプルで読みやすいため、学習コストが低く、プログラムの作成が容易です。また、豊富なライブラリが提供されており、様々な用途に利用することができます。

Pythonはオブジェクト指向プログラミング言語であり、関数型プログラミングをサポートしています。また、クロスプラットフォームで動作し、Windows、Mac、Linuxなどの異なる環境で利用することができます。Pythonの人気の理由の一つに、データサイエンスや機械学習、Web開発などの分野で広く利用されていることが挙げられます。

さらに、Pythonはコミュニティが活発であり、多くの開発者によってメンテナンスや新しい機能の追加が行われています。これにより、常に最新の技術やトレンドに追従することができるという利点もあります。Pythonは自由なライセンスのもとで提供されており、商用利用も可能です。

上記の例では「Pythonの概要について教えてください。」という質問をするプログラムになっています。実行結果を見てみると、ChatGPTが回答したPythonの概要の説明文が取得できていることが分かります。

上記プログラムの各要素について、詳細を説明をします。

【必要ライブラリのインポート】

from openai import OpenAI

OpenAIのライブラリからをインポートします。これにより、APIの機能を使用することができるようになります。

【OpenAIインスタンスの生成】

# OpenAIクラスのインスタンスを生成する
client = OpenAI(
    api_key="xxxxxxxxxxxxxxxxxxxxxxxxxxx"   # ←に取得したAPIキーを貼り付けます。
)

OpenAIクラスのインスタンスを生成します。api_keyの部分には上記の「APIキーの発行方法」で発行したキーの文字列を貼り付けてください。

このキーは、OpenAIのサービスにアクセスするために必要です。キーの値が流出してしまうと勝手にAPI機能を使用されてしまうため十分に注意しましょう。

【APIリクエストの設定】

# 役割(role)やコンテンツ(content)、モデル(model)の設定をする
response = client.chat.completions.create(
    messages=[{"role": "user", "content": "Pythonの概要について教えてください。"}],
    model="gpt-3.5-turbo",
)

ここでは、OpenAIのAPIに渡すリクエストの情報を設定しています。

messages引数には、辞書のリストでメッセージを指定します。上記の例では1つの質問ですが、リストに複数の辞書を設定することも可能です。辞書の中の"role": "user"は、ユーザーからの入力であることを示しています。ユーザーの入力メッセージは"content"に「Pythonの概要について教えてください。」として設定しています。

model引数には、AIモデルの名前を指定します。"gpt-3.5-turbo"モデルは、GPT-3.5のモデルです。他にもGPT-4のモデル等も使用することができます。

【生成されたテキストの取得と表示】

# APIで生成されるテキストを取得する
generated_text = response.choices[0].message.content
print(generated_text)

APIからのレスポンスの中から生成されたテキストを取得し、出力しています。実行結果を見てみても、しっかりと回答が取得できていることが分かるかと思います。

より詳細に学ぶ場合には、OpenAIのText generationに関するドキュメントのこちらを参照してください。

OpenAI Chat APIの詳細

OpenAIのAPIの中心ともいえるChat APIの詳細については「OpenAIのChat APIの詳細を深堀する」でまとめていますので参考にしてください。ChatAPIのリクエスト及びレスポンスの主要な内容の詳細について解説しています。

まとめ

OpenAIのAPIを使用してGPTモデルにアクセスして使用する使い方の基本を解説しました。

この記事では、OpenAIのAPIを用いたGPTモデルの基本的な使い方を紹介しています。APIを使うためにはAPIキーの発行が必要であり、API利用には課金がされます。

また、Pythonを用いてGPTモデルを使った質問を行うことができるサンプルプログラムを紹介することで、APIへの基本的なアクセス方法を説明しました。

今後は、OpenAI等の生成AI機能をいかに使いこなして、サービスや機能に組み込んでいくのかということが重要なスキルになってくると思います。生成AIは、非常に面白い技術領域ですので、色々と試してその可能性を探ってもらえたらと思います。