🤖ChatGPT APIを使って情シスのヘルプデスク業務を楽にする

レキサスの情シスを担当しているツネです。


集中してノリノリでコード書いている最中に上司から問い合わせが発生し、作業が中断、Google ChatでWindows11の設定済みVPNの接続方法を伝える必要があったんです。ひとり情シスあるあるですよね〜


私のマシンはmacなので、Windowsの操作を伝えるにあたって以下の手順が必要になりました。


  1. Parallels DesktopでWindow 11を起動

  2. MDMまたは手作業でユーザと同等のVPNプロファイルを設定

  3. 手順を確認しながら画面をスクショを1〜3回取得

  4. Google ChatでVPN接続手順を記載、スクショも添えて説明


正直、しんどい。そろそろ昇給査定の時期ということもあり、上司に向かって「ググってください」とは簡単に言えないわけですよ。


でも楽して上司(ユーザ)に操作方法を伝えられるようにしたい!

 

そんなとき、3月1日に提供が開始されたChatGPT API model gpt-3.5-turboの存在が頭をよぎります。


すでにAPIをSlack botに実装した方もいらっしゃる。

https://twitter.com/KawamataRyo/status/1631081778659348483?cxt=HHwWhsDSiYyP4qItAAAA

ということで、私も自身の情シスのヘルプデスクが楽に、かつユーザにわかりやすい説明ができるようにChatGPT APIを使ってGoogle Chat Botを作ってみることにしました。


ChatGPTでChatGPT APIを使った、Google Chat Bot を作ってもらう


私のプログラミング性能はポンコツ、かつ、自分の手を動かさずにbotを完成させたいので、まずはChatGPTにbot作成を依頼してみます。


「ChatGPT API を使った、Google Chat Bot を作ってください。」



残念ながら最初の依頼ではGoogle Apps ScriptかつOpen AIのChatGPT APIを使ったソースコードは出てきませんでした。


指示を具体的にして、もう一度頼んでみます。


「OpenAIのChatGPT APIを使用したGoogle Chat Botのサンプルソースコードを教えてください。サンプルコードは、Google Apps Scriptを使用してください。」


結果は以下の通り




はい、Google Chat Botのサンプルコードを提供することができます。Google Apps Scriptを使用して、ChatGPT APIとGoogle Chat APIを利用して、Chat Botを作成する方法を説明します。


function onMessage(event) {
  var message = event.message.text;
  var space = event.space.name;
  var sender = event.user.displayName;
  
  // ChatGPT APIを使用して応答を生成する
  var response = generateResponse(message);
  
  // Google Chat APIを使用して、応答を送信する
  var cards = [buildTextCard(response)];
  var message = { cards: cards };
  sendMessage(space, message);
}

function generateResponse(message) {
  // ChatGPT APIを使用して、入力されたメッセージに応答を生成する
  var apiUrl = 'https://api.openai.com/v1/engines/davinci-codex/completions';
  var prompt = message;
  var maxTokens = 150;
  var n = 1;
  var temperature = 0.7;
  var headers = {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer ' + getApiKey()
  };
  var data = {
    'prompt': prompt,
    'max_tokens': maxTokens,
    'n': n,
    'temperature': temperature
  };
  var options = {
    'method': 'post',
    'headers': headers,
    'payload': JSON.stringify(data)
  };
  var response = UrlFetchApp.fetch(apiUrl, options);
  var jsonResponse = JSON.parse(response.getContentText());
  var text = jsonResponse.choices[0].text;
  
  return text;
}

function buildTextCard(text) {
  // Google Chat APIのTextCardを構築する
  var card = CardService.newTextCardBuilder()
    .setText(text)
    .build();
  return card;
}

function sendMessage(space, message) {
  // Google Chat APIを使用して、メッセージを送信する
  var url = 'https://chat.googleapis.com/v1/spaces/' + space + '/messages';
  var token = getChatToken();
  var headers = {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer ' + token
  };
  var options = {
    'method': 'post',
    'headers': headers,
    'payload': JSON.stringify(message)
  };
  var response = UrlFetchApp.fetch(url, options);
}

