見出し画像

【コピペ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への応用が可能です。

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