サイト名変更・お引越しのお知らせ

ChatGPTのOpenAI APIとSpreadSheetを連携する方法を解説

ChatGPTOpenAIとSpreadSheetを連携する方法を解説します。

SpreadSheet例

GASを使って、AIにSpreadSheet上に書き込んである音楽グループ名の説明をしてもらいます。

補足

ChatGPTのAPIはまだ公開されていません。

今回利用するのは、ChatGPTと同じ自然言語処理モデルであるGPT3.5系のAPIです。

準備

まずは、APIを利用するための準備をしていきます。

OpenAIのAPIキーを取得

こちらからAPIキーを取得しましょう。

注意

APIキーは他人に公開しないよう取り扱いには気を付けましょう。

SpreadSheetとApps Scriptを作成

GASメニュー

お使いのGoogleアカウントからSpreadSheetを作成し、SpreadSheetの「拡張機能」から「Apps Script」を選択して作成しましょう。

OpenAIのAPIを叩いてみる

準備が完了したら、GASでOpenAIAPIを叩いてみましょう

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());
}

OpenAIからのレスポンス結果

これで実行し、試しに「ビートルズについて」と聞いてみたところ回答がちゃんと返ってきています。

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例

記事の最初にも載せましたが、例としてこんな感じのSpreadSheetを作っています。

「ビートルズ」と「クイーン」について聞いてみます。

B2B3のセルにこちらを入力してみましょう!

=askOpenAI(A2&"について:",1000)
=askOpenAI(A3&"について:",1000)

OpenAI出力結果書き込み

結果が出力されてSpreadSheetに書き込まれました。

まとめ

ChatGPTOpenAIとSpreadSheetを連携して記事を作成する方法を解説しました。

今回は単純にOpenAIのAPIにアクセスしてSpreadSheetに書き込みましたが、例えば記事の見出し順でリクエストを投げたり、Chat形式で内容をどんどん深堀りしていくようなことも可能ですね。

モグモグさん

アイデア次第で色々便利なことができそうですね!