function getApiKey() {
  // ChatGPT APIのAPIキーを取得する
  var scriptProperties = PropertiesService.getScriptProperties();
  var apiKey = scriptProperties.getProperty('CHAT_GPT_API_KEY');
  return apiKey;
}

function getChatToken() {
  // Google Chat APIのトークンを取得する
  var scriptProperties = PropertiesService.getScriptProperties();
  var chatToken = scriptProperties.getProperty('GOOGLE_CHAT_TOKEN');
  return chatToken;


このサンプルコードでは、Google Apps Scriptを使用して、Google Chat Botを作成しています。このコードは、Google Chatのイベントをトリガーにして、ChatGPT APIを使用して応答を生成し、Google Chat APIを使用して、応答を送信することができます。


このコードを使用するには、ChatGPT APIのAPIキーとGoogle Chat APIの



 

ChatGPTからの返答はそれっぽいコードが表示され、途中で途切れてしまいました。なお、以前Google Chat Botを作ったことがありますがCardServiceというのは見たことがありません。

GPT-3.5-turboモデルを使ったChat Completion APIを期待していたのですが、そちらは何度指示しても表示されることはありませんでした。

ChatGPTの限界を感じたところで、このソースコードをベースに動くように修正してきます。


ChatGPTが作ってれた Google Apps Scriptを手直し

Googel Chatはmarkdownにも一部対応しており、ChatGPTもmarkdownで応答も可能なのでGoogle Chatへの応答をカードタイプからテキストフォーマットに変更します。 またGPT-3.5-turboモデル、Chat Completion APIを使うようにaptUrlやパラメータを変更します。

そして、できた修正後のコードがこちら。


function onMessage(event) {
  var message = event.message.text;

  if (event.message.slashCommand) {
    // 設定画面で決めたSlachコマンドを判定
    switch (event.message.slashCommand.commandId) {
      case 1: //chatgpt
        // ChatGPT APIを使用して応答を生成する
        var response = generateResponse(message.replace("/chatgpt ",""));
    }
  }
  // 応答を送信する
  return message = { text: response };
}

function generateResponse(message) {
  // ChatGPT APIを使用して、入力されたメッセージに応答を生成する
  var apiUrl = 'https://api.openai.com/v1/chat/completions';
  var headers = {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer ' + getApiKey()
  };
  var data = {
    "model": "gpt-3.5-turbo",
    "messages": [{ "role": "user", "content": message }]
  };

  var options = {
    'method': 'post',
    'headers': headers,
    'payload': JSON.stringify(data)
  };
  var response = UrlFetchApp.fetch(apiUrl, options);
  var jsonResponse = JSON.parse(response.getContentText());
  var text = jsonResponse.choices[0].message.content;

  return text;
}

function getApiKey() {
  // ChatGPT APIのAPIキーを取得する
  var scriptProperties = PropertiesService.getScriptProperties();
  var apiKey = scriptProperties.getProperty('CHAT_GPT_API_KEY');
  return apiKey;
}


このGoogle Apps Scriptの準備ができたらGoogle Cloud コンソール にて以下を行います。


・プロジェクト作成


・Chat APIの有効化


・OAuth の設定


・Chat APIの構成設定


・/chatgpt のスラッシュコマンド追加


詳細は公式ドキュメントを参照ください。


結果


では実際にbotを動かしてみましょう。

Google Chatのスペース「アプリの統合」から先程作ったbotを追加します。

スラッシュコマンド /chatgpt を使って、会話してみます。


動いた!!!

 

よし、それでは実際にChatGPTに「Windows11の設定済みVPNの接続方法」を書いてもらい、ヘルプデスク時の説明する時間を減らしましょう。



いい返事!!


これで偉い人にも「接続方法は↑を参考に接続してください」と伝えられますね!!!

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