ChatGPT API を使うための手順

# １．はじめに
　OpenAIのChatGPT APIは、ChatGPTのようなテキスト生成AIを呼び出すためのAPIです。ChatGPT APIにより、各種プログラムにテキスト生成AIを組み込むことが可能です。
　ここでは、ChatGPT APIを使うため、cURL.exe やTalend API Testerから試用するまでの手順を（１）アカウントの登録（２）APIキーの取得（３）API呼出費用の支払い（４）APIの試用の段階に分けて説明します。

# ２．OpenAI（ChatGPT）のAPIを使うステップ
OpenAI（ChatGPT）のAPIを使うためには、以下の２つのステップが必要です。
## ２．１．アカウント登録
以下、アカウント登録について順次説明します。

（１）初期画面にて、画面右上の Get Started をクリックします。
https://openai.com/
![account000_crop.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/0896f6bf-9dcb-fc9f-f666-873b5e245779.png)

（２）Create Your Account画面に遷移します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/11949980-57f6-92c8-7855-cdb12e3ce076.png" width="60%">


　Emailアドレスによる登録、Googleアカウントによる登録、マイクロソフトアカウントによる登録、AppleIDによる登録の４通りの方法があります。

### ２．１．１．Emailアドレスによる登録
・Create your Account画面にて、emailアドレスを入力して、Continueボタンをクリックします。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/9e95c147-e7fe-0b89-a66d-69f2adc55a23.png" width="60%">

・Verify Your Email画面にてパスワードを入力して、Continueボタンをクリックします。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/7a027d3b-5383-2617-39f9-b9f917ad124f.png" width="60%">

・以下のメールを受信したならば、"Verify email address"をクリックします。以下はoutlookのメール画面です。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/391c1bc3-9c7a-27d9-04a9-5a98819c6dd7.png" width="60%">

・Email verified画面に自動遷移し、Emailが確認できたことが示されます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/d46da3b2-d821-d4aa-9ef5-a9dfb3f749dd.png" width="60%">

・Tell us about you画面にて、このアカウントに紐づく名前と組織名（任意事項）と誕生日を入力して、Continueボタンをクリックします。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/7b48e6f5-1510-d511-d053-1ea85d0bcfdd.png" width="60%">

・Verify your phone number画面にて、このアカウントを検証するための携帯電話番号を入力して、Send Codeボタンをクリックします。すると、この携帯電話にSMS（ショートメッセージ）が来ますので、ショートメッセージ中のリンクをクリックして認証します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/c28b448b-cd44-35c7-2021-818daebe4b39.png" width="60%">

・これにより、アカウントの登録は完了です。

### ２．１．２．Googleアカウントによる登録
　 Continue with Googleボタンをクリックすると、Googleにログイン画面に遷移します。ここで、選択するアカウントをクリックしてください。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/c6a1ae01-bcc0-d952-24b1-8ad6f66058e8.png" width="60%">

・Tell us about you画面にて、このアカウントに紐づく名前と組織名（任意事項）と誕生日を入力して、Continueボタンをクリックします。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/c52f8b90-f653-6440-3b1f-46fe729f92c6.png" width="60%">

・Verify your phone number画面にて、このアカウントを検証するための携帯電話番号を入力して、Send Codeボタンをクリックします。すると、この携帯電話にSMS（ショートメッセージ）が来ます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/b603ad0b-f631-c730-a3e1-3147917ddecf.png" width="60%">

・Enter code画面にて、携帯電話のショートメッセージに書かれた６桁の番号を入力します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/0b244357-6f51-56c3-917c-61adcab7b3e5.png" width="60%">

・これにより、アカウントの登録は完了です。

### ２．１．３．マイクロソフトアカウントによる登録
・サインイン画面にて、アカウントを確認／入力して、次へボタンをクリックします。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/2ceb47bb-a781-a9ca-cde9-dc8b8ff2ac7b.png" width="60%">

・パスワードの入力画面にて、このアカウントのパスワードを入力します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/c840b12b-48cb-da70-bcc0-4669e072eb07.png" width="60%">

