PythonでOpenAI APIを使用して独自のAIツールを作成する

OpenAIがGPT-4 Turboまでのモデルをサポートしている現在、Python開発者は高度なAI機能を探索する素晴らしい機会を得ています。このチュートリアルでは、ChatGPT APIをPythonスクリプトに統合する方法を詳細に説明し、初期設定段階から効果的なAPIの使用方法までをガイドします。

ChatGPT APIとは、開発者がGPTモデルを使用して会話応答を生成するためにインタラクティブに接続できるプログラミングインターフェースを指します。しかし、実際にはOpenAIのすべてのモデルで機能する汎用APIです。

GPT-4 Turboはより高度で、GPT-4よりも3倍コストが安いため、これまでにないほど強力なAPIをPythonで活用する絶好の時期です。それでは始めましょう!

Table of Contents

環境設定の手順

まずは、PythonでOpenAI APIを使うための環境設定を手助けします。最初のステップとして、必要なライブラリのインストール、APIアクセスの設定、APIキーと認証の管理を行います。

必要なPythonライブラリのインストール

始める前に、システムにPythonがインストールされていることを確認してください。すべてを整理するために仮想環境を使用することをお勧めします。次のコマンドで仮想環境を作成できます。

python -m venv chatgpt_env

仮想環境をアクティブにするには、以下を実行します。

  • chatgpt_env\Scripts\activate (Windows)
  • source chatgpt_env/bin/activate (macOSまたはLinux)

次に、OpenAI APIと対話するためのOpenAI Pythonクライアントライブラリと、設定を管理するためのpython-dotenvパッケージを含む必要なPythonライブラリをインストールする必要があります。これらのパッケージをインストールするには、以下のコマンドを実行します。

pip install openai python-dotenv

OpenAI APIアクセスの設定

OpenAI APIリクエストを行うには、最初にOpenAIのプラットフォームでサインアップし、独自のAPIキーを生成する必要があります。以下の手順に従ってください。

  1. OpenAIのAPIキーのページを訪れ、新しいアカウントを作成するか、既にアカウントを持っている場合はログインしてください。
  2. ログインしたら、APIキーのセクションに移動し、新しい秘密キーを作成をクリックしてください。
  3. APIキーを生成したら、後で使用するためにコピーしておくことをお勧めします。そうしないと、もしAPIキーを失ってしまった場合、新しいAPIキーを生成する必要があります。APIキーはOpenAIのウェブサイトから確認することはできません。

OpenAIのAPIキーのページ

現在使用可能な生成されたAPIキー

APIキーと認証

APIキーを取得した後、セキュリティの観点から環境変数として保存することをお勧めします。環境変数を管理するためには、python-dotenvパッケージを使用してください。APIキーを含む環境変数を設定するには、以下の手順に従ってください:

  1. プロジェクトディレクトリに.envという名前のファイルを作成します。

  2. .envファイルに以下の行を追加し、your_api_keyを実際のコピーしたAPIキーに置き換えてください: CHAT_GPT_API_KEY=your_api_key

  3. Pythonコード内で、python-dotenvパッケージのload_dotenv関数を使用して.envファイルからAPIキーをロードしてください:

  import openai
  from openai import OpenAI
  import os
  from dotenv import load_dotenv

  # .envファイルからAPIキーをロード
  load_dotenv()
  client = OpenAI(api_key=os.environ.get("CHAT_GPT_API_KEY"))

注意: OpenAI Pythonライブラリの最新バージョンでは、以下に示すようにOpenAIクライアントをインスタンス化してAPI呼び出しを行う必要があります。これは以前のバージョンからの変更点であり、以前はグローバルメソッドを直接使用していました。

APIキーを追加し、環境がOpenAI APIを使用する準備ができたら、この記事の次のセクションでは、APIとの対話や、この強力なツールを使用したチャットアプリの構築を探ります。

実行する前に、上記のコードスニペットを下記の各コードセクションに追加してください。

PythonでのOpenAI APIの使用

.envファイルからAPIを読み込んだ後、実際にPython内で使用を開始できます。PythonでOpenAI APIを使用するには、クライアントオブジェクトを使用してAPI呼び出しを行い、APIに入力として一連のメッセージを渡し、モデル生成のメッセージを出力として受け取ることができます。

シンプルなChatGPTリクエストの作成

  1. 以下の手順を完了していることを確認してください:仮想環境の作成、必要なライブラリのインストール、OpenAI秘密キーの生成、およびプロジェクトディレクトリ内の.envファイルの作成。

  2. シンプルなChatGPTリクエストを設定するために以下のコードスニペットを使用してください:

  # Create a chat completion
  chat_completion = client.chat.completions.create(
      model="gpt-4",
      messages=[{"role": "user", "content": "query"}]
  )
  print(chat_completion.choices[0].message.content)

ここで、client.chat.completions.createクライアントオブジェクト上のメソッドコールです。chat属性はAPIのチャット固有の機能にアクセスし、completions.createメソッドは、提供された入力に基づいてAIモデルに応答や完了を生成するようリクエストします。

