LoginSignup
2
5

日常業務用にChatGPT(Azure OpenAI Service)とMicrosoft Teamsを連携する。

Last updated at Posted at 2023-10-08

はじめに

最近は猫も杓子もChatGPTですね。
本文も、御多分に漏れずChatGPTです。ただし、機密情報を扱えるようにAzure OpenAI Serviceを利用します。
また、最近は日常業務にMicrosoft Teamsをご利用の方も多いと存じます。
本文では、日常業務で手軽にChatGPTをご利用可能なように、TeamsでメンションをするとChatGPTが受け答えをしてくれる仕組みを作ります。

仕組みは簡単。TeamsにメンションをつけるとWebhookしてくれるOutgoing Webhookという仕組みがあるので、Webhoook先にAzure Functionsを用意しておきます。FunctionsからAzure OpenAIをHttp Request経由で呼び出します。言語にはNode.jsを使います。最近のNode.jsでは標準でfetchを使えるから便利。
図にすると以下のような感じです。
image.png

早速作っていきます。
本文では、文書作成の省力化できるだけ最新の情報を参照する ために、主となる情報の記述に集中し、補足情報は外部リンクでご説明します。文書作成先の企業様、有志様に感謝。

Azure OpenAI Serviceを作成します。

Azure OpenAI のリソースを作成します。

省力化のために、ネットワークはどこからでもアクセス可能なように設定します
Azure OpenAIに外からアクセスされることを懸念される方は、Azure OpenAIのリソース名に推測困難な長い文字列を入れる(リソース名がURLに含まれるので、アクセスが難しくなる)か、慎重を期したい場合は、ネットワークを適切に設定してください。(参考)

エンドポイントURLとキーを取得します。

作成したOpen AIリソースの「概要」から「探索」を押して、
image.png

「チャット」を押して、
image.png

「チャットセッション」の「コード」のを押して、
image.png

サンプルコードの下に表示されるエンドポイントとキーをコピーしておいてください。

Functionsを作成

Functionsを作成します。HTTPトリガで関数を作成してください。
こちらも、外部からアクセスされたくない場合は推測困難なリソース名、関数名にしてください。慎重を期する場合は、Teamsから鍵を取得可能(事項参照)なので、関数内でその鍵をチェックするようにしてください。

コードは以下です。

module.exports = async function (context, req) {
    var receivedMsg = req.body;
    var openAIRequestBody = {
      "messages": [
        {
          "role": "system",
          "content": ""
        },
        {
          "role": "user",
          "content": receivedMsg.text
        },
        {
          "role": "assistant",
          "content": ""
        }
      ],
      "temperature": 0.7,
      "top_p": 0.95,
      "frequency_penalty": 0,
      "presence_penalty": 0,
      "max_tokens": 800,
      "stop": null
    }
    var data = await fetch("Azure OpenAIのエンドポイント", {
        method: "POST",
        headers: {
            "Content-Type": "application/json"
            ,"api-key": "Azure OpenAIのキー"
        },
        body: JSON.stringify(openAIRequestBody), 
    });
    responseContent = (await data.json()).choices[0].message.content;
    
    var responseMsg = JSON.stringify({
        "type": "message",
        "text": responseContent
    });
    context.res = {
        body: responseMsg
    };
}

関数を作成したら、上記Functionsの作成ページの[関数の URL の取得]の要領でURLをを取得しておいてください。

TeamsのOutgoing Webhookを作成します。

Outgoing Webhookを作成します
名前はメンションしやすいものが良いでしょう。Callback URLにはAzure FunctionsのURLを指定してください。
セキュリティーに万全を期する場合は、上記Outgoing Webhookを作成のページのハッシュ ベースのメッセージ認証コード (HMAC)で作成される認証コードをFunctions内で検証するようにすると良いでしょう。気になるなら。

Teamsでメンションする。

これで作成したOutgoing Webhookでメンションすると、ChatGPTが返答してくれるようになります!良かったですね。

本文中にでてくる商品名、サービス名、会社名またはロゴマークは、各社の商標、登録商標もしくは商号のことがあります。

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