最近AI動かすの流行ってますね。
暇つぶしに自宅に生えてたRaspberry Pi 4からOpen AIにAPIぶん投げるコードを書いてみました。
- 最終的にやりたいこと
- Step 0: AIとお話してみる
- Step 1: とりあえずラズパイ環境を作る
- Step 2: ラズパイにPython環境をインストールする
- Step 3:Open AIからAPIキーを取得する
- Step 4:Open AI APIクライアントをインストールする
- Step 5:Pythonでコードを書いてみる
- Step 6:コードの実行
- Step 7:日本語で質問するようにする
- Step 8:DeepL 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にぶん投げて聞きます。
決められた問いにしか答えられない無能なチャットボットサービスを多く見てきましたが、頭良すぎてビビります。
ここからの作業はこんなクソブログに頼らなくても全部AIに聞けば構築できます。
OpenAI APIに関する技術ドキュメントのURLを聞いてみました。
まあ全部AIに聞くから読まないけどね。
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がインストールされているかどうかを確認します:
python3 --version
3. Python3がインストールされていない場合は、次のコマンドを実行してインストールします:
sudo apt-get update
sudo apt-get install python3
4. Python3がインストールされたことを確認するために、次のコマンドを実行します:
python3 --version
5. Python3が正常にインストールされたら、次のコマンドを実行してpip3をインストールします:
sudo apt-get install python3-pip
これで、Raspberry PiにPython環境がインストールされました。
私のラズパイには最初からインストールされてて特に作業は必要なかったです。
Step 3:Open AIからAPIキーを取得する
やり方はAIに聞いてください。ググレカスに変わる新しい言葉ができそうなんですけどなんて言えばいいんでしょうね。
アクセスするURLが古いみたいで今はhttps://platform.openai.com/にリダイレクトされます。ちょっと手順違いますね。
右上メニューからView API Keysをクリックします。
Create new secret keyをクリックすると文字列が生成されるのでコピーします。
Step 4:Open AI APIクライアントをインストールする
AIの指示に従うだけでいいのでだんだん気持ちよくなってきます。
こうして何も考えない人が出来上がるんだなあ…
pip install openaiコマンドを入れてみたところWARNINGが出てきました。
分からないのでAIに聞いたら環境変数を入れろという話でした。
これヘルプデスク業務はAIにぶん投げるだけで良くなるのでは?
特に気にしなくていいらしいですが実際に入れました。
export PATH=$PATH:/home/pi/.local/bin
echo 'export PATH=$PATH:/home/pi/.local/bin' >> ~/.bashrc
Step 5:Pythonでコードを書いてみる
何も考えたくないのでAIにサンプルコードを書いてもらいました。
Python の例:
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というフォルダ内にコードを移動させて実行することにします。
cd openai_example
python script.py
実行したところ、フランスの首都はどこか?という問いに対してパリだよっと返してくれました。ただし英語です。
Step 7:日本語で質問するようにする
質問文が英語ならいけましたが質問は日本語でもしたいのでこれもAIに聞いたら日本語のサンプルコードをくれました。
修正されたサンプルコード
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のインストールを勧められました。
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認証キーの発行方法が分からんのでこれも聞きます。
実際のところ以下URLからでした。だいたい合ってるからユルス。
https://www.deepl.com/ja/pro-api?cta=menu-pro-api/
無料ですが、登録に自分の住所とクレジットカード情報が必要になります。
無料版の制限事項としては1か月に500,000文字まで翻訳可能というところなようです。
無料版だとapi-free.deepl.comというドメインになるのでURLの変更が必要でした。
エラー出力をAIにぶん投げるだけで何したら直るか教えてくれるので、動かないコードをAIと相談しながら修正を重ねました。
以下で動きました。
# -*- 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にします。
以上
圧倒的成長。