Open in Colab

ChatGPT API入門#

ここでは ChatGPT API Reference を参考に、Pythonの公式バインディングを使ってAPIを利用します。

環境設定#

Pythonの公式バインディングをインストールします。

pip install openai

API key の環境変数を設定します。

Jupyter環境から実行する場合は次のマジックコマンドを実行します。

%env OPENAI_API_KEY=sk-xxx

Note

sk-xxx はAPI keyを指します。ご自身のものに置き換えて実行してください。

Pythonスクリプトから実行する場合は次のコマンドを実行します。

export OPENAI_API_KEY="sk-xxx"

VS Codeのワークスペースで環境変数を設定するには、ワークスペースのディレクトリに .env ファイルを作成し、環境変数を設定します。

OPENAI_API_KEY="sk-xxx"

.vscode/settings.json に次のエントリを追加します。

{
    "python.envFile": "${workspaceFolder}/.env"
}

Models#

Modelsではモデルのリストや基本情報を確認します。

List models ではどのモデルが利用可能かを確認します。

import os
import openai

openai.api_key = os.getenv("OPENAI_API_KEY")
model_list = openai.Model.list()
model_list.get("data")[0]
<Model model id=babbage at 0x7f9278f50680> JSON: {
  "created": 1649358449,
  "id": "babbage",
  "object": "model",
  "owned_by": "openai",
  "parent": null,
  "permission": [
    {
      "allow_create_engine": false,
      "allow_fine_tuning": false,
      "allow_logprobs": true,
      "allow_sampling": true,
      "allow_search_indices": false,
      "allow_view": true,
      "created": 1669085501,
      "group": null,
      "id": "modelperm-49FUp5v084tBB49tC4z8LPH5",
      "is_blocking": false,
      "object": "model_permission",
      "organization": "*"
    }
  ],
  "root": "babbage"
}

Retrieve model ではモデルの基本情報を確認します。

openai.Model.retrieve("text-davinci-003")
<Model model id=text-davinci-003 at 0x7f9278698630> JSON: {
  "created": 1669599635,
  "id": "text-davinci-003",
  "object": "model",
  "owned_by": "openai-internal",
  "parent": null,
  "permission": [
    {
      "allow_create_engine": false,
      "allow_fine_tuning": false,
      "allow_logprobs": true,
      "allow_sampling": true,
      "allow_search_indices": false,
      "allow_view": true,
      "created": 1683141911,
      "group": null,
      "id": "modelperm-0BY5Vvyou9mtLXyeOVqfTKGl",
      "is_blocking": false,
      "object": "model_permission",
      "organization": "*"
    }
  ],
  "root": "text-davinci-003"
}

Completions#

Completionsでは prompt に与えられた内容を補完します。

ここでは Create completion を使って prompt に曜日の文字列を与えて補完しています。

openai.Completion.create(
    model="text-davinci-003", prompt="Sunday Monday", max_tokens=7, temperature=0
)
<OpenAIObject text_completion id=cmpl-7EEA8kNMN7kQTnDJX6o2yENCJiZG0 at 0x7f9278e3f4c0> JSON: {
  "choices": [
    {
      "finish_reason": "length",
      "index": 0,
      "logprobs": null,
      "text": " Tuesday Wednesday Thursday Friday Saturday\n\n"
    }
  ],
  "created": 1683625388,
  "id": "cmpl-7EEA8kNMN7kQTnDJX6o2yENCJiZG0",
  "model": "text-davinci-003",
  "object": "text_completion",
  "usage": {
    "completion_tokens": 7,
    "prompt_tokens": 2,
    "total_tokens": 9
  }
}

prompt には複数渡せます。大量のデータがある場合はAPIを使うことでまとめて処理できます。

completion_result = openai.Completion.create(
    model="text-davinci-003",
    prompt=["Sunday Monday", "January February"],
    max_tokens=7,
    temperature=0,
)
for choice in completion_result.get("choices"):
    print(choice.text)
 Tuesday Wednesday Thursday Friday Saturday


 March April May June July August September

Chat#

Chatはメッセージを与えると応答を返します。

ここでは Create chat completion を使って、俳句を読んでもらいます。

role には systemuserassistant のいずれかを指定します。

chat_completion_result = openai.ChatCompletion.create(
    model="gpt-3.5-turbo", messages=[{"role": "user", "content": "梅雨にちなんだ俳句を読んでください"}]
)

chat_completion_result.choices[0].message["content"].split("\n")
['雨降りに\u3000蛍の光も\u3000淋しげな',
 '',
 '夕立の\u3000路地を走る\u3000小さな猫',
 '',
 '雨風に\u3000鈴虫の鳴き声\u3000寂しげに',
 '',
 '涼しさを\u3000甦らせる梅雨\u3000鯨の波',
 '',
 '小鳥の巣\u3000雨水も入りて\u3000きらめく如く',
 '',
 '湿気に\u3000包まれた草木\u3000密やかなる',
 '',
 '濃い霧に\u3000森の野鳥の\u3000羽音かな',
 '',
 'すすき葺き\u3000古き屋根の\u3000音もせず',
 '',
 '夜の静けさ\u3000雪解けの\u3000街路かな',
 '',
 'カエルの唄\u3000聴きながら寝る\u3000梅雨夜かな',
 '',
 '雲に揺れ\u3000白鳥の姿を\u3000探る心',
 '',
 '熱帯夜に\u3000時々打つ雷\u3000ほっとする',
 '',
 '虫の音に\u3000眠れぬ夜は\u3000つごもりして',
 '',
 '秋近し\u3000草木の息吹\u3000ひたひたと',
 '',
 '蛙鳴くや\u3000草の戸の外の\u3000水たまり',
 '',
 'こんな雨の\u3000夜でも明日に\u3000期待したい',
 '',
 '鳥のさえずりに\u3000夜明けの梅雨かな',
 '',
 '夕暮れに\u3000沼の蓮が\u3000冴えやかに',
 '',
 '茜雲\u3000崩れゆく\u3000梅雨晴れ',
 '',
 '湿った土に\u3000咲くあじさい\u3000神秘の色',
 '',
 '鳴いていれば\u3000寝かせない猫の\u3000梅雨場所',
 '',
 '洗濯物\u3000二度干ししても\u3000おえない梅雨']