見出し画像

DifyでDiscordにGemini招待してみた ~Discord pyによるbotとDify AIPの連携~

こんにちは、Rcatです。
今回はDiscordのボットを作成して、その中身をGeminiにすることで、擬似的にGeminiを招待してみます。
プログラミング要素としては、次のようなことが挙げられます。
チャットボットの場合のリクエストの仕様。1つの会話として継続入力をどう行うのか。BOTの中でどうやって連携するのか。
それでは早速やっていきましょう。

本記事は99%無料です。

本シリーズはこちら

次回はこちら

寄り道はこちら


Dify側の準備

チャットボットの準備

まずは"チャットボット"を作成します。
初回の記事でチャットボットを作成しているので、これを改造します。

改造といっても大したことをするわけではありません。
手順のところにチャットボットとして振る舞ってくれるように一言入れるだけです。
ひとまずこの状態でAPIキーを発行します。

あなたはとあるチャットルームの参加者です。
問いかけに適切に応答してください。

APIが違う!?

前回はテキストジェネレーターでのAPIを見ていきましたが、チャットボットの場合は会話などがあるので、どういう風にやっているのか確認し直したところ、どうやらURLから違うみたいです。
URLは次の通りです。
"http://ホスト/v1/chat-messages"

チャットボットのリクエストボディ

チャットボットの場合、リクエストボディを変化があります。
具体的にはインプットが空になり、クエリが外に出ている点ですね。

APIアクセスより

チャットボットの場合、入力テキストはqueryに入れます。
テキストジェネレーターで使った"inputs"は使用しません
また、連続した会話を行う場合のパラメーターとして"conversation_id"というのが存在します。これを使うことで会話のやり取りが成立するみたいです。

チャットボットのリクエスト関数

前回作ったクラスに以下のチャットボット専用の関数を追加しました。
やってることとしては、リクエストボディを作る関数を専用のものに変更しました。
また、このクラスは1つの会話にのみ対応する前提で、直前のやり取りを保持し続ける場合は"conversation_id"を含めることで会話として処理を行います。

Discord側の準備

BOTの作成

下記の記事を参考にボットを作成し、招待しといてください。

BOTプログラムの作成(抜粋)

こちらはBOTを作成で紹介した記事末尾で、紹介しているテンプレートを使用して作っていきます。上から下まで解説すると長くなってしまうので抜粋します。
全文に関しては本記事、最下部をご確認ください。

こちらがメッセージが送られてきた時のイベントになります。
2つの特定のメッセージ以外は全てAIに回します。

AIに回して処理する部分はこちらです。
難しいことはありません。入力されたメッセージを新しく作ったチャット用のメソッドに渡すだけです。

少し前にも紹介しましたが、最後はこちらの関数でAIに処理を投げます。
会話が続きなのか、新規なのかはnewコマンドが入力された時のグローバル変数の値によってこの関数のResume引数に渡されるという仕組みです。
Resumeが真の場合は、前回のメッセージにくっついていたメッセージIDをつけて送信することで続いている1つの会話として処理します。

実際にチャットしてみる

DiscordでGeminiにと会話する

それでは早速チャットしてみましょう。
前回の会話の内容が考慮されているのかどうかを確認するため、あえて2回目以降は主語を省いています。

チャットの結果は上記の通りです。
どうやらきちんと考慮されているみたいですね。
1回目に猫についての話を振りました。
2回目にどこが好きか聞いています。ポイントはこの時、"猫のどこが好き"と聞いていないところです。
それにもかかわらず、猫の好きなところをあげてきたということは前回の会話が考慮されているという証拠です。
そして3回目、前回の会話がさらに考慮されているのか?もう一度試したところ猫の鳴き声に関する返答が来たので、こちらもきちんと考慮されているようです。

実はログで見られる

先ほどは会話の内容から今までのやり取りが考慮されているかどうかを判別しましたが、実はこれログから見られます。
一番最新のやり取りを見ると、今まで送った全ての会話がログに記されていることがわかります。

何回前まで考慮されるのか

とりあえず20回
これはダメみたいですね。

Rcat999 
これからいくつかの情報が入力されます。
最後に、処理開始といった時点で処理を開始してください。
そうでない場合は継続入力です。
Gemini
 — 今日 18:26
了解しました。情報を入力してください。処理開始と指示があるまでお待ちします。
Rcat999 — 今日 18:27
ねこはかわいい
Gemini
 — 今日 18:27
確かに、猫は非常に愛らしく、人気のあるペットです。
Rcat999 — 今日 18:27
猫はもふもふ
Gemini
 — 今日 18:27
はい、猫の柔らかくもふもふした毛並みは、多くの人にとって大きな魅力です。撫でたり抱きしめたりすると、とても心地よいですよね。
Rcat999 — 今日 18:27
猫はニャーと鳴く
Gemini
 — 今日 18:27
