Google スプレッドシートやドキュメントと Azure OpenAI Service を連携してみた

2023年8月16日掲載

Google スプレッドシートやドキュメントと Azure OpenAI Service を連携してみた

こんにちは。ご覧いただきありがとうございます。

ChatGPTをはじめとした生成AI(ジェネレ―ティブ AI)は今や注目の的になっていますね。

本日は Google スプレッドシートや Google ドキュメントと Azure OpenAI Service を連携する方法を紹介します。

目次

  • Google スプレッドシートやGoogle ドキュメントとAzure OpenAI Service を連携する方法を紹介します。
  • Azure OpenAI Service のはじめ方や、GASスクリプトの使い方は説明しません。他の記事を参照してください。
  • GAS を使ってAzure OpenAI Service のAPIを呼び出して回答を得る方法を知ることができます。

1. Azure OpenAI Service とは

Azure OpenAI Service は、マイクロソフトの Azure クラウドプラットフォーム上で OpenAI社のAI技術を利用できるサービスです。Azure OpenAI Service では、OpenAIが開発したChatGPTを含むGPT-3やCodex、GPT-4などのAIモデルを利用することができます。

2. 事前準備

Azure OpenAI Service を利用するには、Azure 上でリソースを作成し、モデルをデプロイする必要があります。
具体的な手順については、以下 Microsoft の公式ドキュメントを参考にすると分かりやすいです。
Azure OpenAI Service を使用してリソースを作成し、モデルをデプロイする

2-1.リソースの作成

Google スプレッドシートやドキュメントと Azure OpenAI Service を連携してみた:リソースの作成

①サブスクリプション:既存のものを選択

②リソースグループ:新規作成

③リージョン:[France Central]か[West Europe]か[Japan East]を選択

  • マイクロソフト側のリソース制限の関係上、France Central、West Europe、Japan East でないと利用できないので注意が必要です。

④名前:任意の名前

⑤価格レベル:Standard S0

 

設定したリソースを見てみると以下の画面になります。

[キーの管理]をクリックすると[キー1]が表示されるのでコピーしておきます。こちらがAPIキーになります。
 [キー1][キー2]がありますが、どちらを選んでも大丈夫です。

Google スプレッドシートやドキュメントと Azure OpenAI Service を連携してみた:キーのコピー①
Google スプレッドシートやドキュメントと Azure OpenAI Service を連携してみた:キーのコピー②

2-2.モデルのデプロイ

Google スプレッドシートやドキュメントと Azure OpenAI Service を連携してみた:モデルのデプロイ

<1>モデル:使用したいモデルを選択

<2>デプロイ名:任意の名前

モデルのデプロイをすると、作成したデプロイが確認できます。

Google スプレッドシートやドキュメントと Azure OpenAI Service を連携してみた:デプロイ

[デプロイ名]は次の手順で必要となるため、コピーしておきます。

3. 実装手順(Google スプレッドシート編)

3-1. GASスクリプトを指定して保存

新しい Google スプレッドシートを新規作成して、[拡張機能] -  [App Scripts] から GAS の画面に移動します。

以下のスクリプトをコピーし、 Google Apps Script(以下GAS)に貼り付けます。

  • APIキーと Azure OpenAI Service リソースの名前は、「2-1.リソースの作成」で取得したAPIキーとエンドポイントを入力します。
  • モデルデプロイ名は、「2-2.モデルのデプロイ」で取得したデプロイ名を入力します。
var apikey = "APIキー入力";
var model = "gpt-3.5-turbo";
var temperature = 0;
var url = "https://Azure OpenAI リソースの名前入力.openai.azure.com/openai/deployments/モデルデプロイの名前入力/chat/completions?api-version=2023-05-15";


