GoogleスプレッドシートでChatGPTに質問するツールつくってみた
#実装にはChatGPT APIの利用料金が発生します
目次
はじめに
GoogleスプレッドシートとChatGPTを連携させることで、スプレッドシート内で質問を自動的に処理し、回答を取得するツールを作成しました。このツールを使えば、スプレッドシートに入力した質問に対してChatGPTが自動的に応答し、結果をシートに表示することができます。この記事では、ツールの概要から具体的なコード、設定手順までを初心者向けに詳しく説明します。
ツールの概要
このツールは、GoogleスプレッドシートとOpenAIのChatGPT APIを統合することで、スプレッドシートに入力した質問に対して自動的に回答を取得できるようにします。スプレッドシートのA列に質問を書き込み、ツールを実行することで、B列にChatGPTからの回答が表示されます。
ソースコード
以下は、Google Apps Scriptを使用して作成したソースコードです。APIキーはYOUR_OPENAI_API_KEY
と表示されていますが、実際には自分のAPIキーに置き換えてください。
const API_KEY = 'YOUR_OPENAI_API_KEY'; // OpenAIのAPIキーをここに入力
function getChatGPTResponse(prompt) {
const url = 'https://api.openai.com/v1/chat/completions';
const payload = {
model: 'gpt-3.5-turbo',
messages: [{ role: 'user', content: prompt }],
max_tokens: 150
};
const options = {
method: 'POST',
headers: {
'Authorization': `Bearer ${API_KEY}`,
'Content-Type': 'application/json'
},
payload: JSON.stringify(payload)
};
try {
const response = UrlFetchApp.fetch(url, options);
const json = JSON.parse(response.getContentText());
return json.choices[0].message.content.trim();
} catch (e) {
Logger.log('Error: ' + e.message);
if (e.message.includes('429')) {
Logger.log('Quota exceeded. Please check your OpenAI plan.');
}
return 'Error: Could not retrieve response.';
}
}
function fillAnswers() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
const range = sheet.getRange('A2:A');
const questions = range.getValues();
for (let i = 0; i < questions.length; i++) {
const question = questions[i][0];
if (question) {
const answer = getChatGPTResponse(question);
sheet.getRange(i + 2, 2).setValue(answer);
}
}
}
コードの解説
-
APIキーの設定
const API_KEY = 'YOUR_OPENAI_API_KEY'; // OpenAIのAPIキーをここに入力
OpenAIのAPIキーを設定します。セキュリティのため、公開リポジトリなどではAPIキーを直接コードに含めないことを推奨します。
-
ChatGPTへのリクエスト関数
function getChatGPTResponse(prompt) { const url = 'https://api.openai.com/v1/chat/completions'; const payload = { model: 'gpt-3.5-turbo', messages: [{ role: 'user', content: prompt }], max_tokens: 150 }; const options = { method: 'POST', headers: { 'Authorization': `Bearer ${API_KEY}`, 'Content-Type': 'application/json' }, payload: JSON.stringify(payload) }; try { const response = UrlFetchApp.fetch(url, options); const json = JSON.parse(response.getContentText()); return json.choices[0].message.content.trim(); } catch (e) { Logger.log('Error: ' + e.message); if (e.message.includes('429')) { Logger.log('Quota exceeded. Please check your OpenAI plan.'); } return 'Error: Could not retrieve response.'; } }
getChatGPTResponse
関数は、指定した質問をChatGPT APIに送信し、その回答を取得します。エラーハンドリングも含まれており、APIのクォータ超過などのエラーに対応しています。 -
スプレッドシートに回答を入力する関数
function fillAnswers() { const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); const range = sheet.getRange('A2:A'); const questions = range.getValues(); for (let i = 0; i < questions.length; i++) { const question = questions[i][0]; if (question) { const answer = getChatGPTResponse(question); sheet.getRange(i + 2, 2).setValue(answer); } } }
fillAnswers
関数は、スプレッドシートのA列にある質問を取得し、各質問に対してgetChatGPTResponse
関数を実行して回答をB列に書き込みます。
手順
-
APIキーの取得
- OpenAIのアカウントを作成し、OpenAIのAPIページからAPIキーを取得します。
-
Google Apps Scriptの設定
- Googleスプレッドシートを開き、「拡張機能」>「Apps Script」を選択します。
- 新しいプロジェクトを作成し、上記のコードをコピーして貼り付けます。
-
API_KEY
の部分を、自分のAPIキーに置き換えます。
-
トリガーの設定
- Apps Scriptのエディタで「時計」アイコンをクリックし、「トリガー」を設定します。
-
fillAnswers
関数を定期的に実行するように設定するか、手動で実行します。
-
スプレッドシートでの使用
- スプレッドシートのA列に質問を入力します。
- スクリプトを実行すると、B列にChatGPTからの回答が表示されます。
今回のこのツールはかなり簡素な作りですので別シートに用意した、プロンプトの形式で質問するとかできれば、スプレッドシートの質問処理が効率的に行えるようになるのではと思いますので、それは次回以降に。
参考
Google Apps Scriptの基本
https://www2.kobe-u.ac.jp/~tnishida/programming/GAS-01.html
Qiitaの関連記事
https://qiita.com/JinA293/items/ab953c40ce73d161f4fc
採用拡大中!
アシストエンジニアリングでは一緒に働くフロントエンド、バックエンドのエンジニア仲間を大募集しています!
少しでも興味ある方は、カジュアル面談からでもぜひお気軽にお話ししましょう!
お問い合わせはこちらから↓
https://official.assisteng.co.jp/contact/