Skip to content

検討: Azure Functions(Python 3.11)で実装する「おすすめセッション自動応答」システムの技術課題整理 #1

@takashiuesaka

Description

@takashiuesaka

概要

以下のフローを実現するための技術的検討事項を整理し、実装方針と受け入れ基準を決める。

システムフロー(要件)

  1. 定期実行する Azure Functions (Python 3.11) が、問い合わせ内容を保管している(公開された)リソースの Web API にアクセスして問い合わせ内容を取得する。
  2. 取得した問い合わせ内容を Queue に格納する。
  3. Queue への格納をトリガーとする Azure Functions を用意し、社内の検索エンジン(Web API)に問い合わせを行い、おすすめセッションを検索する。社内検索は今回はダミー API を用意する。
  4. 検索結果から応答メッセージを生成する際に AOAI (Azure OpenAI) を使用する。
  5. 生成した応答を別の Queue に格納する。
  6. 応答を格納した Queue のイベントをトリガーにする Azure Functions が、社内のメール送信用 Web API(ダミー)へ POST してメール送信する。

前提・制約

  • 言語: Python 3.11
  • 社内検索 API と メール送信 API はダミーで実装して検証する。
  • AOAI(Azure OpenAI)を利用する想定。テナントでの利用可否・割当や料金は別途確認が必要。
  • セキュリティを考慮し、Azure Functions, Azure OpenAI Servciesは全て Private 化する。
  • Azureリソース間の接続はManaged ID を採用する。その場合にAzure FunctionsのActionを使う方法、SDKを使用する場合のどちらが良いのか検討が必要。
  • Azure FunctionsはFlex Consumptionsによるホスティングを前提とする。

検討すべき技術項目(優先順位付き)

  1. Azure Functions の実行スケジュール

    • TimerTrigger(定期起動)の採用。
    • 導入環境: Consumption / Premium / App Service どれを想定するか(スケーラビリティ / コールドスタート / コストのトレードオフ)。
  2. キュー選定

    • Azure Service Bus vs Azure Storage Queue の比較(メッセージ順序、セッション、デッドレター、ロック/再試行の要否)。
    • メッセージスキーマ(JSON フィールド: id, source, created_at, payload, retries など)。
  3. 認証とネットワーク

    • 社内 API はPublic。VNet 内にあるAzure Functionsからのアクセスに問題はないか。
    • 認可方式(Managed Identity / OAuth2 Client Credentials / API Key)と KeyVault によるシークレット管理。
  4. AOAI 利用時の考慮点

    • レイテンシ・コスト・レート制限。
    • 最大トークン数やモデル選定(gpt-series 等)。
    • プロンプト設計と安全性(個人情報フィルタリング)。
    • 機密情報の取り扱い(送信前に匿名化/マスキングが必要か)。
  5. エラーハンドリングと再試行

    • キューの再試行ポリシー、DLQ(デッドレターキュー)設計。
    • idempotency(重複処理対策)、リクエスト ID の扱い。
  6. ロギング・監視・トレーシング

    • Application Insights でのトレース、関数ごとのメトリクス、AOAI 呼び出しのサンプリング。
  7. 開発・テスト戦略

    • ローカル実行のためのダミー Web API(検索・メール)を用意。
    • 単体テスト、統合テスト(関数間のキュー挙動を含む)。
    • CI/CD(GitHub Actions)でのデプロイパイプライン案。
  8. デプロイと構成管理

    • ARM / Bicep / Terraform の選定。
    • 設定(KeyVault, App Settings, Managed Identity)をコードで管理する方針。

受け入れ基準(PoC レベル)

  • Azure 上でPrivate化した環境を構築し、以下の内容を確認する

  • Private化したAzure Functionsから外部Public Endpointへのアクセス

  • Azure Functions (Python 3.11) の Timer トリガー関数がダミー公開 API から問い合わせを取得し、Queue にメッセージを入れる。

  • Queue トリガー関数がダミー検索 API に問い合わせて検索結果を取得し、AOAI(モックまたは実 API)を使って応答文を生成し、応答 Queue に格納する。

  • 応答 Queue のトリガー関数がダミーのメール送信 API に POST してメール送信を模擬できること。

  • ロギングと基本的なエラーハンドリング(再試行/DLQ)が動作すること。

  • 大量データに対するLoad Testingを実行し、Flex Consumptionのスケーリング能力を確認する。

  • テスト(ユニット+簡易統合)

備考

  • 本 Issue は技術的検討を目的とする。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions