2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GoogleスプレッドシートでChatGPTに質問するツールつくってみた

Last updated at Posted at 2024-09-03

GoogleスプレッドシートでChatGPTに質問するツールつくってみた

#実装にはChatGPT APIの利用料金が発生します

目次

  1. はじめに
  2. ツールの概要
  3. ソースコード
  4. コードの解説
  5. 手順

はじめに

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

コードの解説

  1. APIキーの設定

    const API_KEY = 'YOUR_OPENAI_API_KEY'; // OpenAIのAPIキーをここに入力
    

    OpenAIのAPIキーを設定します。セキュリティのため、公開リポジトリなどではAPIキーを直接コードに含めないことを推奨します。

  2. 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のクォータ超過などのエラーに対応しています。

  3. スプレッドシートに回答を入力する関数

    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列に書き込みます。

手順

  1. APIキーの取得

  2. Google Apps Scriptの設定

    • Googleスプレッドシートを開き、「拡張機能」>「Apps Script」を選択します。
    • 新しいプロジェクトを作成し、上記のコードをコピーして貼り付けます。
    • API_KEYの部分を、自分のAPIキーに置き換えます。
  3. トリガーの設定

    • Apps Scriptのエディタで「時計」アイコンをクリックし、「トリガー」を設定します。
    • fillAnswers関数を定期的に実行するように設定するか、手動で実行します。
  4. スプレッドシートでの使用

    • スプレッドシートの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/

2
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
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?