function GPT(content, maxTokens=2048) {
  if(content){
    const requestBody = {
      "model": model,
      "messages": [{'role': 'user', 'content': content}],
      "temperature": temperature,
      "max_tokens": maxTokens
    };


    const requestOptions = {
      "method": "POST",
      "headers": {
        "Content-Type": "application/json",
        "api-key": apikey
      },
      "payload": JSON.stringify(requestBody)
    };


    var response = JSON.parse(UrlFetchApp.fetch(url, requestOptions).getContentText());


    return response.choices[0].message.content.trim();


  }else{
    return "no result";
  }
}

GAS 実行の際、スクリプト実行の承認を求められるので、[続行]をクリックします。(初回のみ、承認画面が出ます)

Google スプレッドシートやドキュメントと Azure OpenAI Service を連携してみた:Google アカウント認証

Google アカウントを選択後、[許可]をクリックします。

Google スプレッドシートやドキュメントと Azure OpenAI Service を連携してみた:Google アカウント許可

4.実行してみる(Google スプレッドシート編)

以下の様にセルA2に質問を記述して、セルB2に数式を入力します。関数名は「GPT」です。
GPT関数とは、質問を引数として指定して Azure OpenAI Service からの回答を表示できる関数です。

Google スプレッドシートやドキュメントと Azure OpenAI Service を連携してみた:Google スプレッドシートで実行

以下のように質問に対する回答が得られたら成功です。

Google スプレッドシートやドキュメントと Azure OpenAI Service を連携してみた:Azure OpenAIからの回答

5.実装手順(Google ドキュメント編)

5-1. GAS のスクリプトを指定して保存

新しい Google ドキュメントを新規作成して、[拡張機能] -  [App Scripts] からGASの画面に移動します。

以下のスクリプトをコピーし、GAS に貼り付けます。ここでは OpenAI のAPIを使用して文章生成を行います。具体的には、以下の2つの関数を実装しています。

AI関数:OpenAIのAPIを使用して、与えられたテキストに基づいて自動的に文章を生成します。

CATEGORIZE関数:与えられたテキストを分類するために、AI関数を使用します。引数として、分類するためのカテゴリのリスト、入力テキスト、およびカテゴリを割り当てるためのルールのリストを受け取ります。これらの引数を使用してAI関数がプロンプトを生成し、AIが生成したテキストを整形して、入力テキストを与えられたカテゴリに割り当てます。

  • APIキーと Azure OpenAI Service リソースの名前はスプレッドシートと同様に、「2-1.リソースの作成」で取得したAPIキーとエンドポイントを入力します。
  • モデルデプロイ名は、「2-2.モデルのデプロイ」で取得したデプロイ名を入力します。
const apikey = "APIキー入力";
const MAX_TOKENS = 200;


function AI(prompt, temperature = 0, model = "gpt-3.5-turbo") {
  const url = "https://Azure OpenAI リソースの名前入力.openai.azure.com/openai/deployments/モデルデプロイの名前入力/chat/completions?api-version=2023-05-15";
  const requestBody = {
    "model": model,
    "messages": [{ 'role': 'user', 'content': prompt }],
    "temperature": temperature,
    "max_tokens": MAX_TOKENS
  };
  const options = {
    "method": "POST",
    "headers": {
      "Content-Type": "application/json",
      "api-key": apikey
    },
    "payload": JSON.stringify(requestBody)
  };
  const res = JSON.parse(UrlFetchApp.fetch(url, options).getContentText());
  return res.choices[0].message.content;
}




function CATEGORIZE(categories, input, rules = []) {
  const prompt = "The available categories are " + categories.map((c) => `"${c}"`).join(", ") + ". " + rules.join(". ") + "The category for '" + input + "' is ";
  console.log(prompt);
  const completion = AI(prompt, 0, "gpt-3.5-turbo");
  // Replace "s and .s at the start and end of the string
  return completion.replace(/^"/g, '').replace(/["|.]{0,2}$/, '');
}

5-2. Google ドキュメント を制御するための GAS を追加

