Azure OpenAI Service を利用したエンタープライズアーキテクチャのメモ

# はじめに
Azure 上で OpenAI をエンタープライズ利用するアーキテクチャがガンガン出てくるので自分用にメモ

# 1. ChatGPT × Cognitive Search を使ったエンタープライズサーチ
![001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/674344/ceeb558b-0150-3adb-cc24-90c2f05bc0ca.png)

今一番バズってるアーキテクチャ。組織内の大量のドキュメントを ChatGPT で検索できる。多くの企業がまずこのアーキテクチャで実装を始めている。MS 公式 Tech Blog 記事は 153K Views というとんでもない View 数を記録。

- ChatGPT(gpt-35-turbo)モデルでトレーニングされたデータに基づいてテキストを生成するのではなく、企業内に閉じたデータのみから生成する方法の例を示しています
- トークンの制限(4,096)の壁をできるだけ回避するための手法を紹介しています
- 「引用」をテキストに付加することで信頼できる応答を生成します

https://techcommunity.microsoft.com/t5/ai-applied-ai-blog/revolutionize-your-enterprise-data-with-chatgpt-next-gen-apps-w/ba-p/3762087

## 日本語解説記事
https://qiita.com/nohanaga/items/803c09b5a3a4e2d1776f

### 6/20 ノーコードで本アーキテクチャを実現する新機能「Azure OpenAI on your data」が Chat Playground に登場しました。
https://qiita.com/nohanaga/items/a3e236fdbb3ef5878012

### 🎉5/24 ついにベクトル検索機能が実装されました！
Azure Cognitive Search にベクトル検索機能が実装され、ChatGPT × ハイブリッド検索が可能になりました。

https://qiita.com/nohanaga/items/f710cac82072b63bc73f

# 2. ChatGPT × CosmosDB でチャット履歴の保存
ChatGPT のチャット履歴を CosmosDB に保管するアーキテクチャ。Blazor Server のフロントエンド付き。
![002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/674344/94348ec4-111b-ea58-e58c-c0cb82a9bf5e.png)

https://devblogs.microsoft.com/cosmosdb/chatgpt-azure-cosmos-db/

## 日本語解説記事
https://qiita.com/nohanaga/items/18baccb843b4148e6a77

# 3. ChatGPT × Azure Cache for Redis Enterprise でベクトル検索
Azure OpenAI の Embeddings API でドキュメントのチャンクを Embeddings に変換し、Redis に保管。ユーザーからのクエリーも Embeddings に変換して、近似最近傍探索(ANN Search)を行う。
![004.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/674344/87bf8fa3-2fa7-87a0-f439-c73c6ab88d2a.png)

https://github.com/Azure-Samples/azure-open-ai-embeddings-qna#deploy-on-azure-webapp--azure-cache-for-redis-enterprise--batch-processing


# 4. Enterprise Search with OpenAI Architecture
Azure Accelerators としてデータインジェストフェーズから利用フェーズまでカバーしたエンタープライズサーチアーキテクチャ
![km-openai.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/674344/6912e58e-3b86-7fcc-9ba1-9d3b6a36ffec.png)

https://github.com/MSUSAzureAccelerators/Knowledge-Mining-with-OpenAI

