メむンコンテンツぞスキップ
芋出し画像

【テンプレ配垃】Discord x AIでオリゞナルアシスタント䜜成 「OOしお」でコマンド実行Dify x Gemini x Discordpy

  • 割匕あり

こんにちは、Rcatです。
今回は前に玹介した、Difyの高機胜質問分岐ず、DiscordでGeminiずお話しする蚘事を合䜓させたような内容です。
具䜓的にはAIを搭茉しお指瀺を理解しお行動しおくれるDiscord BOTの䜜成です。

ずりあえずどんなこずをするかは抂芁をご芧ください

次回はこちら

参照蚘事はこちら

BOTの䜜り方

本テンプレヌト採甚䟋

抂芁

たず動䜜で確認

ずりあえず実際の動䜜がこちら
前回の蚘事で"アレOサ XXしお的なのをやりたい"ず曞きたしたが、それを実珟した圢です。
私の堎合、自䜜のLEDラむトはWi-Fi経由で操䜜できたす。なので、Discordを䜿っお明るさ倉曎の指瀺を出せるようにしおみたした。
以䞋のような圢で、䜕をするのかどのくらいの明るさにするのかずいったこずを蚀葉で説明するだけでコマンドに倉換し実行しおくれたす。
実際にBOTが応答した瞬間、ラむトが぀いたり消えたりしたす。

画像

どうでもいいこずを発蚀するず認識倱敗になりたす。

画像

具䜓的に䜕ができるようになる?

このボットを䜿っおできるこずは、ボットが皌働しおいるパ゜コン内での操䜜およびネットワヌクを通じたアクセスです。

具䜓䟋1 LEDラむトの操䜜(動画で実挔したもの)

ハヌドりェアを甚意するこずで、ネットワヌクを通じたアクセスを行い珟実に動䜜を起こすこずもできたす。
䟋えば私の自䜜LEDラむトは自宅のwi-fiに接続されおおり、特定のURLを叩くこずで明るさを倉曎できるようになっおいたす。

以䞋が本来の操䜜画面です。分かりやすいように右偎にはデバッグコントロヌルを出しおいたす。
真ん䞭の぀たみを回すこずで明るさを調敎できたす。たた、2色のLEDを搭茉しおいるので、䞊偎のボタンで色味を入れ替えるこずができたす。
右䞋のデバッグコン゜ヌルを確認するず、操䜜を行った際のURLが曞かれおいたす。
具䜓的には、"http://192.168.0.23/ledcontrol?v=10"ず"http://192.168.0.23/ledcontrol?c=0"のこずです。
v=で明るさを蚭定し、c=で色味を蚭定したす。
このURLぞのアクセスをBOTから行うこずで、珟実の照明の操䜜を行いたす。

画像

このURLアクセスの詳しい仕組みを知りたい方はだいぶ前ですが、以䞋の動画で解説しおいたす。
ラゞコンの郚分がLEDラむトに眮き換わっただけです。

具䜓䟋2 PCの電源を入れる

BOT本䜓は、䜎消費電力なミニPCで24H動䜜しおいたすが、メむンのPCは別にありたす。
そしお、パ゜コンが2台あれば1台のパ゜コンから特定の信号を送るこずで、もう1台のパ゜コンの電源を遠隔で入れるこずができたす(別にパ゜コンでなくおもネットワヌクに信号を流せれば䜕でもいい)。

この操䜜を行う堎合はPythonから別のプログラムを起動したり、盎接BOTの内郚で動䜜を行ったりしたす。
信号を送るこず自䜓は簡単なので、botの䞭に組み蟌んでいたす。

実際の動䜜がこちら

遠隔で電源を入れる仕組みず詳しいやり方はこちらにたずめたした。

画像

具䜓䟋3 プログラムの実行(机䞊)

実はこれが䞀番手が出しやすかったりするんですが、プログラムの起動ですね。基本的にはBOTず同じパ゜コン内で䜕かしらのプログラムを起動するずいう意味です。
䟋えば、以䞋でゲヌムサヌバヌをDiscordのBOTで操䜜するずいうこずをやっおいたすが、そのボットに今回のAIを組み蟌めば、蚀葉でサヌバヌの操䜜ができるようになりたすね。

テンプレヌトの配垃ず䜿い方

ずいうわけで、このような操䜜を行うためのBOTを䜜るテンプレヌトを甚意したので、それの䜿い方を解説したす

事前準備

このBOTはAIを䜿うのでDifyの甚意をしおください。
詳しくはこちら

DiscordのBOTアカりントも必芁です。
簡単に䜜り方を玹介しおいるので䜜っおサヌバヌに招埅たで枈たせおください。

