Upgrade to Pro — share decks privately, control downloads, hide ads and more …

[ServerlessMeetupOsaka#2] AzureServerlessで作るコスパ最強RAGシステム構築

Taishi Miyata
July 09, 2024
730

[ServerlessMeetupOsaka#2] AzureServerlessで作るコスパ最強RAGシステム構築

Taishi Miyata

July 09, 2024
Tweet

Transcript

  1. 1 Event name or presentation title Serverless Meetup Osaka #02

    Azure Serverlessで作る コスパ最強のRAGシステム構築! Data & AI Cloud Solution Architect Taishi Miyata 2024/07/09
  2. 5 Azure Serverlessの主なサービス Azure Cosmos DB for NoSQL Azure OpenAI

    Service イベント駆動型のコードを実行するためのサーバーレ スコンピューティングサービスです(Function-as-a- Service)。ユーザーは自分にとって最も生産性の高い 言語で最も重要なコードに集中し、残りはAzure Functionsが処理します。これにより、コードの記述と インフラストラクチャの管理が減り、コストを節約で きます サーバーレスプラットフォームで、コンテナ化され たアプリケーションを実行するためのサービス (Container-as-a-Service)。これにより、保守する インフラストラクチャが少なくなり、コストを削減 できます。また、アプリケーションの安定と安全を 維持するために必要なすべての最新のサーバーリ ソースが提供されます Azure Cosmos DBは、Microsoft Azureが提供するフ ルマネージド型のNoSQLデータベースサービスです。 グローバルでデータを分散保存することで、高いス ケーラビリティと1桁ミリ秒の応答時間、99.999%の 高可用性を保証しています Microsoft Azureのクラウドプラットフォーム上で提供 される、OpenAI社の人工知能(AI)サービスです。 OpenAI社が開発したGPT-4やChatGPTなど、自然言 語処理モデルを使用できます 他クラウド:AWS Lambda, Google Cloud Functions 他クラウド:AWS App Runner, Goggle Cloud Run 他クラウド:Amazon Bedrock, Vertex AI 他クラウド:Amazon DynamoDB, Google Cloud Datastore/Cloud Bigtable Azure Functions Azure Container Apps
  3. 6 アーキテクチャ App Service Document Intelligence フロントエンド Functions オーケストレータ Azure

    OpenAI GPT-4o ベクトルストア Cosmos DB for NoSQL Text-embeddings-ada-002 ドキュメント ユーザ Azure テキスト抽出 チャンク分割 ベクトル化 質問 質問 検索 検索結果 質問+検索結果 回答 回答 回答 Streamlit LangChain
  4. 7 アーキテクチャ App Service Document Intelligence フロントエンド Functions オーケストレータ Azure

    OpenAI GPT-4o ベクトルストア Cosmos DB for NoSQL Text-embeddings-ada-002 ドキュメント ユーザ Azure テキスト抽出 チャンク分割 ベクトル化 質問 質問 検索 検索結果 質問+検索結果 回答 回答 回答 Streamlit LangChain
  5. 8 オーケスタレーター - 技術スタック - 技術スタック Azure App Services Azure

    Functions Python uvicorn FastAPI LangChain フルマネージドのWebアプリケーションホスティングサービス。スケーラブル でセキュアなアプリケーションの迅速な展開を支援 サーバーレスコンピューティングサービスで、イベント駆動型のコードを簡単 にデプロイ・実行できる 高レベルの汎用プログラミング言語。読みやすさと生産性の高さで、Web開発 やデータ分析に広く利用される ASGIサーバーで、Pythonの非同期Webフレームワーク(特にFastAPI)を高速 に実行するための軽量サーバー Python製の高性能APIフレームワーク。自動生成ドキュメントと非同期処理を サポートし、開発速度と性能を両立 オープンソースのフレームワークで、言語モデルの統合、パイプライン構築、 タスク管理を効率的に行う
  6. 9 Azure Functions 技術スタック Azure App Services Azure Functions Python

    uvicorn FastAPI LangChain • Function-as-a-Service • イベント駆動で様々なサービスと連携 • HTTP/Blob Storage/Cosmos DB/Event Grid/IoT Hub etc.. Azure Functionsの特徴 • サーバレスを含めた多様なホスティングプラン • 多様なプログラミング言語に対応 • C#/Java/JavaScript/PowerShell/Python/TypeScript/Go/Rust
  7. 10 Azure Functions 技術スタック Azure App Services Azure Functions Python

    uvicorn FastAPI LangChain 従量課金 Flex従量課金 Premium App Service Container Apps ゼロスケール ー ー スケールの挙動 イベントド リブン 高速なイベン トドリブン イベントドリ ブン メトリック ベース KEDA を使用 したイベント ドリブン 仮想ネットワーク ー 専用コンピュー ティングとコール ド スタートの防 止 ー 常時使用可能 のオプション 少なくとも 1 つのインスタ ンスが必要 少なくとも 1 つのインスタ ンスが必要 最小レプリカ を含むオプ ション 最大スケールアウ ト (インスタンス数) 200 1000 100 40-60 300 ホスティングプラン コールドスタートの問題を緩和 コールドスタート時の起動時間は約1秒前後 ->常時使用可能オプションを付けると起動時間は100ms前後 Azure Functions のスケールとホスティング | Microsoft Learn
  8. 11 Fast API 技術スタック Azure App Services Azure Functions Python

    uvicorn FastAPI LangChain import azure.functions as func import fastapi app = fastapi.FastAPI() @app.get("/sample") async def index(): return { "info": "Try /hello/Shivani for parameterized route.", } @app.get("/hello/{name}") async def get_name(name: str): return { "name": name, } ・Azure FunctionsではPythonのFast APIをネイティブにサポート ・ストリーミング表示のニーズが多いチャットボットと相性◎ • 軽量で高速なPythonのWebフレームワーク • 非同期通信が簡単に実装可能 Fast APIの特徴
  9. 12 LangChain 技術スタック Azure App Services Azure Functions Python uvicorn

    FastAPI LangChain async def get_response(user_query: str): vector_store = AzureCosmosDBNoSqlVectorSearch(…) retriever = vector_store.as_retriever(…) setup_and_retrieval = RunnableParallel( {"context": retriever, "user_query": RunnablePassthrough()} ) template = """ ## 指示 以下の質問に対してコンテキストに基づいて回答を生成してください。 分からない場合は、分からない旨を回答してください。 ## コンテキスト {context} ## 質問 {user_query} """ prompt = ChatPromptTemplate.from_template(template) llm = AzureChatOpenAI(…) chain = setup_and_retrieval | prompt | llm | StrOutputParser() | stream_processor async for chunk in chain.astream(user_query): yield chunk LECLにより可読性高く、迅速に開発が可能 RAGのコード(概略) CosmosDB for NOSQLのRetriever RAGのプロンプト 非同期処理 Chainの作成 LLMの設定
  10. 13 LangChain 技術スタック Azure App Services Azure Functions Python uvicorn

    FastAPI LangChain chain = setup_and_retrieval | prompt | llm | StrOutputParser() | stream_processor async for chunk in chain.astream(user_query): yield chunk ストリーミング表示の速度の調整 チェーン async def stream_processor(response): async for chunk in response: if len(chunk) > 0: await asyncio.sleep(0.03) yield chunk 速度調整用関数 ・チェーンの出力の最後に後処理の関数をかます ・sleepの時刻を変更することで表示速度を変更
  11. 14 アーキテクチャ App Service Document Intelligence フロントエンド Functions オーケストレータ Azure

    OpenAI GPT-4o ベクトルストア Cosmos DB for NoSQL Text-embeddings-ada-002 ドキュメント ユーザ Azure テキスト抽出 チャンク分割 ベクトル化 質問 質問 検索 検索結果 質問+検索結果 回答 回答 回答 Streamlit LangChain
  12. 15 Cosmos DB • フル マネージドのグローバル分散データベース • 複数リージョンでの可用性99.999%を実現 • 99%の確率で数ミリ以内にデータアクセス可能

    • 迅速なオートスケール • 様々なデータベースAPIが選択可能 NoSQL スキーマレス設計で柔軟なデータス トア。多様なデータモデルをサポー トし、高スケーラビリティとパ フォーマンスを提供 MongoDB JSONドキュメントモデルを使用し、 高スケーラビリティと自動シャー ディングを提供。複雑なデータ構造 に最適 PostgreSQL SQL標準に準拠した高機能リレー ショナルデータベース。トランザク ション処理や高度なクエリ機能を提 供 Apache Cassandra 分散型データベースで高可用性と障 害耐性が特徴。マルチデータセン ター展開に優れ、高パフォーマンス Apache Gremlin グラフデータモデルで複雑なリレー ションシップを管理。Gremlin言語で 効率的な関係性解析を提供 Table キー・バリュー型データストアでシ ンプルなスキーマと高速アクセス。 簡易なデータストレージとクエリに 適する ベクトル検索対応 世界初サーバレスベクトル検索 特徴
  13. 16 Cosmos DB for NoSQL ベクトル検索 アルゴリズム 説明 最大次元 Flat

    (KNN) 格納されているすべてのデータ点との類似度を計算し、類似度に基 づいて結果を返却。データセットで最も類似度が高いベクトルを見 つけることが保証されている 505 Quantized Flat 量子化(圧縮)されたベクトルが格納されており、Flatよりも高速で RUコストも低くなる。すべてのデータ点との類似度を計算するが、 Flatに比べるとベクトルが圧縮されているため、精度は100%よりも わずかに下回る可能性あり 4096 DiskANN(Preview) 高い精度を維持しながら、最短の待機時間、最高のスループット、 最小のRUコストを実現する検索手法。Microsoft Researchによっ て開発されており、Microsoft 365やBingの裏で使われている。Flat やQuantized Flatよりも精度は低くなる傾向 4096 SELECT c.title, VectorDistance(c.contentVector, [1,2,3]) AS SimilarityScore FROM c ORDER BY VectorDistance(c.contentVector, [1,2,3]) 検索クエリ 検索手法 ベクトル ストア - Azure Cosmos DB for NoSQL | Microsoft Learn 24年5月のBuildで発表
  14. 17 結局ベクトルDBどれ使えばいい? Azure Database for PostgreSQL (flex) Azure SQL Database

    Azure Cosmos DB for MongoDB (vCore) Azure Cosmos DB for NoSQL Azure Cosmos DB for PostgreSQL Azure AI Search 頻繁にベクターデー タを挿入/更新/削除 し、検索結果が常に 最新である必要があ るか ANNベクターイン デックスを備えた ベクターデータ型 が必要か ワークロードが MPPアーキテ クチャが必要か コスト最適化が最優先か RDMSが好みか NoSQLが好みか MongoDBに精通し ているか 高品質で高度な検索 機能を利用したいか 非構造化データのイ ンデックスが必要か 最大3,072次元のベクターを高 パフォーマンスで扱う必要か ベクトル検索用の Azure サービスを選択する - Azure Architecture Center | Microsoft Learn YES No YES No No No YES YES YES YES No YES YES YES No YES No No Start 高度な検索機能 非構造化データ サーバレス
  15. 18 アーキテクチャ App Service Document Intelligence フロントエンド Functions オーケストレータ Azure

    OpenAI GPT-4o ベクトルストア Cosmos DB for NoSQL Text-embeddings-ada-002 ドキュメント ユーザ Azure テキスト抽出 チャンク分割 ベクトル化 質問 質問 検索 検索結果 質問+検索結果 回答 回答 回答 Streamlit LangChain
  16. 19 Azure OpenAI Service の特長 APIでOpenAIモデルの 機能を提供 エンドポイントへのリクエストを投げるだけで生成・Fine tuningが可能。 API仕様やライブラリも基本はOpenAI社のAPIと共通化されている。

    SLA・サポート付きの提供 99.9%以上の稼働率を保証するSLAを既定し、Azureのサポートサービスが利用可能 Licensing Documents (microsoft.com) コンテンツフィルタ 有害な表現、LLMの乗っ取り、既存のコードやテキストの検知 Azure OpenAI Service でコンテンツ フィルター (プレビュー) を使用する方法 - Azure OpenAI | Microsoft Learn Azure OpenAI Service データ+ リクエスト 生成結果 システム エンドポイント 本番・エンタープライズレベルでOpenAIモデルの機能をAPIで提供するサービス GPT Microsoft Entra ID認証 キー以外にMicrosoft Entra ID (旧Azure AD)による認証機能が使用可能 Azure AI サービスでの認証 - Azure AI services | Microsoft Learn プライベートネットワークとの統合 仮想ネットワーク内に閉じた高セキュリティなリクエストの構成が可能 Azure AI サービスの仮想ネットワークを構成する - Azure AI services | Microsoft Learn OpenAIが提供するAPIと 基本機能はほぼ同等 マルチリージョン対応 日本含む多数リージョンで利用可能。分散化による可用性確保や潤沢なRate Limitを確保 Azure OpenAI Service のクォータと制限 - Azure AI services | Microsoft Learn メトリックログ監視 リクエストに関するログ監視の仕組みを備えている Azure OpenAI Service の監視 - Azure AI services | Microsoft Learn スループットの事前購入 PTUの事前購入で安定したスループットを確保 プロビジョニング スループット ユニット (PTU) のオンボード - Azure AI services | Microsoft Learn RAGアプリのローコードデプロイ Azure AI Searchと組み合わせたRAGの仕組みの迅速な開発やチャットUIのデプロイが可能 Azure OpenAI Service で独自のデータを使用する - Azure OpenAI | Microsoft Learn GPT-4Vの日本語の読み取り対応 Azure AI Serviceと組み合わせた拡張機能で高度なOCRやビデオ解析までが可能 GPT-4 Turbo with Vision モデルを使用する方法 - Azure OpenAI Service | Microsoft Learn 著作権コミットメント 一定の使用条件を満たした場合、出力コンテンツに関連する特定の第三者の知的財産権の 請求からお客様を守る。購入者の著作権侵害の義務付けに必要な軽減策 |Microsoft Learn 本番サービスで運用しやすい 付加機能を充実
  17. 20 GPT-4o : OpenAIの新しいフラグシップマルチモーダルモデル マルチモーダル対応 速いレスポンス コスト効率化 • 音声入力に対してわずか 232ミリ秒、平均で320ミリ

    秒で応答することが可能 • これは人間の会話に非常 に近い応答速度であり、リ アルタイムのコミュニケーショ ンをサポート • GPT-4oはGPT-4 Turbo に比べて ✓ 2倍の速さ ✓ コストは半分 ✓ Rate Limit:5倍 多言語に対応 • GPT-4oは英語以外の 言語においても大幅な 性能向上 • 日本語や中国語を含む 20言語でトークナイザーが 改善され、トークン使用量 が圧縮。日本語は約30% トークン圧縮 • テキスト、音声、画像の 組み合わせを入力として 受け取り、それらを組み合 わせで出力を生成 • 音声感情付加や背景音、 複数の話者の情報も 正確に認識し、表現可能 マルチモーダルモデルは、テキスト、ビジョン、およびオーディオ機能を統合しており、生成および対話型AI体験の新しい基準を設定します GPT-4oは、テキストと画像のサポートを含むプレビューでAzure OpenAIサービスで利用可能 Hello GPT-4o | OpenAI
  18. 24 まとめ App Service Document Intelligence フロントエンド Functions オーケストレータ Azure

    OpenAI GPT-4o ベクトルストア Cosmos DB for NoSQL Text-embeddings-ada-002 Azure テキスト抽出 チャンク分割 ベクトル化 質問 質問 検索 検索結果 質問+検索結果 回答 回答 回答 Streamlit LangChain ・サーバレス ・ストリーミング処理 ・サーバレス ・ベクトル検索 ・早い ・従来より安い 是非この機会にAzureを触ってみてください!