OpenAIのAPIをWSLからコールする環境を構築

<h1>背景</h1>
　去年09月から今年06月にかけてお仕事でバタバタと忙しくしていたのですが、お仕事も一段落し余裕が出て来てたので、次の仕事のことも考えて流行りのGPTで何かを始めようとして、この記事に至ってます。<br>
　AIや機械学習などの高度な事は、低スペックな私にはとても出来ないので、まずはOpenAIのAPIを使う事からスタートしてみようという事で、環境を構築してみます。

<h1>環境</h1>

    (1)Windows10 Pro 22H2
    (2)WSLで環境構築。インストールしたLinuxは「Ubuntu-22.04」 
    (3)社内環境のため、Proxyなど色々設定されている。⇒ 結論としては、特に影響はなかった模様。


<h1>手順</h1>

1. WSLの設定(OpenAi用ツールのインストール)
2. OpenAIのアカウント作成
3. OpenAIのAPIキー作成
4. OpenAIにアクセスするサンプルプログラムの実行

<h1>1. WSLの設定(OpenAi用ツールのインストール)</h1>

私が実際に実施した手順ですので、途中で「エラー！」とか「失敗！」などもそのまま記載していますが、大きな流れは、

    (1)Pythonのインストール
    (2)pipのインストール
    (3)curlのインストール
    (4)langchainのインストール
    (5)openaiのツールインストール

になります。

wslを起動後、

    > sudo apt install python3

成功

    > python3 --version

Python 3.10.6

    > sudo apt update

少し時間が掛かる。

    > sudo apt upgrade

少し時間が掛かる。

    > sudo apt python3-pip

漸くインストールできるようになるので、pipをインストール
これまた、少し時間が掛かる。

    > pip install langchain

なぜかエラーが発生。

    ERROR: Could not find a version that satisfies the requirement langchain (from versions: none)
    ERROR: No matching distribution found for langchain

setuptoolsを入れないとダメらしいので、入れてみる。

    > python -m pip install --upgrade pip setuptools

まだ、エラーが表示される。

curlでインストールできないか？と思い、curlをインストールする

    > sudo apt install curl

成功！

下記URLを参考に実施してみる。
    https://www.bioerrorlog.work/entry/install-pip-pip3-ubuntu

    > curl "https://bootstrap.pypa.io/get-pip.py" -o "get-pip.py"

成功！
再度lanchainをインストールしてみる。

    > pip install langchain

まだ、エラーが表示される。

    > sudo apt install python3-pip

成功！

下記URLを参考に再チャレンジ
https://tex2e.github.io/blog/python/pip-trusted-host

    > pip install langchain --trusted-host pypi.python.org --trusted-host files.pythonhosted.org --trusted-host pypi.org

<b>langchainのインストールに成功した！！</b>

認証ができていなかったようなので、本当はダメらしいのですが、「--trusted-host」というオプションを付けて、langchainをインストール。

続けてOpenAIのインストール

    > pip install openai

エラーになる。

先程学んだ「--trusted-host」を、さっそく使ってみる。

    > pip install openai --trusted-host pypi.python.org --trusted-host files.pythonhosted.org --trusted-host pypi.org

![openaiのインストールに成功.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223945/09941492-9e86-eb92-5c6d-a102b8911b00.png)
成功！！

★画像に個人名が含まれているので、一部墨消し！！！


<h1>2. OpenAIのアカウント作成</h1>
OpenAIのサイトにアクセスし、アカウントを作成します。<br>
下記URLの「Sign up」を選択し、メールアドレスなどを登録していきます。

[OpenAIのサイト](https://platform.openai.com/account/api-keys)

手順の詳細については、下記URLを参考に進めてください。
[OpenAIのアカウント作成手順](https://book.st-hakky.com/docs/langcain-in-python/)


<h1>3. OpenAIのAPIキー作成</h1>
OpenAIのアカウントが作成できたら、そこにアクセスするためのAPIキーを作成します。<br>
手順の詳細については、 下記URLを参考に進めてください。

[OpenAIのapiキー作成](https://auto-worker.com/blog/?p=6988)



<h1>4. OpenAIにアクセスするサンプルプログラムの実行</h1>

(1) .envファイルの作成
.envファイルを作成し、その中にAPIキーを記載し、WSLの/home/{USER}の直下に格納する。

export OPENAI_API_KEY="sk-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223945/1bd4dd38-022f-f0eb-9dab-e8023ae3918c.png)

(2) サンプルプログラムを作成
<details><summary>Pythonサンプル</summary><div>

```python
# LLM ラッパーをインポート
import os

from os.path import join, dirname
from langchain.llms import OpenAI
from dotenv import load_dotenv

os.environ['REQUESTS_CA_BUNDLE'] = "./Zscaler Root CA.crt"
load_dotenv(join(dirname('__file__'), '.env'))

# LLM ラッパーを初期化
llm = OpenAI(temperature=0.7,max_tokens=100,best_of=1,echo=True)

# LLM に渡す入力テキスト
# text = "カラフルな靴下を作る会社の社名として、何かいいものはないですか？日本語の社名でお願いします。"
# LLM に渡す入力テキスト
#text = "Panasonic System Designという会社の特徴を教えてください。日本語でお願いします。"
text = "憂鬱な朝、スッキリと目覚め指せる為に必要なものは？簡単な単語10個で返答してください"

# LLM から予測を受け取って表示
prediction = llm(text)
#print(prediction.strip())
print(prediction)
```

</div></details>

サンプルプログラムをWSLの"/home/{user}"の直下にコピーし実行する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223945/391e5af3-3950-1de4-d4b2-1049cc31f0dd.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223945/16aa55d1-356d-9a5c-86e1-bb3faae4e66f.png)
<b>"SSLError"が発生。</b>

どうも証明書が無いためエラーが発生している模様。<br>
”langchain ssl certificate_verify_failed"でWEB検索すると、下記URLが見つかったため、記載に従って対応する。簡単に言うと、OpenAIのURL(https://api.openai.com/v1/engines) にアクセスして、認証局の証明書をダウンロードし、証明書を実行するサンプルPGファイルと同じ場所に置きましょう…という事だそうです。<br>
ちなみに、URL(https://api.openai.com/v1/engines) にアクセスするとパスワードなどを聞かれるかと思います。私の経験では、こちらのURL(https://platform.openai.com/account/api-keys) で証明書をダウンロードしても問題無さそうです。証明書の取得方法は、又別途記載予定。<br>

[証明書認証エラーについて](https://ninthcode.net/230401-chatgpt-apierror/)

証明書を格納した図⇩
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223945/6356c818-cac3-80f2-92a5-08c63524dd57.png)

再度サンプルPGを実行すると、Warningが出ていますが、OpenAIからの返答が取得できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223945/9f17bb07-d402-0627-60e6-8518d661ba23.png)


OpenAIのAPIを呼び出す人がどれくらい存在するか不明ですが、どなたかの役に立てば幸いです。


<h1>参考URL</h1>

大変参考にさせて頂きました

(1) [OpenAIのアカウント作成手順](https://book.st-hakky.com/docs/langcain-in-python/)
(2) [OpenAIのapiキー作成](https://auto-worker.com/blog/?p=6988)