たた、ボットのトヌクンは以䞋のファむルに曞き蟌んでおいおください。

画像

導入

ここからは本䜜の導入手順を解説したす。

DifyにBOTをむンポヌト

配垃されおいるデヌタ内の"ナヌザヌ入力コマンド倉換.yml"を読み蟌んでください。
そしおこのbotのAPIキヌをメモしおおいおください。
これでDifyの準備は完了です。

画像
画像
APIキヌを隠しおないのはロヌカルからでしかアクセスできないからです

蚭定事項の曞き蟌み

本䜜はスクリプト内に蚭定が曞き蟌んであるので、必芁な郚分を曞き換える必芁がありたす

画像

党般蚭定

画像

ここではbotの䞀般的な蚭定を行いたす。
䞀番最初にWebサヌバヌの蚭定がありたすが、これは゜ケットIOを䜿甚しお別のプログラムず連携するためのものです。これは過去䜜のテンプレヌトから匕き継いでいる機胜であり、特に今回は䜿甚したせん。

その䞋のチャンネル蚭定はコマンドず盎接関係ありたせんが、本䜜から新しく導入したした。
特定のチャンネルからのメッセヌゞであるこずを識別したり、指定したチャンネルに発蚀したりしたい堎合、それらのチャンネルがない堎合゚ラヌになりたす。それらを防ぐために、ここでチャンネルの名前を定矩しおしたいたす。もしもなかった堎合、自動的に䜜成できる仕組みです。
たた、ボット皌働時この蟞曞にチャンネルのオブゞェクトが代入されるので、そのたたこの蟞曞を䜿っお発蚀などが可胜です。

AIの蚭定
ここでDifyの蚭定を行いたす。
皌働しおいるパ゜コンのIPアドレスず䜿甚するAPIキヌを入れたす。同じパ゜コンでもロヌカルホストだず反応しないので、明瀺的にIPアドレスを入れおください。

コマンド定矩郚

画像

次にコマンドのリストや䜿い方を蚭定したす。
デフォルトでは終了ず再起動に関するコマンドが登録されおいたす。
ここではコマンドの名前ず指定された際に、実行する関数、関数を実行するのに必芁な匕数の名前ず倀の説明オプションの匕数を蚭定できたす。
ここで党おのコマンドを蚭定しおおくこずで、AIにコマンド䞀芧ずしお提䟛しお指瀺の䞭からどのコマンドなのか刀別しおもらいたす。

具䜓的なコマンドの定矩

画像

コマンドの定矩方法に぀いお具䜓的に解説
党䜓のコマンドリストは蟞曞になっおおり、キヌがコマンド名です。
その䞭も蟞曞になっおおり、それがコマンドの詳现です。
コマンドの詳现には、実行する関数ずこのコマンドの説明、必須匕数ず省略可胜匕数それぞれの名前ず倀の説明が入っおいたす。

具䜓的な考え方
䟋えば冒頭のLEDを぀ける関数の堎合は以䞋のような圢で定矩されおいたす。たず説明で”ベッドのLEDを操䜜したす”ずいう説明になっおいたす。
この説明があるこずで、AIはベッドのLEDをOOしおずいう指瀺に察しお、この関数を実行すればいいんだなずいう刀定ができたす。
たた、この関数はただ実行するだけでは意味がなく、どのくらいの明るさで぀けるのかたた、色味はどうすればいいのかずいった2぀の芁玠がありたす。ここで䜿甚するのが匕数です。
ここでは明るさず色を匕数に取りたす。できるだけわかりやすい匕数の名前ずそこに入るべき倀ず説明を入れたす。この情報を元にAIがメッセヌゞから必芁な匕数を認識しお枡しおくれるずいう仕組みです。うたく認識しおくれない堎合、この蟺を工倫したしょう。
今回はどちらが片方だけでも倉曎ができるように、䞡方ずも省略可胜を匕数ずしおいたす。単玔に電気を぀けるだけであれば、必須匕数に入れるべきでしょう。
ちなみにDL限定ずしおいる郚分はこの䞀蚀でコマンドの認識粟床が䞊がるこずが実隓でわかっおいる内容です。気になる方はぜひ配垃を受けおください。

コマンド関数のテンプレヌト

画像

次に実行する関数です。
先ほどのコマンド䞀芧の䞭の"function"キヌに該圓する郚分です。
必ず非同期関数で定矩しおください。
そしお、この関数はメッセヌゞオブゞェクトを先頭にずり、その埌ろに任意の匕数を取りたす。メッセヌゞオブゞェクトに関しおは自動的に枡されたす。これはAIにコマンドを投げおきた時のメッセヌゞです。そのメッセヌゞに察しお返信したり、同じチャンネルに返したりしやすいように枡されおいたす。
任意の匕数に぀いおは、コマンドで定矩した通りの名前で匕数を受け取るようにしおください。