はい、猫は通常「ニャー」という音で鳴きます。この鳴き声は、コミュニケーションや感情表現に使用され、さまざまな意味を持つことができます。例えば、空腹、愛情、注意を引くときなどに「ニャー」と鳴きます。
Rcat999 — 今日 18:27
猫のしっぽはしなやか
Gemini
 — 今日 18:27
はい、猫のしっぽは非常にしなやかで柔軟です。バランスをとったり、感情を表現したり、コミュニケーションをとったりするために使用されます。例えば、しっぽを高く上げていれば機嫌が良く、しっぽを下げていれば怖がっていることを示しています。
Rcat999 — 今日 18:27
猫の詰めは鋭い
Gemini
 — 今日 18:27
はい、猫の爪は非常に鋭く、獲物を捕らえたり、木に登ったりするために使用されます。また、爪とぎをすることで爪を研ぎ、健康に保っています。ただし、猫の爪は定期的にトリミングして、家具や人を傷つけないようにする必要があります。
Rcat999 — 今日 18:28
猫は狩人
Gemini
 — 今日 18:28
はい、猫は生まれながらのハンターです。鋭い爪、鋭い歯、優れた視力と聴力を備えており、獲物を追跡して捕らえることができます。主にネズミや鳥などの小動物を狩りますが、場合によっては魚や昆虫も食べます。
Rcat999 — 今日 18:28
猫はマタタビ好き
Gemini
 — 今日 18:28
はい、多くの猫はマタタビという植物に含まれるネペタラクトンという成分に反応します。この成分は猫に陶酔感や多幸感を与え、転げ回ったり、よだれを流したり、鳴いたりするなどの奇妙な行動を引き起こします。ただし、すべての猫がマタタビに反応するわけではありません。
Rcat999 — 今日 18:28
三毛猫
Gemini
 — 今日 18:28
三毛猫とは、白、黒、オレンジの3色を被毛に持つ猫のことです。ほとんどがメスで、オスは非常にまれです。三毛猫の毛色は遺伝的に決まっており、染色体の不活性化によって発生します。
Rcat999 — 今日 18:28
猫は良く寝る
Gemini
 — 今日 18:28
はい、猫は睡眠を多く必要とする動物です。平均して1日12~16時間、場合によっては20時間以上も寝ることがあります。猫の睡眠は浅いレム睡眠と深いノンレム睡眠を交互に繰り返しており、獲物から身を守りながら休息をとっています。
Rcat999 — 今日 18:29
猫じゃらし
Gemini
 — 今日 18:29
猫じゃらしとは、猫の遊び道具の一種で、棒の先に羽根や布などの小物が取り付けられています。猫は猫じゃらしを追いかけたり、じゃれたりするのが大好きで、運動不足解消やストレス発散に役立ちます。また、飼い主とのコミュニケーションツールとしても使われます。
Rcat999 — 今日 18:29
猫はキーボードで寝る
Gemini
 — 今日 18:29
はい、猫はキーボードの上で寝ることを好む傾向があります。キーボードは暖かく、猫の体にフィットする形をしているため、居心地の良い場所になります。また、飼い主が近くにいることが多く、安心感を得られることも理由の一つです。ただし、猫がキーボードの上で寝ているときは、誤ってキーを押さないように注意が必要です。
Rcat999 — 今日 18:30
猫は風呂で暴れる
Gemini
 — 今日 18:30
多くの猫は水に濡れることを嫌がり、お風呂で暴れることがあります。猫の被毛は水をはじく性質があり、濡れると体温が低下してしまいます。そのため、猫は本能的に水場を避けます。また、お風呂は狭い空間で逃げ場がないため、猫にとってストレスを感じやすい環境になります。
Rcat999 — 今日 18:30
猫はCAT
Gemini
 — 今日 18:30
はい、「CAT」は英語で「猫」を意味する単語です。この言葉は、中世英語の「catte」に由来し、さらに古いフランス語の「chat」に遡ります。猫を表す言葉として広く使用されており、世界中の多くの言語で採用されています。
Rcat999 — 今日 18:31
子猫は元気
Gemini
 — 今日 18:31
はい、子猫は非常に元気で活発です。好奇心旺盛で遊び好きで、一日中走り回ったり、じゃれたりしています。子猫のエネルギーレベルは、健康状態や年齢によって異なりますが、一般的に生後6~8か月までは最も活発です。この期間は、子猫が周囲の世界を探検し、運動能力や社会的スキルを身につける重要な時期です。
Rcat999 — 今日 18:31
猫はこたつで丸くなる
Gemini
 — 今日 18:31
はい、猫は寒い時期になるとこたつの中で丸くなることを好みます。こたつは暖かく居心地の良い場所であり、猫にとって理想的な隠れ場所になります。猫は狭い空間を好む傾向があり、こたつの囲いは安全で安心感を与えます。また、こたつの中で丸くなると、猫は周囲の環境から遮断され、リラックスして眠ることができます。
Rcat999 — 今日 18:32
肉球
Gemini
 — 今日 18:32
