LoginSignup
3
3

2023年8月13日 追記対応

Udemy講座として、ChatGPT APIの Function Calling に解説しながら Google Apps Script (GAS) で LINEbot を作る講座を作成しました。2時間半以上かけて丁寧に解説してますので、もしよければご参考にしてください!

ChatGPT API 新機能「Function Calling」で LINEbot 入門
https://www.udemy.com/course/chatgpt-line-function-calling-ai/?referralCode=509DE0E479928C2939C1

はじめに

数あるChatGPT記事から、こちらの記事を見つけていただき誠にありがとうございます!
ドイツのベルリンに住んでいます。仲条高幸(ナカジョウタカユキ)と申します。
Twitter:https://twitter.com/njn0te

今回は、2023年6月13日に新しく機能として追加された「Function Calling」を使います。GoogleのサービスをAIで気軽に呼び出せたら良いなと思い、Google Apps Script (GAS) で「Function Calling」を呼び出してみた実験結果を、Qiita記事として残します。

下準備 Googleスプレッドシート

新しくスプレッドシートを開きます。お好みでA1のセルに、ChatGPTの設定をお書きください。サンプルも下記に載せておきます。

スクリーンショット 2023-07-14 9.01.02.png

#命令書 
あなたは中華料理のエキスパートです。以下の制約条件に従って答えを導いてください。
 
#制約条件 
・適度に語尾に「アルよ」をつけてください

YouTubeで解説

参考動画(1つ前の動画): https://youtu.be/UHDSHxVCGLk
「LINE × ChatGPT」ライブ配信動画: https://youtube.com/live/Hh5x-CmuX9w

OpenAI社のAPIを発行

ChatGPTをプログラミングから実行するためには、OpenAI社のAPIを発行する必要があります。下記の動画を参考に、使えるようにしてください。

OpenAI API Key 発行ページ: https://platform.openai.com/account/api-keys

プログラム

メニューバーの「拡張機能」から「Apps Script」を選択します。

スクリーンショット 2023-07-14 8.48.51.png

下記のデフォルトのコードは使わないので、全部選択してdeleteで消してください。

コード.js
function myFunction() {
  
}

代わりに、下記のコードをコピーして貼り付けてください。

ChatGPT.gs
// 使用API
const OPENAI_APIKEY = "sk-*************************"; // 発行したOpenAI社のAPIを貼付け
const LINE_REPLY_URL = 'https://api.line.me/v2/bot/message/reply';
const CHAT_GPT_URL   = "https://api.openai.com/v1/chat/completions";
const CHAT_GPT_VER   = "gpt-3.5-turbo-0613"; // or gpt-4-0613

// スプレッドシートの情報
const SS    = SpreadsheetApp.getActiveSpreadsheet();
const SHEET = SS.getSheetByName('シート1');

function chatGPT(prompt) {
  prompt = "おすすめの中華料理を5つ教えて"
  // prompt = "***********@gmail.com に、おすすめの中華料理を5つ送ってください。メールの送信相手は20代の女性です。"
  let constraints, return_text
  try {
    constraints = SHEET.getRange(1, 1).getValue()
  } catch (e) {
    console.log("制約なし")
  }
  const requestOptions = {
    "method": "post",
    "headers": {
      "Content-Type": "application/json",
      "Authorization": "Bearer "+ OPENAI_APIKEY
    },
    "payload": JSON.stringify({
      "model": CHAT_GPT_VER,
      "messages": [
        {"role": "system", "content": constraints}, // Who you are?
        {"role": "user", "content": prompt} // prompt
       ],
       "functions": [
          {
            "name": "send_email", // function name
            "description": "メールを送信する",
            "parameters": {
                "type": "object",
                "properties": {
                    "email": {
                        "type": "string",
                        "description": "メールアドレス",
                    },
                    "body": {
                      "type": "string",
                      "description": "本文",
                    },
                    "subject": {
                      "type": "string",
                      "description": "件名",
                    }
                },
                "required": ["email"],
            },
          },
        ],
        "function_call": "auto"
    })
  }
  const response = UrlFetchApp.fetch(CHAT_GPT_URL, requestOptions)
  const responseText = response.getContentText()
  const json = JSON.parse(responseText)
  if (json.choices[0].message.function_call) {
    const function_name = json.choices[0].message.function_call.name
    const function_arguments = JSON.parse(json.choices[0].message.function_call.arguments)
    if (function_name === 'send_email') {
      return_text = send_email(function_arguments.email, function_arguments.body, function_arguments.subject)
    }
  } else {
    // function calling が実行されなかった場合、ChatGPTの返答として返す。
    return_text = json['choices'][0]['message']['content'].trim()
  }
  console.log(return_text)
  return (return_text)
}

