概要
にわかに騒がれているGPTChatやGPT-3について、ご多分に漏れず興味関心を向けてみた結果、むかーし作った「誰でも30分で作れる」をコンセプトにしたLINEBotをカスタマイズするに至りましたのでご参考まで。
元記事
もうカレコレ4年ほど前に作成した記事になりまして、「スプレッドシートに予め登録したQAのみを返すLINEボット」を作るという仕様でございました。
今回はこちらのボットに「回答が見つからなかったときはAIに変わりに返事をしてもらう」という仕様を追加したいと思います。
参考元
なお、こちらにGPT-3とのGASを用いた簡単な連携方法が記載されていたので参考にさせていただきました。
GPT-3上でのアカウント発行からトークン取得までの流れはこちらを参考いただけると良いかと思います。
追加する仕様
- 投げた単語に対してスプレッドシート上に部分一致するQAが「ない」場合に、GPT-3に同様のキーワードを投げて、返ってきた値をメッセージで返す。
アップデート前の状態
こんな感じで、予定したキーワードには返答しますが、想定にないものは返答しません。
作業内容
以下のfunctionをGASに追加
※前の記事でGASのスクリプトを作成している前提になります。
連携用の処理を1つのfunctionにまとめてしまいました。
/**
* GPT連携関数
*/
function GPT(prompt) {
const SECRET_KEY = "(ここにGPT-3で発行したトークンを貼る)";
const MAX_TOKENS = 300; // 返信文字列の最大数
const MODEL_NAME = "text-davinci-003";
const MODEL_TEMP = 0.3;
const url = "https://api.openai.com/v1/completions";
const payload = {
model: MODEL_NAME,
prompt: prompt,
temperature: MODEL_TEMP,
max_tokens: MAX_TOKENS,
};
const options = {
contentType: "application/json",
headers: { Authorization: "Bearer " + SECRET_KEY },
payload: JSON.stringify(payload),
};
const res = JSON.parse(UrlFetchApp.fetch(url, options).getContentText());
return res.choices[0].text.trim();
}
追加したfunctionを、回答がない場合の処理に追記
今までは定型文で「答えが見つかりませんでした。別のキーワードで質問してみてください。」とだけ返答するよう記載していた箇所を変更します。
before
// 回答がない場合の定型文
sendMessage(replyToken, '答えが見つかりませんでした。別のキーワードで質問してみてください。');
after
let AIReplyText = '答えが見つかりませんでした。AIに回答をおまかせします。';
AIReplyText = AIReplyText + "\n\n=============\n\n" + "A:" + GPT(postMsg);
// 回答がない場合の定型文
sendMessage(replyToken, AIReplyText);
デプロイしましょう
スクリプト画面上の「デプロイ>新しいデプロイ」から、デプロイを登録します。
LINEのWEBhookを更新
LINE画面上での設定変更もお忘れなく。先程コピーしたWebhookURLを更新します。
できたらこんな感じ
AIの精度は今後に期待。
感想
AIってやっぱり面白いですね。精度を上手く考慮して使い所を見極めるアイディア勝負なところというのが今回の感想です。面白い活用方法とかがあればぜひどなたでも教えていただきたいです。