・Tell us about you画面にて、このアカウントに紐づく名前と組織名（任意事項）と誕生日を入力して、Continueボタンをクリックします。以下は上記と同様です。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/7eff6d93-31b4-12a0-53fe-3e677139fc10.png" width="60%">

### ２．１．４．AppleIDによる登録
・Continue with Appleをクリックすると、以下の画面に遷移します。
・この画面にて、AppleIDを入力します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/953b8d7b-703f-6fd5-ced8-563f933103db.png" width="60%">

・AppleIDに紐づいた携帯電話にショートメッセージが飛びますので、ショートメッセージに記載された確認コードを入力します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/84ce7f5a-f77b-07a1-ef40-b25322a8db60.png" width="60%">

・「このプラウザを信頼しますか」画面にて、信頼するボタンをクリックします。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/9b9c3b54-aab4-3e0d-0fa8-17ad612086b6.png" width="60%">

・「Appleでサインイン」画面にて、続けるボタンをクリックします。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/b56d2b2c-16c8-211e-7ad2-599adef7c5cc.png" width="60%">

・以下のアカウント作成画面にて、続けるボタンをクリックします。以降の登録方法は同様です。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/c07e78a7-8834-cfb7-23bb-ac3f6bbabd31.png" width="60%">

## ２．２．API key の取得

・上記のOpenAIに登録したアカウントでログインすると、以下の画面が表示されます。ここでAPIを選択します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/030b0dbb-eefe-4b23-3265-d6568167d5c1.png" width="60%">

・API画面の左側ののアカウントメニューから、View API keysをクリックします。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/174ba5be-4d6b-a9a1-b816-766900cb363c.png" width="50%">

・API keys画面から、Create new secret keyボタンをクリックします。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/62341bf1-8e9c-4bd4-36c2-da01ef6ca6ec.png" width="80%">

・Create new secret keyダイアログで、テストキーを入力します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/0bbc0320-0744-c9ee-2f56-2dbe49dab240.png" width="60%">

・新しいAPIキーが生成されますので、記録しておきます。なお、この画面以外にキーを確認できる画面はありません。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/1cc343d5-202f-aff5-6c77-34a531d42c22.png" width="60%">

・API keys画面では、APIキーを新規作成したり、削除するなどが可能です。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/41a7b49f-ce55-ae78-9a97-7fd1b3aafe03.png" width="80%">

:::note alert
・なお、API Keyは、他人に知られないよう秘密に管理してください。APIを呼び出す度に費用が発生するためです。
:::

## ２．３．API費用の支払い
:::note info
APIを使う上では、所定の費用が必要です。以前は18ドルの無料枠があったようですが、2023年9月2日の時点では、無料枠はなくなっているようです。
:::

・初期状態の残金額は $0.00 です。この状態ではAPIを呼び出すことができず、エラーとなります。

　よって、Start Payment planを選択します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/c53a0c29-7adc-3303-dcb7-69dff7c760c7.png" width="60%">

・法人(Company)なのか個人(Individual)なのかを選択します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/608e7c9d-4eb2-c55d-54e3-902aab347d07.png" width="60%">

・クレジットカード情報を入力します。デフォルトでは 10ドル の支払いとなります。これにより OpenAI API を呼び出し可能となります。この費用で、ChatGPT4 （月額 20ドル）まで呼出可能となることを考えると安く感じます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/1f1e523d-3124-8d25-16db-3e400703c98b.png" width="60%">

なお、各APIの呼び出し費用は以下に示されています。

https://openai.com/pricing


## ２．４．APIの呼び出し
### ２．４．１．Windows 10上のcURL.exe による呼出

### gpt-3.5-turbo による呼び出し

・gpt-3.5-turbo による呼び出し例です。ここでは、"tell me the height of Mt.Everest"と呼びかけるプロンプトを与えています。なお、ＡＰＩキーのところには、上記手順で発行したAPIキーを記載してください。

```bat:curl.exe
curl https://api.openai.com/v1/chat/completions  -H "Content-Type: application/json"  -H "Authorization: Bearer ＡＰＩキー"  -d "{  \"model\": \"gpt-3.5-turbo\",  \"messages\": [{\"role\": \"user\", \"content\": \"tell me the height of Mt.Everest\"}]}"
```

 このAPIの応答jsonは以下です。回答は、"The height of Mount Everest is 8,848.86 meters (29,031.7 feet)." です。