# 5. Azure OpenAI Custom Skill on Azure Cognitive Search 
Azure Cognitive Search の[カスタムスキル](https://qiita.com/nohanaga/items/986887b82cf76dc7b0a9)として Azure OpenAI を呼び出して全文検索インデックスをエンリッチするアーキテクチャ。文書に対して要約、分類、キーフレーズ抽出、固有名詞抽出などの情報を付加できる。
![arch.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/674344/279d1682-6c58-c07e-1e2b-d2cf2621d036.png)

https://github.com/MaheshSQL/cognitive-semantic-search-openai-accelerator

## 5.1 チャンク分割・Embeddings 生成カスタムスキル
azure-search-power-skills へ EmbeddingGenerator　が追加。

https://github.com/Azure-Samples/azure-search-power-skills/tree/main/Vector/EmbeddingGenerator

# 6. Business Process Automation Accelerator
BPA の観点からのパイプラインアーキテクチャ

![sample-pipelines-may-2023.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/674344/5f39d776-77db-60e6-73be-9ee410feeb2e.png)

https://github.com/Azure/business-process-automation

# 7. GPT Smart Search Architecture
取得先の情報ソースを Azure Cognitive Search だけでなく、Bing Search API、Azure SQL Database、CSV ファイルに拡張したアーキテクチャ。オーケストレーションに LangChain を利用。
![003.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/674344/3c79404e-6ed3-5402-14ec-a1f7f53778d0.jpeg)

https://github.com/pablomarin/GPT-Azure-Search-Engine

# 8. Azure OpenAI Enterprise Logging
Azure OpenAI リソースをサブスクリプション管理者側からロギングして、アクセス元 IP アドレスやトークン使用量を集計するアーキテクチャ。

![005.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/674344/a6893684-ab56-695d-cf23-d50abb0a6044.png)

https://github.com/Azure-Samples/openai-python-enterprise-logging

https://learn.microsoft.com/azure/architecture/example-scenario/ai/log-monitor-azure-openai

既定の Azure OpenAI リソースではモニタリングできない、完全な呼び出し元 IP アドレス、モデル使用率、トークン使用率 (入出力)、入力プロンプト詳細、出力完了詳細のメトリックが取得可能。

# 9. Azure OpenAI を VNET に限定する設定
構築手順は以下が詳しい。Azure OpenAI Service を企業がセキュアに導入する際の基本設定。
![006.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/674344/2d0df804-3838-d3ed-79e1-8b3643a7e9f2.png)

https://qiita.com/kske_t/items/c5535e5bd3e27ad1baf5

もちろん他の Azure サービスと以下のように連携したり、オンプレからもセキュアにアクセスできる。モデルも利用サブスクリプションのリソース内にデプロイされている。
![68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3637343334342f33626466343039612d393735652d386436652d666162322d6665363939303139326534652e706e67.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/674344/df5e4227-836e-68c2-0de2-ab481e8406a5.png)

# 10. 負荷分散
Azure OpenAI Service のクォータ制限の回避策として、Azure API Management と Azure Front Door、Azure Traffic Manager 等を用いて複数のリソースに負荷分散する。

https://logico-jp.io/2023/06/08/request-load-balancing-for-azure-openai-service/

※注意：6/9 Azure OpenAI にクォータ管理機能が導入されました。
https://learn.microsoft.com/azure/cognitive-services/openai/how-to/quota


# 11. Azure Speech Service × Azure OpenAI
音声入力を [Speech To Text](https://azure.microsoft.com/products/cognitive-services/speech-services) でテキスト化して Azure OpenAI と連携させるアーキテクチャ。Cool なリアルタイムデモコードも公開されている。
![007.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/674344/c830f61a-e90c-0e45-7e56-3adec9791539.png)

https://github.com/amulchapla/AI-Powered-Call-Center-Intelligence

https://github.com/jixjia/call_center_ai

# 12. ChatGPT × Azure Video Indexer
ChatGPT と [Azure Video Indexer](https://azure.microsoft.com/products/video-indexer) を連携させて組織内の動画コンテンツを検索しちゃうアーキテクチャ。
![012.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/674344/e4cfc143-1299-de12-7828-5b5d655c6a28.png)

https://techcommunity.microsoft.com/t5/ai-applied-ai-blog/supercharge-archive-content-discovery-with-chatgpt-and-azure/ba-p/3788061

# 13. Azure OpenAI Service で ChatGPT お試し環境の構築
まずは社内で ChatGPT を検証してみたい方向けのノーコード ChatGPT Playground セキュア構築。

https://ks6088ts.github.io/blog/fork-azure-openai-playground/

https://github.com/ks6088ts-labs/azure-openai-playground

# 14. 「Project Miyagi」Semantic Kernel 系ガチ全部乗せアーキテクチャ
Azure-Samples にありがちな全部乗せ系アーキテクチャ。気の弱い方閲覧注意。
![008.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/674344/f76dc7c4-17fe-67c4-b211-7355278e5587.png)

データ取得のオーケストレーションに [Semantic Kernel](https://github.com/microsoft/semantic-kernel) を利用している。TODO: 理解のために要解体。Project Miyagi の Miyagi は映画ベスト・キッド（The Karate Kid）の空手の天才 [Mr.Miyagi](https://en.wikipedia.org/wiki/Mr._Miyagi) の事らしい。

![009.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/674344/94c05b00-0ff4-ac71-ed0b-79028989ee69.png)

https://github.com/Azure-Samples/miyagi

## Semantic Kernel 解説
Semantic Kernel って何？という方向け解説記事&動画

https://qiita.com/nohanaga/items/430b59209b02c298ef2a

https://youtu.be/tFgqdHKsOME?t=4687

## Semantic Kernel サンプル(C#)
https://github.com/microsoft/semantic-kernel#sample-apps-

最近 [Copilot Chat](https://github.com/microsoft/semantic-kernel/blob/main/samples/apps/copilot-chat-app/README.md) という高機能チャットサンプルが追加されたので要チェック。

![010.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/674344/e86fb612-d56a-902f-518a-6a1835789dfe.png)

# 15. Semantic Kernel を使って独自の Copilot System を作るためのアーキテクチャ例
LLM を様々な企業内システム・DB と連携させる**オーケストレーター**として動作させる例。
![011.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/674344/2e35da73-ec90-fded-cf93-9093fdcfb0b5.png)

https://qiita.com/nohanaga/items/2691f64bd1fb418295b8

# 5/24 Build 2023 AI Copilot の時代が到来
## 「Copilot stack による LLM 中心アプリ開発」で最新の開発手法を学んでください
https://qiita.com/nohanaga/items/c3e92c9adeca7c84a8d5

# 参考動画
これ見とけば Azure OpenAI Service 語れるよ動画

https://www.youtube.com/watch?v=tFgqdHKsOME

https://www.youtube.com/watch?v=l9fpxtz22JU


どんどん追加してこう