LINE Bot開発の新潮流:Gemini ProとGoogle Apps Scriptを駆使したシステムプロンプトと会話履歴機能の実装ガイド

Gemini

LINE Botの開発において、Google Apps Script(GAS)とGemini Proを使用する方法が注目を集めています。本記事では、特にシステムプロンプトの設定と会話履歴の保存・引用機能の実装に焦点を当てて解説します。これらの機能は、ユーザーとの対話をより自然で有用なものにするために重要です。

Gemini Pro GAS Line Bot の基本

Gemini ProとGASを用いたLINE Botは、ユーザーからの入力に基づき、適切な応答を生成し、会話履歴を保存することが可能です。これにより、ユーザーエクスペリエンスの向上とサーバーレスな構築が実現します。

詳しくはこちら

Google Apps ScriptとGemini Proを活用してサーバーレスなLINE Botを構築する
はじめにGoogle Apps Script(GAS)とGemini Proを使うことで、サーバーを必要とせずに機能豊かなLINE Botを簡単に構築できます。この記事では、具体的なコード例を用いて、その構築方法を解説します。こちらのオウム...

システムプロンプトの設定

システムプロンプトは、Botの応答の性質やトーンを決定するための重要な要素です。以下のコードスニペットでは、SYSTEM_PROMPT変数を用いて、Botの話し方や応答のスタイルを定義しています。


const SYSTEM_PROMPT = `System prompt:
あなたはGemini ProとGoogle Apps Script(GAS)で制作されたBotの「くも」です。
何事に関しても簡潔に小学生でも分かるように回答してください。
あなたは「○○なのだー」というように語尾に「なのだー」を付けて喋って。
一人称は「ボク」`;

会話履歴の保存と引用

会話履歴の保存と引用は、ユーザーとの対話のコンテキストを維持し、より関連性の高い応答を生成するために役立ちます。以下の関数saveConversationToSpreadsheetgetPastConversationsは、会話履歴をスプレッドシートに保存し、必要に応じて過去の会話を取得します。


function saveConversationToSpreadsheet(date, userMessage, geminiResponse) {
  const spreadsheet = SpreadsheetApp.openById(SPREADSHEET_ID);
  const sheet = spreadsheet.getSheets()[0]; // 最初のシートを使用

  // 新しい行を追加
  sheet.appendRow([date, userMessage, geminiResponse]);
}

function getPastConversations(n) {
  const spreadsheet = SpreadsheetApp.openById(SPREADSHEET_ID);
  const sheet = spreadsheet.getSheets()[0];
  const lastRow = sheet.getLastRow();

  // シートが空の場合、空の文字列を返す
  if (lastRow === 0) {
    return '';
  }

  const startRow = Math.max(lastRow - n, 1); // n個分の履歴を取得するための開始行

  // 過去の会話履歴を取得
  const numRows = lastRow - startRow + 1;
  const range = sheet.getRange(startRow, 1, numRows, 3);
  const pastConversations = range.getValues();

  // 履歴を文字列として結合
  let conversationsText = '';
  pastConversations.forEach(row => {
    conversationsText += `Date: ${row[0]}, User: ${row[1]}, Response: ${row[2]}\n`;
  });

  return conversationsText;
}

LINE Botとの対話

ユーザーからのメッセージを受け取り、Gemini Proを介して適切な応答を生成するdoPost関数は、LINE Botの核となる部分です。この関数は、会話履歴の取得、応答の生成、応答の保存、そしてLINEへの応答送信を行います。


// ユーザーがメッセージを送信した時に実行する関数
function doPost(e) {
  const json = JSON.parse(e.postData.contents);
  const replyToken = json.events[0].replyToken;
  const messageText = json.events[0].message.text;

  // 検証用のリプライトークンがあるか確認
  if (typeof replyToken === 'undefined') {
    return;
  }

  // 過去の会話履歴を取得
  const pastConversations = getPastConversations(nConversations); // 例: 過去5つの会話を取得

  // 現在のメッセージと過去の会話を結合
  const fullMessage = pastConversations + messageText;
  //const fullMessage = messageText;

  // Gemini APIを使用してレスポンスを生成
  const geminiResponse = getGeminiApiResponse(fullMessage);

  // --------------------------------
  // 会話の保存
  //
  saveConversationToSpreadsheet(new Date(), messageText, geminiResponse);

  // LINE APIに返信を送信
  const option = {
    'headers': {
      'Content-Type': 'application/json; charset=UTF-8',
      'Authorization': 'Bearer ' + LINE_TOKEN,
    },
    'method': 'post',
    'payload': JSON.stringify({
      'replyToken': replyToken,
      'messages': [{
        'type': 'text',
        'text': geminiResponse || '申し訳ありません、応答を生成できませんでした。',
      }],
    }),
  };

  UrlFetchApp.fetch(LINE_URL, option);

  return;
}

まとめ

Gemini ProとGASを用いたLINE Botの開発は、シンプルながらも強力なツールを提供します。システムプロンプトのカスタマイズと会話履歴の保存・引用機能により、ユーザーにとってより自然で役立つ対話を実現することができます。この記事で紹介した基本的な知識とコードスニペットを参考に、独自のLINE Botを構築し、ユーザーエクスペリエンスを向上させましょう。

コメント

タイトルとURLをコピーしました