// メール送信
function send_email(email, body, subject) {
  const options = {name: "ChatGPTからのお知らせ"} // オプション
  MailApp.sendEmail(email, subject, body, options) // 送信
  const text = `「${subject}」というメールを ${email} に送りました`
  return (text)
}

貼り付けたら、2行目のsk-*************************部分を発行したOpenAI社のAPIに書き換えたら保存をして、上の方にある「実行」というボタンを押してください。

スクリーンショット 2023-07-14 9.21.38.png

実行時の権限承認

権限など聞かれましたら、下記の手順で承認してください。

①アカウントの選択

使用するGoogleアカウント(メールアドレス)を選択してください。

スクリーンショット 2023-07-14 5.00.15.png

②詳細から移動

右下の「安全なページに戻る」ではなく「詳細」から「移動」を選択してください。

スクリーンショット 2023-07-14 5.00.54.png

③許可

  • Gmailの送信
  • スプレッドシートとの連携
  • Googleカレンダーへのアクセス
  • ChatGPTへのアクセスなどの外部サービスとの接続
    これらのを聞かれるので、「許可」を選択してください。

スクリーンショット 2023-07-14 5.02.13.png

まずは、画面下の「実行ログ」に、ChatGPTからの返答が帰ってきていれば成功です。

Function Calling でメール送信

ではいよいよ、「Function Calling」を使用して、イイ感じに「メールアドレス」を取得&「件名」と「本文」を生成して、メール送信していきます。

プログラムの12行目をコメントアウトして、13行目のコメントアウトを外してください。
***********@gmail.comの部分も、実際に届いて確認できるメールアドレスに変更してください。

ChatGPT.gs
  // prompt = "おすすめの中華料理を5つ教えて"
  prompt = "***********@gmail.comに、おすすめの中華料理を5つ送ってください。相手は20代の女性です。"
  // prompt = "来月の18日午後3時から4時まで渋谷でショッピングする予定を追加して"

これで実行してみてください。メールが送信できていれば成功です。
下記プログラムの部分が今回の「Function Calling」で、既存のChatGPTの操作に追加できる機能です。メールを送信する関数「send_mail」を呼び出しています。

ChatGPT.gs
{
  "name": "send_email", // function name
  "description": "メールを送信する",
  "parameters": {
      "type": "object",
      "properties": {
          "email": {
              "type": "string",
              "description": "メールアドレス",
          },
          "body": {
            "type": "string",
            "description": "本文",
          },
          "subject": {
            "type": "string",
            "description": "件名",
          }
      },
      "required": ["email"],
  },
}

実際にメールが送信できれば成功です。

考察

Googleの機能を、曖昧な文章でもAIの力を借りて呼び出し放題ですね。しかもGoogle側は完全に無料でできてしまいます。他にも、既存のWebサービスに今回の「Function Calling」を実装することで、強力なアプリケーションも作れそうですね。例えば、LINEのチャットボットとの連携も簡単に、しかも無料でできてしまいます。LINEとの連携に関しては、別で記事を書いたり動画を出していたりしていますので、今回の記事も参考にご活用ください。

◆ note記事『【LINE × ChatGPT 完全解説】非エンジニアでもAIチャットボット開発|スプシとGAS(Google Apps Script)作り方の決定版

◆ YouTube『Web API とスクレイピングを学びながらGoogle Apps Script で簡単にできるLINE BOT 作り方

公式の発表時の記事とドキュメント

詳細は、OpenAIが公式で発表している Function calling and other API updatesドキュメントをご確認ください。

◆ Function calling and other API updates

◆ Function Calling ドキュメント

Udemy講座に関して

GASの基礎講座などを出しています。

ChatGPT API 新機能「Function Calling」で LINEbot 入門

【Google Apps Script 超入門講座】2時間で知識ゼロから基礎をマスター

1時間でWeb API とスクレイピングを学びながらGoogle Apps Script で簡単にできるLINE BOT

役に立つ情報を発信していけるように頑張っていますので、今後も暖かく見守っていただけると幸いです!

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3