Open AI APIを使ってみる

## python環境の構築
venvを使ってpythonの仮想環境を構築します。
以下の記事を参考にさせていただきました。

```
python -m venv django-chat-gpt-app
cd django-chat-gpt-app
source bin/activate
```

https://qiita.com/fiftystorm36/items/b2fd47cf32c7694adc2e

## パッケージのインストール
pythonの仮想環境上で必要なパッケージをインストールします。

```
pip install django openai
```

## djangoプロジェクトを初期化する
以下のコマンドでdjangoプロジェクトを初期化します。

```
django-admin startproject config .
```

VS Code上で以下のようなファイル構成になっています。

![test_py_—_django-chat-gpt-app.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/652172/d1b618b3-8196-782c-2578-d7f2bebd4df8.png)

## open AIを使ったサンプルコードを実行してみる
以下の記事よりコードを拝借しました。

https://note.com/shinya_hd/n/nc9ba9f431e9b

```python

import openai

APK_KEY = "自分のAPK KEYをここに記載する"

def chat_gpt(prompt):
    openai.api_key = APK_KEY #API KEYをセット
    openai.Model.list() #OpenAIのインスタンスを生成
  
    #APIを使ってリクエストを投げる
    response = openai.Completion.create(
    model = "text-davinci-003",
    prompt= prompt,
    temperature=0,
    max_tokens=300,
    top_p=1.0,
    frequency_penalty=0.0,
    presence_penalty=0.0

    )
    return response 
```

記事にある方法に従ってコードを実行しようとすると以下のようなエラーが

```
You tried to access openai.Model, but this is no longer supported in openai>=1.0.0 - see the README at https://github.com/openai/openai-python for the API.

You can run `openai migrate` to automatically upgrade your codebase to use the 1.0.0 interface.
```

どうやらopen AIを呼び出す記述が古いみたいです。
エラー文に従って以下のコマンドを実行します。

```
django-chat-gpt-app ❯ openai migrate 
```

こんな感じのログが流れて、コードの古い記述を自動で最新版に書き換えてくれます。めっちゃ便利。

![django-chat-gpt-app_—___projects_django-chat-gpt-app_—_zsh__figterm__▸_zsh_—_204×58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/652172/822f9be9-27b9-e088-2861-08b8603c912d.png)

記事の内容を参考にシェルモードでopen AIのAPIを叩こうとすると以下のエラー

```
openai.RateLimitError: Error code: 429 - {'error': {'message': 'You exceeded your current quota, please check your plan and billing details. For more information on this error, read the docs: https://platform.openai.com/docs/guides/error-codes/api-errors.', 'type': 'insufficient_quota', 'param': None, 'code': 'insufficient_quota'}}
```

どうやらリクエスト回数の上限までいってしまったようです。Open AI側の設定を確認してみます。

![Billing_overview_-_OpenAI_API.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/652172/ddbab9b6-6cec-b7c1-417d-7ca7ff4c3fc2.png)

Credit Remainingが0になっているからですねー
無料枠に気をつけつつ、クレジットカードの設定をしていきます。

クレジットカードの設定後、ターミナル再起動でOpen AIからのレスポンスを無事取得できました。

```
>>> from test import chat_gpt
>>> prompt = "pythonベースのDjangoとは何ですか？"
>>> response = chat_gpt(prompt)
>>> print(response)
Completion(id='cmpl-8efUZl2k7fs9apPYmj8pzrqMrd5nW', choices=[CompletionChoice(finish_reason='stop', index=0, logprobs=None, text='\n\nDjangoはPythonベースのオープンソースWebフレームワークです。Webアプリケーションを開発するためのツールを提供し、開発者が効率的にWebアプリケーションを構築できるようにします。Djangoは、モデルビューコントローラー（MVC）アーキテクチャを使用して、データベースを操作し、ユーザーインターフェイスを構築し、Webサイトを安全に保つためのツールを提供します。')], created=1704703307, model='text-davinci-003', object='text_completion', system_fingerprint=None, usage=CompletionUsage(completion_tokens=208, prompt_tokens=18, total_tokens=226), warning='This model version is deprecated. Migrate before January 4, 2024 to avoid disruption of service. Learn more https://platform.openai.com/docs/deprecations')
>>> response["choices"][0]["text"].strip()
```

レスポンスの中身のテキストだけが欲しい場合はこうするとよさそうです。

```
>>> print(response.choices[0].text)


DjangoはPythonベースのオープンソースWebフレームワークです。Webアプリケーションを開発するためのツールを提供し、開発者が効率的にWebアプリケーションを構築できるようにします。Djangoは、モデルビューコントローラー（MVC）アーキテクチャを使用して、データベースを操作し、ユーザーインターフェイスを構築し、Webサイトを安全に保つためのツールを提供します。
```

ちなみに2回ほどAPIを叩いただけで0.01ドル消費しました・・・お高いですね。。。

![Billing_overview_-_OpenAI_API.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/652172/eb494c28-9dcc-a02f-ae5f-7012c271d8c0.png)


## 次にやること
次回は参考記事の内容をもとにUIからOpenAIのAPIを叩けるようにしてみようと思います。