【Python】ChatGPTを起動しチャットボット作成|OpenAI APIの利用申請手順も解説

こんにちは、DXCEL WAVEの運営者(@dxcelwave)です!

こんな方におすすめ!
  • ChatGPT APIの利用手順が知りたい。
  • PythonをもとにChatGPT APIを呼び出し、チャットボットを作成する方法が知りたい。
目次

【OpenAI】ChatGPTとは?

ChatGPTとは、OpenAIが開発した対話型チャットボットのモデルです。ChatGPTの名前は、GPT-3という第3世代の生成言語モデルに由来しています。

ChatGPTのモデルには、人工知能(AI)が搭載されており、人間の発話に対して自然なやり取りを可能にしています。また、英語をはじめ、中国語、日本語、フランス語など複数言語を認識し、人間らしく応答できるのも特徴的です。

さらに、ChatGPTではチャットの他に、画像生成など近年多様な機能がリリースされてます。以下、ChatGPTで利用可能な機能一覧を示します。

  • チャット機能(対話・文章生成)
  • テキストから画像を生成する機能
  • オーディオを文字起こしする機能

Pythonを用いたChatGPT利用概要

Pythonを用いたAPI通信のもとChatGPTを起動し、チャットボットを作成する方法について解説します。

これら実現に際して、本記事では次の内容を詳しく言及します。

  • OpenAIが提供するChatGPTのAPI利用手順
  • PythonでChatGPTを実行するプログラム構築方法

【OpenAI】ChatGPTのAPI取得手順

Pythonを用いてChatGPTを実行する場合、OpenAIが提供するAPIを取得する必要があります。

次の手順に従いAPIの取得方法を解説します。尚、2023年3/1時点でAPIは一定回数の呼出まで無料でできるようになっています。

  1. OpenAIのアカウント登録
  2. 組織情報(Organization)の取得
  3. APIシークレットキーの発行

OpenAIのアカウント登録

はじめに、OpenAIの公式ホームページに移動し、アカウントを作成しましょう。

(1)OpenAIの公式ページにアクセス

