AIをフル活用してRaspberry Pi 4でGPT-3とかいうの動かしてみる話 前編

スポンサーリンク

最近AI動かすの流行ってますね。

暇つぶしに自宅に生えてたRaspberry Pi 4からOpen AIにAPIぶん投げるコードを書いてみました。

 

最終的にやりたいこと

やること

 

最近MicrosoftはAIに力入れてるっぽいのでわざわざローカルにサーバ立てなくてもbingやらPower Appsやらの専用のサービスで使えるようになってそうですがお勉強ということで。

FLAN-T5などの無料で動かせるオープンソースの言語モデルは大容量なSDカードとCPUとGPU性能が必要なのでRaspberry Piを活用するならばAPIぶん投げて結果を返すのがせいぜいかなと思います。

(2023/3/19:追記)

1トークン10秒とかで動くようになったらしいですが、この記事はAPIぶん投げるだけの記事なのでゴリゴリにプログラム書いたりする人は回れ右してください。

 

前編はRaspberry PiのコマンドラインでGPT-3を動かせるようになるまでです。

 

Step 0: AIとお話してみる

まず私はプログラミングそこまで詳しくないのでやり方はChatGPTと会話しながらやります。

日本語が使えるので特に詳しくなくても以下URLに飛んで人間に聞く感じで質問すれば大丈夫です。構築中に出てきた疑問は全部AIにぶん投げて聞きます。

https://chat.openai.com/chat

GPT-3に聞いてみる

決められた問いにしか答えられない無能なチャットボットサービスを多く見てきましたが、頭良すぎてビビります。

ここからの作業はこんなクソブログに頼らなくても全部AIに聞けば構築できます。

 

OpenAI APIに関する技術ドキュメントのURLを聞いてみました。

まあ全部AIに聞くから読まないけどね。

URLを教えてもらう

URLの引用元を教えてくれるPerplexityのAIみたいに最初からURLを提示してくれるわけではなく、わざわざ聞かないと教えてくれませんが有能。

OpenAI API documentation: https://beta.openai.com/docs/

OpenAI API Reference: https://beta.openai.com/docs/api-reference

OpenAI API Console: https://beta.openai.com/docs/api-console

OpenAI API Playground: https://beta.openai.com/playground/

関連するブログやチュートリアル: Raspberry pi GPT-3 - Google 検索

 

Step 1: とりあえずラズパイ環境を作る

私が用意したのは4GBモデルのRaspberry Pi 4と32GBのSDカードだけです。

USB-Cの充電器とネットワーク環境さえあれば自分のPCからリモート接続できるのでHDMIもキーボードもマウスもいりません。

気持ちもっさりしてるので8GBモデルにすると応答速度が上がるのではと思います。

 

まとめるの面倒だったので外部のブログ引用させてもらいますが、ラズパイ買ってOS焼いてSSHでアクセスしてVNC有効にしてリモートで入れるようにするまではここ見るのが良いと思います。

 

Step 2: ラズパイにPython環境をインストールする

とりあえずPython環境を入れろということでしたので入れます。

AIに聞けばやり方を教えてくれるので聞けばいいと思う。

 

1. Raspberry Piに接続して、ターミナルウィンドウを開きます。

2. 次のコマンドを実行して、Pythonがインストールされているかどうかを確認します:

css
python3 --version

3. Python3がインストールされていない場合は、次のコマンドを実行してインストールします:

sql
sudo apt-get update sudo apt-get install python3

4. Python3がインストールされたことを確認するために、次のコマンドを実行します:

css
python3 --version

5. Python3が正常にインストールされたら、次のコマンドを実行してpip3をインストールします:

csharp
sudo apt-get install python3-pip

これで、Raspberry PiにPython環境がインストールされました。

 

私のラズパイには最初からインストールされてて特に作業は必要なかったです。

ラズパイ画面

 

Step 3:Open AIからAPIキーを取得する

やり方はAIに聞いてください。ググレカスに変わる新しい言葉ができそうなんですけどなんて言えばいいんでしょうね。

AIに聞いた

アクセスするURLが古いみたいで今はhttps://platform.openai.com/にリダイレクトされます。ちょっと手順違いますね。

右上メニューからView API Keysをクリックします。

右上メニュー

Create new secret keyをクリックすると文字列が生成されるのでコピーします。

API Keys

Step 4:Open AI APIクライアントをインストールする

AIの指示に従うだけでいいのでだんだん気持ちよくなってきます。

こうして何も考えない人が出来上がるんだなあ…

APIクライアントライブラリのインストール

 

pip install openaiコマンドを入れてみたところWARNINGが出てきました。

WARNING

分からないのでAIに聞いたら環境変数を入れろという話でした。

これヘルプデスク業務はAIにぶん投げるだけで良くなるのでは?

トラブルシューティングも完璧な対応

特に気にしなくていいらしいですが実際に入れました。

makefile

export PATH=$PATH:/home/pi/.local/bin

echo 'export PATH=$PATH:/home/pi/.local/bin' >> ~/.bashrc

出力結果

Step 5:Pythonでコードを書いてみる

何も考えたくないのでAIにサンプルコードを書いてもらいました。

