ChatGPT(OpenAI)環境をインストール
CentOSにChatGPT(OpenAI)のAPIにアクセスする環境をセットアップしてみる
背景
PlaygroundからChatGPTを使うのもいいけど、やっぱりPythonからChatGPTのAPI(正確には裏でGPT-3と呼ばれるAIのモデルが動いています)をコールして返答を得たかったのでアプリケーションの環境を手順に従ってセットアップしてみました。
インストール
今回はCentOSにPythonでセットアップします。
環境
OS: CentOS Stream release 8
Python:Python 3.10.10
事前作業
APIの使用にはシークレットキーが必要になるので事前にChatGPTにサインアップが必要です。
githubから「openai-quickstart-python」をダウンロード
git clone https://github.com/openai/openai-quickstart-python.git
API Keyの設定
cd openai-quickstart-python
cp .env.example .env
ここでAPI Keyを生成して「.env」の以下の位置にコピーします。
vi .env
OPENAI_API_KEY=************************************
アプリケーションを実行する
# python -m venv venv
# . venv/bin/activate
# pip install -r requirements.txt
pipコマンドでエラーになりました。
Collecting openai==0.19.0
Using cached openai-0.19.0.tar.gz (42 kB)
Installing build dependencies ... done
Getting requirements to build wheel ... done
Preparing metadata (pyproject.toml) ... error
error: subprocess-exited-with-error
× Preparing metadata (pyproject.toml) did not run successfully.
│ exit code: 1
╰─> [63 lines of output]
running dist_info
creating /tmp/pip-modern-metadata-glvfok20/openai.egg-info
writing /tmp/pip-modern-metadata-glvfok20/openai.egg-info/PKG-INFO
writing dependency_links to /tmp/pip-modern-metadata-glvfok20/openai.egg-info/dependency_links.txt
・・・
・・・
File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 883, in exec_module
File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
File "/tmp/pip-build-env-qgz5qofd/overlay/lib/python3.10/site-packages/wheel/bdist_wheel.py", line 28, in <module>
from .macosx_libfile import calculate_macosx_platform_tag
File "/tmp/pip-build-env-qgz5qofd/overlay/lib/python3.10/site-packages/wheel/macosx_libfile.py", line 43, in <module>
import ctypes
File "/root/.pyenv/versions/3.10.10/lib/python3.10/ctypes/__init__.py", line 8, in <module>
from _ctypes import Union, Structure, Array
ModuleNotFoundError: No module named '_ctypes'
[end of output]
note: This error originates from a subprocess, and is likely not a problem with pip.
error: metadata-generation-failed
× Encountered error while generating package metadata.
╰─> See above for output.
note: This is an issue with the package mentioned above, not pip.
hint: See above for details.
以下のエラーをググります。pipが原因ではなく、OSにいくつかのプログラムがインストールされていないようです。
ModuleNotFoundError: No module named '_ctypes'
足りないのは以下のライブラリのようでした。
- libffi-devel
- bzip2-devel
一度、Python3.10.10をアンインストール
pyenvでバージョンを管理しているため、一度アンインストールします。
# pyenv uninstall 3.10.10
ライブラリをインストール
# yum install libffi-devel
# yum install bzip2-devel
再度、Python3.10.10をインストールし直して再構成
# pyenv install 3.10.10
アプリケーションのインストールからやり直します。
# python -m venv venv
# . venv/bin/activate
# pip install -r requirements.txt
・・・
Successfully built openai
Installing collected packages: pytz, pandas-stubs, certifi, Werkzeug, urllib3, tqdm, toml, six, python-dotenv, pycodestyle, numpy, MarkupSafe, itsdangerous, idna, et-xmlfile, click, charset-normalizer, requests, python-dateutil, openpyxl, Jinja2, autopep8, pandas, Flask, openai
Successfully installed Flask-2.0.2 Jinja2-3.0.2 MarkupSafe-2.0.1 Werkzeug-2.0.2 autopep8-1.6.0 certifi-2021.10.8 charset-normalizer-2.0.7 click-8.0.3 et-xmlfile-1.1.0 idna-3.3 itsdangerous-2.0.1 numpy-1.21.3 openai-0.19.0 openpyxl-3.0.9 pandas-1.3.4 pandas-stubs-1.2.0.35 pycodestyle-2.8.0 python-dateutil-2.8.2 python-dotenv-0.19.2 pytz-2021.3 requests-2.26.0 six-1.16.0 toml-0.10.2 tqdm-4.62.3 urllib3-1.26.7
無事インストールされたようです。
flaskを実行
flask run
* Serving Flask app 'app' (lazy loading)
* Environment: development
* Debug mode: on
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
* Debugger PIN: 139-530-183
ブラウザが起動しました。
ブラウザでCentOSのサンプルアプリにアクセス
http://<CentOSのIPアドレス>:5000/
エラーになりました。
調べた所、デフォルトではflaskは外部からアクセスすることができないらしい。(ローカルアクセスのみ)
Flaskを外部からアクセスできるように設定変更
Ctrl + Cキーで一旦Flaskを停止します。
こうやってflaskを起動すると外部からアクセスできるようになるようです。
flask run --host=0.0.0.0
無事外部からアクセスできました。
サンプルアプリのコードを書き換えれば、自由にカスタマイズできるようです。
Discussion