見出し画像

claude3を使ってTwitchのチャンネルに来たコメントに自動応答するBOTを作った話

Claude3で遊んでみた。
この文章はろくに調べもせず主観で書いてます。間違いだらけなので参考にするときは調べながらやってね!


Claude3をベースに選んだ理由

  1. System promptなるものが存在するから

  2. メッセージと返答を何世代か参照する機能があるから

  3. ChatGPTのAPIを使おうと思ったらなんか決済通らなかったから

  4. あえて王道を使わない天邪鬼だから

1. System promptとは?

通常のメッセージで指定するよりも優先的に設定などを指定できる機能。
禁止事項や返答のテンプレートなどを書いとけば優先的に従ってくれる。
つまり名前や口癖などのキャラ設定を指定しておくことができる!

2. メッセージを何世代か参照できる機能とは?

複数の会話のやり取りを入力することで会話の流れを表現できる。
multiple conversationalとかAPIのマニュアルには書いてあった。

3. ChatGPTのAPIに決済が通らなかった理由とは?

登録してしばらく放置してたしよくわからん。

4. 天邪鬼とは?

天邪鬼(あまのじゃく)とは、日本の神道や民間信仰に登場する神話上の存在です。主な特徴は以下のようなものがあります:
天照大神の弟である須佐之男命(すさのおのみこと)の子孫とされる。
天照大神の命令に逆らい、天界の秩序を乱す存在。
人間に害を加えたり、天の命令に逆らうなど、悪質な行動をとる。
天照大神や他の神々から嫌われ、天界から追放されることが多い。
人間界に降りて来て、人々を惑わせたり災いを引き起こすなど、悪い影響を及ぼす。
天邪鬼の語源は「天の命令に逆らう鬼」と解釈されている。

つまり、天の秩序を乱し、人間に害を及ぼす悪質な存在として描かれているのが天邪鬼の特徴です。神話や民間信仰の中で重要な役割を果たしている存在といえます。

claude-3-haiku-20240307

コード書くのめんどくさい!
Node‐REDでおk!

Twitchのコメントの取得めんどくさい。
tmi.jsでおk!

Node‐REDでtmi.js使い方わかんね!
node-red-contrib-twitch-chatでおk!

Node-RED使ってもコード書かなきゃいけないじゃん!
AIに書いてもらいましょう。
リートンあたりで

フローの流れ

tmi.jsを使ってリアルタイムにコメント取得
取得したコメントを整形してclaude3のAPIに投げつける
返ってきたメッセージを整形してtmi.jsでコメントに反映させる

フロー例

ノードの説明

incoming Message
一番左の紫のノード
Twitchの指定のチャンネルにコメントが来たらコメントやらユーザー名などを取得します。
他にも色々データ取得してますがこのフローで使うのはmsg.payload.messageの内容だけです。
もう少し完成形に近づけるとユーザー名なども使います。

変数の整形
左から二番目のオレンジのノード
APIに投げるための形式と取得したメッセージの形式はもちろん一致しないので整形します。
コードの解説は省略します。
リートンのAI検索を利用したらAIが参考になるコードを書いてくれると思います。

APIにデータを投げる!
真ん中の緑のノードがHTTPリクエストです。ClaudeAPIの指定する情報を入力しましょう!
HTTPリクエストのプロパティはこんな感じ。プロパティは変わるかもしれないので最新の情報を参考にしてください!

プロパティ入力例

HTTP Requestに流すデータ

msg.payload = {
     "model":"claude-3-haiku-20240307", //使用するモデルに合わせて変更
     "max_tokens":512, //最大トークン
     "system" : "ここにSystem promptを入力",
     "messages" : "ここに取得したコメントを入力",
     "temperature" : 1.0 //返答の温度?1だと一番クリエイティブらしい。
 }

とりあえずこんな感じ

応答文の整形
左から4番目のノードです。
APIから返ってきたデータをTwitchへ書き込むためのデータへ整形します。
APIから返ってくるデータはこんな感じ

{
	"id": "msg_017xTjAbGLz3C9u472cpj7Hh",
	"type": "message",
	"role": "assistant",
	"model": "claude-3-haiku-20240307",
	"stop_sequence": null,
	"usage": {
		"input_tokens": 444,
		"output_tokens": 66
	},
	"content": [
		{
			"type": "text",
			"text": "ここにAIからの返事"
		}
	],
	"stop_reason": "end_turn"
}

必要なのはmsg.payload.content.textだけです。

なので

{
    message : msg.payload.content.text ,
    channel : "#チャンネル名"
}

こういう形式にしましょう。

Action
送られてきたデータをTwitchのチャット欄に送る。

基本的なフローの説明終了。

このフローの欠点

ユーザーを区別しない。
前にどのような会話をしていたか考慮してない。
自分自身のコメントにも反応してしまう。
ユーザーへの個別の返信にも反応してしまう。

次からは欠点を補ったフローを構築していくよ!次があればね!

広告


この記事が気に入ったらサポートをしてみませんか?