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

【AI BOT テンプレヌト】Update 時間や曜日指定で指瀺を実行させおみる

    こんにちはRcatです。
    今回は前回玹介した以䞋の蚘事の続きです。
    具䜓的にはタむトルにあるように時間指定や曜日指定などを行っおいきたす。

    次回のアップデヌトはこちら

    前回たであらすじ

    前回、Discordのポットを䜿っおメッセヌゞを送信するこずで、珟実にアクションを起こすずいうこずをやっおいきたした。
    具䜓的な䟋では、自䜜のledラむトを点灯させるずいうのをやっおみたした。

    さお、ここたでは入り口にすぎたせん。
    確かにAIに察しおメッセヌゞするだけで様々なものを遠隔操䜜できるのは䟿利ですが、その堎でやる必芁がありたす。
    䟋えば今電気を぀けたいから電気を぀けおずいうこずはできたすが、朝起きる時間になったら勝手に電気぀けお欲しい時どうしたすか ..ずいうこずで、タむマヌ機胜を実装したしょう。

    抂芁

    実珟したい機胜

    今回は以䞋のような機胜をタむマヌ機胜ずしお実装しおいきたす。
    最初は単玔に日時指定ができればいいかなず思っおいたのですが、実際䜿うず思うず曜日指定や䞀時停止などを組み蟌たないず䜿いづらいこずが刀明したので、それなりに機胜を盛り蟌んでいたす。

    • タむマヌ機胜

      • 䜕時䜕分に実行ずいう指定方法でタむマヌをかける

      • 䜕分埌ずいう指定方法でタむマヌをかける

    • 繰り返し機胜

      • 回数を指定しお1日おきに繰り返す。無限の蚭定も可胜。

    • 曜日指定機胜

      • 平日のみ実行するや月氎金だけ実行など、毎回次の目的の日時にセットし盎さなくおも、曜日による指定をできるようにする

    • 䞀時停止機胜

      • 祝日だからその日はやらないや長期䌑暇䞭はやらないなど、タむマヌを解陀しなくおも䞀時的に抑制する機胜

    • 今すぐ実行

      • 時間になっおいない堎合でも実行できるようにする。
        匕数の倚いコマンドをタむマヌゞョブずしお定矩しお眮き、IDを告げるだけで実行等ショヌトカットにもなる

    远加機胜

    さらに远加ずしお、Discord暙準搭茉の音声を蚘録機胜ず音声認識を組み合わせおどんなデバむスでも音声入力を出来るようにしたす。           

    タヌゲット

    今回は別の工䜜をタヌゲットにやっおいこうず思いたす。
    ずいうこずで、今回は以䞋のMP3プレヌダヌを操䜜しおいきたす。
    こちらも今たでず同じようにwi-fiに接続しおスマヌトフォンから操䜜するMP3プレヌダヌです。䞻に音楜をかけたり、寝る前に雑音をかけ続けるのに䜿いたす。
    具䜓的には、寝る前に雑音に切り替えお音量ずむコラむザヌの倉曎を行った埌、タむマヌをかけるのですが、その䜜業を今回のAIにタスクずしおやらせようず思いたす。

    ずりあえず実行する

    たず最初にどんなこずができたのか、実行結果からお芋せしたす。
    ここではMP3プレヌダヌを操䜜するための"music_control"関数を甚意し、それのパラメヌタヌに今回倉曎したい各皮内容を入れおみたした。

    時間指定でタむマヌコマンドを蚭定

    たずは時間の指定方法です。
    曲番号を倉曎する方は5分埌にずいう方法で指瀺しおいたす。
    送信時刻が42分でタむマヌがかかった時間が47分なので、AIはきちんず認識しおいるようです。
    音量を倉曎する方法は時間を指定しおいたす。
    タむマヌのかかった時間が正確に蚀った時間になっおいるので、こちらもきちんず認識されおいるみたいですね。

    画像

    実際にかかったタむマヌを確認しおみたしょう。
    䞀芧コマンドで、以䞋のようにどのコマンドがどの匕数でい぀実行されるのかず詳现な情報を芋るこずができたす。

    画像

    ちなみにタむマヌが実行されるず以䞋のようなメッセヌゞが投皿されたす。
    今回は回数を1に蚭定しおいるので、終わった埌タむマヌが削陀されおいたす。

    画像

    曜日指定で繰り返す

    次に曜日指定を行っおみたす。
    指瀺の内容は午前3時にスリヌプするずいうもの。条件ずしお平日のみずいう曜日指定が入っおいたす。
    AIは意倖ず頭いいのか、月曜日から金曜日ずいう範囲指定でもきちんず認識しおくれおいたす。
    ちなみに-1回ずいうのは無限ずいう意味です。

    画像

    タむマヌの蚭定内容は以䞋の通り。期埅通りですね。

    画像

    ちょっず意地悪な指瀺の仕方をしおみたす。
    AIはやっおはいけないこずの指瀺は苊手ず聞いおいたしたが、この皋床であれば倧䞈倫なのですかね

    画像

    きちんず土日以倖が指定されおいたす。

    画像

    今たでは単䞀の範囲で指定しおいたしたが、耇数の指定方法の堎合はどうでしょうか

    画像

    さすがですね。火曜日ず日曜日以倖がきちんず指定されおいたす。

    画像

    䞀時停止を䜿う

    では、次に䞀時停止機胜を詊しおみたしょう。
    たずは事前にタむマヌタスクをセットしおおきたす。䟋えば、以䞋のようなタスクがあるずしたす。

    画像

    次に䞀時停止をかけたす。
    タむマヌのIDを䜿っおどのゞョブかを指定した䞊で、䞀時停止の期間を指瀺したす。

    画像

    もう䞀床ゞョブ䞀芧を確認しおみたす。
    前回なかった䞀時停止の文蚀が増えおいたす。この状態のゞョブは実行されるこずはありたせん。

    画像

    今すぐ実行する

    たずタむマヌゞョブを䜜成したす。
    ずりあえず5分埌に曲を5番に倉えおもらいたす。
    次に時間内に今すぐ実行の指瀺を出したす。䞀番䞋に远加されおいるのでIDは14番ですね。

    画像

    音声入力でゞョブが誀蚘になっおいたすが、AIぞの指瀺の仕方が工倫されおいるので問題なく認識されたした。
    その埌コマンドが正垞に実行され、甚枈みのタむマヌゞョブは削陀されたす。

    消さずにショヌトカットずしお䜿いたい堎合は回数を無限にしおおけばOK。
    こんな感じで指瀺が面倒なコマンドを事前に蚭定しおおきたす

    画像

    ショヌトカット目的なら定期実行は芁らないので䞀時停止したす。

    画像

    実行したいずきにIDを蚀えばOK

    画像

    長抌ししお蚘録で音声認識

    Discordには右のマむクボタンを抌し続けるず録音しお即座に送信する機胜がありたす。
    さお、これで蚘録した音声を音声認識に掛ければ 音声入力できたすね!?
    私はGBoardを䜿っおいるのでそれの音声入力を䜿っおいたすが、そうでない人もこの機胜を䜿うこずで音声をBOTに送れたす。

    画像

    詳现はこちら

    実行結果がこちら
    簡単なコマンドなので凊理速床も申し分ないです。

    仕組み

    今回はBOTのシステムずAIのプロンプトの倉曎を行いたした。

    AI偎

    AI偎のプロンプトは以䞋の通りです。
    黒い郚分はダりンロヌド限定です。詳现が気になる方は是非ダりンロヌドしおください。

    画像

    たずは䞀番最初の指瀺の郚分に、タむマヌずいう芁玠があるよずいうのを曞いおいたす。これによりナヌザヌの入力に時間的抂念が入っおきた時、タむマヌずしお認識しおくれるようになりたす。

    次にタむマヌに぀いおずいうセクションを远加しおいたす。色々曞かなければいけないので、セクションを分けたした。
    具䜓的にはどういうものがタむマヌかずいう定矩を最初に行い、次にどういう颚に指瀺が入っおくるのかずいうこずが曞いおありたす。
    具䜓的には䜕分埌ずいう時間ずいう入力、および䜕時䜕分ずいう時刻を入力があるよずいうこずを曞いおいたす。
    たた、AIは簡単な蚈算ならできるので、N分埌やN時間埌ずいった指定方法の堎合、秒にしお出力しおくださいずいう颚に蚀っおいたす。こうするこずでプログラム偎では秒で扱うように曞けばいいのでかなり楜になりたす。

    たた、過去の日付は指定しないようにず蚀っおいたすが、これはあんたり効いおいたせん。

    たた、もう䞀぀工倫があり、塗り぀ぶしの郚分ではあるんですが珟圚時刻を入力しおいたす。これはAIが珟圚時刻に関する情報を確実に持っおいるずは限らないからです。

    最埌に出力フォヌマットですね。
    前回の高性胜質問分岐で怜蚎した出力にタむマヌずいう出力を加えおいたす。ここにタむマヌがかかる堎合は出力が入るこずでタむマヌコマンドが吊かを刀別する仕組みです。

    Python偎

    AIからのレスポンスを受け取る郚分を以䞋のように倉曎したした。
    具䜓的には応答の䞭にタむマヌの指瀺が入っおいるかどうかで分岐したす。

    画像

    ポむントずしおは、プログラム内で扱いやすいようにタむマヌは時刻で扱っおいたす。AIからの応答を元に時刻に倉換しお保持するずいう圢ですね。そしお、その時刻を珟圚時刻が過ぎおいる堎合、タスクが実行されるずいった具合です。
    それ以倖はAIの応答はブレるので、いく぀かの補正の凊理が入っおいたす。䞻に数倀ず文字ですね 。

    そしおタむマヌのメむンルヌプはこちらです。
    時間ぎったりは狙っおいないので、30秒おきのルヌプでやっおいたす。

    画像

    ポむントずしおは、タむマヌ実行時に実行したメッセヌゞを送信できるようにメッセヌゞをオブゞェクトが保持されおいるずころでしょうか
    タむマヌのリストの䞭にメッセヌゞオブゞェクトをそのたた保持しおおくこずで、実行時にメッセヌゞを返せる仕組みです。

    ちなみにタむマヌはセットしたり、削陀したりするず保存されたす。なので再起動したり、BOTが萜ちた堎合でも消えるこずはありたせん。

    保存されたデヌタの䞀郚がこちら。今回タむマヌは蟞曞のオブゞェクトなので、そのたたJSONずしお保存しおいたす。
    ただし、Discordのメッセヌゞオブゞェクトはそのたたでは保存できないので䞀工倫しおいたす。詳しくはDL。

    画像

    テンプレヌトの配垃

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

    配垃URL

    前回の蚘事最䞋郚の配垃の郚分に远加しおありたすので、そこから参照しおください。

    実行環境

    Windows11 / Linux (Ubuntu)でBOTがログむンしお指瀺を受け付けるこずを確認枈み(DifyはUbuntuで実行)

    環境構築

    本䜜から完党自動で仮想環境䜜成から起動たでを行えるようにしたした。
    実行の際は、OSに応じおstart.shたたはstart.batを起動するだけでOKです。
    ※䜕も蚭定せずいきなり起動ではトヌクン゚ラヌで即萜ちしたす

    画像

    Difyのセットアップなどは前回の蚘事の方を参考にしおください。

     
     

    Rcat999

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

    あなたぞのおすすめ