```json:応答
{
  "id": "chatcmpl-7uEAcU3U5Ct4ZEUjgXJ7o3Yg07Mi2",
  "object": "chat.completion",
  "created": 1693635194,
  "model": "gpt-3.5-turbo-0613",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "The height of Mount Everest is 8,848.86 meters (29,031.7 feet)."
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 16,
    "completion_tokens": 21,
    "total_tokens": 37
  }
}
```

 なお、APIの費用を支払っていないときには、以下のようなjsonが返されます。
```json:費用を支払っていないときの応答
{
    "error": {
        "message": "You exceeded your current quota, please check your plan and billing details.",
        "type": "insufficient_quota",
        "param": null,
        "code": "insufficient_quota"
    }
}
```

### text-davinci-003 による呼び出し

・以下 text-davinci-003 による呼び出し例です。ここでは、"特許を簡単に取得する方法を教えて"と呼びかけるプロンプトを与えています。なお、ＡＰＩキーのところには、上記手順で発行したAPIキーを記載してください。
```bat
curl -i -X POST -H "Content-Type:application/json"  -H "Authorization:Bearer ＡＰＩキー"  -d "{  \"model\": \"text-davinci-003\",  \"prompt\": \"特許を簡単に取得する方法を教えて\",  \"max_tokens\": 500,  \"temperature\": 0}" https://api.openai.com/v1/completions
```

これに対する応答jsonです。回答は、「特許を取得するには、まず特許庁に特許申請を行う必要があります。特許申請には、特許を取得するために必要な書類や資料を提出する必要があります。特許庁は、申請者が提出した書類や資料を確認し、特許を取得するかどうかを決定します。特許庁が特許を取得することを承認した場合、特許が取得されます。」というものです。
　なお、text-davinci-003の機械学習モデルは、2024年1月4日以降は使用てきなくなるようです。
```json:応答
{
  "warning": "This model version is deprecated. Migrate before January 4, 2024 to avoid disruption of service. Learn more https://platform.openai.com/docs/deprecations",
  "id": "cmpl-7uDZ75q6ti3ETg0tseSuWn1ld2Twp",
  "object": "text_completion",
  "created": 1693632869,
  "model": "text-davinci-003",
  "choices": [
    {
      "text": "ください\n\n特許を取得するには、まず特許庁に特許申請を行う必要があります。特許申請には、特許を取得するために必要な書類や資料を提出する必要があります。特許庁は、申請者が提出した書類や資料を確認し、特許を取得するかどうかを決定します。特許庁が特許を取得することを承認した場合、特許が取得されます。",
      "index": 0,
      "logprobs": null,
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 27,
    "completion_tokens": 242,
    "total_tokens": 269
  }
}
```

### ２．４．２．Windows 10/chrome 上のTalend API Tester による呼出
　ChromeのアドインであるTalend API Testerは、RestAPIのテストツールです。Chromeのウインドウ上で容易にテストできます。

### gpt-3.5-turbo の呼び出し

・gpt-3.5-turbo の呼び出し例です。ここでは、"Hello, tell me the largest lake in the world"と呼びかけるプロンプトを与えています。

![gpt-3.5-turbo_000.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/58a5c6fa-7ffb-6ca2-e575-3dc74f841c6b.png)

　メソッド：POST
　呼び出しURL：https://api.openai.com/v1/chat/completions
　Headers：
　　Content-type : application/json
　　Authorization : Bearer ＡＰＩキー
　なお、Bearer の後には、上記手順で発行したAPIキーを記載してください。
　Bodyには以下を設定します。

```json:BODY
{
  "model": "gpt-3.5-turbo",
  "messages": [
    {
      "role": "system",
      "content": "You are a helpful assistant."
    },
    {
      "role": "user",
      "content": "Hello, tell me the largest lake in the world"
    }  
  ]
}
```