GAS で[エディタ > +]から新たにスクリプトを作成します。名前は「Query2OpenAI.gs」などと付けてください。
その後、以下のスクリプトをコピーし、貼り付けます。

ここでは Google ドキュメントからテキスト情報を取得しています。

具体的には、以下の2つの関数を実装しています。

getDocsSelection関数: Google ドキュメントから選択した範囲のテキスト情報を取得します。

addText関数:OpenAIから受け取った情報を Google ドキュメントに渡します。

function getDocsSelection(e) {
  var text = '';
  var selection = DocumentApp.getActiveDocument().getSelection();
  Logger.log(selection);
  if (selection) {
    var elements = selection.getRangeElements();
    for (var i = 0; i < elements.length; i++) {
      Logger.log(elements[i]);
      var element = elements[i];
      // Only modify elements that can be edited as text; skip images and other non-text elements.
      if (element.getElement().asText() && element.getElement().asText().getText() !== '') {
        text += element.getElement().asText().getText() + '\n';
      }
    }
  }
  addText(text);
}


function addText(question){
  var doc = DocumentApp.getActiveDocument();
  var body = doc.getBody();
  var paragraphs = body.getParagraphs();
  var p1 = paragraphs[paragraphs.length-1]
  p1.appendText("\n\n" + AI(question));
}

5-3.「文書作成」というメニューを追加するGASを作成し、実行する

GAS で[エディタ > +]から新たにスクリプトを作成します。名前は「menu.gs」などと付けてください。
その後、以下のスクリプトをコピーし、貼り付けます。

onOpen 関数を実行し、ドキュメントのメニューに「文書作成」と言うボタンを作成します。

これにより GAS を操作しなくても、 Google ドキュメント上でAIに質問して回答を取得するという機能が実現できます。

function onOpen() {
  var  ui = DocumentApp.getUi()
  
  var  menu = ui.createMenu("文章作成");
  
  menu.addItem("作成","myFunction");
  menu.addToUi();
}


function myFunction(){
  getDocsSelection();
}

GASでのコーディングは以上です。

6.実行してみる(Google ドキュメント 編)

OpenAIに質問したい内容をドラッグして選択します。この選択したテキストがOpenAIに質問として送られます。

[文章作成 > 作成]をクリックして実行します。

スプレッドシート同様、スクリプト実行の承認を求められるので、承認します。

以下のように質問に対する回答が得られたら成功です。

Google スプレッドシートやドキュメントと Azure OpenAI Service を連携してみた:ドキュメントで実行

7.まとめ

Google スプレッドシートやドキュメントをOpenAIと連携させると、非常に便利なツールとなります。

今回は連携しただけですが、例えば、スプレッドシートにさまざまなデータが記録されている場合、OpenAIを使用することでデータを自動的に分類、要約、分析することができるようになります。また、 Google ドキュメントでは、自動応答、文章の要約などのさまざまなタスクを自動化することができます。

今回はスプレッドシートとドキュメントでしたが、次回は Google Chatや Google スライドを使って連携する方法をご紹介したいと思います。

最後までお読みいただき、ありがとうございました。

関連サービス

Azure OpenAI Service

Azure OpenAI serviceは、OpenAIのAIモデルをMicrosoft Azure上のセキュアな環境で利用できるサービスで、機械学習や自然言語処理などの高度な機能を提供します。簡単にAIを組み込み、スケーラブルなソリューションを構築し、効率的にビジネス価値を生み出すことができます。

Microsoft Azure

Microsoft Azureは、Microsoftが提供するパブリッククラウドプラットフォームです。コンピューティングからデータ保存、アプリケーションなどのリソースを、必要なときに必要な量だけ従量課金で利用することができます。

Google Workspace

Google Workspace は、あらゆる業務に合わせて、すべてのビジネス機能をそろえた統合ワークスペースです。あらゆる働き方に対応する業務効率化を実現します。

おすすめの記事

条件に該当するページがございません