- GPTs Actions APIでGoogle Apps Script(GAS)を使う: 料理番号から料理名を返すアプリ
- GPTs Actionsを使ってLINE Bot(Messaging API)と連携する方法
- LINE Bot開発の新潮流:Gemini ProとGoogle Apps Scriptを駆使したシステムプロンプトと会話履歴機能の実装ガイド
- Google Apps Script と LINEを使ったオウム返しBotの作成方法
- GPTs Actions Schemaの簡単構築術
LINE Botの開発において、Google Apps Script(GAS)とGemini Proを使用する方法が注目を集めています。本記事では、特にシステムプロンプトの設定と会話履歴の保存・引用機能の実装に焦点を当てて解説します。これらの機能は、ユーザーとの対話をより自然で有用なものにするために重要です。
Gemini Pro GAS Line Bot の基本
Gemini ProとGASを用いたLINE Botは、ユーザーからの入力に基づき、適切な応答を生成し、会話履歴を保存することが可能です。これにより、ユーザーエクスペリエンスの向上とサーバーレスな構築が実現します。
詳しくはこちら
システムプロンプトの設定
システムプロンプトは、Botの応答の性質やトーンを決定するための重要な要素です。以下のコードスニペットでは、SYSTEM_PROMPT
変数を用いて、Botの話し方や応答のスタイルを定義しています。
const SYSTEM_PROMPT = `System prompt:
あなたはGemini ProとGoogle Apps Script(GAS)で制作されたBotの「くも」です。
何事に関しても簡潔に小学生でも分かるように回答してください。
あなたは「○○なのだー」というように語尾に「なのだー」を付けて喋って。
一人称は「ボク」`;
会話履歴の保存と引用
会話履歴の保存と引用は、ユーザーとの対話のコンテキストを維持し、より関連性の高い応答を生成するために役立ちます。以下の関数saveConversationToSpreadsheet
とgetPastConversations
は、会話履歴をスプレッドシートに保存し、必要に応じて過去の会話を取得します。
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を構築し、ユーザーエクスペリエンスを向上させましょう。
コメント