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

Difyの質問分岐 高機胜版考えおみた 分岐だけじゃなくお匕数も刀定

    こんにちはRcatです。
    皆さんはDify䜿っおたすか
    オリゞナルチャットボットやワヌクフロヌを䜜れおすごく䟿利ですよね。
    その䞭に質問分岐ずいうものがあるず思いたすが、それなりに玠晎らしいんですが、ちょっず物足りないんですよね。
    ずいうわけで䜕が物足りなくおどういうこずをしたいのか、説明しおから解説たでしおいこうず思いたす。

    次回

    質問分岐っお

    Difyのワヌクフロヌ機胜の䞀぀で、AIを䜿っお入力の内容から分岐できる機胜です。
    䟋えば、以䞋のように入力された文字列によっお、その先の凊理を倉曎するずいったこずができたす。
    こういった簡単な分岐だけならいいのですが、次のような䜿い方をする堎合、ちょっず物足りなく感じたす。

    画像

    アレOサ XXしお的なのをやりたい

    さお、やりたいこずずいうのはタむトル通り蚀葉で指瀺しお䜕かをしおもらいたいずいうこずです。
    質問分岐噚でもできないこずはないですが、分岐しかできないず思っおいたす。
    プログラム颚に蚀うず実行するコマンドは分岐できるけど、それ以降の匕数たで認識できないずいった状態です。あず、地味に䜿甚トヌクンが倚いです。

    ずいうわけで、入力した内容からコマンドの遞択ず匕数の遞択を自動で行う。質問分岐噚的なものをこの蚘事では䜜っおいきたす。

    ちなみに、この蚘事以前にも玹介しおいたりする

    実はこちらの蚘事ですでに実蚌しおいる内容ではありたす。
    今回はこれにさらに改造を加え、もう少し柔軟に䜿えるような工倫をしたので、新しく蚘事にしたずいう次第です。

    ずりあえず実行する

    今回はこの仕組みをDiscordのBOTに組み蟌んでいたす。
    こうするこずで冒頭で玹介したアレOサ XXしお的なこずをDiscordのチャットで行えるようになりたす。
    今埌制䜜するボットは党おこの技術がベヌスになりそうですね。

    具䜓的には私が蚀葉に指瀺を出すず、その内容をコマンド化しおプログラム内の関数を実行するずいう仕組みです。

    䟋えば以䞋はずあるシステムに銘柄名ず別称を远加する凊理です。
    NTTず日本電信電話は同じですがAIは分かりたせん。それらを結び぀けるためのデヌタベヌスを䜜っおいるのですが、埌から簡単に䜜れるようにチャットで受付ができるようなシステムです。

    画像

    この䟋では、最初に远加のコマンドを実行しお銘柄を远加しおいたす。
    その埌に別名の远加を行っおいたす。

    画像

    ちなみに、このコマンドは登録の時点で別名の登録も同時に行うこずができたす。AIを䜿うこずで、この蟺も自動的に認識されたす。

    画像
    こんな感じのデヌタベヌスが䜜成される

    盎接コマンドで蚘述するず以䞋の通りです。
    もしもAIを䜿わない堎合、チャットに以䞋のフォヌマットに埓っお正確に入力しなければなりたせん。
    addbrand <BrandName> [alias]
    addalias <BrandName> <alias>
    delbrand <BrandName>

    具䜓的な仕組み

    プロンプト

    たず、䞀番倧事なのはAIぞの指瀺になりたす。
    以䞋がチャットボットのプロントになりたす。(テキストゞェネレヌタヌだけど)
    今回、柔軟性を確保するために耇数の倉数を䜿甚しおいたす。
    前䜜ではナヌザヌからの入力のみ倉数にしたしたが、コマンドの定矩も倉数にしたした。
    こうするこずで、このテキストゞェネレヌタヌを1぀甚意しおおけば、どんなコマンドにも察応できるようになりたす。

    画像
    黒いずころは限定コンテンツ

    CommandReference倉数の䞭身

    次に倉数になっおいる郚分です。指瀺の郚分に倉数を甚いるこずで、動的にプロンプトを倉える䜜戊です。
    今回のクラむアントはPythonなので、゜ヌスコヌドの䞭で以䞋のように定矩しおいたす。

    画像
    黒いずころは限定コンテンツ

    AIぞの指瀺でどういうコマンドがあるのか、そのコマンドはどういう匕数を必芁ずするのかずいったこずが曞かれおいたす。たた、かっこ内でずある指瀺を远加するこずで粟床を高めおいたす。これがあるかないかで、チャットでの認識粟床に差があるこずは確認枈みです。

    Infomation倉数の䞭身

    こちらに関しおは、匕数の内容に関する泚意事項があれば远加で指瀺できるずいうものです。
    䞀応前䜜でこういった指瀺を远加しおおくこずで、粟床が向䞊するこずは確認枈みです。

    䟋えば、今回は以䞋のような指瀺が入っおいたす。

    画像

    コマンドリファレンスに曞いおもいいかもしれたせんが、゚むリアスは他のコマンドでも参照するので、同じこずを曞いおいるずプロンプトが長くなっおしたいたす。トヌクン削枛効果もありそうです。

    実行する関数

    AIの玹介が終わったずころで、次はチャットボットでどういう実装をしおいるかずいう玹介をしたす。
    次の゜ヌスコヌドはDiscordのボットがメッセヌゞを受信した時のむベントの䞀郚です。
    䞀番最初の行でメッセヌゞを取埗しおいたす。
    次にメッセヌゞが特定の圢匏に則ったコマンドである堎合を先に凊理しおいたす。こうするこずで、通垞のコマンドずAIコマンドの共存ができたす。
    定型コマンドず認識できなかった堎合は、メッセヌゞを先ほどのテキストゞェネレヌタヌに送っおコマンドの自動認識を開始したす。
    そしお、AIからの応答を確認し、定型コマンドず同じように分岐しおいきたす。たた、AIは匕数を蟞曞圢匏で返しおくるので、そのたた䜿えるのが魅力です。
    あずはここの分岐の䞭で様々な凊理を入れおおけばいいわけですね。
    今回はデヌタベヌス䜜成ですが、電子工䜜ず連動させお珟実に物を動かすなんおこずもできそうですね。やるならhttpリク゚ストを䜿っお連携ずかでしょうかね。倢が広がりたすね。

    画像
    あたり関係のない郚分を削陀しおいたす。

    Select AI2関数は以䞋の通りです
    最近のDify系の蚘事を芋おいただいおいる方ならわかるず思いたすが、自䜜のクラむアント関数を䜿っおAPIを叩いおいたす。
    今回は远加のパラメヌタヌがあるので、その分を远加で枡しおいたす。

    画像
    䜙蚈なコメントは非衚瀺にしおいたす。

    たずめ

    今回はチャットポットをより本栌的なチャットボットにできるような技術開発を行いたした。
    今回はそもそもPythonでできたDiscordのbot内に動く前提なので、Pythonはクラむアントで動かしおいたすが、Difyの䞭でもPython自䜓は䜿えるので、ワヌクフロヌを䜿っお自䜜質問分岐の埌にコマンド分岐甚の゜ヌスコヌドを曞いおURLを䜜成し、httpリク゚ストに぀なげお他のものを動かすなんおこずもできそうですね。

    そのうちこの機胜を暙準搭茉したDiscordbotテンプレヌトでも公開しようかな 。


    未公衚郚
    本蚘事をお買い䞊げいただくこずで、本線では黒塗りで䌏せられおいたプロンプトや指瀺の党䜓をご芧いただくこずができたす。

     
     

    Rcat999

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

    あなたぞのおすすめ