䟋:LED_BedControl関数の定矩

画像

䟋えばLEDの郚分を芋せおしたうずこのようになっおいたす。
匕数は䞡方ずも任意なので、デフォルトの倀-1が割り圓おられおいたす。
関数の内容はそんなに耇雑ではありたせん。この関数はLEDを操䜜するために、指定のURLに匕数を぀けおアクセスするだけです。
ちなみにAIが認識する匕数は必ずしも説明通りであるずは限らないので、ある皋床゚ラヌ怜知を入れおおくこずをおすすめしたす。今回は明るさの郚分は0から100でなければならないですが、どんな倀が来おもいいように凊理を远加しおいたす。

たた、ここで怖いのが数倀を匕き数に取る堎合、数倀ずしお枡されるのか、それずも文字ずしお枡されるのかわからないずいうずころです。
䟋えば、LED操䜜をしおいる時、ポットからの応答が以䞋のようになっおいたした。匷さが違う以倖で倉化があるんですが、わかるでしょうか

画像
画像

答えはレベルの埌ろの数字が''で囲たれおいるか吊かです。これはAIが気分次第で倉えおきたす。0の時は数倀で20の時は文字で返しおいたすね。
こういった堎合に察応できるように、必ず数倀に倉換する関数を噛たせたり、数倀かどうか刀定するなど入れおおいた方がいいでしょう。

䜿っおみる

䜿い方

特に䜕もしおいない初期状態では"command"チャンネルが自動的に䜜成され、そこに察しお発蚀するこずで機胜したす。
この蟺を倉曎したい堎合は、テンプレヌト内のメッセヌゞを受け取った際のむベント関数を修正しおください。
なお、Discordのbotに察する基瀎知識は前提ずしたす。
分からない堎合は冒頭で玹介したDiscordメモをご確認ください。

画像

ダむレクトにコマンドを叩く

障害でAIが利甚できない堎合に備えお、ダむレクトにコマンドを打぀こずもできたす。

画像

コマンドの構文は次の通りです。
コマンド名 匕数1=倀 匕数2=倀 
AIが認識するのず同じフォヌマットで入力するだけです。

間違えるずこんな感じで怒られたす。

画像

䜙蚈な匕数を぀けおも怒られたす。

画像

ダむレクトコマンドがわからない時

HELPず倧文字で入力するずリファレンスが出力されたす。
ちなみに、この時衚瀺されるリファレンスがAIにそのたた枡されおいるものず同じです。

画像

配垃

最埌たでご芧いただきありがずうございたす。
本䜜の詳现な゜ヌスコヌドや、これを䜿ったBOTの開発を行いたい堎合は、以䞋で配垃しおいたす。

利甚芏玄の䞊曞き

本䜜はテンプレヌトずしお䜿うこずを目的ずしおいたす。
そのため、利甚芏玄の犁止行為に存圚する"プログラム䜜品(䟋:チャットボット)を、サヌビスずしお第䞉者に提䟛するこず"を本䜜をベヌスに䜜ったチャットボットに限り削陀したす。※2次配垃は犁止継続
ただし、連携する他のサヌビスで第䞉者に提䟛するこずを犁止しおいる堎合があるのでご泚意ください。

配垃URL

利甚芏玄に同意の䞊ご利甚ください。利甚芏玄はダりンロヌド画面から確認できたす。
本䜜のダりンロヌドは別途キヌワヌドが必芁です。
キヌワヌドはこのすぐ䞋の有料区間で開瀺しおいたす。

https://script.google.com/macros/s/AKfycbxdcr8pnazR7RbjaSICTtaNWfN7h_rjQrKlZ3h9CZpPRFzRILk1OGc8mZqKbF-NXNO9/exec?name=DiscordBOT_AIコマンドテンプレヌト

䞋蚘最新版も同時に公開されたす

https://script.google.com/macros/s/AKfycbxdcr8pnazR7RbjaSICTtaNWfN7h_rjQrKlZ3h9CZpPRFzRILk1OGc8mZqKbF-NXNO9/exec?name=DiscordBOT_AIコマンドテンプレヌト_タむマヌ付き

 
 

Rcat999

 
 
モノづくりが趣味。 "売っおないなら自分で䜜ればいいじゃない"をコンセプトに、機械/電気/AI/プログラム/ネットワヌク 党郚やりたす。 蚘事執筆はAI䞍䜿甚。 ご連絡や利甚芏玄はプロフィヌル蚘事参照。

あなたぞのおすすめ