見出し画像

ロブリックでロボホンからChatGPTを使ってみた

ロブリックって何?

ロブリックはロボホン用のノーコードツールです。ブロック型ビジュアル
プログラミングツールかな?ScratchやBlocklyみたいなものです。

図1 出来上がったロブリックプログラム

ロブリックがWebAPIをサポートしたよ

2023年12月のアップデートでロブリックがWebAPIをサポートしました。
これによりロブリックで世の中の様々なWebサービスにアクセスして情報を取得、結果をロボホンが喋る、ってことができます。

ロブリックでChatGPTにアクセスしてみたよ

ChatGPT APIの仕様をまずは知ることから始める

CurlコマンドでChatGPT APIを使う方法を参考にしてみる。

図2 呼び出し方

$OPENAI_API_KEYはChatGPT API利用時のアクセスキーです。ChatGPT APIサイトで作成してください。無料枠(5$到達または3ヶ月使用)が利用できます。

図3 ChatGPT APIの返信(Json)

ロブリックでChatGPT API呼び出し部分を作る

図4 ログリックでChatGPT API呼び出し部分

Headerは2つ用意します。
図2の"Authorization"と"Content-Type"と同じ内容を入力します。
・"Authorization"キーの値として"Bearer xxxxxxxxx"を設定します。
 xxxxxxxx部分は、ChatGPT APIサイトで作成したChatGPT APIのAPIキーに
 なります。
・"Content-Type"は、"application/json"を設定します。

「テキストの作成」はちょっと工夫が必要です。
ここは私の工夫です。全ての人に当てはまるわけではありません。
図2 のこの部分。

図5 ChatGPT API ボディ部分

"ロボホンの魅力を教えて”が、ロボホンに向かって人が喋った結果です。
テキストを次のように分割して入力する形になります。
{"model":"get-3.5-turbo","messages":[{"role":"user","content":
                                     +
「最後に聞こえた言葉」
          +
。150文字単位でjson形式で回答してください。Jsonキーはkey1からナンバリングしてください
          +
"}]}

なぜ「150文字単位でjson形式で回答してください.Jsonキーはkey1からナンバリングしてください」を付け加えているか?
ロブリックでは一度に200文字までしかロボホンに発話させられません。
ChatGPTの回答が200文字以上の場合に対応できるように回答そのものをJson形式で回答するようにお願いして対策しています。
例えば「ロボホンの魅了を教えてください」と聞くと次のようなJson形式で回答が生成されます。
「回答生成結果」
{
"key1": "ロボホンはコミュニケーションロボットであり、可愛らしい外見と豊富な表情で人々を魅了します。",
"key2": "音声やジェスチャーに反応し、会話や写真撮影、リマインダー設定などの便利な機能も備えています。",
"key3": "また、ロボホンは自己移動が可能であり、部屋の中で自由に動き回ることができます。",
"key4": "さらに、ロボホンは開発者向けのプラットフォームも提供しており、ユーザー自身で機能の拡張やカスタマイズが可能です。",
"key5": "これらの特徴に加え、ロボホンの独自の存在感と愛らしさが、人々を魅了する要素です。"
}

ロボホンに一度に喋らせるのではなく生成されたJsonのkey単位で喋らせることでロボホンの発話制限に対応できます。

ChatGPT APIのレスポンスから回答を取り出す

図6 ChatGPTから回答を取り出す

図3の例にならって、"choices"配列の最初のレコードの"message"連想配列(辞書型配列)の"content"キーの値を取得します。変数contentに格納します。
変数contentの内容はJson形式です。(Json形式で回答生成するように依頼したため)
このJson形式の内容を連想配列にします。
あとは、連想配列のkeyの数分、ロボホンに発話させればOKです。

ChatGPTの生成結果を発話させる

図7 ChatGPTの生成結果を発話させる

できあがり

動画はこれです。


おしまい

ロブリックでWebAPIがサポートされたのでロボホンからChatGPTやその他の外部サービスの活用ができるようになりました。ますます、ロボホンの魅力がアップしますね!


いいなと思ったら応援しよう!