ChatGPTのOpenAIとSpreadSheetを連携する方法を解説します。
GASを使って、AIにSpreadSheet上に書き込んである音楽グループ名の説明をしてもらいます。
ChatGPTのAPIはまだ公開されていません。
今回利用するのは、ChatGPTと同じ自然言語処理モデルであるGPT3.5系のAPIです。
準備
まずは、APIを利用するための準備をしていきます。
OpenAIのAPIキーを取得
こちらからAPIキーを取得しましょう。
APIキーは他人に公開しないよう取り扱いには気を付けましょう。
SpreadSheetとApps Scriptを作成
お使いのGoogleアカウントからSpreadSheetを作成し、SpreadSheetの「拡張機能」から「Apps Script」を選択して作成しましょう。
OpenAIのAPIを叩いてみる
準備が完了したら、GASでOpenAIのAPIを叩いてみましょう。
const SECRET_KEY = "取得したKEY";
const MODEL_NAME = "text-davinci-003";
const MODEL_TEMP = 0.3;
function askOpenAI(maxTokens=1000) {
const url = "https://api.openai.com/v1/completions";
const payload = {
model: MODEL_NAME,
prompt: "ビートルズについて教えて",
temperature: MODEL_TEMP,
max_tokens: maxTokens
};
const options = {
contentType: "application/json",
headers: { Authorization: `Bearer ${SECRET_KEY}` },
payload: JSON.stringify(payload),
};
const res = JSON.parse(UrlFetchApp.fetch(url, options).getContentText());
console.log(res.choices[0].text.trim());
}
これで実行し、試しに「ビートルズについて」と聞いてみたところ回答がちゃんと返ってきています。
SpreadSheetと連携する
次にSpreadSheetと連携してみましょう。
GASを修正する
モグモグさん
コメントが書かれた3点を修正してください!
SpreadSheet側の情報を受け取るために引数を受け取っているのと、最後にreturnでレスポンスを返すようにしています。
const SECRET_KEY = "取得したKEY";
const MODEL_NAME = "text-davinci-003";
const MODEL_TEMP = 0.3;
// 変更1
function askOpenAI(prompt, maxTokens=1000) {
const url = "https://api.openai.com/v1/completions";
const payload = {
model: MODEL_NAME,
// 変更2
prompt: prompt,
temperature: MODEL_TEMP,
max_tokens: maxTokens
};
const options = {
contentType: "application/json",
headers: { Authorization: `Bearer ${SECRET_KEY}` },
payload: JSON.stringify(payload),
};
const res = JSON.parse(UrlFetchApp.fetch(url, options).getContentText());
console.log(res.choices[0].text.trim());
// 変更3
return res.choices[0].text.trim();
}
SpreadSheetでGASを呼ぶ
記事の最初にも載せましたが、例としてこんな感じのSpreadSheetを作っています。
「ビートルズ」と「クイーン」について聞いてみます。
B2とB3のセルにこちらを入力してみましょう!
=askOpenAI(A2&"について:",1000)
=askOpenAI(A3&"について:",1000)
結果が出力されてSpreadSheetに書き込まれました。
まとめ
ChatGPTのOpenAIとSpreadSheetを連携して記事を作成する方法を解説しました。
今回は単純にOpenAIのAPIにアクセスしてSpreadSheetに書き込みましたが、例えば記事の見出し順でリクエストを投げたり、Chat形式で内容をどんどん深堀りしていくようなことも可能ですね。
モグモグさん
アイデア次第で色々便利なことができそうですね!