queryを実行したいプロンプトに置き換えてください。また、上記のGPT-4の代わりにサポートされている任意のGPTモデルを使用することもできます。

エラー処理

リクエストを行う際には、ネットワーク接続の問題、レートリミットの超過、またはその他の非標準なレスポンスステータスコードなど、様々な問題が発生する可能性があります。したがって、これらのステータスコードを適切に処理することが重要です。Pythonのtryexceptブロックを使用して、プログラムの流れを維持し、エラー処理を改善できます。

# チャット完了を試みる
try:
    chat_completion = client.chat.completions.create(
        model="gpt-4",
        messages=[{"role": "user", "content": "query"}],
        temperature=1,
        max_tokens=150  # 必要に応じてトークンの数を調整する
    )
    print(chat_completion.choices[0].message.content)

except openai.APIConnectionError as e:
    print("The server could not be reached")
    print(e.__cause__)

except openai.RateLimitError as e:
    print("A 429 status code was received; we should back off a bit.")

except openai.APIStatusError as e:
    print("Another non-200-range status code was received")
    print(e.status_code)
    print(e.response)

注意: OpenAI APIの任意のモデルを使用するには、利用可能なクレジットグラントが必要です。アカウント作成から3ヶ月以上経過した場合、無料のクレジットグラントはおそらく期限切れになっており、追加のクレジットを購入する必要があります(最低$5)。

APIリクエストをさらにカスタマイズする方法をいくつか紹介します。

  • 最大トークン数max_tokensパラメータを設定して、必要に応じて最大出力長を制限できます。これはコスト削減の手段ですが、生成されたテキストが制限を超えないようにカットするだけで、全体的な出力を短くするものではありません。
  • 温度。温度パラメータを調整してランダム性を制御します。(高い値は応答をより多様にし、低い値はより一貫性のある回答を生成します。)

パラメータが手動で設定されていない場合、それぞれのモデルのデフォルト値が使用されます。例えば、GPT-3.5-turboは0から7、GPT-4は1です。

上記のパラメータの他にも、GPTの機能をあなたの要望どおりに利用するための多くのパラメータや設定があります。OpenAIのAPIドキュメントを参照にすることをお勧めします。

ただし、どれだけパラメータ設定が行われても、効果的でコンテキストに合ったプロンプトが依然として必要です。

API統合の高度なテクニック

このセクションでは、OpenAI APIをPythonプロジェクトに統合するための高度なテクニックを探ります。自動化タスク、Pythonのrequestsを使用したデータ取得、そして大規模なAPIリクエストの管理に焦点を当てます。

OpenAI APIを使用したタスクの自動化

Pythonプロジェクトをより効率的にするために、OpenAI APIを使用して様々なタスクを自動化できます。例えば、メール応答、カスタマーサポートの回答、コンテンツ作成などを自動化することが考えられます。

OpenAI APIを使用してタスクを自動化する例を以下に示します。

def automated_task(prompt):
    try:
        chat_completion = client.chat.completions.create(
            model="gpt-4",
            messages=[{"role": "user", "content": prompt}],
            max_tokens=250
        )
        return chat_completion.choices[0].message.content
    except Exception as e:
        return str(e)

# 使用例
generated_text = automated_task("Write an short note that's less than 50 words to the development team asking for an update on the current status of the software update")
print(generated_text)

この関数はプロンプトを受け取り、生成されたテキストを出力として返します。

Pythonのrequestsを使用したデータ取得

OpenAI APIと直接やり取りするために、人気のあるrequestsライブラリを使用できます。OpenAIライブラリに頼ることなく、GETリクエストに対するより多くの制御とAPI呼び出しの柔軟性を得ることができます。

以下の例はrequestsライブラリが必要です(まだインストールしていない場合は、pip install requestsを実行してください)。

headers = {
    'Content-Type': 'application/json',
    'Authorization': f'Bearer {api_key}',
}

data = {
    'model': 'gpt-4',  # 目的のモデルに更新
    'messages': [{'role': 'user', 'content': 'Write an interesting fact about Christmas.'}]
}

response = requests.post('https://api.openai.com/v1/chat/completions', headers=headers, json=data)
print(response.json())

このコードスニペットは、ヘッダーとデータを引数としてOpenAI APIにPOSTリクエストを行う方法を示しています。JSON応答は解析され、Pythonプロジェクトで利用できます。

大規模なAPIリクエストの管理

大規模プロジェクトを扱う際、APIリクエストを効率的に管理することが重要です。これは、バッチ処理、スロットリング、キャッシングなどのテクニックを組み込むことで達成できます。

  • バッチ処理。複数のリクエストをOpenAIライブラリのnパラメータを使用して、単一のAPIコールに結合します: n = 必要な応答数
  • スロットリング。APIコールの頻度を制限するシステムを実装し、過度の使用やAPIの過負荷を避けます。
  • キャッシング。完了したAPIリクエストの結果を保存し、類似のプロンプトやリクエストに対する繰り返しのコールを避けます。

