誰でも簡単、10分爆速開発！ ChatGPT（Azure OpenAI）をTeamsチャネルにデプロイする😁

# はじめに

巷で話題のChatGPT、でも「データ漏洩が心配」とか「なんだかわからない」という理由で触ったことがない人が多いのも事実ですよね。Azure OpenAIを使用して、Microsoft Teams上にデプロイすることで、簡単に組織内にChatGPTをさわる環境を作成可能です。

# 前提

本記事はAzure OpenAI環境前提で作成しています。
ひと手間かければChatGPT のAPIでも応用可能ですが、その手順には触れません。

## Azure OpenAIの申込み

Azure OpenAIは現在申込み制のサービスになります。フォームに必要事項を記入して、承認がおりるのを待ちましょう。

https://customervoice.microsoft.com/Pages/ResponsePage.aspx?id=v4j5cvGGr0GRqy180BHbR7en2Ais5pxKtso_Pz4b1_xUOFA5Qk1UWDRBMjg0WFhPMkIzTzhKQ1dWNyQlQCN0PWcu

## GPT-4の申込み

さらにAzure OpenAIでGPT-4を使うためにも現在（2023/04/20）は追加申込が必要です。

https://aka.ms/oai/get-gpt4

# ゴール

指定したTeamsのチャネルで、指定キーワードを含む投稿をするとChatGPTが返信をくれます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/271f2eee-b7a4-42cc-b14e-d4c1fd19d168.png)

# アーキテクチャ

Teamsチャネルに特定のキーワードが送られると、それをトリガーにして、
Azure OpenAIにLogic Appsを使用してHTTPリクエストを送ります。チャット形式で問い合わせできるようにしたいので、問い合わせ履歴はBlob Storageに保存し、必要なときに呼び出せるようにしておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/a4388557-bf15-5b2d-b507-58357b616837.png)

# 爆速デプロイ手順

https://techcommunity.microsoft.com/t5/integrations-on-azure-blog/integrate-azure-open-ai-in-teams-channel-via-logic-app/ba-p/3776048

上記記事を参考に、目指すは10分以内の爆速デプロイです。

## 事前に準備しておくもの

- リソースグループの場所を決めておく
- Logic Appsで監視するTeamsチャネル
    - チャネルID
    - グループID
        - 取得方法が不明なときは → https://qiita.com/yamad365/items/e480f77e9102b132d258
- トリガーとなるキーワード
- Blob storage
    - 履歴を保存する用に、コンテナも1つ作成しておく
    - 接続文字列を取得しておく
- Azure OpenAI
    - 

GitHubでテンプレートを配布してくれています。

https://github.com/Drac-Zhang/LogicApp_For_Teams_OpenAI_Integration

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/347c1ab2-8726-b7b4-65bf-45a558482a8c.png)

こういう画面になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/78fa46a2-fd6e-2e62-7cf1-4d45250afa07.png)

Open AI api endpointについては、記事内にもありますが、下記のフォーマットで入力してください。

:::note
https://[Open AI resource Name].openai.azure.com/openai/deployments/[Deploymentname]/chat/completions?api-version=2023-03-15-preview
:::

バージョンは **2023-03-15-preview**を使用してください。過去のものだとJSONのスキーマが異なるためうまく動作しません。

**全部入力が終わったら「確認と作成」から、リソース類をデプロイ**してください💪

## Teamsに接続する

リソース作成が終わったら、Logic Appsのデザイナー画面へいき、Teamsの認証をします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/36e25cb8-393a-cc0b-568c-436ea15c5c99.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/3c85d61e-7200-bd11-af40-8a0090111e5a.png)

# 微修正

ほぼほぼ完成しましたが、微修正しましょう。

## 投稿を「ユーザー」から「Flow Bot」へ

※2023/04/21、作者のリポジトリに出したプルリクがマージされたので、この作業は不要になりました。

デフォルト構成のままだと、Teams認証を行った人が返信をするかたちになります。自分だけのTeamsチャネルならOKですが、他の人も使うようにするなら少し違和感があるかもしれません。投稿者をUserからFlow Botに変更しておきましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/b80f44c2-4bdd-fb42-f6de-cc3af536aa97.png)


## 無限ループを抑制する

キーワードによるトリガーを使用しているため、GPTの返信にキーワードが含まれている場合、自動でトリガーされてしまいます。赤色で隠したところがキーワードになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/8fb0764e-a07c-2d29-7ae4-e12cd11e793f.png)

この無限ループを抑制する方法は複数考えられると思いますが、ChatGPTのSystem Roleに、**返信文に絶対「{keyword}」は使用するな**といれておきましょう。以下の画像を参考に2箇所変更してください。

> You are an AI assistant that helps people find information. Never include the word '{keyword}' in your answer.

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/3103d0db-cd0e-56ef-c06e-dd120981a879.png)

この作業をしておくと、ほとんど返信文にキーワードをいれなくなるので、無限ループに陥る可能性は激減します。

# 完成🎉

これで完成！スムーズにやっていけば10分かからないはずです。
データ漏えいのない、企業独自のChatGPTが完成しました。
道具はそろったのであとはアイデア次第！業務効率化、新しいアーキテクチャを考えていきましょう💪

# 改めて参考記事

https://techcommunity.microsoft.com/t5/integrations-on-azure-blog/integrate-azure-open-ai-in-teams-channel-via-logic-app/ba-p/3776048

感謝！