色々な狙いや目的があって、Q&Aボットを作るよ!
狙い・目的については殆どの人にとってどうでもいいと思うので、記事の最下部に載せておきます
作ろうとしているものについて
- Chatworkで動作する社内用のQ&Aを出来るチャットボット
- このチャットボットはQ&Aだけでなく、通常の会話も楽しめるようにする
- これらはGAS(Google apps scrypt)にて動作する、環境構築が簡単でAPI代以外かからない仕組み
って感じです
後から機能も追加しやすいように、コードを生成しています(もはやほとんどコードを書いてないので、生成と言ってる)
この記事を読んで楽しめる人
- GAS素人(Pythonちょっとだけ知ってるくらい)がちょっとしたシステム開発をする様を見たい人
- Chatworkで動作するChatGPTを作りたい人
- なるべく廉価に外部のチャットシステム(Chatwork/Slack等)に、ChatGPTボットを導入したい人
※BOTキャラ用に生成したイラスト(バージョン1)をお楽しみください
1・やりたいことの明確化
だいたいそうじゃないですか。まずは何をやりたいのかを、ざっと形にあげないといけませんよね。
ということで、ざっくり図にあげます。
目的さえ明文化しておけば、こういった図は割りとサクッと出来ますね。
私は素人なので、この段階だとあまり作り込んでないです
画像は小さめにアップしてる気がするので、見れなかったらすみません🙄
あ、ちなみにこの段階で代替できるシステムがあったりするかチェックしてます。
私の目的に合致するシステムがあって、それが無料or廉価ならば、そちらを使うほうが時間効率いいですからね(結果、都合いいシステムは現時点では存在しなかったし、ネットでよく転がるコピペだけでOK!みたいな記事も見つけられなかった)
2・早速悩む
ほんとはPythonで作成することで、Langchainというライブラリを使えるため、
Chatbotちゃんの記憶システムはこのライブラリに任せられるなーって思ってたんですよ
でもですね、私はPythonプログラムをどこかのレンタルサーバーにアップして、それを適宜動作させるという経験が無いし、何より無料範囲内でレンタルサーバーを動作させるにはちょっと難しそうだなーと思ったのです
なので、GASを採用することにしました
無料バンザイ!活用されるか未知数なので、最初はなるったけお金かけたくない!
3・ということで、必要そうな関数を少しずつ作り始める
いきなりざーっと作成をしようとしても、スパゲッティコードが出来上がるだけですね。
なので、まずはChatworkでBOTちゃんにリプライをしたら、そのままオウム返しをするというコードから作成します
function doPost(e) {
var params = JSON.parse(e.postData.contents);
var roomId = params.webhook_event.room_id;
var accountId = params.webhook_event.from_account_id;
var message = params.webhook_event.body;
// BOT自身のアカウントIDを確認し、メッセージに対応するToタグがあるかチェック
if (message.includes('[To:' + myAccountId + ']') && accountId !== myAccountId) {
sendMessage(roomId, accountId, message);
}
}
function sendMessage(roomId, accountId, message) {
var url = chatworkApiEndpoint + roomId + '/messages';
var payload = {
'body': '[To:' + accountId + '] ' + message
};
var options = {
'method': 'post',
'headers': {'X-ChatWorkToken': chatworkApiKey},
'payload': payload
};
try {
UrlFetchApp.fetch(url, options);
} catch (error) {
Logger.log('Error sending message: ' + error.toString());
// 必要に応じてエラーメッセージをユーザーに送信する処理を追加
}
}
BOTちゃんにTOが入ったら、TOを入れた相手に対して、オウム返しするコードです
事前に宣言している変数もあるので、これだけだと動かないかもですけど、そういうのはChatGPTとかに突っ込めば大体どうにかしてくれるからオッケー❤
このコードレベルの要る?
まぁいいですか。コードいらない人は適当に読み飛ばしてくださいね😙
4・カスタムプロパティを駆使して、APIとか必要なIDとかをハードコーディングしないようにした
私って~
大体普段は社内で自分だけがアプデとかするシステムを作ってるので、
頻繁にAPIとかをハードコーディングしがちなタイプじゃないですか?
ただこの辺りから、
『お……これは他の人がまだ手を付けていないことだな?』
と思い始め、この記事のように外部へ出すことを意識し始めました
システム作成においても結構便利に使えそうだったので、カスタムプロパティを利用し始めました
Q.カスタムプロパティって?
こんな感じでGASのプロジェクトに紐づけて、値とかを覚えさせておける機能ですね
ざっくり言うと、環境変数?みたいな?(解像度トイカメラ級)
おしまい
結構長くなりそうなので、記事を分けます
あと、残りわずかではありますが実装が完了したわけではないので、
もしかしたら何もかもが嫌になって、ぶん投げる可能性がございます
あらかじめご了承ください
目的を書くの忘れてた
箇条書きでまとめときますね。……これいる?
目的1
質問をする人によって異なる答えを返されて、従業員を混乱させないように
Chatbotに会社の見解を記載することで、全員の意思の統一を行なう
目的2
質問をしにくいという従業員のため、AI(想定ではマスコットキャラ)を用意し、積極的にわからないことを無くしてもらう
目的3
従業員の質問を集約することで、会社の抱える問題を明らかにする
目的4
Langchainに対する理解を深め、将来的に外注をする際に最低限の知識を
備えられるようにしておく
※Langchain使ってない、というか使えないので、この目的は未達成で終了予定
目的5
会社のマスコットキャラ(+マスコットキャラに付随して、男女のキャラも作成)
を用意するキッカケづくり
目的5の補足:
私の所属する会社は店舗/電話での占いを提供していて、
ウェブサイトや電話での占いの予約を受けている
この予約ルートに新たに
「LINE」「Instagram」といった予約方法を追加したいと考えている
予約システム となると味気が無く、積極的な利用をしていただけないと考えた
そのため、キャラクター性を持たせ、
「どういう占い方法が今の悩みに合っているのか」
「どの時間にどういった占い師様が居るのか」
といった適宜情報などを聞き取りながら、最適な占い師様の提案まで
出来るAIキャラを作成したい
今回のQ&Aボットは、その前段階でキャラを練り上げる狙いも併せ持つ
コメント