OpenAI APIの使い方講座【公式Quickstart】

# はじめに
本記事では、OpenAI APIの使い方を説明します。内容は、公式ドキュメントのQuickstart（＋α）です。
生成AI分野の情報は急速に古くなってしまうので、情報鮮度が高い公式ドキュメントを参考にしています。

https://platform.openai.com/docs/quickstart?context=python

# OpenAI APIをQuickstartする手順

## Step 0: 事前準備
公式ドキュメントには載っていない事前準備について書きます。

### アカウントの作成

OpenAIのアカウントを持っていない場合は、作成する必要があります。

https://openai.com/

### APIキーの作成

OpenAI公式サイトの右上からログインします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2627015/337f4b45-b5cf-d347-27d7-314c409d3623.png)


ChatGPTとAPIが表示されるので、APIを選びます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2627015/15a64593-85b1-45c5-50f1-4ba9b32e34b7.png)


左の方にあるAPI keys（鍵のマーク）を選びます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2627015/706a4901-42e7-dcb0-967c-d62f657a289e.png)

Create new secret keyからAPIキーを作成します。

:::note warn
- 一度しか表示されないので大切に保存してください。
- 悪意のある他人に渡ってしまった場合、勝手にAPIが使用される可能性があるので流出厳禁です。
- 流出の疑いがある場合は、先程のAPIのページから削除できます。
:::

### Billing（課金）の設定

APIを使用するためには、課金が必要です。

https://platform.openai.com/account/billing/overview


デフォルトの額は10$ですが、任意の額に変更できます。
（OpenAIのAPIの使い方をマスターする程度の利用であれば、0.1$もかかりません。）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2627015/66070715-514f-8682-07ba-6f693614e7c9.png)

Credit balanceが更新されていることを確認します。
また、OpenAIからメールが届いていると思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2627015/da36bada-3120-6f48-bdb7-eb225ef2e8b5.png)

以上で公式ドキュメントには載っていない事前準備は完了です。

## Step 1: Setup Python
以降は公式ドキュメントに沿って進めていきます。
トップページに戻り、左のQuickstart tutorialを選びます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2627015/c522c298-3016-1778-87ae-1dee3aaf97a5.png)

https://platform.openai.com/docs/quickstart?context=python

### Pythonのインストール
3.7.1以上のPythonをインストールします。

### 仮想環境の用意（任意）
仮想環境を用意することが望ましいです。公式ドキュメントはvenvを用いていました。

### OpenAIのライブラリをインストール
下記のコマンドでOpenAIのライブラリをインストールします。

```cmd
pip install --upgrade openai
```

## Step 2: Setup your API key
先程取得したAPIキーを環境変数に埋め込みます。
OSによって方法が異なるので公式ドキュメントに従ってください。

:::note info
APIキーをソースコード内ではなく、環境変数に埋め込むことで、意図しない流出を防ぎます。
:::


## Step 3: Sending your first API request
最後のステップは動作確認です。

`openai-test.py`を作成します。

```openai-test.py
from openai import OpenAI
client = OpenAI()

completion = client.chat.completions.create(
  model="gpt-3.5-turbo",
  messages=[
    {"role": "system", "content": "You are a poetic assistant, skilled in explaining complex programming concepts with creative flair."},
    {"role": "user", "content": "Compose a poem that explains the concept of recursion in programming."}
  ]
)

print(completion.choices[0].message)
```

実行結果例
```
python openai-test.py
ChatCompletionMessage(content="In the realm of code, where logic abounds...
```

以上でOpenAI APIの公式Quickstartは終了です。

## 補足

### 日本語バージョン

先ほどの`system`と`user`には英語の文字列を渡しましたが、日本語の文字列を渡すことも可能です。

```openai-test-japanese.py
from openai import OpenAI
client = OpenAI()

completion = client.chat.completions.create(
  model="gpt-3.5-turbo",
  messages=[
    {"role": "system", "content": "一人称が「オラ」で、口癖は「ワクワクすっぞ！」です。"},
    {"role": "user", "content": "明日の天下一武道会の意気込みをお願いします！"}
  ]
)

print(completion.choices[0].message)
```

実行結果例
```
python openai-test-japanese.py
[結果省略]
```

### ソースコードの解説

`system`と`user`はOpenAIのChat APIで使用されるロールです。これらは、ChatGPTシステムとユーザーの役割を表します。具体的には以下の通りです。

- `system`: AIモデルが遵守すべき指示やガイドラインを提供します。これにより、モデルの応答の方向性やトーンを定めることができます。これを変更することで、色んな種類のChatGPTを作ることができます。
- `user`: 実際のユーザー（またはユーザーを模倣するスクリプト）からの入力を表します。ユーザーの質問やリクエストに基づいて、モデルが応答を生成します。

このように、`system`と`user`のロールを使って、チャットセッションの流れとAIの振る舞いをコントロールすることができます。


### その他のOpenAI API
今回使用したChat Completions API（ChatGPT API）以外にも様々なAPIが用意されています。

**OpenAI API一覧**

https://platform.openai.com/docs/overview

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2627015/b969f50d-988a-bc1e-4ac1-5c458d18f494.png)

# おわりに

本記事では、公式ドキュメントに沿ってOpenAI APIの使い方を説明しました。
明日の記事は、「Chat Completions APIで京都旅行プランを考える」です。

カレンダーの購読や、QiitaとTwitterをフォローしてくださると励みになります！

https://qiita.com/advent-calendar/2023/nebosuke-ai

https://twitter.com/AInebosuke


### ソースコード

本記事で使用したソースコードは、下記のGitHubレポジトリに格納しています。

https://github.com/Isaka-code/openai-api-hands-on