・これに対する応答jsonです。回答は、"The largest lake in the world by surface area is the Caspian Sea, which is situated between Europe and Asia. It has a surface area of about 371,000 square kilometers (143,000 square miles)."です。

![gpt-3.5-turbo_001.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/2f540a38-073c-33fa-7c1d-f5267b2b3bec.png)

```json:応答
{
    "id": "chatcmpl-7uE5PP1pEKIliKOkFGF3gKEvFvoW7",
    "object": "chat.completion",
    "created": 1693634871,
    "model": "gpt-3.5-turbo-0613",
    "choices": [
        {
            "index": 0,
            "message": {
                "role": "assistant",
                "content": "The largest lake in the world by surface area is the Caspian Sea, which is situated between Europe and Asia. It has a surface area of about 371,000 square kilometers (143,000 square miles)."
            },
            "finish_reason": "stop"
        }
    ],
    "usage": {
        "prompt_tokens": 27,
        "completion_tokens": 44,
        "total_tokens": 71
    }
}
```

### gpt-4 の呼び出し

・gpt-4 の呼び出し例です。ここでは、"特許明細書の明確性について教えてください。"と呼びかけるプロンプトを与えています。なお、Bearer の後には、上記手順で発行したAPIキーを記載してください。

![gpt-4_000.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/bed00035-43c0-5f49-a599-7b464e37bb18.png)
　メソッド：POST
　呼び出しURL：https://api.openai.com/v1/chat/completions
　Headers：
　　Content-type : application/json
　　Authorization : Bearer ＡＰＩキー
　なお、Bearer の後には、上記手順で発行したAPIキーを記載してください。
　Bodyには以下を設定します。

```json:BODY
{
  "model": "gpt-4",
  "messages": [
    {
      "role": "system",
      "content": "あなたは有能な先生です"
    },
    {
      "role": "user",
      "content": "特許明細書の明確性について教えてください。"
    }  
  ]
}
```

・以下は、これに対する応答jsonです。回答は、"特許明細書の明確性は、特許法において極めて重要な要素の一つです。故意にあいまいにする場合もありますが、一般的には可能な限り詳細で明確に記述することが求められます。\n\n特許明細書の明確性とは、請求の範囲、詳細な説明、および図面、などの要素が、その発明の「何であるか」を明瞭にし、「どのように機能するか」を理解できるようにすることを意味します。これは、業界の専門家がその技術を理解し、実装できる程度に明確かつ具体的に書かれていなければならないという要件に関連しています。\n\n特許明細書の明確性の目的は二つあります。一つ目は、公共に対する公開性を保証すること、すなわち他の人がその特許情報を利用してさらに新しいアイデアを生み出すための基盤を提供することです。二つ目は、他人がその特許に侵害しないようにするため、特許の範囲が理解できるようにすることです。\n\nだからといって、細かすぎる説明は逆に理解を妨げる場合もあります。適切なバランスと視点で記述することが求められます。また、明確性は特許が認められるかどうかを判断する一因ともなるので注意が必要です。\n\n具体的な書き方や技巧については専門家に相談する等、適切なアドバイスを求めるのが最善です。"です。

![gpt-4_001.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/8ebe6f68-b348-dc27-e721-9b6c19ae736e.png)

```json:応答
{
    "id": "chatcmpl-7tzC27ywchUABuFtH2FwW3lo2W4do",
    "object": "chat.completion",
    "created": 1693577622,
    "model": "gpt-4-0613",
    "choices": [
        {
            "index": 0,
            "message": {
                "role": "assistant",
                "content": "特許明細書の明確性は、特許法において極めて重要な要素の一つです。故意にあいまいにする場合もありますが、一般的には可能な限り詳細で明確に記述することが求められます。\n\n特許明細書の明確性とは、請求の範囲、詳細な説明、および図面、などの要素が、その発明の「何であるか」を明瞭にし、「どのように機能するか」を理解できるようにすることを意味します。これは、業界の専門家がその技術を理解し、実装できる程度に明確かつ具体的に書かれていなければならないという要件に関連しています。\n\n特許明細書の明確性の目的は二つあります。一つ目は、公共に対する公開性を保証すること、すなわち他の人がその特許情報を利用してさらに新しいアイデアを生み出すための基盤を提供することです。二つ目は、他人がその特許に侵害しないようにするため、特許の範囲が理解できるようにすることです。\n\nだからといって、細かすぎる説明は逆に理解を妨げる場合もあります。適切なバランスと視点で記述することが求められます。また、明確性は特許が認められるかどうかを判断する一因ともなるので注意が必要です。\n\n具体的な書き方や技巧については専門家に相談する等、適切なアドバイスを求めるのが最善です。"
            },
            "finish_reason": "stop"
        }
    ],
    "usage": {
        "prompt_tokens": 44,
        "completion_tokens": 538,
        "total_tokens": 582
    }
}
```

