pythonの勉強ついでにChatGPTのAPIを使ってみた

# 概要
普段PHPのエンジニアとして働いているが、ある会議中に「ChatGPTを使ってお客様の質問に答えるシステム作れないですか？」という要望があり、軽く調べたところできそうだったし、Pythonのライブラリ使えばできそうだなと思い、環境を構築しました。
Pythonを書くのは初めてです。。
ついでにJupyterLabを導入しました。

# 参考にしたサイト
https://di-acc2.com/programming/python/24841/#index_id3

https://www.kagoya.jp/howto/cloud/container/dockerpython/

# 環境
MacOS Monteray ver 12.6.5
Docker

# やりたいこと
やりたい事としては、とりあえずChatGPTのAPIを使って質問を投げれば返ってくる簡単はものを作りたいと思います。

# Pythonの環境構築
- まずはPythonの環境を構築するためのディレクトリを作ります。
```
mkdir docker-jupyterlab
mkdir docker-jupyterlab/work
```
- 作成したディレクトリ（docker-jupyterlab）へ移動します。
```
cd docker-jupyterlab
```
- Dockerfile（Dockerコンテナの設計図）を作成します。
```
vi Dockerfile
```
- 以下の内容をファイルに書き込んでください。
```dockerfile
FROM python:3

RUN apt-get update
RUN pip install --upgrade pip
RUN python -m pip install jupyterlab
RUN pip install openai
```
- docker-compose.ymlを作成します。
```
vi docker-compose.yml
```
- 以下の内容をファイルに書き込んでください
```yml
version: '3'
services:
  jupyterlab:
    build: .
    image: jupyterlab-test-img
    container_name: jupyterlab
    working_dir: /work
    volumes:
      - ./work:/work
    ports:
      - "8888:8888"
    command:
      jupyter-lab --ip 0.0.0.0 --allow-root -b localhost
```
- 作成したDockerfileとdocker-compose.ymlを使い、イメージとコンテナの作成、コンテナの起動を実行します。
```
docker compose up -d --build
```
- コンテナが正常に立ち上がったのか確認する
```
docker ps
```
- うまく立ち上がっていればpythonの環境構築は完了です。

# OpenAIのアカウント登録
- OpenAIの公式ページにアクセスして、アカウント登録をする
    - 参考にしたサイト (https://di-acc2.com/programming/python/24841/#index_id3) を見てもらえればすぐにできると思います。
- 登録後、APIシークレットキーとOrganizationIDをメモしておく
# プログラムの実装
- work直下にsettingディレクトリを作成をする
```
mkdir work/setting
```
- settingディレクトリに移動して、config.pyという名前のファイルを作成する。
```
vi config.py
```
- config.pyは下記のようにする
```
OPENAI_API_KEY = "メモしておいたAPIキー"
OPENAI_ORGANIZATION_ID = "メモしておいたOrganizationID"
```
- work直下に戻り、chatbot.pyを作成する
```
cd ../
vi chatbot.py
```
- chatbot.pyは下記のようにする
```python
import setting.config as config
import sys

# ライブラリ&認証情報を設定
import openai
openai.organization = config.OPENAI_ORGANIZATION_ID 
openai.api_key      = config.OPENAI_API_KEY


def Ask_ChatGPT(message):
    
    # 応答設定
    completion = openai.ChatCompletion.create(
                 model    = "gpt-3.5-turbo",     # モデルを選択
                 messages = [{
                            "role":"user",       # 役割
                            "content":message,   # メッセージ 
                            }],
    
                 max_tokens  = 1024,             # 生成する文章の最大単語数
                 n           = 1,                # いくつの返答を生成するか
                 stop        = None,             # 指定した単語が出現した場合、文章生成を打ち切る
                 temperature = 0.5,              # 出力する単語のランダム性（0から2の範囲） 0であれば毎回返答内容固定
    )
    
    # 応答
    response = completion.choices[0].message.content
    
    # 応答内容出力
    return response

# 質問内容
print (sys.argv[1])
message = sys.argv[1]

# ChatGPT起動
res = Ask_ChatGPT(message)

# 出力
print(res)
```
- docker-compose.ymlのあるファイルまで移動して下記コマンドを実行してコンテナの中に入る
```
docker exec -it jupyterlab bash
```

- 下記コマンドを実行し、chatGPTに質問を投げる(ファイル名の後に聞きたいことを聞く)
```
python3 chatbot.py phpを作った人は？
```
以上で簡単はプログラムの実装が完了

# (おまけ)jupyterlabへのアクセス
- (http://localhost:8888) にアクセスするとログイン画面が出てくる![jupyterlab_login.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146391/0eed2e8b-1613-36a8-efbb-7de70027cf34.png)
- 「password or token」に下記コマンドを実行した時のtokenを入力する
```
jupyter server list


Currently running servers:
http://63f81459f779:8888/?token=[ここの値をコピペする] :: /work
```

# GitHubのリポジトリ
今回紹介したものはGitに上げてますので、参考までに(config.pyはAPIの情報を書いてるので、上げてません)
https://github.com/nishun0419/docker-python-chatgpt

# 感想
普段PHPしか触ってないけど、ライブラリが豊富で書きやすいので、Pythonも悪くない印象でした。
もちろんこのままだと業務では使えないので、使えるように勉強していきたいですねー(LlamaIndexとか使っていきたい)