APIリクエストを効果的に管理するために、使用状況を追跡し、設定を適切に調整してください。必要に応じて、timeライブラリを使用してリクエスト間に遅延やタイムアウトを追加することを検討してください。

これらの高度なテクニックをPythonプロジェクトに適用することで、OpenAI APIを最大限に活用し、効率的でスケーラブルなAPI統合を確保できます。

実践的応用: 実世界のプロジェクトにおけるOpenAI API

OpenAI APIを実世界のプロジェクトに組み込むことで、多くの利点があります。このセクションでは、2つの具体的な応用例について説明します: Web開発におけるChatGPTの統合と、ChatGPTとPythonを使用したチャットボットの構築。

Web開発におけるChatGPTの統合

OpenAI APIを使用すると、ユーザーの問い合わせやニーズに合わせたインタラクティブで動的なコンテンツを作成できます。たとえば、ChatGPTを使って個別の製品説明を生成したり、魅力的なブログ記事を作成したり、サービスに関する一般的な質問に答えたりできます。OpenAI APIの力と少しのPythonコードで、可能性は無限大です。

PythonバックエンドからのAPI呼び出しを使用する簡単な例を考えてみましょう:

def generate_content(prompt):
    try:
        response = client.chat.completions.create(
            model="gpt-4",
            messages=[{"role": "user", "content": prompt}]
        )
        return response.choices[0].message.content
    except Exception as e:
        return str(e)

# コンテンツ生成にこの関数を使用
description = generate_content("Write a short description of a hiking backpack")

次に、生成されたコンテンツをウェブサイトに表示するために、HTMLやJavaScriptとdescriptionを統合するコードを書くことができます。

ChatGPTとPythonでのチャットボット構築

AIが動力源のチャットボットは、ユーザーエクスペリエンスの向上に重要な役割を果たしつつあります。ChatGPTの自然言語処理能力とPythonを組み合わせることで、文脈を理解し、ユーザー入力に対してインテリジェントに応答するチャットボットを構築できます。

ユーザー入力の処理と応答の取得の例を考えてみましょう:

def get_chatbot_response(prompt):
    try:
        response = client.chat.completions.create(
            model="gpt-4",
            messages=[{"role": "user", "content": prompt}]
        )
        return response.choices[0].message.content
    except Exception as e:
        return str(e)

# コマンドラインからのユーザー入力を取得
user_input = input("Enter your prompt: ")
response = get_chatbot_response(user_input)
print(response)

しかし、ループがないため、スクリプトは一度実行された後に終了します。そのため、条件分岐を追加することを検討してください。たとえば、基本的な条件分岐を追加し、ユーザーが停止フレーズ「exit」または「quit」と言うまでユーザーのプロンプトを探し続けるスクリプトを作成しました。

上記のロジックを考慮し、OpenAI APIエンドポイントでチャットボットを実行するための最終的なコードは次のようになります:

from openai import OpenAI
import os
from dotenv import load_dotenv

# .env ファイルからAPIキーをロードする
load_dotenv()
client = OpenAI(api_key=os.environ.get("CHAT_GPT_API_KEY"))

def get_chatbot_response(prompt):
    try:
        response = client.chat.completions.create(
            model="gpt-4",
            messages=[{"role": "user", "content": prompt}]
        )
        return response.choices[0].message.content
    except Exception as e:
        return str(e)

while True:
    user_input = input("You: ")
    if user_input.lower() in ["exit", "quit"]:
        print("Chat session ended.")
        break
    response = get_chatbot_response(user_input)
    print("ChatGPT:", response)

これが、Windowsのコマンドプロンプトで実行された際の表示例です。

うまくいけば、これらの例がChatGPT AIでの実験を始める手助けとなるでしょう。全体として、OpenAIは開発者に彼らのAPIを使って新たな、エキサイティングな製品を作成するための大きな機会を開いており、可能性は無限大です。

OpenAI APIの制限と価格

OpenAI APIは強力ですが、いくつかの制限があります:

  • データストレージ。OpenAIはあなたのAPIデータを30日間保持し、APIを使用することでデータストレージの同意が含意されます。送信するデータに注意してください。

  • モデル容量。チャットモデルには最大トークン数の制限があります。(例えば、GPT-3は4096トークンをサポートします。)APIリクエストがこの制限を超える場合、テキストを切り捨てたり省略したりする必要があります。

  • 料金。OpenAI APIは無料ではありません。独自の料金体系に従い、モデルのサブスクリプション料金とは別に設定されています。詳細な料金情報については、OpenAIの料金詳細を参照してください。(再び、GPT-4 TurboはGPT-4よりも3倍安いです!)

結論

ChatGPTモデルAPIの可能性をPythonで探求することは、カスタマーサポート、バーチャルアシスタント、コンテンツ生成など、さまざまなアプリケーションで大きな進歩**をもたらすことができます。この強力なAPIをプロジェクトに統合することで、PythonアプリケーションでGPTモデルの機能をスムーズに活用できます。

このチュートリアルを楽しんでいただけたら、以下のものもお楽しみいただけます:

Source:
https://www.sitepoint.com/python-build-ai-tools-openai-api/