OpenAIの公式ページ(https://platform.openai.com)に遷移します。

続いて、右上の「Sign Up」をクリックしましょう。

(2)アカウント情報を入力

アカウント作成画面に移動します。お手元のメールアドレスを入力し、アカウント作成します。

(3)アカウント名を登録

名前と組織名(Organization Name)を入力し、Continueをクリックします。

(4)電話番号認証

最後に、電話番号を認証します。認証後、アカウント登録完了です。

組織情報(Organization)の取得

OpenAI公式:https://platform.openai.com/account/org-settings

後続で示すChatGPT API利用に際して、Organization IDAPIシークレットキーをホームページから取得しておく必要があります。

Organization IDは「Organization > Settings」から取得できます。Organization IDは後続のPythonプログラミングで活用しますため、お手元にメモとして残しておきましょう!

APIシークレットキーの発行

OpenAI公式:https://platform.openai.com/account/api-keys

ChatGPTのAPI利用に際して、APIシークレットキーの発行が必要です。

シークレットキーは「User > API Keys」から取得できます。シークレットキーは後続のPythonプログラムで利用するため、お手元にメモとして残しておきましょう。

【事前準備】OpenAIのPythonライブラリをインストール

ChatGPT APIをPythonで利用する場合、openaiライブラリを活用します。

コマンドプロンプト(WIndows)またはターミナル(Mac)を開き、以下を実行し、ライブラリをインストールしましょう。

pip install openai

【実践】PythonでChatGPT APIを呼び出しチャットボット構築

実際にPythonプログラムを記述し、ChatGPT APIを活用したチャットボットを作成していきます。

PythonライブラリとAPI情報の読込

はじめに、Pythonプログラムの先頭にライブラリとAPI認証情報を記述します。

前述で取得したOrganization IDシークレットキーをそれぞれ入力しましょう。

import openai
openai.organization = "<Organization IDをここに入力>"
openai.api_key      = "<APIシークレットキーをここに入力>"

チャットボット関数作成

続いて、ChatGPT APIを呼び出すためのチャットボット関数を作成します。次のコードを記述しましょう。

ChatGPTの言語モデル開発において、定期的に新しいモデルがリリースされています。以下、現時点での最新版の利用を推奨します。

「gpt-3.5-turbo」モデルを用いた場合のコード例(2023年3月最新モデル)

コード

def Ask_ChatGPT(message):
    
    # 応答設定
    completion = openai.ChatCompletion.create(
                 model    = "gpt-3.5-turbo",     # モデルを選択
                 messages = [{
                            "role":"user",
                            "content":message,   # メッセージ 
                            }],
    
                 max_tokens  = 1024,             # 生成する文章の最大単語数
                 n           = 1,                # いくつの返答を生成するか
                 stop        = None,             # 指定した単語が出現した場合、文章生成を打ち切る
                 temperature = 0.5,              # 出力する単語のランダム性(0から2の範囲) 0であれば毎回返答内容固定
    )
    
    # 応答
    response = completion.choices[0].message.content
    
    # 応答内容出力
    return response

引数情報

ChatGPTの対話メソッドで活用する引数情報を以下に示します。

スクロールできます
引数名概要
modelChatGPTに利用する対話モデル
messages入力文章の設定値
max_tokens生成する文章の最大単語数
nいくつの返答を生成するか。
例えば、2を選択した場合、2つの返答を返す。
stop指定した単語が出現した場合、文章生成を打ち切る。
temperature0から2の範囲の範囲で出力する単語のランダム性を設定
0であれば、同じ入力文章に対して毎回固定化された返答を返す。
「text-davinci-003」モデルを用いた場合のコード例

コード

def Ask_ChatGPT(message):
    
    # 応答設定
    completion = openai.Completion.create(
                    engine      = "text-davinci-003",  # モデルエンジンを選択
                    prompt      = message,             # インプットする文章
                    max_tokens  = 1024,                # 生成する文章の最大単語数
                    n           = 1,                   # いくつの返答を生成するか
                    stop        = None,                # 指定した単語が出現した場合、文章生成を打ち切る
                    temperature = 0.5,                 # 出力する単語のランダム性(0から2の範囲) 0であれば毎回返答内容固定
    )

    # 応答
    response = completion.choices[0].text
    
    # 応答内容出力
    return response

引数情報

ChatGPTの対話メソッドで活用する引数情報を以下に示します。

スクロールできます
引数名概要
engineChatGPTに利用する対話モデル
prompt入力する文章
max_tokens生成する文章の最大単語数
nいくつの返答を生成するか。
例えば、2を選択した場合、2つの返答を返す。
stop指定した単語が出現した場合、文章生成を打ち切る。
temperature0から2の範囲の範囲で出力する単語のランダム性を設定
0であれば、同じ入力文章に対して毎回固定化された返答を返す。

チャットボット実行

前述のチャットボット関数に入力文章(message)を渡し、ChatGPTを起動します。

コード

# 質問内容
message = "DXCEL WAVEってどんなサイトですか?"

# ChatGPT起動
res = Ask_ChatGPT(message)

# 出力
print(res)

出力イメージ

上記のコードを実行すると、次のような出力結果が得られました。非常に自然な文章になっていますね。

# DXCEL WAVEは、プログラミング初心者や中級者向けのオンラインプログラミング学習サイトです。
# プログラミング言語を学習したり、技術を磨くための情報を提供しています。
# また、技術情報やプログラミングに関する記事を掲載しているので、プログラミングに関する最新情報を知ることもできます。

【参考】利用可能なモデルエンジンの確認

チャットボット関数ではopenai.Completion.create()メソッドを活用しました。このメソッドに渡した引数engineには様々なモデルが指定できます。以下、指定可能なモデルの確認方法も併せて解説します。

コード

指定可能なモデルの確認には、次のコードを実行します。

# モデルリスト表示
openai.Model.list()

出力イメージ

出力結果を見ると、idの部分にtext-davinci-003davinciなど様々なモデルIDが一覧表示されます。この文字列で示されたモデルIDを前述の引数に指定することで、お好みのモデルが利用できます。

#     {
#       "created": 1669599635,
#       "id": "text-davinci-003",
#       "object": "model",
#       "owned_by": "openai-internal",
#       "parent": null,
#       "permission": [],
#       "root": "text-davinci-003"
#     },
#     {
#       "created": 1649359874,
#       "id": "davinci",
#       "object": "model",
#       "owned_by": "openai",
#       "parent": null,
#       "permission": [],
#       "root": "davinci"
#     },

【まとめ】OpenAI ChatGPT APIを利用したPythonコード全量

最後に、本日ご紹介したPythonコードを全量示します。

# =============================================================
# ライブラリ&API認証情報
# =============================================================

import openai
openai.organization = "<Organization IDをここに入力>"
openai.api_key      = "<APIシークレットキーをここに入力>"

# =============================================================
# チャットボット関数
# =============================================================

def Ask_ChatGPT(message):
    
    # 応答設定
    completion = openai.ChatCompletion.create(
                 model    = "gpt-3.5-turbo",     # モデルを選択
                 messages = [{
                            "role":"user",
                            "content":message,   # メッセージ 
                            }],
    
                 max_tokens  = 1024,             # 生成する文章の最大単語数
                 n           = 1,                # いくつの返答を生成するか
                 stop        = None,             # 指定した単語が出現した場合、文章生成を打ち切る
                 temperature = 0.5,              # 出力する単語のランダム性(0から2の範囲) 0であれば毎回返答内容固定
    )
    
    # 応答
    response = completion.choices[0].message.content
    
    # 応答内容出力
    return response

# =============================================================
# チャットボット実行
# =============================================================

# 質問内容
message = "DXCEL WAVEってどんなサイトですか?"

# ChatGPT起動
res = Ask_ChatGPT(message)

# 出力
print(res)

【参考】AI・機械学習における配信情報まとめ

当サイトではAI・機械学習における「基礎」から「最新のプログラミング手法」に至るまで幅広く解説しております。また「おすすめの勉強方法」をはじめ、副業・転職・フリーランスとして始める「AI・機械学習案件の探し方」についても詳しく言及しています。

【仕事探し】副業・転職・フリーランス

【教育】おすすめ勉強法

【参考】記事一覧

最後に

この記事が気に入ったら
フォローしてね!

目次