【Python】OpenAI APIを介してプロンプトを送信し言語モデルが生成したテキストを取得する

スポンサーリンク

【Python】OpenAI APIを介してプロンプトを送信し言語モデルが生成したテキストを取得することについて解説しています。

なお、OpenAI APIを介してプロンプトを送信し言語モデルが生成したテキストを取得する場合は、事前にOpenAI API キーを取得する必要があります。

■今回の環境(Python)

今回のPythonは、バージョン3.9.16を用いる。(なお、Google Colaboratory(Google Colab)を使用。)

■OpenAI API用のPythonクライアント「openai」をインストールする

まずは、PythonにOpenAI API用のPythonクライアント「openai」をインストールします。

今回はpipを経由してインストールを行うので、Google Colab(https://colab.research.google.com/)にアクセスします。アクセス後、お持ちのGoogleアカウントでログインされているか確認しておきましょう。

確認後、Google Colab上部の「ファイル」から「ノートブックを新規作成」をクリックします。

クリックすると「ノートブック」が作成されます。

!pip install openai

作成後、上記のコマンドを入力し、コードセルの実行ボタンをクリックします。

Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/
Collecting openai
  Downloading openai-0.27.6-py3-none-any.whl (71 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 71.9/71.9 kB 4.1 MB/s eta 0:00:00
Requirement already satisfied: requests>=2.20 in /usr/local/lib/python3.10/dist-packages (from openai) (2.27.1)
Requirement already satisfied: tqdm in /usr/local/lib/python3.10/dist-packages (from openai) (4.65.0)
Collecting aiohttp (from openai)
  Downloading aiohttp-3.8.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.0 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.0/1.0 MB 24.5 MB/s eta 0:00:00
Requirement already satisfied: urllib3<1.27,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests>=2.20->openai) (1.26.15)
Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests>=2.20->openai) (2022.12.7)
Requirement already satisfied: charset-normalizer~=2.0.0 in /usr/local/lib/python3.10/dist-packages (from requests>=2.20->openai) (2.0.12)
Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests>=2.20->openai) (3.4)
Requirement already satisfied: attrs>=17.3.0 in /usr/local/lib/python3.10/dist-packages (from aiohttp->openai) (23.1.0)
Collecting multidict<7.0,>=4.5 (from aiohttp->openai)
  Downloading multidict-6.0.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (114 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 114.5/114.5 kB 3.5 MB/s eta 0:00:00
Collecting async-timeout<5.0,>=4.0.0a3 (from aiohttp->openai)
  Downloading async_timeout-4.0.2-py3-none-any.whl (5.8 kB)
Collecting yarl<2.0,>=1.0 (from aiohttp->openai)
  Downloading yarl-1.9.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (268 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 268.8/268.8 kB 12.7 MB/s eta 0:00:00
Collecting frozenlist>=1.1.1 (from aiohttp->openai)
  Downloading frozenlist-1.3.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (149 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 149.6/149.6 kB 6.2 MB/s eta 0:00:00
Collecting aiosignal>=1.1.2 (from aiohttp->openai)
  Downloading aiosignal-1.3.1-py3-none-any.whl (7.6 kB)
Installing collected packages: multidict, frozenlist, async-timeout, yarl, aiosignal, aiohttp, openai
Successfully installed aiohttp-3.8.4 aiosignal-1.3.1 async-timeout-4.0.2 frozenlist-1.3.3 multidict-6.0.4 openai-0.27.6 yarl-1.9.2

クリックすると、入力したコマンドでコードセルが実行し、ノートブックへインストールが開始されます。開始後、上記のメッセージが出力されます。出力後「Successfully installed」といったメッセージが出力されれば、インストールは完了となります。

完了後、ノートブック上の「+コード」の文字をクリックします。クリックすると、新しいコードセルが追加されます。

■OpenAI APIを介してプロンプトを送信し言語モデルが生成したテキストを取得する

では、次にOpenAI APIを介してプロンプトを送信し言語モデルが生成したテキストを取得するコードを新しいコードセルに記述していきます。

■コード(サンプル)

import openai

openai.api_key = "OpenAI APIキーを記述します"
gpt_prompt = "日本の首都はどこですか?"
response = openai.Completion.create(
    model="text-davinci-003",
    temperature=1.0,
    top_p=1.0,
    n=1,
    presence_penalty=0.0,
    frequency_penalty=0.0,
    max_tokens=150,
    prompt=gpt_prompt
)

print(response['choices'][0]['text'])

まずはimportでopenaiを呼び出します。その後、openaiに対して(.)ドット演算子を用いて、OpenAI APIの使用に必要なAPIキーを設定しています。APIキーは、OpenAIのWebサイトでアカウントを作成することで取得できます。APIキーを設定することで、OpenAI APIを呼び出すことができます。

次にgpt_promptという変数を定義し、その中に言語モデルへ送信するテキストを格納します。格納後、responseという変数を定義し、OpenAI APIを使用して、文章生成タスクを実行するためのメソッド(openai.Completion.create())を呼び出します。括弧内には引数,パラメータを渡します。今回用いる引数,パラメータは下記になります。

model:使用する言語モデルを指定します。この例では、”text-davinci-003″という言語モデルが使用されています。”text-davinci-003″は、OpenAIが提供する最も高度な言語モデルの一つであり、最新のGPT-3.5モデルに基づいています。

temperature:生成された文章にランダム性を与えるためのパラメータです。値が大きいほど、生成された文章がよりランダムになります。

top_p:トークンの確率分布をトリミングするためのパラメータです。このパラメータの値が小さいほど、生成された文章の予測可能性が高くなります。

n:生成する文章の数を指定します。この例では1つの文章が生成されます。

presence_penalty:モデルが指定された単語を回避するためのペナルティを設定します。このパラメータを使用すると、特定の単語を含む文章を生成することが難しくなります。

frequency_penalty:モデルが既に使用した単語を回避するためのペナルティを設定します。このパラメータを使用すると、生成された文章に重複する単語が少なくなります。

max_tokens:生成された文章の最大トークン数を指定します。トークンは、文章を構成する最小単位であり、言葉や句などの単位です。

prompt:生成する文章の元となるテキストを指定します。この例では、”日本の首都はどこですか?”がテキストとして指定されています。

参照:https://platform.openai.com/docs/api-reference/completions

メソッドを設定後、実行すると文章生成タスクが処理され、response変数に格納されます。

最後に、response変数内から回答テキストを取り出して出力します。具体的には、response[‘choices’][0][‘text’]という形式で回答テキストにアクセスしています。response[‘choices’]は、APIから返された複数の回答のリストであり、[0]はリストの最初の要素である単一の回答を指します。最後に、[‘text’]は回答のテキスト自体を指します。

■実行・検証

記述した後にコードセルを保存し実行・検証を行います。

実行・検証のため、コードセルの実行ボタンをクリックします。クリックすると今回のスクリプトが実行され、処理結果が出力。出力されたものを確認すると、OpenAI APIを介してプロンプトを送信し言語モデルが生成したテキストが取得されていました。

なお、APIの使用状況(https://platform.openai.com/account/usage)についてはこちらから確認できます。

コメント

タイトルとURLをコピーしました