サンプルコード

Python の例:

makefile

import openai

# Set the API key
openai.api_key = "YOUR_API_KEY"

# Generate text
model_engine = "text-davinci-002"
prompt = "What is the capital of France?"

completions = openai.Completion.create(
    engine=model_engine,
    prompt=prompt,
    max_tokens=1024,
    n=1,
    stop=None,
    temperature=0.5,
)

message = completions.choices[0].text
print(message)

緑色のところを書き換えればいいようです。

 

Step 6:コードの実行

書いてもらったはいいけどPythonなんて久しく触ってないのでどうやって動かすのか忘れました。

ということで聞いたらご丁寧にフォルダの作り方まで教えてくれたのでデスクトップのopenai_exampleというフォルダ内にコードを移動させて実行することにします。

コードの実行方法

フォルダ配置
bash
cd Desktop
cd openai_example
python script.py

実行したところ、フランスの首都はどこか?という問いに対してパリだよっと返してくれました。ただし英語です。

実行結果

Step 7:日本語で質問するようにする

質問文が英語ならいけましたが質問は日本語でもしたいのでこれもAIに聞いたら日本語のサンプルコードをくれました。

修正されたサンプルコード

makefile

import openai

# Apply the API key
openai.api_key = "your_api_key_here"

# Define the model to use
model_engine = "text-davinci-002"

# Define the prompt
prompt = "こんにちは、お元気ですか?"

# Generate a response
completions = openai.Completion.create(
    engine=model_engine,
    prompt=prompt,
    max_tokens=1024,
    n=1,
    stop=None,
    temperature=0.5,
)

# Get the message from the response
message = completions.choices[0].text

# Print the response
print(message.encode("utf-8").decode())

 

そういえばまだRaspberry piで日本語入力できるようにしてなかったのでやり方を聞きいたところ、fcitxのインストールを勧められました。

fcitxのインストール
csharp
sudo apt-get install fcitx-mozc
fcitx-autostart

入力の切り替えはCtrl + Spaceだそうです。

インストール後にRaspberry Piの再起動が必要でした。

 

しかしこのコードで質問を行っても日本語で返事がありません。

質問内容に日本語で答えてくださいと付け加えないと回答してくれない答えがあるようです。稀に日本語で答えてと言っても英語で返してきたりします。

OpenAI APIでは過去の会話データから推論していないらしく、過去の会話データも参照して回答させたい場合は会話ログを残してAPIを投げるときに一緒に渡してあげる必要があるようです。なので今はまだ日本語で答えてくださいと毎回つけないといけません。

ログを残す方法は以下で書いてあるのを見つけました。

また、OpenAI APIは無料版だと毎分20リクエストの制限があるようです。あんまりデバッグしすぎると使えなくなります。

 

Step 8:DeepL APIで日本語に翻訳した答えを返すようにする

AIにDeepL APIとOpenAI APIを組み合わせたサンプルコードを書いてもらい日本語に翻訳して出力するように指示しました。

DeepL APIとOpenAI APIの組み合わせコード
 

DeepL API認証キーの発行方法が分からんのでこれも聞きます。

DeepL APIの認証キーの取得方法

実際のところ以下URLからでした。だいたい合ってるからユルス。

https://www.deepl.com/ja/pro-api?cta=menu-pro-api/

無料ですが、登録に自分の住所とクレジットカード情報が必要になります。

無料版の制限事項としては1か月に500,000文字まで翻訳可能というところなようです。

DeepL APIの登録

 

無料版だとapi-free.deepl.comというドメインになるのでURLの変更が必要でした。

エラー出力をAIにぶん投げるだけで何したら直るか教えてくれるので、動かないコードをAIと相談しながら修正を重ねました。

修正案をだしてくれるAI

AIに感謝したのは私だけではないはず

以下で動きました。

python

# -*- coding: utf-8 -*-
import requests
import openai

# Set the API key
openai.api_key = "OPENAI_API_KEY"
api_key = "DEEPL_API_KEY"

def translate_text(text,api_key):
    url="https://api-free.deepl.com/v2/translate"
    headers = {
    "Content-Type": "application/x-www-form-urlencoded"
    }
    data = {
    "auth_key": api_key,
    "text": text,
    "source_lang": "EN",
    "target_lang": "JA",
    "split_sentences": "0"
    }
    
    response = requests.post(url, headers=headers, data=data)
    return response.json()

def generate_answer(prompt):
    # OpenAI API request to generate answer
    response = openai.Completion.create(
    engine="text-davinci-002",
    prompt=prompt,
    max_tokens=1024,
    n=1,
    stop=None,
    temperature=0.5,
    )
    
    answer = response["choices"][0]["text"]
    # Translate the answer to Japanese using DeepL API
    answer_ja=translate_text(answer,api_key)
    return answer_ja['translations'][0]['text']
    

text = "しりとりしましょう。みかん"
answer=generate_answer(text)
print(answer)

 

ブラウザ版のChatGPTとくらべて少しアホかもしれません。

しりとり

中編ではコマンドラインではなくWebサーバを立てます。

ついでにDavinciがアホの子なのでGPT-3.5 turboにします。

 

以上

圧倒的成長。