Microsoft 365 Apps Excel Office Script を利用して Azure Open AI を呼び出してみました

Azure Open AI がリリースされてから Open AI Studio で日々どのようなときに Chat GPT が有効となるか検証している人は多いのではないでしょうか。

私も時間ができたときやアイデアが出てきたときに起動してかくにんしていたのですが、これを簡易化できないか考えていたところ、 Microsoft 365 Apps の Excel を利用して Office Script で実行させる方法が良いのではないかと思い至りました。

今回は実際に対応した方法を見ていきたいと思います。

まず、接続先を確認するため Open AI Studio に入ります。

この中からチャット プレイグラウンドを選択し、チャットセッションにある コードの表示を押しましょう。

https://oai.azure.com/portal

すると下部にエンドポイントとキーが表示されます。

これらをコピーしておきましょう。

続いて Excel を起動し、自動化リボンから新しいスクリプトを選択します。

すると右側のペインにスクリプトが表示されるので、すべて消して以下のコードに置き換えてください。

置き換えるコードの中にある【エンドポイントを設定】および【キーを設定】に Open AI Studio の値を置き換えてあげれば基礎は完成です。

【システムのふるまいを設定】と【ユーザープロンプトを設定】に考えた文字を入力すれば、以下のように選択したセルに応答文が書き戻されるという状態になっているかと思います。

これを少し書き換えれば Excel セルに書いたプロンプトに沿って応答を出させるなど自由に呼び出しができるようになるはずです。

 

【置き換えるコード】

async function main(workbook: ExcelScript.Workbook) {

  const url = "【エンドポイントを設定】"
  let textMessage = {
    "messages": [
      {
        "role": "system",
        "content": "【システムのふるまいを設定】"
      },
      {
        "role": "user",
        "content": "【ユーザープロンプトを設定】"
      }
    ],
    "temperature": 0.7,
    "top_p": 0.95,
    "frequency_penalty": 0,
    "presence_penalty": 0,
    "max_tokens": 800,
    "stop": null };
  let param =
  {
    method: "POST",
    headers:
      { "content-type" : "application/json",
      "api-key": "【キーを設定】" 
      },
    body: JSON.stringify(textMessage)
  };
  let fetchResult = await fetch(url, param);

  let json: JSONData = await fetchResult.json();

  console.log(JSON.stringify(json));
  let selectedCell = workbook.getActiveCell();
  selectedCell.setValue(JSON.stringify(json.choices[0].message.content));

}

interface JSONData {
    id: string;
    "object": string;
    created: number;
    model: string;
    "prompt_filter_results": prompt_filter_results;
    "choices": choices;
    "usage": usage;
}

interface prompt_filter_results {
  prompt_index: number;
  "content_filter_results": content_filter_results;
}

interface content_filter_results{
  hate: content_filter;
  self_harm: content_filter;
  sexual: content_filter;
  violence: content_filter;
}
interface content_filter {
  "filtered": boolean;
  "severity": boolean;
}
interface choices{
  [key: string]: choice;
}
interface choice{
  index: number;
  finish_reason: string;
  "message": message;
  "content_filter_results": content_filter_results;
}
interface message{
  role: string;
  content: string;
}
interface usage{
  "prompt_tokens": number;
  "completion_tokens": number;
  "total_tokens": number;
}

 

特に interface を先に定義しておけばデータの取り扱いが容易になるので以下の Learn を見ながら独自に組み立ててみるものよいかもしれません。

https://learn.microsoft.com/ja-jp/azure/ai-services/openai/reference?WT.mc_id=M365-MVP-5002496#chat-completions

一応上記のサンプル定義で動作は問題なく行えますが、もっと細かく制御することもできるようになるでしょう。

Open AI は様々な可能性を秘めていますが、やっぱり使ってみないことには適用させるべき個所はわからないですよね。

どんどん利用して適用可能な場所を見つけていきましょう!

音楽:スマイル