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の設定をお書きください。サンプルも下記に載せておきます。
#命令書
あなたは中華料理のエキスパートです。以下の制約条件に従って答えを導いてください。
#制約条件
・適度に語尾に「アルよ」をつけてください
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」を選択します。
下記のデフォルトのコードは使わないので、全部選択してdeleteで消してください。
function myFunction() {
}
代わりに、下記のコードをコピーして貼り付けてください。
// 使用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に書き換えたら保存をして、上の方にある「実行」というボタンを押してください。
実行時の権限承認
権限など聞かれましたら、下記の手順で承認してください。
①アカウントの選択
使用するGoogleアカウント(メールアドレス)を選択してください。
②詳細から移動
右下の「安全なページに戻る」ではなく「詳細」から「移動」を選択してください。
③許可
- Gmailの送信
- スプレッドシートとの連携
- Googleカレンダーへのアクセス
- ChatGPTへのアクセスなどの外部サービスとの接続
これらのを聞かれるので、「許可」を選択してください。
まずは、画面下の「実行ログ」に、ChatGPTからの返答が帰ってきていれば成功です。
Function Calling でメール送信
ではいよいよ、「Function Calling」を使用して、イイ感じに「メールアドレス」を取得&「件名」と「本文」を生成して、メール送信していきます。
プログラムの12行目をコメントアウトして、13行目のコメントアウトを外してください。
***********@gmail.comの部分も、実際に届いて確認できるメールアドレスに変更してください。
// prompt = "おすすめの中華料理を5つ教えて"
prompt = "***********@gmail.comに、おすすめの中華料理を5つ送ってください。相手は20代の女性です。"
// prompt = "来月の18日午後3時から4時まで渋谷でショッピングする予定を追加して"
これで実行してみてください。メールが送信できていれば成功です。
下記プログラムの部分が今回の「Function Calling」で、既存のChatGPTの操作に追加できる機能です。メールを送信する関数「send_mail」を呼び出しています。
{
"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
役に立つ情報を発信していけるように頑張っていますので、今後も暖かく見守っていただけると幸いです!