### DALL-E の呼び出し

・OpenAI社が提供する画像生成AIのDALL-E の呼び出し例です。ここでは、"A girl who has a umbrella"と呼びかけるプロンプトを与えています。なお、Bearer の後には、上記手順で発行したAPIキーを記載してください。


![dall-e_001.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/099d5253-d3f2-1f7c-b8d7-f2920e6eb8e1.png)
　メソッド：POST
　呼び出しURL：https://api.openai.com/v1/chat/completions
　Headers：
　　Content-type : application/json
　　Authorization : Bearer ＡＰＩキー
　なお、Bearer の後には、上記手順で発行したAPIキーを記載してください。
　Bodyには以下を設定します。
　n は、画像の生成数を示します。
　size は、画像の縦横サイズを示します。

```json:BODY
{
    "prompt": "A girl who has a umbrella",
    "n": 1,
    "size": "512x512"
}
```
・以下は、これに対する応答jsonです。json中に画像のURLが埋め込まれています。

![dall-e_002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/de770eb4-2c95-c758-7613-64e52878297b.png)

```json:
{
"created": 1693644614,
"data":[
{
"url": "https://oaidalleapiprodscus.blob.core.windows.net/private/org-1gizimHLOt4DnMYxfwpX9Crp/user-5nEBjDM5jU7B046i7uAIHo7A/img-i2InKtqWijhva0fvGv9aWjpp.png?st=2023-09-02T07%3A50%3A14Z&se=2023-09-02T09%3A50%3A14Z&sp=r&sv=2021-08-06&sr=b&rscd=inline&rsct=image/png&skoid=6aaadede-4fb3-4698-a8f6-684d7786b067&sktid=a48cca56-e6da-484e-a814-9c849652bcb3&skt=2023-09-02T06%3A18%3A39Z&ske=2023-09-03T06%3A18%3A39Z&sks=b&skv=2021-08-06&sig=6cX4ijzHQ%2BAtXTUoCBwwJDW048i2EuzvuEDZ1lmA/p4%3D"
}
```

生成された画像は以下です。
![img-i2InKtqWijhva0fvGv9aWjpp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/18831fc3-7c0b-68b8-6d23-694eabce4b9e.png)

"black and white patent illustration that A girl who has a umbrella"と呼びかけるプロンプトに修正してみました。これならば、特許図面としてそのまま流用できそうてす。

![img-LrpKq82xy4JLWHvdMSpRdyT3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/8bf75538-e864-cd40-9265-6a5798b939a4.png)

更に"black and white patent illustration,office lady who are tapping smart-phone"と呼びかけるプロンプトに修正してみました。特許図面として違和感なさそうですがどうでしょうか。

![img-bwOMSb0MWGcjabhKqAUPmr12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/2a400972-c4aa-fd54-6e41-bc7c9cba3351.png)


# ３．おわりに
　ここでは、OpenAIのChatGPT APIを、cURL.exe や Talend API Testerによって試用するまでの手順を確認しました。ChatGPT APIにより、任意のアプリケーションにテキスト生成AIの機能を組み込むことができ、ブラウザ上での使用の制限を無くすことが可能です。
　ChatGPT APIは有償ですが、その費用は極めて廉価であり、ブラウザ上でChatGPT4 を使うより廉価な場合も多いと思います。この記事に基づき、ChatGPT APIが、広くに普及することを望みます。