はじめに
最近は猫も杓子も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を使えるから便利。
図にすると以下のような感じです。
早速作っていきます。
本文では、文書作成の省力化できるだけ最新の情報を参照する ために、主となる情報の記述に集中し、補足情報は外部リンクでご説明します。文書作成先の企業様、有志様に感謝。
Azure OpenAI Serviceを作成します。
省力化のために、ネットワークはどこからでもアクセス可能なように設定します。
Azure OpenAIに外からアクセスされることを懸念される方は、Azure OpenAIのリソース名に推測困難な長い文字列を入れる(リソース名がURLに含まれるので、アクセスが難しくなる)か、慎重を期したい場合は、ネットワークを適切に設定してください。(参考)
エンドポイントURLとキーを取得します。
作成したOpen AIリソースの「概要」から「探索」を押して、
サンプルコードの下に表示されるエンドポイントとキーをコピーしておいてください。
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が返答してくれるようになります!良かったですね。
注
本文中にでてくる商品名、サービス名、会社名またはロゴマークは、各社の商標、登録商標もしくは商号のことがあります。