肉球とは、猫の足の裏にある柔らかいパッド状の部分のことです。肉球は脂肪組織と弾性繊維で構成されており、衝撃を吸収し、猫が静かに歩くのに役立ちます。また、肉球には汗腺があり、猫が体温を調節するのに役立ちます。さらに、肉球にはフェロモン腺があり、猫が自分の縄張りをマーキングするために使用します。
Rcat999 — 今日 18:32
猫のひげ
Gemini
 — 今日 18:32
猫のひげは、感覚受容器として機能する特殊な毛です。ひげは顔のさまざまな場所に生えており、主に獲物の検出、周囲の環境の探査、バランスの維持に使用されます。ひげは非常に敏感で、空気の流れや振動を感知できます。猫はひげを使って、暗闇でも障害物を避けたり、獲物の位置を特定したりすることができます。また、ひげは猫の感情を表現するのにも役立ちます。例えば、ひげを前に突き出すと警戒していることを示し、ひげを後ろに倒すとリラックスしていることを示します。
Rcat999 — 今日 18:33
舌はざらざら
Gemini
 — 今日 18:33
はい、猫の舌はざらざらしています。猫の舌には、乳頭と呼ばれる小さな突起がびっしり生えており、これがざらざらした感触を与えます。乳頭は、グルーミング、獲物の捕獲、食物の摂取に役立ちます。乳頭は逆向きに生えており、猫が毛づくろいをする際、毛玉や汚れを取り除くのに役立ちます。また、乳頭は獲物の骨や毛皮をこそげ落とすのにも使用されます。さらに、乳頭は食物を口の中に運ぶのにも役立ちます。
Rcat999 — 今日 18:34
すらりとした黒猫
Gemini
 — 今日 18:34
すらりとした黒猫は、その優雅さと神秘的な美しさで知られています。その漆黒の被毛は、闇の中で溶け込み、獲物に忍び寄ったり、危険から身を隠したりするのに役立ちます。また、すらりとした体型は、俊敏さと素早さを可能にし、獲物を追いかけたり、狭い隙間をすり抜けたりするのに役立ちます。黒猫は、独立心があり、愛情深く、遊び好きな性格で知られています。そのユニークな美しさと魅力的な性格により、黒猫は世界中で愛されています。
Rcat999 — 今日 18:34
狭いところが好き
Gemini
 — 今日 18:34
猫は狭い場所が大好きです。これは、安全で居心地の良い隠れ場所を提供するためです。狭い場所は、捕食者から身を守り、外敵から離れてリラックスできる場所を提供します。また、狭い場所は猫に安心感を与え、ストレスを軽減するのに役立ちます。猫は、段ボール箱、キャットハウス、ベッドの下など、狭い場所があればどこにでも隠れます。狭い場所で丸くなると、猫は暖かく、保護されていると感じることができます。
Rcat999 — 今日 18:34
キャットウォーク
Gemini
 — 今日 18:34
キャットウォークとは、猫が登ったり、歩いたり、遊んだりできる、壁や天井に取り付けられた構造物のことです。キャットウォークは、猫に垂直空間を提供し、運動や遊びの機会を増やすのに役立ちます。また、キャットウォークは、猫が周囲の環境を高い場所から観察したり、獲物を探したりするのにも使用できます。キャットウォークは、単一の棚から複雑な多層構造まで、さまざまな形状やサイズで利用できます。猫の好みに合わせて、カーペット、ロープ、布地などのさまざまな素材で作ることができます。
Rcat999 — 今日 18:35
処理開始
私が2番目に言ったことは何?
Gemini
 — 今日 18:35
処理を開始するには、私が最初に何を言ったのかを把握する必要があります。チャットの履歴を提供していただければ、2番目に何を言ったのかを特定できます。

答えですが、約11回のようです。
上記チャットのプロンプトログを確認しました。
すると一番上に来ているのは"猫はCAT"でした。
つまり、これより前の情報は失われているということです。

ただし、これはあくまでも今回の話であり11回という状態から多分決まってる値ではないんだと思います。
例えば、モデルのトークン上限に収まるようにDifyが調整しているかとか考えられます。少なくとも簡単なチャットであれば問題ないと思われます。

まとめ

今回はチャットボットをAPIで動かしてみました。
今までテキストジェネレーター前提で色々やっていたので、チャットボットが少し仕様が違うというのが想定外でした。しかし、おかげでチャットボットの使用もわかってきたので、何かしらのアプリケーションを作る時に生かせそうです。

プログラムの全文

BOT

上でも紹介した通り下記の記事で紹介しているテンプレートを使用して作っています。
あくまでも必要な部分だけ書き換えているので、不要な部分も多いです。

ここから先は

7,706字 / 1ファイル

¥ 100

情報が役に立ったと思えば、僅かでも投げ銭していただけるとありがたいです。