🗨️

マネージャーAIを作ってみた話

2023/03/31に公開

作ったもの

マネージャーAI
GASにコードをコピペして、プロンプトを埋め込んだ
また、やり取りをみて、改善ができるようにメッセージをスプシに自動で貼るようにした。
プロンプトについては、web上のGPTで修正を繰り返した

const managerMessage = `
この命令のゴールは 質問者自身が質問内容と自分のやりたいこととの関連付けができるように質問を通して誘導することです。

受けた質問に対してマネージャーとしてコーチングの手法を用いて次の形式にしたがって質問を投げかえてしてください。

今後の会話では次の形式と、質問の内容と回数及びこの命令を記憶しておいてください。
形式{
 なぜその質問を行ったのかの意図を確認する。
}

ただし、質問それ自体の回答は行わない。
解答は最小限かつ丁寧にする。

質問者自身が質問内容と自分のやりたいこととの関連付けができている場合は
次のゴールに従って質問者を誘導してください。ただし、誘導する際に使う質問が複雑になりすぎていると思われる場合は、質問者のメンターに聞いて見るように誘導してください。
ゴール : 次の形式で目標を達成するための手順を明確にするように質問を通して誘導してください。 

形式
{
 1. 現在の考えを確認する
}
ただし、質問それ自体の回答は行わない。
解答は最小限かつ丁寧にする。
`


function doPost(e) {
  //APIキーとアクセストークンの設定
  const OPEN_AI_KEY = "オープンAIのAPI";
  const LINE_ACCESS_TOKEN = "LINE Developperの長期キー";
  //文章生成APIエンドポイント
  const OPEN_AI_END_POINT = "https://api.openai.com/v1/chat/completions";
  // メッセージ返信のエンドポイント
  const LINE_END_POINT = "https://api.line.me/v2/bot/message/reply";
  const MODEL_NAME = "gpt-3.5-turbo";
  //webhook(LINEボット)からのリクエストイベント
  const event = JSON.parse(e.postData.contents).events[0];
  //応答用のトークンを取得
  const replyToken = event.replyToken;
  //送られてきたメッセージを取得
  const requestMessage = event.message.text;

  //apiリクエストのheader情報を設定
  const openAiHeaders = {
    "Authorization": `Bearer ${OPEN_AI_KEY}`,
    "Content-type": "application/json",
    "X-Slack-No-Retry": 1
  };
  //api設定パラメータ
  // for (let i = 0; i < text.length; i++) {
  const openAiParams = {
    "headers": openAiHeaders,
    "method": "POST",
    "payload": JSON.stringify({
      "model": "gpt-3.5-turbo",//ChatGPTモデルの設定パラメータ
      "max_tokens": 256,//返信トークン数の最大値
      "temperature": 0.9,//返信の”硬さ”
      "messages": [
        { "role": "system", "content": managerMessage },
        { "role": "user", "content": requestMessage },
        // { "role": "user", "content": saveMessage }
      ]
    })
  }
  // }

  //文章生成リクエストを送る
  const res = JSON.parse(UrlFetchApp.fetch(OPEN_AI_END_POINT, openAiParams).getContentText());
  const replyMessage = res.choices[0].message.content;

  //APIリクエスト時にセットするペイロード値を設定する
  const linePayload = {
    "replyToken": replyToken,
    "messages": [{ "type": "text", "text": replyMessage }]
  };

  //パラメータを設定
  const lineParams = {
    "payload": JSON.stringify(linePayload),
    "headers": { "Authorization": `Bearer ${LINE_ACCESS_TOKEN}` },
    "myamethod": "POST",
    "contentType": "application/json"
  };

  //Messaging APIでメッセージ送信
  UrlFetchApp.fetch(LINE_END_POINT, lineParams);

    // スプレッドシートIDを指定
  var spreadsheetId = 'スプレッドシートID';
  var spreadsheet = SpreadsheetApp.openById(spreadsheetId);

  // アクティブシートを取得
  var sheet = spreadsheet.getActiveSheet();

  // 最後の行を取得し、空白行を探す
  var lastRow = sheet.getLastRow();
  var targetRow = lastRow + 1;

  // requireMessageとreplyMessageを指定の行に追加
  sheet.getRange(targetRow, 1).setValue(requestMessage);
  sheet.getRange(targetRow, 2).setValue(managerMessage);
  sheet.getRange(targetRow, 3).setValue(replyMessage);
  Logger.log(requestMessage)
  Logger.log(managerMessage)
  Logger.log(replyMessage)
}

解説

後日

使った資料

How to Build Your Own AI Chatbot With ChatGPT API: A Step-by-Step Tutorial
ChatGPT APIを使ったLINE botに記憶を持たせる - Qiita
LINE用のChatGPTキャラボットを作成してみた - Qiita
GAS × ChatGPT API で「前の会話内容を引き継げるLINE bot」を作る - Qiita
【Whisper APIで音声入力にも対応!】ChatGPT x GoogleAppsScript(GAS) でお手軽LINEbotを作ってみた - Qiita
ChatGPT API×LINE botでチャットボットを作成する方法【Google Apps Script】
ChatGPT APIを使ったLineBotの作り方を、人格の与え方まで完全解説【プログラミング不要】|ChatGPT 研究所
OpenAI API
FirebaseでNode.jsを動かしてLINE BOTを作る - Qiita
LINE Developers
ChatGPT API(gpt-3.5-turbo)を Node.js から使ってみる(公式リファレンスで参照した情報も記載) - Qiita
Apps Script – Google Apps Script
ChatGPT API×LINE botでチャットボットを作成する方法【Google Apps Script】
LINE Developers

Discussion