【コピペOK】文脈理解できるLINE Bot(AI社労士)をノープログラミングでChatGPT、Googleスプレッドシート、GASで作成する方法を現役社労士が解説(2.構築編)
はじめに
前回の準備編で、Google Apps Script(GAS)、LINE Message API、OpenAI APIの設定が完了しました。
実際に、LINE AIアシスタントの構築を開始しましょう。
なお、完成したLINE Botは、服部社会保険労務士事務所のWebサイトで公開中です。
Google Apps Script(GAS)でコードを記述
ステップ1: Google Apps Script(GAS)へコードを貼り付け
前回の準備編で作成した、Gogle Apps Script(GAS)へアクセスします。初めからあるコードを削除して以下のコードを貼り付けます。
const LINE_ACCESS_TOKEN = 'LINEアクセストークン';
const OPENAI_APIKEY = 'OpenAI APIキー';
const SPREADSHEET_ID = 'スプレッドシートID';
function doPost(e) {
const event = JSON.parse(e.postData.contents).events[0];
const userId = event.source.userId;
const replyToken = event.replyToken;
let userMessage = event.message.text;
const url = 'https://api.line.me/v2/bot/message/reply';
if (event.message.type !== 'text') {
// メッセージ以外(スタンプや画像など)が送られてきた場合
userMessage = 'すみません。私はスタンプや画像などは理解できません。';
}
const sheet = getOrCreateSheet(userId);
sheet.appendRow([new Date(), 'user', userMessage]);
const messages = sheet
.getRange(1, 1, sheet.getLastRow(), 3)
.getValues()
.map(([timestamp, role, content]) => ({ role, content }));
const requestOptions = {
method: 'post',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + OPENAI_APIKEY,
},
payload: JSON.stringify({
model: 'gpt-3.5-turbo',
messages: [
{
role: 'system',
content: `
あなたはChatbotとして、社会保険労務士のロールプレイを行います。
以下の制約条件を厳密に守ってロールプレイを行ってください。
制約条件:
* 一人称は「私」を使ってください。
* あなたは親切で丁寧な新人の20代男性です。
* 回答はAIであり正確でない場合があることを、最後に必ず付け加えてください。
* 正確な回答が知りたい場合は、服部社会保険労務士事務所に問い合わせる案内を入れてください。
* 問い合わせ先のURLは、https://hattori-sr.jp/contact/
* 問い合わせ先のURLを案内する場合、正しくリンクされるように、別の会話としてURLだけ送信してください。
社会保険労務士の行動指針:
* 労務と保険以外の話題には回答できないと丁寧に伝えてください。
`,
},
...messages,
{ role: 'user', content: userMessage },
],
}),
};
const response = UrlFetchApp.fetch('https://api.openai.com/v1/chat/completions', requestOptions);
const responseText = response.getContentText();
const json = JSON.parse(responseText);
const text = json.choices[0].message.content.trim();
sheet.appendRow([new Date(), 'assistant', text]);
reply(userId, replyToken, text, url);
}
function reply(userId, replyToken, text, url) {
UrlFetchApp.fetch(url, {
headers
{
'Content-Type': 'application/json; charset=UTF-8',
'Authorization': 'Bearer ' + LINE_ACCESS_TOKEN,
},
method: 'post',
payload: JSON.stringify({
replyToken: replyToken,
messages: [{ type: 'text', text: text }],
}),
});
}
function getOrCreateSheet(userId) {
const ss = SpreadsheetApp.openById(SPREADSHEET_ID);
let sheet = ss.getSheetByName(userId);
if (!sheet) {
sheet = ss.insertSheet(userId);
sheet.appendRow(['Timestamp', 'Role', 'Content']);
}
return sheet;
}
LINEアクセストークン、OpenAI APIキー、スプレッドシートIDは、前回の準備編で取得したものをペーストしてください。
制約条件と行動指針を設定することで、LINE bot に人格(のようなもの)を与えることが可能です。
ステップ2: デプロイする
右上の「デプロイ」から「新しいデプロイ」を選択します。
デプロイタイプは「ウェブアプリ」を選択します。
説明の項目に、分かりやすいようにテキストを入力してください。アクセスできるユーザーを「全員」に変更します。
データへのアクセスを承認してください。
デプロイが完了したらウェブアプリのURLをコピーして保存します。
LINE Message APIの設定
ステップ1: Webhook設定
「Messaging API設定 」からWebhook設定を行います。
「Webhook URL」の「編集」からウェブアプリのURLを貼り付けます。
「Webhookの利用」がONになっていることを確認します。
ステップ2: 応答メッセージ設定
次にチャットの自動応答をOFFにすることが必要です。
「Messaging API設定 」から「応答メッセージ」の「編集」をクリックします。
応答設定から「応答メッセージ」をOFFにします。
Google スプレッドシートの確認
Googleスプレッドシートからトーク履歴を確認することができます。
ユーザー別にシートが自動作成されます。
まとめ
以上でLINE botをの完成です。
制約や行動指針を変更することで様々なLINE botへの応用が可能です。
この記事が気に入ったらサポートをしてみませんか?