【完走賞ゲット-25】OpenAI の ChatGPT の API を公式ライブラリの Python版 を venv による仮想環境で試す（使い方を ChatGPT に聞いてみたりも）

## はじめに
こちらは、[完走賞ゲットのため小ネタを毎日投稿しようとチャレンジする Advent Calendar 2022](https://qiita.com/advent-calendar/2022/youtoy) の 25日目の記事です（ついに、一人アドベントカレンダーも最後の記事！）。

内容は、昨日書いた以下の記事の別バージョン（Node.js ⇒ Python にしたもの）です。

●【完走賞ゲット-24】OpenAI の ChatGPT の API を公式ライブラリの JavaScript版 を試す（使い方を ChatGPT に聞いてみたりも） - Qiita
　https://qiita.com/youtoy/items/84384ad7a742ea1ce8f5

また、今回のお試しの中では venv を使って進めていきます。

## ChatGPT を API 経由で利用する
### OpenAI の API を利用するためのシークレットキー
OpenAI の API を利用するためにはシークレットキーが必要です。
その取得方法は、[上で掲載していた昨日の記事](https://qiita.com/youtoy/items/84384ad7a742ea1ce8f5) の[「OpenAI の API を利用するためのシークレットキー」の部分](https://qiita.com/youtoy/items/84384ad7a742ea1ce8f5#openai-%E3%81%AE-api-%E3%82%92%E5%88%A9%E7%94%A8%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AE%E3%82%B7%E3%83%BC%E3%82%AF%E3%83%AC%E3%83%83%E3%83%88%E3%82%AD%E3%83%BC)をご覧ください。

### 公式情報をもとに Python で API を使う
次に、Python で試してみます。
公式ライブラリの情報をはこちら⇒ https://beta.openai.com/docs/libraries/libraries から確認できます。

これ以降の内容を進める前提として、pipコマンドが使える状態を想定しています。

#### ChatGPT に聞いてみる（Python版）
この後、実装などを行っていく前に、JavaScript の話の記事を書いた時の思いつきと、同じことをやってみます。具体的には、ChatGPT に API の使い方を聞いてみるという内容です。

以下が「Chat GPT の API を Python で使うためのプログラムを教えて。プログラムはひとまとめにして書いてください。」という内容に対して返ってきた答えです。

![回答1](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/0a015fff-5be8-7ce1-19cb-496cf1a8a69c.png)
![回答2](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/ac9174b8-57f3-6176-2279-dffc299e3bca.png)

pip を使ったインストールや、ソースコードの部分は、以下のとおりでした。

```bash
pip install openai
```

```python
import openai

# API キーを設定する
openai.api_key = "YOUR_API_KEY"

# Chat GPT API にリクエストを送信し、生成されたテキストを取得する
response = openai.Completion.create(
    engine="text-davinci-002",
    prompt="What is the weather like today?",
    max_tokens=1024,
    n=1,
    stop=None,
    temperature=0.5,
)

# 生成されたテキストを表示する
print(response["choices"][0]["text"])
```

ぱっと見では、構文などは問題なさそうな結果のようですが、以下の公式のサンプルとは差異があるものが出てきました...

```Python
import os
import openai

# Load your API key from an environment variable or secret management service
openai.api_key = os.getenv("OPENAI_API_KEY")

response = openai.Completion.create(model="text-davinci-003", prompt="Say this is a test", temperature=0, max_tokens=7)
```

ChatGPT が出してきたものは気になりますが、今回は、そちらは深追いしないことにします。

## 公式情報をもとに Python で API を使う（venv を利用）
それでは、公式ドキュメントの情報を使って、Python での API のお試しをやっていきます。

### venv を使った環境の準備
今回、API のお試しは venv を使った仮想環境で行うことにます。

venv は、Python の 3.3 から標準でついてくる、仮想環境を扱える仕組みです。
詳細は以下の公式ドキュメントをご参照ください。

●venv --- 仮想環境の作成 — Python 3.11.0b5 ドキュメント
　https://docs.python.org/ja/3/library/venv.html

#### 前提条件
これ以降の内容を実行する環境として、Mac を使っています。

#### venv で仮想環境を作成
それでは、venv で仮想環境を作っていきます。

まずは、以下のコマンドを実行します。以下の `myenv` という部分は、別の名称でも大丈夫です。

```zsh
% python -m venv ./myenv
```

これで、コマンドを実行した場所の直下に myenv という名前で仮想環境が作られました。
この

```zsh
% . ./myenv/bin/activate
```

※ 上記について、最初は `% ./myenv/bin/activate` というコマンドを実行して試そうとしたのですが、そのコマンドの場合は `zsh: permission denied: ./.venv/bin/activate` という権限絡みで実行をはじかれるメッセージが出てきました

#### 仮想環境の終了
上記の手順を進めた結果、ターミナルの行の先頭に `(myenv)` という表示が出ていれば、仮想環境を利用できる状態になっています。
これを終了させる場合は、以下のコマンドを利用します。

```zsh
% deactivate
```

### プログラムの内容や処理の実行
それでは、仮想環境を使って ChatGPT の API を試していきます。

ターミナルの行の先頭に `(myenv)` という表示が出ている状態で、pip によるインストールを行いましょう。

```zsh
% pip install openai
```


上で掲載している公式サンプルに少し手を加えたものを使います。


```Python
import os
import openai

openai.api_key = os.getenv("OPENAI_API_KEY")

response = openai.Completion.create(model="text-davinci-003", prompt="Chat GPTについて教えて。", temperature=0, max_tokens=100)
print(response.choices[0].text)
```

上記のプログラムでは、シークレットキーの指定に環境変数が使われています。
今回は、とりあえずのお試しということで、一時的に環境変数にシークレットキーを設定する形で試します。 `export OPENAI_API_KEY=【OpenAI のシークレットキー】` を実行してから、上記のプログラムを pythonコマンドで実行してください。

そして、上記のプログラムを実行した結果、以下のように ChatGPT からのレスポンスを取得・出力できました。
![出力結果](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/e67da887-dd06-61f2-c21f-7b9775dfa799.png)

ちなみに、 `max_tokens: 100` というパラメータ指定をしていた部分の影響で出力は途中で途切れていますが、うまく結果は取得できています。

上記のパラメータを 100 から 400 に変更して、再度、プログラムを実行してみます。
そうすると、以下のように途中で途切れていない文章が取得できました。

> GPT（Generative Pre-trained Transformer）は、自然言語処理（NLP）タスクを実行するためのオープンソースの自然言語処理モデルです。GPTは、大規模なテキストコーパスを使用して事前訓練されたTransformerモデルです。GPTは、自然言語処理タスクのための複雑なモデルを構築するための有用なツールとして使用できます。GPTは、文章の生成、文章の解釈、文章の評価、文章の自動生成などのタスクを実行するために使用できます。