「マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
目次 †
概要 †
生成 AI アプリを開発 †
https://learn.microsoft.com/ja-jp/training/paths/create-custom-copilots-ai-studio/
計画と準備 †
https://learn.microsoft.com/ja-jp/training/modules/prepare-azure-ai-development/
- AI 機能
- 生成AI ≒ LLM
- (LLM)エージェント
- 画像処理、音声処理、(NLP)自然言語処理
- 情報抽出(OCRやDocument Intelligence、構造化出力)
- 意思決定支援(BI/AI、データ・アナリシス)
- LLM関連キーワード:LLM、SLM、自然言語処理、マルチモーダル、エージェント、構造化出力
- Available Foundry Tools
(事前構築済みの拡張ツール群)
- OpenAI
- Vision、Speech、Language、Translator
- AI Face、AI Custom Vision
- Document Intelligence
- Content Understanding
- Microsoft Foundry Content Safety
- AI Search
- 鋳造所プロジェクト
- Microsoft Foundryのモデル、Agent Service
- Tools、評価と責任ある AI 開発のためのツール
- ハブベースのプロジェクト
- 鋳造所プロジェクトを含む
- Prompt Flow、ファインチューニングなど
- Azure Storage と Azure Key Vaultを含む
- プログラミング言語、API、SDK
- Microsoft Foundry SDK(統合的利用)
- Foundry Tools SDK(個別利用)
- Microsoft Foundry Models API
- Microsoft Foundry Agent Service
- Foundry ポータルへサインイン
- プロジェクトの作成
- モデル選択とプロジェクト作成
- モデルのデプロイ
- プロジェクトの初期画面のplaygroundでテスト
- 管理センターでリソースを確認
- 左ナビゲーションから Management center を開く。
- Foundry リソースとプロジェクトの構成を確認。
- リソースグループへで作成された Azure リソースを確認。
- プロジェクトのエンドポイントとキーを確認
- Foundry プロジェクト
- デプロイ済みモデル
- Azure OpenAI / Azure AI Services
- モデルの動作確認(Chat Playground)
- 左メニューの Playgrounds → Chat を開く。
- デプロイした gpt‑4o が選択されていることを確認。
- Setup ペインでシステムメッセージを設定:
- 例としてプロンプトを入力し、応答を確認。
- クリーンアップ(課金防止)
- Azure Portal で、演習で使用したリソースグループを開く。
- Delete resource group を実行し、すべての関連リソースを削除。
モデルの選択・デプロイ †
https://learn.microsoft.com/ja-jp/training/modules/explore-models-azure-ai-studio/
- LLM系ユースケース
- 音声:テキスト変換・テキスト読上
- 機械翻訳
- テキスト分類
- エンティティ抽出
- テキストの要約
- 質問の回答
- 理由の解説
- タスクの種類
- モダリティ、ツール
- 地域固有およびドメイン特化のモデル
- 精度/オープン性
- オープン モデルと独自モデルの間で柔軟性とパフォーマンスのバランスを取る
- 精度・パフォーマンスでモデルをフィルター処理
- デプロイ
- 大規模/小規模
- パフォーマンス(必要になるリソース的な意味で)
- パフォーマンスのベンチマーキング
- 精度:0/1なので主には分類問題
- 一貫性:人間の言語に近いか?
- 流暢さ:自然に聞こえるか?
- グラウンデッドネス:検証データで入出力のアラインメントを測定
- GPT類似性:検証データで出力のセマンティック類似性を定量化
- 品質インデックス:0-1 の比較集計スコア
- 費用:トークンあたりの価格
- スケーリング
プロトタイプをスケーリングする際の考慮事項
- モデルのデプロイ
- モデルの監視と最適化
- プロンプト管理
- モデルライフサイクル
- デプロイ オプション
Microsoft Foundry を使用して言語モデルをエンドポイントにデプロイする
- 標準デプロイ: Microsoft Foundry プロジェクト リソースでホスト
- サーバーレス コンピューティング: Microsoft Foundry ハブ プロジェクトの Microsoft が管理する専用サーバーレス エンドポイントでホスト
- マネージド コンピューティング: モデルは、Microsoft Foundry ハブ プロジェクトのマネージドVMでホスト
| サポート・モデル | ホスティング | 課金基準 |
| 標準 | Foundry モデル | Foundry リソース | トークン |
| サーバーレス | Hub内のリソース |
| マネージド | OSS、カスタム | コンピューティング |
- プロンプト・エンジニアリングで出力最適化
プロンプト・パターンを適用してモデルの出力を最適化する
- (システム プロンプトで)モデルにペルソナを指示
- (システム プロンプト、ユーザー プロンプトで)モデルをガイド
- (システム プロンプト、ユーザー プロンプトで)出力形式を指定
- (システム プロンプトで)モデルに理由を求める。
- (ユーザー プロンプトで)モデルにコンテキストを追加。
- モデル最適化戦略
RAGとファインチューニングがある。
- Foundryプロジェクト作成
- gpt-4o の Overview から Use this model
- プロジェクト作成(ファウンドリーリソース名、サブスクリプション/リソースグループ/リージョン
- gpt-4o を 自動デプロイ、TPM(Tokens Per Minute)制限を設定(50K)
- デプロイ・テスト
- gpt-4o
- Phi-4-reasoningを追加でデプロイ(考え方の明示が得意)
- クリーンアップ(課金防止)
- Azure Portal で、演習で使用したリソースグループを開く。
- Delete resource group を実行し、すべての関連リソースを削除。
※ モデルのデプロイの一例はコチラを参考にできる。
Microsoft Foundry SDK †
https://learn.microsoft.com/ja-jp/training/modules/ai-foundry-sdk/
- Microsoft Foundry SDK とは
- プロジェクト接続を操作する
- チャット クライアントを作成
- Foundry プロジェクトに GPT‑4o をデプロイ
- クライアントアプリの準備(Cloud Shell)
- GitHub リポジトリを clone
- Python 仮想環境を作成し、必要なライブラリをインストール
- .env ファイルを編集し、エンドポイント・モデル名を設定
- az login して python chat-app.py する方式。
- クリーンアップ(課金防止)
- Azure Portal で、演習で使用したリソースグループを開く。
- Delete resource group を実行し、すべての関連リソースを削除。
プロンプト フロー †
https://learn.microsoft.com/ja-jp/training/modules/get-started-prompt-flow-ai-studio/
- 初期化
- 目的定義
- サンプル データセットを収集
- 基本的なプロンプトを作成
- フローを設計
- 3つのツール
- LLM ツール
- Python ツール
- プロンプト ツール
- ランタイム
Python コードや LLM 呼び出しを実行するための計算環境
- 接続
・種類(Azure OpenAI、OpenAI、Azure AI Search、Serp、Custom)
・探索(権限付与して接続、キーはAzure Key Vault二格納)
- バリエーション(連続的)とバリアント(離散的)
- LLM ツールでサポートされ以下の利点がある。
- LLM生成の品質向上:LLMノード の バリエーション(プロンプトと設定)
- 生産性の向上:バリエーションの迅速な作成・管理・適用
- 時間と労力を節約:プロンプト バージョン の バリアント
- 簡単な比較:結果を並べて比較し最も効果的なバリアントを選択
- デプロイ後の評価メトリックの監視オプション
- 整合性: 出力が入力または追加コンテキストとどの程度一致しているかを測定
- 関連性: 出力が特定の入力にどの程度関連しているかを評価
- 一貫性: 出力テキストの論理フローと読みやすさを評価
- 流暢性: 出力テキストの文法と言語の精度を評価
- 類似性: 推論値と正解値のコンテキストとセマンティックの一致を定量化
- Foundry ハブとプロジェクトの作成(基盤準備)
- Prompt flow 機能は ハブ ベースの Project が必須
- リージョンは East US 2 / Sweden Central 推奨(Quota 回避)
- リソース認可設定(Blob Storage へのアクセス)
- プロンプト フロー は ファイル(YAML/フォルダ)として Blob に保存
- 読み取り権限がないと、プロンプト フロー 作成・実行時にエラーに
- 生成 AI モデル(GPT-4o)のデプロイ
- 「デプロイ済みモデル」を参照
- 保護のためTPM(Tokens Per Minute)を設定
- プロンプト フロー作成(チャットフロー定義)
- 「入力 → LLM → 出力」という 会話フロー
- Inputs:question(今回のユーザ発話)、chat_history(過去の会話)
- Chat LLM tool:Azure OpenAI(gpt-4o)を呼び出す
- Outputs:assistant の回答
- プロンプト設計(会話文脈の組み込み)
system メッセージ、chat_history をループで展開し再投入
- フローのテスト(Chat UI)
- デプロイ前でも 即時対話テスト可能
- プロンプト調整 → 即再実行、という試行錯誤が可能
- フロー・デプロイ(API 化)
- 作成したプロンプト フローを 外部アプリから呼べる API にする
- Testペインで再テスト、Consumeペインから接続情報、サンプルコード取得実行
- クリーンアップ(課金防止)
- Azure Portal で、演習で使用したリソースグループを開く。
- Delete resource group を実行し、すべての関連リソースを削除。
RAG ベースのソリューション †
https://learn.microsoft.com/ja-jp/training/modules/build-copilot-ai-studio/
- グラウンディングという単語が使用されるが、コレは、生成を外部の事実に接地させる事。
- グラウンディング データの追加
- Azure Blob Storage
- Azure Data Lake Storage Gen2
- Microsoft OneLake?
- 検索インデックスにAzure AI Search の以下のを使用して統合
- キーワード検索
- セマンティック検索(ベクトル検索)
- ハイブリッド検索(キーワード+セマンティック)
- インデックスを定義
- WebAPIからRAGを使用
- プロンプト フローからRAGを使用
- RAG に必要な 2 種類のモデルをデプロイ
- Embedding モデルと生成モデル
- Global Standard デプロイで、TPM(Tokens Per Minute)を抑えめに設定
- 独自データ(PDF)をプロジェクトに追加
- 旅行会社の架空パンフレット(PDF)をローカルにダウンロード
- Foundry の Data + Indexes からフォルダごとアップロード
- データセット名を brochures(パンフレット)として登録
- Azure AI Search によるベクトルインデックス作成
- 新規 Azure AI Search リソースを作成し接続
- Embedding モデルとして text-embedding-ada-002 を指定
- brochures データを元に ベクトル検索対応インデックス:brochures-indexを作成
- Playground で RAG の効果を確認
- gpt-4o を使用しデータ未接続で質問 → 一般的な回答
- 次に ハイブリッド検索に設定したbrochures-indexを接続
- 同じ質問を再実行 → PDF内容に基づいた回答に変化
- クリーンアップ(課金防止)
- Azure Portal で、演習で使用したリソースグループを開く。
- Delete resource group を実行し、すべての関連リソースを削除。
ファインチューニング †
https://learn.microsoft.com/ja-jp/training/modules/finetune-model-copilot-ai-studio/
- RAG vs FT
プロンプト エンジニアリングではダメな場合はFT
- 種類
- システム メッセージ
- ユーザー メッセージ
- アシスタントの応答
- 留意点
- 個人情報や機密情報はすべて削除する。
- 大規模なトレーニング データセットを作成する。
- データセットに多様なサンプル セットを含める。
- 基本モデル選択の考慮点
- モデルの機能
- トレーニング データ
- 制限と偏り
- 言語サポート
- FTジョブ構成
- 基本モデルを選択
- トレーニング データ選択
- 検証データ選択(省略可能)
- 詳細オプションを構成
- バッチサイズ
- 学習率
- エポック数
- シード(再現性を制御)
- Foundry プロジェクトに GPT‑4o をデプロイしてChat Playgroundでテスト(指定のRegion)
- クリーンアップ(課金防止)
- Azure Portal で、演習で使用したリソースグループを開く。
- Delete resource group を実行し、すべての関連リソースを削除。
責任ある生成 AI ソリューションの実装 †
https://learn.microsoft.com/ja-jp/training/modules/responsible-ai-studio/
※ PMP:計画 - リスク - 開発基盤部会 Wiki
- NIST AI Risk Management Frameworkの機能に密接に対応したリスク計画
- 生成された出力に存在する「リスクの脅威の損害」を測定
- 損害の発生・影響を最小限に抑え、ユーザーにコミュニケーションを確保。
- デプロイと運用の準備計画を定義して従うことで、ソリューションを責任を持って管理。
- 潜在的な損害をマップ
- 潜在的な損害を特定
- 特定された損害に優先順位を付ける
- 優先順位付けされた損害をテストして検証
- 検証済みの損害を文書化して共有
- テスト
- 推論を繰り返し、出力を分類、潜在的な損害を測定。
- 手動テストと自動テストでシナリオ検証する。
- モデル レイヤー
- 適切な(サイズ、事前学習)ポテンシャルのベースモデルを使用し
- 適切にファインチューニング学習しシナリオのスコープに適合したモデル
- 安全システムレイヤー
- コンテンツ フィルター:4 カテゴリ(ヘイト、性的、暴力、自傷行為)、4 重大度レベル (安全、低、中、高) に分類
- 不正使用検出アルゴリズム、迅速な対応を可能にするアラート通知
- コンテキスト・レイヤー
- モデルの動作パラメタ
- システム・プロンプト
- RAG
- プレリリース レビューを完了する
- ソリューションをリリースして操作する
- Microsoft Foundry Content Safety
- プロンプト・シールド:入力攻撃のリスクをスキャン
- 根拠性検出:出力が入力に固定されているかどうかを検出
- 保護されたマテリアルの検出:既知の著作権で保護されたコンテンツをスキャン
- カスタム カテゴリ:新しいまたは既知のパターンのカスタム・カテゴリを定義
- Foundry プロジェクトにモデルをデプロイしてChat Playgroundでテスト
- 既定のコンテンツ・フィルターの挙動確認(自傷に関する質問/銀行強盗の計画/差別的ジョーク)
- 「完全には防げないケースがある」ことを確認しカスタム・コンテンツ・フィルターの作成
- 潜在的な損害を軽減
- カスタム・コンテンツ・フィルター:4カテゴリすべて最高ブロックレベルに設定
- Prompt Shield(不正使用検出アルゴリズム)も有効化
- 既定のコンテンツ・フィルターより強力な安全制御が働くことを確認
- クリーンアップ(課金防止)
- Azure Portal で、演習で使用したリソースグループを開く。
- Delete resource group を実行し、すべての関連リソースを削除。
パフォーマンス評価 †
https://learn.microsoft.com/ja-jp/training/modules/evaluate-models-azure-ai-studio/
- ベンチマーク
- カタログ・スペック的な意味での
- 項目:精度 / 一貫性 / 流暢性 / GPT 類似度
- 手動評価
- モデルをデプロイしてChat Playgroundでテストする。
- 人間により関連性 / 情報の質・量 / エンゲージメント などを評価する。
- 「モデル、パラメタ」「システム メッセージ、ユーザー メッセージ」を変更する。
- AI支援メトリック
・一般的な品質:ベンチマークの項目と同じ
・リスクと安全性:コンテンツ・フィルターの項目と同じ
- 自然言語処理メトリック
F1スコア、BLEU、METEOR、ROUGE
- Foundry ハブのプロジェクトにモデルをデプロイ
- 手動評価
- JSONLをダウンロード&アップロード
- Question、ExpectedResponse?にマッピング
- 人間が結果を評価する。
- 自動評価
- 評価タイプ:Evaluate a model
- JSONLをダウンロード&アップロード
- 使用する評価指標を追加
- 評価結果確認(Metricsタブ:全体、Dataタブ:レコード毎)
- クリーンアップ(課金防止)
- Azure Portal で、演習で使用したリソースグループを開く。
- Delete resource group を実行し、すべての関連リソースを削除。
AI エージェントを開発 †
https://learn.microsoft.com/ja-jp/training/paths/develop-ai-agents-on-azure/
AzureのAIエージェント開発 †
https://learn.microsoft.com/ja-jp/training/modules/ai-agent-fundamentals/
- シナリオ:単一エージェント、マルチ・エージェント
- AI エージェントとは:コチラ
- 経費エージェント
ユーザーの請求可能な経費に関する質問を受けRAGりつつLLMに送信し経費請求を生成
- 経費ポリシー情報を含む ナレッジ ストアをRAGる。
- プログラム関数を実行して経費明細書を自動的に送信する。
- ビジネス ルールと請求金額に基づいて適切な承認者を知らせる。
- 旅行代理店マルチエージェント
ユーザーの旅行詳細からフライトとホテルを予約し、経費エージェントで出張費の経費請求
- 外部の旅行サービスAPIを通じてフライトやホテルを予約
- 適切な領収書を使用して、経費エージェントを通じて経費請求を開始
- 手動による介入なしで、旅行予約と経費申請のワークフロー全体を完了
- リスクと保護
- データとプライバシーの漏洩:機密データが外部に公開されるのを防ぐための適切な制御が不足
- プロンプト・インジェクションとマニピュレーション攻撃:悪意のあるユーザーの意図した動作を超過させる入力
- 未承認のアクセスと特権のエスカレーション:アクセス制御が弱く意図したスコープを超えてアクションを実行
- データ・ポイズニング:学習またはRAGのデータをハッキングし安全でない出力させた。
- サプライ・チェーンの脆弱性:外部ツールの脆弱性がワークフローに影響を与えた。
- 自律的なアクションへの過度の依存:検証や監視なしで不適切なアクションを実行。
- 監査性とログ記録が不十分:データ・アクセスしたか、何時、誰がアクセスしたかを把握できない。
- モデル反転と出力漏れ:モデルの出力から学習データの内容を逆算し復元、モデルが本来出力すべきでない情報を出力
- セキュリティ保護のベスト プラクティス
- アクセスを厳密に制御する:RBAC と 最小限の特権のアクセス許可
- すべての入力を検証する:インジェクション攻撃をキャッチしてブロックする フィルターとバリデーションのレイヤーを追加
- 人間の監視を追加:機密性の高い操作を人間が関与する承認でセーフガード
- すべてを追跡する:包括的なログ記録と追跡可能性を維持
- サプライ・チェーンを監視:サードパーティの依存関係と統合を定期的に監査
- モデルを正常な状態に保つ:モデルを継続的に再トレーニングして検証
- ナレッジとして文書(docx)を追加、ツールとしてコード・インタプリタを追加
- 経費請求テキスト ファイルはコード・インタプリタで準備し、ダウンロードできるようにリンクを提供
- エージェントの実行
- Playground 上で会話テスト
- [コード]タブのサンプル コードを取得してVS Code Web で実行可能。
- クリーンアップ(課金防止)
- Azure Portal で、演習で使用したリソースグループを開く。
- Delete resource group を実行し、すべての関連リソースを削除。
Microsoft Foundry Agent Service †
https://learn.microsoft.com/ja-jp/training/modules/develop-ai-agent-azure/
- ユース ケースの例:
自動化、意思決定など
- 個人生産性
- リサーチャー
- デベロッパー
- セールス
- カスタマー サービス
- 機能
- 自動ツール呼び出し
- 安全に管理されたデータ
- すぐに使用できるツール
- モデルの選択
- エンタープライズ レベルのセキュリティ
- カスタマイズ可能なストレージ ソリューション
- 基本セットアップ
Azure AI ハブ、Azure AI プロジェクト、Foundry Tools リソース
- 標準セットアップ
基本セットアップに加えて、Azure Key Vault、Azure AI Search、Azure Storage。
- ナレッジ
- Bing検索
- ファイル検索(VDB)
- Azure AI Search
- Microsoft Fabric
- アクション
- コード・インタプリタ
- カスタム関数
- Azure Functions
- OpenAPI3.0(WebAPI)
- セキュリティ リスク(既出)
- アプリ開発(演習を参照)
- agent.py にコードを追加
- インポートの追加:AgentsClient?、CodeInterpreterTool? などを読み込む。
- Foundry プロジェクトへ接続:DefaultAzureCredential? を使って認証。
- コード・インタプリタがアップロード・ファイル(リソース)を参照できるように。
- プロンプト
・Instructions:あなたは、アップロードされたファイル内のデータを分析するAIエージェントです。必要に応じてPythonを使用して統計指標を計算します。
・ToolsのResource:以下が書かれたファイル(data.txt)
Category,Cost
Accommodation, 674.56
Transportation, 2301.00
Meals, 267.89
Misc., 34.50
・チャットに入力するプロンプト例~
・最もコストが高いカテゴリーは何ですか?~
・カテゴリ別にコストを示すテキストベースの棒グラフを作成する~
・コストの標準偏差はいくらですか?
- 開始処理
・会話スレッドの作成
・エージェントにプロンプトを送信
- 終了処理
・実行ステータスで失敗を確認
・エージェントの最後のメッセージを表示
・会話スレッドからメッセージを時系列で表示
・不要になったエージェントとスレッドを削除
- Azure にログインしてアプリを実行
az login
python agent.py
- エージェントと対話し、データ分析を実行
コード・インタプリタを使って Python を実行し、統計値やチャートを生成。
- クリーンアップ(課金防止)
- Azure Portal で、演習で使用したリソースグループを開く。
- Delete resource group を実行し、すべての関連リソースを削除。
VSC の Microsoft Foundry 拡張機能 †
https://learn.microsoft.com/ja-jp/training/modules/develop-ai-agents-vs-code/
- Visual Studio Code 用の Microsoft Foundry 拡張機能を使用したエージェント開発
- 機能:以下の統合エクスペリエンスを提供
- エージェントの検出と管理
- エージェント デザイナ(直感的デザイナ→YAML)
- ツールの追加(ツール ライブラリ、MCPサーバー)
- 統合テスト - 組込プレイグラウンドでテスト
- デプロイ パイプライン - エージェントを直接デプロイ
- コード生成 - エージェントをアプリに統合するサンプルコードを生成
- VS Code に Foundry 拡張を入れ Azure にログインしてプロジェクトを作成。
- Foundry プロジェクトが作成される(ハブではない、エンドポイントのメモは不要)
- デザイナでエージェントを作成(名前/モデル/指示)、MCP ツールを追加
- エージェントを Foundry にデプロイして Playground で動作確認
- エージェントをアプリに統合するサンプルコードを確認(実行はしない)
- 会話履歴とスレッドを表示
- クリーンアップ(課金防止)
- Azure Portal で、演習で使用したリソースグループを開く。
- Delete resource group を実行し、すべての関連リソースを削除。
カスタム・ツールをエージェントに統合 †
https://learn.microsoft.com/ja-jp/training/modules/build-agent-with-custom-tools/
- Microsoft Foundry Agent Service で使用できるカスタム ツール オプション
- カスタム関数
- OpenAPI Specツール
- Azure Functions
- Azure Logic Apps
- user_functions.py にカスタム関数を実装
- support ticket を生成してファイル保存する関数
- submit_support_ticket() を追加。
- その関数を user_functions セットに登録。
- agent.py にコードを追加(コチラの演習とほぼ同様)
コードの違いは、user_functionsをインポートしてtoolsetに加える点。
- Azure にログインしてアプリを実行
az login
python agent.py
- エージェントと対話し、サポート回答をアプリフォルダで受信
- クリーンアップ(課金防止)
- Azure Portal で、演習で使用したリソースグループを開く。
- Delete resource group を実行し、すべての関連リソースを削除。
マルチエージェント・ソリューション †
https://learn.microsoft.com/ja-jp/training/modules/develop-multi-agent-azure-ai-foundry/
- 接続されているエージェント
- ツール化されたエージェントのようなもの
- 複雑なオーケストレーションなしで、モジュール式のマルチエージェント・システムを簡単に構築できる。
- 主エージェント
処理に最適な接続されたエージェントを決定し実行するオーケストレーターとして機能
- ユーザー入力の解釈
- 適切な接続済みエージェントの選択
- 関連するコンテキストと手順の転送
- 結果の集計または要約
- 接続されたエージェントの責任
- 接続済みエージェント
単一の責任ドメインに焦点を当て処理を実行するエージェントとして機能
- 明確なプロンプトに基づいて特定のアクションを完了する
- ツール (必要な場合) を使用してタスクを完了する
- メイン エージェントに結果を返す
- agent_triage.pyにコードを追加
- インポートの追加:AgentsClient?、CodeInterpreterTool? などを読み込む。
- Foundry プロジェクトへ接続:DefaultAzureCredential? を使って認証。
- 開始処理
・会話スレッドの作成
・エージェントにプロンプトを送信
- 終了処理
・実行ステータスで失敗を確認
・エージェントの最後のメッセージを表示
・会話スレッドからメッセージを時系列で表示
・不要になったエージェントとスレッドを削除
- エージェントと対話し、サポート回答をアプリフォルダで受信
- クリーンアップ(課金防止)
- Azure Portal で、演習で使用したリソースグループを開く。
- Delete resource group を実行し、すべての関連リソースを削除。
MCP ツールをエージェントに統合 †
https://learn.microsoft.com/ja-jp/training/modules/connect-agent-to-mcp-tools/
- MCP(Model Context Protocol)?
- 利点
- 動的ツール検出:パッケージマネージャ的(スケーラビリティ/モジュール性/保守容易性/柔軟性)
- LLM 間の相互運用性:さまざまな大きな言語モデル (LLM) とシームレスに連携
- 標準化されたセキュリティ:API ごとに個別のキーまたは認証プロトコルを管理する必要がない。
- MCPサーバとMCPクライアントを使用してエージェント ツールを統合
- MCP サーバ:エージェントが使用できるツールのレジストリとして機能
- MCP クライアント:MCP サーバと エージェント間のブリッジとして機能
- MCP サーバから使用可能なツールを検出
- ツールをラップする Python 関数スタブを生成
- これらの関数をエージェントに登録
- ツールを Azure AI エージェントに登録する
- MCP サーバーは、@mcp.toolで修飾されたツール定義をホスト
- MCP クライアントは、サーバーへの MCP クライアント接続を初期化
- MCP クライアントは、session.list_tools()を使用して使用可能なツール定義をフェッチ
- 各ツールはsession.call_toolを呼び出すために非同期関数でラップされFunctionTool? にバンドル
- Microsoft Foundry Agent Service を使用して MCP サーバーに接続する場合
- ツール化
・server_label: MCP サーバーの ID
・server_url: MCP サーバーの URL。
・allowed_tools (省略可能): エージェントがアクセスを許可されている特定のツールの一覧。
- カスタム ヘッダー(コード)
・認証キー (API キー、OAuth トークン)
・MCP サーバーに必要なその他のヘッダー
- ツールの呼び出し
- サーバー ラベルと url を使用して McpTool? オブジェクトを作成
- update_headersを使用して、サーバーに必要なヘッダーを適用
- set_approval_modeを使用して、承認が必要かどうかを判断(always/never)
- ToolSet? オブジェクトを作成し、McpTool? オブジェクトを追加
- エージェントの実行を作成し、 toolset プロパティを指定
- 承認が必要な MCP サーバを呼び出す際
・requires_actionの実行状態が表示(ツール、渡される引数の詳細)
・ツールと引数を確認して、承認に関する十分な情報に基づいて決定
・承認を true に設定して、call_idを使用して承認をエージェントに送信
- agent_triage.pyにコードを追加
- インポートの追加:AgentsClient?、CodeInterpreterTool? などを読み込む。
- Foundry プロジェクトへ接続:DefaultAzureCredential? を使って認証。
- 開始処理
・会話スレッドの作成
・エージェントにプロンプトを送信
- 終了処理
・実行ステータスで失敗を確認
・エージェントの最後のメッセージを表示
・会話スレッドからメッセージを時系列で表示
・不要になったエージェントとスレッドを削除
- エージェントと対話し、サポート回答をアプリフォルダで受信
- クリーンアップ(課金防止)
- Azure Portal で、演習で使用したリソースグループを開く。
- Delete resource group を実行し、すべての関連リソースを削除。
Microsoft Agent Framework (MAF) †
https://learn.microsoft.com/ja-jp/training/modules/develop-ai-agent-with-semantic-kernel/
- オープンソース SDKで、-Azure以外に、OpenAI、Anthropicなどにも対応。
- Semantic Kernel(ワークフロー)とAutoGen>(エージェント)の長所を統合
- ツール開発のベスト プラクティス
- 明確な説明: AI が目的を理解するのに役立つ関数とパラメーターの明確で詳細な説明を記述
- 型の注釈: 適切な Python 型ヒントを使用して、予想される入力と出力の種類を指定
- エラー処理: 予期しない入力を適切に処理するための適切なエラー処理をツール関数に実装
- 意味のあるデータを返す: AI が応答で効果的に使用できるデータを関数が返すようにする
- 特定タスクに集中する: 1 つの関数で特定のタスクを処理するように各ツールを設計する
- エージェントの種類(概念的なもので、クラスではない)
- Microsoft Foundry Agent
- Chat Agent
- OpenAI Agent
- Anthropic Agent
- エッジ
- 直接エッジ
- 条件付きエッジ
- Switch-Case エッジ
- Fan-Out エッジ
- Fan-In エッジ
- イベント(監視とデバッグ)
- WorkflowStartedEvent? :ワークフローの実行が開始されたとき
- WorkflowOutputEvent?:ワークフローが出力を生成するとき
- WorkflowErrorEvent?:エラーが発生したとき
- ExecutorInvokeEvent?:Executor がタスクの処理を開始したとき
- ExecutorCompleteEvent?:Executor が作業を完了したとき
- RequestInfoEvent?:外部要求が発行されたとき
- agent-framework.pyにコードを追加
- インポートの追加:AgentsClient?、CodeInterpreterTool? などを読み込む。
- 経費メール送信用の カスタムツール関数(send_email) を定義
- エージェントに経費データを渡して応答を取得するコードを追加
- エージェントと対話し(、data.txtの)、経費回答を受信
- クリーンアップ(課金防止)
- Azure Portal で、演習で使用したリソースグループを開く。
- Delete resource group を実行し、すべての関連リソースを削除。
MAF の マルチエージェント ソリューション †
https://learn.microsoft.com/ja-jp/training/modules/orchestrate-semantic-kernel-multi-agent-solution/
- DevOps マルチエージェント ソリューションの例
- モニタ エージェント:ログとメトリックを継続的に取り込み、自然言語処理 (NLP) を使用して異常を検出し、問題が発生したときにアラートをトリガー
- 根本原因分析エージェント:機械学習モデルまたは定義済みのルールを使用して、これらの異常を最新のシステム変更と関連付けて、問題の根本原因を特定
- 自動デプロイ エージェント:CI/CD パイプラインと対話してデプロイ スクリプトを実行し、修正プログラムの実装や問題のある変更のロールバック
- レポート エージェント:異常、根本原因、および解決策を要約した詳細なレポートを生成し、電子メールまたはその他の通信チャネルを介して関係者に通知
- 重要な理由(可能な操作)
- 各エージェントに個別のスキル、責任、またはパースペクティブを割り当て
- 複数のエージェントからの出力を結合して、意思決定と精度を向上
- 各エージェントの作業が前の作業を基に進められるように、ワークフローのステップを調整
- コンテキストまたはルールに基づいてエージェント間で制御を動的にルーティング
- オーケストレーション パターン
- 順次:1 つのエージェントから次のエージェントへの出力を固定順序
- 同時:同じタスクを一度に複数のエージェントにブロードキャストし、結果を個別に収集。
- ハンドオフ:コンテキストまたはルールに基づいてエージェント間で制御を動的に転送
- グループ チャット:チャット マネージャーによって管理される複数のエージェント (および人間) 間の会話
- マゼンティック:特別なエージェント間で計画、委任、適応を行うマネージャー主導のアプローチ
- 統合オーケストレーション ワークフロー(デザイナUIらしい) の一般的なフロー
- エージェントを定義し、その機能を記述
- オーケストレーション パターンを選択して作成
- (必要に応じて、マネージャーエージェントを追加)
- (必要に応じて、 カスタム入力およびコールバックまたは変換を構成)
- ランタイムを開始して実行を管理
- タスクでオーケストレーションを呼び出し
- 非同期 の非ブロッキングの方法で結果を取得
- 実装の共通項
- AzureOpenAIChatClient? を設定し、AI サービス プロバイダーに接続
- create_agentでエージェントを定義
- Builder クラスでワークフローを定義
- participants() でエージェントを追加、
- build() でワークフローを構築する。
- ユースケース
- 特定の順序で実行する必要がある複数のステップで構成されるプロセス
- 各ステージで、次ステージが機能するために必要な重要な要素が追加
- ステージを同時に実行できないため、次々に実行する必要があるタスク
- コンテンツの下書き、レビュー、洗練など、段階的な改善が必要な状況
- アンチパターン
- 1 つのエージェントでタスク全体を効果的に実行できる。
- ステージは、品質に影響を与えることなく、独立して並列実行可能
- 順次実行では、初期段階で処理の停止や結果の修正方法が無い。
- 作業を順番に受け渡すのではなく、動的に共同作業する必要がある。
- 反復、バックトラッキング、または動的ルーティングが必要
- 実装
- チャット クライアントを作成
- エージェントを定義
- ワークフローを構築(SequentialBuilder?)
- ワークフローを実行(run_stream)
- ワークフロー イベントを処理(WorkflowOutputEvent?)
- 最後の会話を抽出
- ユースケース
- ブレーンストーミング
- 異なる推論方法の組み合わせ (アンサンブル推論)
- 投票またはコンセンサス (クォーラム) に基づいて意思決定
- 速度が重要なタスク(並列で実行すると待機時間が短縮)
- アンチパターン
- 互いの作業に基づき、特定順序の共有コンテキストに依存
- 結果の競合や矛盾を解決する明確な方法が無い。
- 共有コンテキストを確実に調整できない。
- 厳密な一連の手順または予測可能で反復可能な結果が必要
- モデルの使用クォータなどのリソース制限がある場合
- 結果を組み合わせると複雑になりすぎたり、全体的な品質が低下したりする。
- 実装
- チャット クライアントを作成
- エージェントを定義
- ワークフローを構築(ConcurrentBuilder?)
- ワークフローを実行(run)
- 結果を処理する(get_outputs)
- 集計された応答を処理
- ユースケース
- 創造的なブレーンストーミング
- 議論と合意から利益を得る意思決定
- 学際的な対話が必要な複雑な問題
- 複数の専門家の視点を必要とする
- 作成とレビューを明確に分離
- アンチパターン
- 単純なタスク委任または単純な線形パイプラインで十分
- リアルタイムの速度要件でオーバーヘッドが非現実的
- 階層型または確定的なワークフローは、ディスカッションなしで必要です
- チャット マネージャーは、タスク完了タイミングを明確に判断できない
- エージェントが多く会話フローの管理が複雑になりすぎる。
- 実装
- チャット クライアントを作成
- エージェントを定義
- ワークフローを構築(GroupChatBuilder?)
- ワークフローを実行(run)
- 結果を処理する(get_outputs)
- 集計された応答を処理
- カスタマイズ(GroupChatManager?)項目と呼び出し順
・ユーザー入力を要求(should_request_user_input)
・会話を終了するタイミング(should_terminate)
・フィルタリングまたは要約(filter_results)
・次のエージェントの選択方法(select_next_agent)
- ユースケース
- 専門的な知識やツールが必要だが、エージェントの数や順序を事前に決定できない。
- 専門知識の要件は処理中に動的に発生し、コンテンツ分析に基づいてタスク ルーティングがトリガーされる。
- 複数ドメインの問題では、さまざまな専門家が順番に作業する必要がある。
- エージェントが制御をいつ、誰に転送するかを示すルールを定義できる。
- アンチパターン
- 関係するエージェントとその順序は事前に固定できる。
- タスク ルーティングは単純で静的なルールベース
- 動的なルーティングだと回答の品質が下がる。
- 複数の操作を同時に実行する必要がある。
- 無限ハンドオフループやバウンスの回避が困難。
- 準備
ワークフロー内でデータを安全かつ型付きで受け渡す。
・AI サービス接続用のチャットクライアントを作成
・Pydantic モデルで構造化 JSON 応答を定義
・ワークフロー間で共有するデータクラスを作成
・エージェントに response_format と JSON 出力命令を設定
- 特殊Executorの作成
ワークフローの各ステップで必要な処理を分離し流れを明確にする。
・入力ストレージ Executor:分類エージェントへ転送するメッセージを共有状態に保存
・変換 Executor:エージェントの JSON 応答を型付きのルーティング・オブジェクトへ変換
・ハンドラー Executor:ガード条件(条件関数)を使って分類結果ごとに個別の Executor を作成
- ルーティングロジックの構築
分類結果に応じて、次に呼び出すエージェントを切り替える条件チェッカーを生成するファクトリ関数を作成
・受信メッセージや分類結果を評価する条件を設計
・Case オブジェクトに条件を設定し、スイッチケース構造を構築
・予期しない分類結果のフォールバックとして必ず default ケースを用意
- ユースケース
- 事前に定義されたソリューション パスを持たない複雑またはオープンエンド
- 有効なソリューションを形成するには、複数の特殊なエージェントからの入力とフィードバックが必要
- システムは、人間のレビューのための文書化されたアプローチ計画を生成する必要がある。
- エージェントには、外部システムやリソースと直接やり取りできるツールがある。
- 動的に構築された実行プランは、タスクを実行する前に価値を追加。
- アンチパターン
- ソリューション パスは固定または確定的
- 計画を動的に作成する必要はない。
- より軽量なオーケストレーション パターンに十分にシンプル。
- 高速実行の計画が重視されるため、速度が優先される。
- 解決パスが明確でなくても、頻繁にストールまたはループが発生する可能性。
- 実装
- 特殊なエージェントを定義
- イベント処理コールバックを設定
- ワークフローを構築(MagenticBuilder?)
- 標準マネージャーを構成(最大ラウンド数、ストール数、リセット数)
- ワークフローを実行(run_stream)
- ワークフロー イベントを処理(WorkflowOutputEvent?)
- 最終的な結果を抽出する
- カスタマーサポート自動化
- 問い合わせトリアージ
- VOC(Voice of Customer)分析
- 問い合わせ→対応部署振り分け
- バグ報告や要望の整理
- agents.pyにコードを追加
- インポートの追加:AgentsClient?、CodeInterpreterTool? などを読み込む。
- オーケストレーションにデータを渡して応答を取得するコードを追加
- クリーンアップ(課金防止)
- Azure Portal で、演習で使用したリソースグループを開く。
- Delete resource group を実行し、すべての関連リソースを削除。
A2A を使用して Azure AI エージェントを検出 †
https://learn.microsoft.com/ja-jp/training/modules/discover-agents-with-a2a/
- エージェント間 (A2A) プロトコルの利点
- 強化されたコラボレーション
- 柔軟なモデル選択
- 統合認証
- 定義するエージェント スキル(特定の機能を記述)の主な要素
- ID :スキルの一意の識別子
- 名前:スキルを説明するための人が読みやすい名前。
- 説明:スキルの動作の詳細な説明。
- タグ:分類と検出を容易にするキーワード。
- 例 :実際のスキルを示すサンプル プロンプトまたはユース ケース。
- 入力/出力モード:データ形式またはメディアの種類
- 公開するエージェント カード(デジタル 名刺)の主な要素
- ID 情報: エージェントの名前、説明、およびバージョン。
- エンドポイント URL: エージェントの A2A サービスにアクセスできる場所。
- 機能: ストリーミングやプッシュ通知など、サポートされている A2A 機能。
- 入出力モード: エージェントが処理できるプライマリ メディアの種類。
- 認証のサポート: エージェントがアクセスに資格情報を必要とするかどうかを示します。
- スキル: 他のエージェントが呼び出すことができるエージェントのスキルの一覧。
- AgentExecutor? インターフェイスは、エージェントに送信されたすべての受信要求を処理
- ユーザーまたは他のエージェントによって要求されたタスクを実行
- 応答をストリーム配信するか、個々のメッセージをクライアントに送り返す
- サポートされている場合は、タスクの取り消しを処理
- 要求処理フロー
- A2Aエージェントにはコア ロジックを実装する小さなヘルパ クラスがある。
- Executor は要求を受け取り、エージェントのロジックを呼び出す。
- Executor は、結果をイベントとしてラップし、イベント キューに配置。
- ルーティング メカニズムは、イベントを要求元に送り返す。
- ホストによってできるようになること
- エージェント カードを介してその機能を公開、検出できるようにする。
- サーバーはエージェント・ロジックと外部の世界との間のブリッジとして機能
- 受信した A2A 要求を受信し、処理のために エージェント Executor に転送。
- ストリーミング応答やステートフルな対話など、タスクのライフサイクルを管理。
- エージェント カード
・エージェントの機能、スキル、入出力モードについて説明
・標準エンドポイント (通常は /.well-known/agent-card.json) で公開
- 要求ハンドラー
・着信要求を エージェント Executor の適切なメソッドにルーティング
・タスク ストアを使用してタスクのライフサイクルを管理。追跡。
- サーバー アプリケーション
・HTTP 要求を処理するための Web フレームワーク (Python では Starlette) を使用して構築
・asyncioのASGI サーバー (Uvicorn など) と組み合わせて、NICとポートでリッスンを開始
・エージェント カードと要求ハンドラを公開し、クライアントとエージェントとの対話を可能に。
- A2A エージェント サーバーの設定
- エージェントのスキルとエージェント カードを定義
- Executor をタスク ストアにリンクする要求ハンドラーを初期化
- エージェント カードと要求ハンドラーを提供して、サーバー アプリを設定
- ASGI サーバーを使用してサーバーを起動し、ネットワーク・アクセス可能に
- 実行によりエージェントは受信要求をリッスンし、定義されたスキルに従って応答
- クライアントのやること
- エージェント カードの検出
- エージェントに要求を送信
- エージェントの応答を受信
- エージェント サーバーに接続
- クライアントは、サーバーの ベース URL を 認識
- サーバー上の既知のエンドポイントからエージェント カードを取得
- クライアントを初期化し、メッセージを送信できる接続を確立
- エージェントに要求を送信
- 非ストリーミング要求:メッセージを送信し、完全な応答を待機
- ストリーミング要求:メッセージを送信し、応答を増分的に受信
- エージェントの応答を処理
- ダイレクト メッセージ:テキストや構造化コンテンツなど、エージェントからの即時出力。
- タスク ベースの応答:進行中のタスクを表すオブジェクト。状態の確認や結果の取得にフォローアップ呼び出し。
- エージェントとの対話
- 各要求は一意に識別。多くの場合、生成された ID を使用。
- ストリーミング応答は非同期であり、最終的な出力の前に部分的な結果が得られる。
- 単純なエージェントはメッセージを直接返す。高度なエージェントでは複数のタスクを同時に管理する。
- 「タイトル生成エージェント」と「アウトライン生成エージェント」を ルーティングエージェント経由で連携させる
- タイトルエージェント → ブログタイトルを生成
- アウトラインエージェント → タイトルを受け取り記事構成を生成
- ルーティングエージェント → プロンプトからどのエージェントに処理させるか判断し、結果を統合
- title_agent/agent.py
・インポートの追加:AgentsClient?、CodeInterpreterTool? などを読み込む。
・Foundry プロジェクトへ接続:DefaultAzureCredential? を使って認証。
・スレッド・メッセージを作成、runs.create_and_processで実行し応答を取得
- title_agent/server.py
・エージェント スキル・エージェント カードを定義
・Executor を作成し要求ハンドラに設定
・A2A サーバのアプリケーション インスタンスを作成。
- ルーティング・エージェントの実装
routing_agent/agent.py にて:
- ユーザーの入力を解析し、どのエージェントに送るか判断
- A2A でリモート・エージェントExecutorへメッセージ送信
- 非同期で send_message を await し、結果を受け取る
- エージェント Executor を実装
title_agent/agent_executor.py にて:
- エージェントの生成(await self._get_or_create_agent())
- タスクのステータスを更新(task_updater.update_status)
- エージェントの会話を実行(run_conversation)
- 応答でタスクを更新(task_updater.update_status)
- タスクを完了としてマーク(task_updater.complete)
- エージェントと対話し、React プログラミングに関する記事のタイトルとアウトラインを作成
- クリーンアップ(課金防止)
- Azure Portal で、演習で使用したリソースグループを開く。
- Delete resource group を実行し、すべての関連リソースを削除。
自然言語ソリューションを開発 †
https://learn.microsoft.com/ja-jp/training/paths/develop-language-solutions-azure-ai/
テキスト分析(Azure AI Language - Language Service) †
https://learn.microsoft.com/ja-jp/training/modules/analyze-text-ai-language/
- Azure Language の基本機能
テキストから言語検出、感情分析、抽出(キー・フレーズ、名前付きエンティティ、エンティティ リンク)
- 機能
- 感情分析:0-1の肯定/中立/否定の3値
- キー・フレーズ:名詞に限らない単語。
- エンティティ:人、場所、住所、日時、組織、URI系(カテゴリ+サブカテゴリに分類)
- エンティティ リンク:同音異義語などWikiにリンクするので違いが解る。
- Azure AI Language リソースの作成
- Azure Portal で Language Service を作成。
- キーとエンドポイントを後で使うために確認しておく。
- エンドポイント&APIキーを使用してアプリを実行
python text-analysis.py
- 実行結果の確認
言語、感情、キーフレーズ、エンティティ、リンク付きエンティテ
- クリーンアップ(課金防止)
- Azure Portal で、演習で使用したリソースグループを開く。
- Delete resource group を実行し、すべての関連リソースを削除。
Q&A(Azure AI Language - Language Service) †
https://learn.microsoft.com/ja-jp/training/modules/create-question-answer-solution-ai-language/
- Azure Language の質問に回答する機能(Q&A サービス)
- ユース ケースの違い
| 質問応答 | 言語理解 |
| パターン | ユーザーが質問を送信し回答を待つ | ユーザーが発話を送信し、適切な応答を待つ |
| クエリ処理 | 自然言語の理解を使用しKB回答に質問を一致させる | 自然言語の理解を使用して発話を解釈し、意図と一致させ、エンティティを特定 |
| 応答 | 応答は既知の質問に対する静的な回答 | 応答では、最も可能性の高い意図と参照されるエンティティ |
| クライアント ロジック | ユーザーに質問の回答を表示 | 検出された意図に基づいて適切なアクションを実行 |
- KBのタイプ
- タイトルとリンク
- 構造化されたテキスト
- 定義済みのチャットパターン
- KBの作成
- Azure portalのFoundry Toolsの言語サービス リソースの下にある [作成] を選択しリソースを作成。
- "質問応答" 機能を有効にします。KBをホストする Azure AI Search リソースを作成または選択。
- Language Studio で、Azure 言語リソースを選択しカスタムの質問に回答するプロジェクトを作成。
- 1 つまたは複数のデータ ソースを追加して、KBを設定(FAQのURL/ファイル/Chatデータセット/ポータルで編集
- KBをAzure AI SearchでRAG Index化した際のクエリ
質問、top(-K)、しきい値、メタデータでフィルタ
- 精度向上施策
- マルチターン会話の実装(フォローアップ・プロンプトと応答を定義)
- Alternate questions(言い換え質問):ユーザーが同じ意味で質問しそうな “別の表現” を登録する機能
- Follow-up prompts(フォローアップ質問):回答後に、ユーザーが次に聞きそうな質問を提示する機能
- アクティブ・ラーニング(Q&Aから学習し代替質問のKB追加を提案する)、シノニム定義
- Azure AI Language リソースの作成
- Azure Portal で Language Service を作成
- Custom Question Answering を有効化
- Azure Search(Cognitive Search)も自動的に紐づく
- 後で使う エンドポイントとキー を確認しておく
- 新規Custom Question Answeringプロジェクト LearnFAQ を作成
- 前に作成した Azure AI Language リソースを選択
- 言語は英語を選択
- デフォルト回答も設定
- KBのデータを編集
- 自分で新しい Q&A ペアを追加
例:「What are the different types of modules on Microsoft Learn?」
- Alternate questions(言い換え質問)を追加
- Follow-up prompts(フォローアップ質問)を設定
- KBのトレーニングとテスト
- Save → Test でテストパネルを開く
- 「Hello」「What is Microsoft Learn?」などを入力して動作確認
- フォローアップ・リンクも確認
- KBのデプロイ
- 「Deploy knowledge base」から production にデプロイ
- 「Get prediction URL」で REST API のエンドポイントを確認
- サンプル リクエストにprojectName/deploymentNameパラメタが含まれていることを確認
- qna-app.pyにコードを追加
- インポートの追加:Azure AI Language Question Answering SDK
- クライアント(QuestionAnsweringClient?)を生成
- 入力された質問を API に送信し、回答を表示するループを実装
- エンドポイント&APIキーを使用してアプリを実行
python qna-app.py
- クリーンアップ(課金防止)
- Azure Portal で、演習で使用したリソースグループを開く。
- Delete resource group を実行し、すべての関連リソースを削除。
CLU(Azure AI Language - Language Service) †
https://learn.microsoft.com/ja-jp/training/modules/build-language-understanding-model/
- Azure Language の会話言語理解(CLU)モデルを構築
- 事前構成済みの機能(= テキスト分析)
概要、固有表現認識、PII検出、キー フレーズ抽出、感情分析、言語検出など
- 学習済み機能
- 教師あり学習とデプロイを行う必要がある。
- 会話言語理解 (CLU)、カスタム固有表現認識、カスタム テキスト分類、質問応答
- エンティティ定義
- 発話、意図(インテント)、種類(学習/リスト)
- 「発話」のパターンを定義して類似した発話の「意図」を区別できる。
- 1 つのエンティティにつき、最大 5 つの事前構築済みコンポーネントを使用できる。
- モデルのトレーニング、テスト、発行、およびレビュー
- トレーニング:サンプル発話から意図とエンティティを学習
- テスト:対話形式か、データセットを使用
- トレーニング済みのモデルをパブリック エンドポイントにデプロイ
- クライアント アプリで予測を確認
- Azure AI Language リソースの作成
- Azure Portal で Language Service を作成
- 後で使う エンドポイントとキー を確認しておく
- Language Studioで新規Conversational language understandingプロジェクト Clock を作成
- 前に作成した Azure AI Language リソースを選択
- 言語は英語を選択
- GetTime?(時刻を知りたい)既定
ラベル付けの発話を入力:what is the 18:37:48、what's the 18:37:48、what time is it?、tell me the time
- GetDay?(曜日を知りたい)を追加
ラベル付けの発話を入力:what day is it?、what's the day?、what is the day today?、what day of the week is it?
- GetDate?(日付を知りたい)を追加
ラベル付けの発話を入力:what date is it?、what's the 2026-01-02、what is the date today?、what's today's 2026-01-02
- 意図(インテント)のテスト
- トレーニングジョブを実行し、モデルを学習
- 精度(Precision / Recall / F1)や混同行列を確認
- デプロイ(production)してテスト発話で動作確認
- エンティティを追加
- Learned Entity(学習型)
Location:“London”, “Paris”, “New York” などをラベル付け
- List Entity(リスト型)
Weekday:Sunday〜Saturday とその略称(Mon, Tue, Wed…)
- Prebuilt Entity(組み込み)
Date(DateTime?):“01/01/1901”, “Dec 31st 2099” などを自動抽出
- エンティティのテスト
- トレーニングジョブを実行し、モデルを学習
- 精度(Precision / Recall / F1)や混同行列を確認
- デプロイ(production)してテスト発話で動作確認
- clock-client.pyにコードを追加
- インポートの追加:Azure AI Language Conversations SDK
- クライアント(ConversationAnalysisClient?)を生成
- ユーザーが「終了」するまで入力を促す
・ユーザー入力をモデルに送信し
・返ってきた Intent / Entity を解析
・GetTime? / GetDay? / GetDate? に応じて処理を実行
- エンドポイント&APIキーを使用してアプリを実行
python clock-client.py
- 実行して質問を投げ結果を確認
- こんにちは
- 今何時ですか?
- ロンドンの時刻は何時ですか?
- 日付は何ですか?
- 日曜日は何日ですか?
- 今日は何曜日ですか?
- 2025年1月1日は何日ですか?
- クリーンアップ(課金防止)
- Azure Portal で、演習で使用したリソースグループを開く。
- Delete resource group を実行し、すべての関連リソースを削除。
分類(Azure AI Language - Language Service) †
https://learn.microsoft.com/ja-jp/training/modules/custom-text-classification/
- 2 種類のプロジェクト:単一ラベル分類、複数ラベル分類
- 分類問題のモデルの評価と改善(一般論)
- APIペイロード(JSONインターフェイス)
- データ(ラベル定義、タグを付け)、モデル(トレーニング、表示、改善、デプロイ最大10)、WebAPIで分類実行
- WebAPIが特徴的で、分類テキストをPOSTで送信した後、operation-location応答ヘッダにGETして結果を取得
- Azure AI Language リソースの作成
- Azure Portal で Language Service を作成
- Custom text classification & extraction を有効化
- ストレージアカウントの確認(StorageV2)とRBACの設定
- 後で使う エンドポイントとキー を確認しておく
- Language Studioで新規Custom text classificationプロジェクト ClassifyLab? を作成
- 前に作成した Azure AI Language リソースを選択
- Single label classification
- 言語は英語を選択
- BLOBコンテナに接続
- データのラベル付け
- クラス(4分類)の作成
- 各記事へのラベル付与
- Training / Testing の割り当て
- ラベルの保存
- モデルのトレーニング
- トレーニングジョブの作成
- 手動データ分割の利用
- トレーニング完了の確認
- モデルの評価
- モデル性能の確認
- 誤分類の確認
- 改善ポイントの把握
- モデルのデプロイ
- デプロイメントの作成
- デプロイ名とモデルの指定
- API利用準備
- classify-text.pyにコードを追加
- インポートの追加:Azure AI Language Text Analytics SDK
- クライアント(TextAnalyticsClient?)を生成
- 分類バッチを実行して結果を表示する。
- エンドポイント&APIキーを使用してアプリを実行
python classify-text.py
- クリーンアップ(課金防止)
- Azure Portal で、演習で使用したリソースグループを開く。
- Delete resource group を実行し、すべての関連リソースを削除。
NER(Azure AI Language - Language Service) †
https://learn.microsoft.com/ja-jp/training/modules/custom-name-entity-recognition/
- テキスト分類というより、単語の分類という感じ。
- カスタムの名前付きエンティティ認識 (カスタム固有表現認識)
- エンティティは、人、場所、物、イベント、スキル、または値
- 組み込み型NERと、カスタム化されたNERがある。
- データについてのポイント(多様性/分布/精度)
- ラベル付与でのポイント(整合性/精度/完全性)
- テスト
- トレーニングジョブを実行し、モデルを学習
- 精度(Precision / Recall / F1)や混同行列を確認
- デプロイ(production)してテスト発話で動作確認
- Azure AI Language リソースの作成
- Azure Portal で Language Service を作成
- Custom NER(カスタム固有表現抽出)機能を有効化
- ストレージアカウントの確認(StorageV2)とRBACの設定
- 後で使う エンドポイントとキー を確認しておく
- Language Studioで新規Custom named entity recognitionプロジェクト CustomEntityLab?を作成
- 前に作成した Azure AI Language リソースを選択
- 言語は英語を選択
- BLOBコンテナに接続(ラベルなしデータとして読み込む)
- データラベリング
- 3エンティティ作成(ItemForSale?/Price/Location)
- 各広告ファイルを開き、該当部分をハイライトしてラベル付け
- 全 9 ファイルをラベル付けし、保存
- モデルのトレーニング/評価/デプロイ
- テストデータは自動分割、数分待つとトレーニング完了
- Model performanceで精度を確認、失敗ケースの改善ポイントを把握
- Deploying a model → 新規デプロイ(モデルを選択しデプロイ名を付与)
- custom-entities.pyにコードを追加
- インポートの追加:Azure AI Language Text Analytics SDK
- クライアント(TextAnalyticsClient?)を生成
- NERバッチを実行して結果を表示する。
- クリーンアップ(課金防止)
- Azure Portal で、演習で使用したリソースグループを開く。
- Delete resource group を実行し、すべての関連リソースを削除。
翻訳(Azure AI Translator - Translators) †
https://learn.microsoft.com/ja-jp/training/modules/translate-text-with-translator-service/
- Azure Translatorは 90 の言語間でテキストを翻訳
- 次の目的で使用できる多言語テキスト翻訳 API が用意
- 言語検出:detection
- 翻訳:translation
- 音訳:transliteration
- 翻訳オプション
- ワード・アラインメント:includeAlignment=trueで単語間の対応関係
- 文の長さ:includeSentenceLength?=trueで翻訳前後の文字数
- フィルター処理:
- profanityAction=NoAction?/Deleted/Marked
- profanityMarker=伏せ字やタグを指定できる。
- Azure AI Translatorリソースの作成
- Azure Portal で Translators を作成
- 価格レベル: F0 (無料)、またはS (標準) を選択
- 後で使う エンドポイントとキー を確認しておく
- translate.pyにコードを追加
- インポートの追加:Azure AI Translation SDK
- クライアント(TextTranslationClient?)を生成
- ターゲット言語を選択、
- ユーザーが「終了」するまで入力を促す
- エンドポイント&APIキーを使用してアプリを実行
python translate.py
- クリーンアップ(課金防止)
- Azure Portal で、演習で使用したリソースグループを開く。
- Delete resource group を実行し、すべての関連リソースを削除。
音声(Azure AI Speech - Speech service) †
https://learn.microsoft.com/ja-jp/training/modules/create-speech-enabled-apps/
- Azure Speech の API
- 音声テキスト変換
- テキスト読み上げ
- 音声翻訳
- キーワード認識
- 意図認識
- 機能
- リアルタイム文字起こし
- ファスト トランスクリプション: 最速の同期出力
- バッチ文字起こし: 大量の録音済みオーディオに対して効率的な処理
- Custom Speech:特定のドメインおよび条件に対して精度を強化
- 使用
- SpeechConfig?(リソースの場所とキー、その他、SpeechSynthesisOutputFormat?、SpeechSynthesisVoiceName?など)
- AudioConfig?(形式:ファイルの種類/サンプル レート/ビット深度、音声:x語を話す男性など)を指定
- SpeechConfig? と AudioConfig? を使用して SpeechRecognizer? オブジェクトを作成、SpeechRecognizer? オブジェクトのメソッドを使用して、基になる API 関数を呼び出す。
- RecognizeOnceAsync?()で非同期的に文字起こし。結果は(期間/OffsetInTicks?/プロパティ/Reason/ResultId?/Text)を含むSpeechRecognitionResult? オブジェクト
- Azure AI Speechリソースの作成
- Azure Portal で Speech serviceを作成
- 価格レベル: F0 (無料)、またはS (標準) を選択
- 後で使う エンドポイントとキー を確認しておく
- インポートの追加:Azure AI Speech SDK
- 音声認識(Speech-to-Text)
・SpeechConfig? と AudioConfig? を設定して SpeechRecognizer? オブジェクトを作成
・音声ファイルを読込、recognize_once_async() で音声をテキスト化
- 音声合成(Text-to-Speech)
・SpeechConfig? と AudioConfig? を設定して SpeechSynthesizer? オブジェクトを作成
・出力ファイルを指定、speak_text_async() で音声を生成
- エンドポイント&APIキーを使用してアプリを実行
python speaking-clock.py
- オプション
- 音声合成部分を SSML に置き換え
- マイク・スピーカーがある場合のコード
- クリーンアップ(課金防止)
- Azure Portal で、演習で使用したリソースグループを開く。
- Delete resource group を実行し、すべての関連リソースを削除。
音声翻訳(Azure AI Speech - Speech service) †
https://learn.microsoft.com/ja-jp/training/modules/translate-speech-speech-service/
- 音声の翻訳
- SpeechTranslationConfig?(リソースの場所とキー、その他、SpeechSynthesisOutputFormat?、SpeechSynthesisVoiceName?など)
- AudioConfig?(形式:ファイルの種類/サンプル レート/ビット深度、音声:x語を話す男性など)を指定
- SpeechTranslationConfig? と AudioConfig? を使用して TranslationRecognizer? オブジェクトを作成、TranslationRecognizer? オブジェクトのメソッドを使用して、基になる API 関数を呼び出す。
- RecognizeOnceAsync?()で非同期的に音声翻訳。結果は(期間/OffsetInTicks?/プロパティ/Reason/ResultId?/Text/翻訳)を含むSpeechRecognitionResult? オブジェクト
- イベントベース
TranslationRecognizer? オブジェクトに合成イベントのイベント ハンドラーを設定
- 手動
- SpeechRecognitionResult?の翻訳結果を反復処理し、SpeechSynthesizer?を使用して音声合成
- 手動dで翻訳を音声に合成する場合は、SpeechConfig? を使用する。
- Azure AI Speechリソースの作成
- Azure Portal で Speech serviceを作成
- 価格レベル: F0 (無料)、またはS (標準) を選択
- 後で使う エンドポイントとキー を確認しておく
- インポートの追加:Azure AI Speech SDK
- SpeechTranslationConfig?、AudioConfig?、SpeechConfig?の設定
- 音声の翻訳、翻訳の音声合成を実装する。
- エンドポイント&APIキーを使用してアプリを実行
python translator.py
- 実行して音声の翻訳 → 翻訳の音声合成の結果を確認
- オプション:マイク・スピーカーがある場合のコード
- マイク入力用の SpeechRecognizer?
- スピーカー出力用の SpeechSynthesizer?
- クリーンアップ(課金防止)
- Azure Portal で、演習で使用したリソースグループを開く。
- Delete resource group を実行し、すべての関連リソースを削除。
音声LLM(Phi-4-multimodal-instruct) †
https://learn.microsoft.com/ja-jp/training/modules/develop-generative-ai-audio-apps/
- 音声テキスト変換→LLMではなく、Phi-4-multimodal-instructなどのマルチモーダルLLMモデルを使用。
- テキスト コンテンツとオーディオ コンテンツの両方を含むマルチパート ユーザー メッセージを含むプロンプトを送信
- メッセージには、URL または バイナリ データ として オーディオ を含める事ができる。
- Foundry プロジェクトにマルチモーダルLLMモデルをデプロイ
- インポートの追加:AIProjectClient?などを読み込む。
- Foundry プロジェクトへ接続:DefaultAzureCredential? を使って認証。
- AIProjectClient?を作成
- オーディオ ファイルを取得/エンコード
- オーディオ入力への応答を取得
- マルチモーダルLLMモデルとプロンプト+音声で対話し、回答を受信
(この例ではプロンプトで音声情報の内容に関する質問をしている)
- クリーンアップ(課金防止)
- Azure Portal で、演習で使用したリソースグループを開く。
- Delete resource group を実行し、すべての関連リソースを削除。
Voice Live †
https://learn.microsoft.com/ja-jp/training/modules/develop-voice-live-agent/
- リアルタイム対話型音声ソリューション用(LLMと音声で対話)
以下の 3 つを 低遅延で一体化 したリアルタイム音声対話エンジンをWebSocket API 経由で使用する。
- 音声認識(Speech-to-Text)
- LLM 推論(GPT‑4o Realtime など)
- 音声合成(Text-to-Speech)
- 機能
音声認識、テキスト読み上げ合成、アバター ストリーミング、オーディオ処理
- PCM16 や G.711 などの複数の形式をサポートするリアルタイムオーディオ処理
- OpenAI 音声や Azure カスタム音声などの高度な音声オプション
- ビデオとアニメーションに WebRTC を使用したアバター統合
- ノイズリダクションとエコーキャンセルを内蔵
- 接続
- トークン ベースの認証
- Microsoft Entra ID で推奨されるキーレス認証
- イベント
クライアント イベントとサーバー イベントがある。
- クライアント イベント
・session.update: セッション構成の変更
・input_audio_buffer.append: バッファにオーディオ データを追加
・response.create: モデル推論を使用して応答を生成
- サーバー イベント
フィードバックと状態の更新を提供
・session.updated: セッション構成の変更
・response.done: 応答生成の完了
・conversation.item.created: 新しい会話アイテムが追加
- Flask アプリに Voice Live エージェントの実装を追加
- __init__ と start() の実装
Voice Live SDK を使うための初期化コードを追加。
- セッション設定の追加
・モダリティ(TEXT + AUDIO)
・TTS の音声設定
・入出力音声フォーマット(PCM16)
・サーバー側 VAD(Voice Activity Detection)
- 音声イベントのハンドラを実装
- SESSION_UPDATED → 会話準備完了
- SPEECH_STARTED → ユーザーが話し始めた
- SPEECH_STOPPED → 入力終了、処理開始
- RESPONSE_AUDIO_DELTA → 音声応答送信開始
- RESPONSE_AUDIO_DONE → 音声応答送信完了
- ERROR → エラー処理
- デプロイ用スクリプトを編集し、Azure へデプロイ
- デプロイ用スクリプト(azdeploy.sh)を編集
・リソースグループ名
・デプロイ地域
- Azure へデプロイ
bash azdeploy.sh~
・モデルデプロイ
・ACR でコンテナ・イメージ作成
・App Service へデプロイ
- アプリをテスト
- App Service の URL を開く
- 「Start session」を押して音声デバイスを許可
- マイクに向かって話しかけるとリアルタイム応答
- リソースのクリーンアップ
Azure Developer CLI が azd up / azd provision で作成した Azure リソースを削除するコマンド
(azdeploy.shn内部でAzure Developer CLI が azd up / azd provisionsいているものと思われる)
azd down --purge
CVソリューションを開発 †
https://learn.microsoft.com/ja-jp/training/paths/create-computer-vision-solutions-azure-ai/
- Azure Vision は Computer Vision
- 機能
- 画像分析
- 光学式文字認識 (OCR)
- 顔検出と分析
- ビデオ分析
画像分析(Azure AI Vision - Computer Vision) †
https://learn.microsoft.com/ja-jp/training/modules/analyze-images/
- 画像分析のユースケース
- コンテンツ・イメージのキャプション生成
- 画像に関連付ける適切な タグ を提案
- 画像内の一般的な オブジェクト/ユーザー を検出
- 画像要件
- 画像は JPEG、PNG、GIF、または BMP 形式
- イメージのファイル サイズは 4 MB未満
- 画像の寸法は 50 x 50 ピクセル以上
- 機能
使用可能なビジュアル機能は、 VisualFeatures? 列挙体に含まれる
- VisualFeatures?.Read: 読み取り可能なテキストを抽出
- VisualFeatures?.Tags: 画像に関するタグを識別
- VisualFeatures?.Caption: 自然言語で画像のキャプションを生成
- VisualFeatures?.Objects:検出オブジェクトの境界ボックスを返す
- VisualFeatures?.DenseCaptions?: 検出オブジェクトの詳細なキャプションを生成
- VisualFeatures?.People:検出された人物の境界ボックスを返す
- VisualFeatures?.SmartCrops?: 対象領域での指定した縦横比の境界ボックスを返す
- 接続
- トークン ベースの認証
- Microsoft Entra ID で推奨されるキーレス認証
- Azure AI Visionリソースの作成
- Azure Portal で Computer Visionを作成
- 価格レベル: F0 (無料)
- 後で使う エンドポイントとキー を確認しておく
- インポートの追加:Azure AI Vision SDKなどを読み込む。
- Foundry プロジェクトへ接続:AzureKeyCredential?を使って認証。
- ImageAnalysisClient?を作成
- 画像分析の実施(visual_features=[VisualFeatures?.CAPTION, VisualFeatures?.DENSE_CAPTIONS, VisualFeatures?.TAGS, VisualFeatures?.OBJECTS, VisualFeatures?.PEOPLE])
- 画像の提案タグ/キャプション/高密度キャプションを表示、検出オブジェクト/検出された人物の位置特定のコードを追加
- クリーンアップ(課金防止)
- Azure Portal で、演習で使用したリソースグループを開く。
- Delete resource group を実行し、すべての関連リソースを削除。
OCR(Azure AI Vision - Computer Vision) †
https://learn.microsoft.com/ja-jp/training/modules/read-text-images-documents-with-computer-vision-service/
- テキストを読み取るための Azure AI オプション
- Azure Vision
- ドキュメントのスキャン
- 写真内のテキストの検索と読み取り
- デジタル資産管理 (DAM)
- Azure Document Intelligence
- フォーム処理
- 事前構築済みモデル
- カスタム モデル
- Azure Content Understanding
- マルチモーダル コンテンツ抽出
- カスタム コンテンツ分析シナリオ
- 画像内のテキストの位置情報は、テキスト行の位置と個々の単語を含むブロックが返る。
- Azure AI Visionリソースの作成
- Azure Portal で Computer Visionを作成
- 価格レベル: F0 (無料)
- 後で使う エンドポイントとキー を確認しておく
- インポートの追加:Azure AI Vision SDKなどを読み込む。
- Foundry プロジェクトへ接続:AzureKeyCredential?を使って認証。
- ImageAnalysisClient?を作成
- OCRの実施、見つかったテキスト行を印刷
- 画像内で注釈を付ける関数を呼び出し
- 個々の単語の位置を返す
- クリーンアップ(課金防止)
- Azure Portal で、演習で使用したリソースグループを開く。
- Delete resource group を実行し、すべての関連リソースを削除。
顔検出と分析(Azure AI Vision - Face) †
https://learn.microsoft.com/ja-jp/training/modules/detect-analyze-recognize-faces/
- 顔属性分析
- 眼鏡、マスク、ノイズ、オクルージョン、アクセサリー
- 露出、ぼかし、頭部姿勢、QualityForRecognition?
- 顔の主要なランドマークの座標
- 顔比較 - 確認(複数の画像の中から見つける)と検証(2つの画像の類似度)
- 顔認識 - モデルをトレーニングし、モデルを使用して新しい画像でそれらの人物を識別。
- ライブネス - 入力ビデオが実際のストリームか偽物かを判断しスプーフィングを防ぐ
- 顔を確認して識別する
- 顔の確認:顔が検出されると、一意の ID が割り当てられ、サービス リソースに 24 時間保持
- 顔の識別:個人を人物グループにさまざまなポーズで追加して学習(永続化される)
- ユースケース
- 画像内の個人を識別、顔 ID を付与。
- 新しい画像から既知の顔に似た顔を見つける。
- 責任ある AI に関する考慮事項
- データのプライバシーとセキュリティ:トレーニングと推論に使用される顔データに対して適切な保護を実装する。
- 透明性: 顔データの使用方法と、その顔データへのアクセス権を持つユーザーに通知されるようにする。
- 公平性と包摂性:顔ベースのシステムを、見た目に基づいて個人に偏見を持つ方法で使用したり、個人を不公平に標的にしたりできないようにする。
- Azure AI Visionリソースの作成
- Azure Portal で Faceを作成
- 価格レベル: F0 (無料)
- 後で使う エンドポイントとキー を確認しておく
- インポートの追加:Azure AI Vision SDKなどを読み込む。
- Foundry プロジェクトへ接続:AzureKeyCredential?を使って認証。
- FaceClient?を作成
- 顔を検出して分析
- クリーンアップ(課金防止)
- Azure Portal で、演習で使用したリソースグループを開く。
- Delete resource group を実行し、すべての関連リソースを削除。
画像分類(Azure Custom Vision) †
https://learn.microsoft.com/ja-jp/training/modules/classify-images/
- ココでは「Azure AI Custom Visionの画像分類」に絞って説明
- Azure Custom Visionリソースの作成
- Azure Portal で Custom Visionを作成
- トレーニング、予測価格レベル: F0 (無料)
- プロジェクトの種類: 分類、分類タイプ: マルチクラス、分野:食品
- プロジェクト ID、エンドポイントとキー を確認しておく
- Training 用と Prediction 用で キーが異なる
- トレーニング → クイックトレーニング
- トレーニング後メトリックを確認しクイック テスト
- クリーンアップ(課金防止)
- Azure Portal で、演習で使用したリソースグループを開く。
- Delete resource group を実行し、すべての関連リソースを削除。
物体検出(Azure Custom Vision) †
https://learn.microsoft.com/ja-jp/training/modules/detect-objects-images/
- ココでは「Azure AI Custom Visionの物体検出」に絞って説明
- Azure Custom Visionリソースの作成
- Azure Portal で Custom Visionを作成
- トレーニング、予測価格レベル: F0 (無料)
- プロジェクトの種類: 物体検出、ドメイン: 一般
- プロジェクト ID、エンドポイントとキー を確認しておく
- Training 用と Prediction 用で キーが異なる
- タグ付けし、必要に応じて領域のサイズを変更
- スマート ラベラー ツールを使う場合、最初の物体検出モデルをトレーニング
- トレーニング → クイックトレーニング
- トレーニング後メトリックを確認しクイック テスト
- トレーニング済みのモデルを公開
- パッケージをインストールし、.envを構成(予測リソースの
- test-detector.pyのコードを確認(CustomVisionPredictionClient?
- エンドポイント&APIキーを使用してアプリを実行
python test-detector.py
- 物体検出の結果を確認する。
- クリーンアップ(課金防止)
- Azure Portal で、演習で使用したリソースグループを開く。
- Delete resource group を実行し、すべての関連リソースを削除。
ビデオ分析(Video Indexer) †
https://learn.microsoft.com/ja-jp/training/modules/analyze-video/
- ココでは「ビデオから分析情報を抽出する」ビデオ分析に絞って説明
- Azure Video Indexer は、顔識別、テキスト認識、オブジェクト ラベル、シーンのセグメント化
- 機能
- 顔認識
- 光学式文字認識(OCR)
- 音声文字起こし
- トピック
- センチメント
- ラベル
- コンテンツモデレーション
- シーン分割
- 抽出されたインサイトを確認
- Transcript(音声文字起こし)
- OCR(画面内テキスト)
- Speakers(話者識別)
- Insights ペイン
・出演人物
・話題(Topics)
・オブジェクトラベル
・ブランドや人物などのエンティティ
・キーシーン
・キーワード
・感情分析(Sentiment)
- Insights検索
・Insights ペインの検索ボックスで特定の内容を検索可能
・例:「Bee」で検索すると、動画内の該当箇所へジャンプ
- APIからVideo Indexerの結果を確認
・Video Indexer の Account ID と API Key を取得。
・PowerShell スクリプト(get-videos.ps1)に値を設定し、REST API を実行。
・JSONに以前にインデックスを作成したResponsible AIビデオの詳細が含まれている。
- ウィジェットからVideo Indexerの結果を確認
・Video Indexer ポータルからPlayer widget、Insights widgetの埋め込みコードを取得
・analyze-video.htmlのHTML に貼り付けて保存。ブラウザで動作確認。
・以前にインデックスを作成したResponsible AIビデオの詳細が確認できる。
- クリーンアップ(課金防止)
- Azure Portal で、演習で使用したリソースグループを開く。
- Delete resource group を実行し、すべての関連リソースを削除。
画像LLM(gpt-4o) †
https://learn.microsoft.com/ja-jp/training/modules/develop-generative-ai-vision-apps/
- 画像テキスト変換→LLMではなく、gpt-4oなどのマルチモーダルLLMモデルを使用。
- テキスト コンテンツとビデオ コンテンツの両方を含むマルチパート ユーザー メッセージを含むプロンプトを送信
- メッセージには、URL または バイナリ データ として オーディオ を含める事ができる。
- Foundry プロジェクトにマルチモーダルLLMモデルをデプロイ
- プレイグラウンドでモデルをテスト
- インポートの追加:AIProjectClient?などを読み込む。
- Foundry プロジェクトへ接続:DefaultAzureCredential? を使って認証。
- AIProjectClient?を作成
- URLベースの画像プロンプトを送信
- 画像プロンプトへの応答を取得
- マルチモーダルLLMモデルとプロンプト+画像で対話し、回答を受信
(この例ではプロンプトで画像情報の内容に関する質問をしている)
- オプション:ローカル画像ファイルをアップロードするようにコードを変更する
- クリーンアップ(課金防止)
- Azure Portal で、演習で使用したリソースグループを開く。
- Delete resource group を実行し、すべての関連リソースを削除。
画像生成(dall-e-3) †
https://learn.microsoft.com/ja-jp/training/modules/generate-images-azure-openai/
- 画像生成モデル:DALL-E 3、GPT-Image 1など
- プレイグラウンドで設定(解像度/スタイル/画質)を調整して出力を制御
- DALL-E モデルのAPIのパラメタ(prompt/n/size/quality/style)
- Foundry プロジェクトに画像生成モデルをデプロイ
- プレイグラウンドでモデルをテスト
- エンドポイント、APIバージョン、デプロイ名を確認しておく
- インポートの追加:AzureOpenAIなどを読み込む。
- Foundry プロジェクトへ接続:DefaultAzureCredential? を使って認証。
- AzureOpenAIを作成
- プロンプトを送信
- 画像のURLを取得
- クリーンアップ(課金防止)
- Azure Portal で、演習で使用したリソースグループを開く。
- Delete resource group を実行し、すべての関連リソースを削除。
AI 情報抽出ソリューションを開発 †
https://learn.microsoft.com/ja-jp/training/paths/ai-extract-information/
マルチモーダル コンテンツ分析ソリューション †
https://learn.microsoft.com/ja-jp/training/modules/analyze-content-ai/
- Content Understanding は、マルチモーダルの情報抽出AI
- 請求書など「ドキュメントとフォーム」を分析し、特定のフィールドの値を取得
- 画像の特定のオブジェクトや人物の存在を検出、他の情報を視覚的に判断
- 電話会議の要約、会話記録kからの感情判断、電話録音からのポイント抽出
- プレゼンテーション要約、ビデオ会議のポイント、セキュリティ映像の特定アクティビティ抽出、
- ポータル
- Foundry ハブ リソースを作成
- 抽出する情報の Content Understanding スキーマを定義してテスト
- (使用可能なスキーマのテンプレート・フィールドは、コンテンツ タイプによって異なる。)
- 完成したスキーマに基づいてアナライザーを構築
- アナライザーを使用して、新しいコンテンツからフィールドを抽出
- REST APIの使用
非同期に要求して結果を取得する(認証はAPIキーを使用する)。
- リクエスト
POST {endpoint}/contentunderstanding/analyzers/{analyzer}:analyze?api-version={api version}
{
"url": "https://host.com/doc.pdf"
}
- レスポンス
Operation-Id: 1234abcd-1234-abcd-1234-abcd1234abcd
Operation-Location: {endpoint}/contentunderstanding/analyzers/{analyzer}/results/1234abcd-1234-abcd-1234-abcd1234abcd?api-version={api version}
{
"id": "1234abcd-1234-abcd-1234-abcd1234abcd",
"status": "NotStarted"
}
- リクエスト
GET {endpoint}/contentunderstanding/analyzers/{analyzer}/results/1234abcd-1234-abcd-1234-abcd1234abcd?api-version={api version}
- 請求書(PDF)/スライド画像(JPG)/音声(MP3)/ビデオ(MP4)の分析
- Foundry ハブとプロジェクトの作成(基盤準備)
- Content Understanding 機能は ハブ ベースの Project が必須
- リージョンは Australia East / Sweden Central / West US
- タスクの作成
・タスク名、説明、単一ファイルコンテンツ分析
・Azure AI サービス接続: Foundry ハブのリソース
・Azure Blob Storage アカウント: Foundry ハブのデフォルトのストレージ アカウント
- スキーマ定義
・invoice-1234.pdf をアップロード
・「Invoice data extraction」テンプレートを使用
・不要なフィールドを削除し、必要なフィールドを追加
・Items テーブルのサブフィールドも整理
- テスト & Analyzer 作成
・スキーマを保存し、テスト実行
・invoice-analyzer をビルドしinvoice-1235.pdf で動作確認
- タスクの作成
・タスク名、説明、単一ファイルコンテンツ分析
・Azure AI サービス接続: Foundry ハブのリソース
・Azure Blob Storage アカウント: Foundry ハブのデフォルトのストレージ アカウント
- スキーマ定義
・slide-1.jpg をアップロード
・「Image analysis」テンプレートを使用(初期フィールドなし)
・フィールド追加:Title/Summary/Charts/QuarterlyRevenue?/ProductCategories?
- Analyzer 作成
・スキーマを保存し、テスト実行
・slide-analyzer をビルドし、slide-2.jpg で動作確認
- タスクの作成
・タスク名、説明、単一ファイルコンテンツ分析
・Azure AI サービス接続: Foundry ハブのリソース
・Azure Blob Storage アカウント: Foundry ハブのデフォルトのストレージ アカウント
- スキーマ定義
・call-1.mp3 をアップロード
・「Speech transcript analysis」テンプレートを使用(初期フィールドなし)
・フィールド追加:Caller/Summary/Actions/CallbackNumber?/AlternativeContacts?
- Analyzer 作成
・スキーマを保存し、テスト実行
・voicemail-analyzer をビルドし、call-2.mp3 で動作確認
- タスクの作成
・タスク名、説明、単一ファイルコンテンツ分析
・Azure AI サービス接続: Foundry ハブのリソース
・Azure Blob Storage アカウント: Foundry ハブのデフォルトのストレージ アカウント
- スキーマ定義
・meeting-1.mp4 をアップロード
・「Video analysis」テンプレートを使用(初期フィールドなし)
・フィールド追加:Summary/Participants/ParticipantNames?/★SharedSlide?/AssignedActions?
- Analyzer 作成
・スキーマを保存し、テスト実行
・conference-call-analyzer をビルドし、meeting-2.mp4動作確認
- クリーンアップ(課金防止)
- Azure Portal で、演習で使用したリソースグループを開く。
- Delete resource group を実行し、すべての関連リソースを削除。
マルチモーダル コンテンツ分析クライアント †
https://learn.microsoft.com/ja-jp/training/modules/analyze-content-ai-api/
- Azure Content Understanding の REST APIの使用
- スキーマ定義/アナライザー作成
- コンテンツ分析/分析結果処理
- 「名刺画像から情報を抽出するアナライザー」を作成し、それを Python クライアントアプリから利用
- Foundry ハブとプロジェクトの作成(基盤準備)
- Content Understanding 機能は ハブ ベースの Project が必須
- リージョンは Australia East / Sweden Central / West US
- エンドポイント、APIバージョンを確認しておく
- create-analyzer.pyにコードを追加
create_analyzer関数の「Create a Content Understanding analyzer」パート
- 実行結果の確認
操作の成功 (または失敗) を確認
- read-card.pyにコードを追加
analyze_card関数の「Use Content Understanding to analyze the image」パート
- クリーンアップ(課金防止)
- Azure Portal で、演習で使用したリソースグループを開く。
- Delete resource group を実行し、すべての関連リソースを削除。
ドキュメント インテリジェンス 事前構築済みモデル †
https://learn.microsoft.com/ja-jp/training/modules/use-prebuilt-form-recognizer-models/
- Document Intelligenceの事前構築済みモデルによる情報抽出
- 特定のフォーム
- 請求書、領収書、米国税
- ID ドキュメント、医療保険カード、結婚証明書、名刺モデル
- クレジット/デビット カード、小切手、口座取引明細書、給与明細書、住宅ローンのドキュメント
- 特定ではないフォーム
- 読み取りモデル:テキストと言語
- レイアウト モデル:テキストと構造
- 一般ドキュメント モデル:テキスト、キー、値、エンティティ、および選択マーク
- 抽出機能
- テキスト
- エンティティ(人、場所、日付)
- キーと値のペア
- フィールド
- 選択マーク(ラジオ ボタンやチェック ボックス)
- テーブル
- 入力の要件
- ファイルの形式:JPEG、PNG、BMP、TIFF、PDF、読み取りモデルは +Microsoft Office ファイル
- ファイルのサイズ:Standard レベルでは 500 MB 未満、Free レベルでは 4 MB 未満
- 画像のサイズ:50 x 50 ピクセルから 10,000 x 10,000 ピクセルの間
- PDFのサイズ:17 x 17 インチまたは A3 用紙サイズ以下
- PDFはパスワードを解除しておく。可能であれば、テキスト埋め込み PDF ファイルを送信。
- PDF TIFF は、Standard レベルでは、最初の 2,000 ページ、Free レベルでは、最初の 2 ページのみが分析
- Document Intelligence
- Studio:事前構築済みのモデルを選択、ファイルを追加し分析
- REST API:API を使用した事前構築済みモデルの呼び出し
- 読み取りモデル
- 固定または予測可能な構造がないドキュメントから単語と行を抽出する。
- ドキュメントと画像から印刷されたテキストと手書きのテキストが抽出される。
- 手書きテキストよりも印刷されたテキストについて多くの言語がサポートされる
- 一般ドキュメント モデル
- 読み取りモデルにキーと値のペア、エンティティ、選択マーク、テーブルの検出を追加
- エンティティ抽出をサポートする唯一の事前構築済みモデル
- 検出できるエンティティ(Person/PersonType?/Location/Organization/Event/Product/Skill/Address/Phone number/Email/URL/IP Address/DateTime?/Quantity)
- レイアウト モデル
- テキスト抽出だけでなくドキュメントの構造に関する情報を抽出する。
- テーブル:コンテンツ テキスト、境界ボックスのサイズと位置、ヘッダー列の一部かどうか、行と列の位置
- 選択マーク:境界ボックス、信頼度インジケーター、選ばれているかどうかと共に抽出
- Foundry ハブとプロジェクトの作成(基盤準備)
- Vision + Document 機能は ハブ ベースの Project が必須
- Azure AI サービスページで、Vision + Documentタイルを選択
- Vision + Documentページのドキュメントタブで、OCR/読み取りタイルを選択
- [読み取り]ページの左側のドキュメントの一覧で、read-german.pdfを選択
- [分析オプション]を選択、 [分析オプション]ペインの[言語]チェックボックスをオンにして[保存]
- [分析の実行]を選択し結果を確認(「コンテンツ」タブ、「結果」タブ)
- エンドポイント、APIバージョンを確認しておく
- document-analysis.pyにコードを追加
- インポートの追加:DocumentAnalysisClient?などを読み込む。
- Foundry プロジェクトへ接続:AzureKeyCredential?を使って認証。
- DocumentAnalysisClient?を作成
- 請求書の分析と分析結果の取得・表示
- 実行結果の確認
仕入先名、顧客名、請求額の合計を信頼度付きで表示
- クリーンアップ(課金防止)
- Azure Portal で、演習で使用したリソースグループを開く。
- Delete resource group を実行し、すべての関連リソースを削除。
ドキュメント インテリジェンス その他のトピック †
https://learn.microsoft.com/ja-jp/training/modules/work-form-recognizer/
- Azure Document IntelligenceにアクセスするAPIキーには
Foundry Tools リソースとDocument Intelligence リソースを対象とするものがある。
- 抽出機能
- OCR 機能を使用してドキュメント分析をキャプチャ:読み取りモデル/一般ドキュメント モデル/レイアウト モデル
- W-2s、請求書、領収書、ID ドキュメント、医療保険、ワクチン接種、名刺からデータを抽出:事前構築済みモデルを使用
- 業界固有のフォームからデータを抽出:カスタム モデルを作成して使用
- 入力の要件
- ファイルの形式:JPG、PNG、BMP、PDF、または TIFF
- ファイルのサイズ:Paid (S0) レベルの場合は 500 MB 未満、Free (F0) レベルの場合は 4 MB 未満
- 画像のサイズ:50 x 50 ピクセル から 10,000 x 10,000 ピクセル
- トレーニング データ セットの合計サイズは 500 ページ以下
- カスタム モデルのトレーニング(教師あり機械学習)
- Azure Document Intelligence Studio を使用してラベル付けとトレーニング
カスタム フォームの基になるモデルには、カスタム テンプレート モデル またはカスタム ニューラル モデル の 2 種類がある。
- カスタム テンプレート モデル:ラベル付きのキーと値のペア、選択マーク、テーブル、領域、署名をドキュメントから正確に抽出
- カスタム ニューラル モデル:レイアウト機能と言語機能を組み合わせてドキュメントからラベル付けされたフィールドを正確に抽出
- レイアウトおよびラベル フィールド情報を含む JSON ファイルと共に、サンプル フォームを Azure BLOB コンテナに格納
・サンプル フォームごとに Layout API を実行しレイアウト解析結果の ocr.json ファイルを生成
・さらにfields.json ファイル(手動ラベリング結果)とlabels.json ファイル(フィールド定義一覧)が必要
- コンテナーの共有アクセス セキュリティ (SAS) URL を生成
- REST API(またSDK)でトレーニングを実施する?
- Foundry ハブ リソースではなく、Document Intelligence リソースの方を作成
- 価格レベル: Free F0 または Standard S0
- 「リソースグループ」、「サブスクリプションID」、「場所」をメモ
- subscription_id、resource_group、およびlocation変数の宣言を変更
- expiry_date変数が過去の日付になっている場合は、将来の日付に更新
- BLOBコンテナ(sampleforms)へのファイル・アップロードを確認
ストレージアカウント、Blob コンテナを作成しアップロード、SAS URL を生成
- Document Intelligence Studioでトレーニング
- Document Intelligence Studio にアクセスし新規プロジェクトを作成
- サービスリソースを構成し、トレーニング データ ソースに接続する。
- モデルのトレーニング(モデル ID を設定、Build Mode:Template)
- エンドポイント&APIキーを使用してアプリを実行
python test-model.py
- 実行結果の確認
出力にフィールド名に対応する値がどのように提供されるかを確認
- クリーンアップ(課金防止)
- Azure Portal で、演習で使用したリソースグループを開く。
- Delete resource group を実行し、すべての関連リソースを削除。
ナレッジ マイニング ソリューション †
https://learn.microsoft.com/ja-jp/training/modules/ai-knowldge-mining/
- Azure AI Searchによるナレッジ マイニング
- 以下のようなユースがある。
- エンタープライズ検索 ソリューション
- ナレッジ マイニング ソリューション
- 生成型AIアプリケーションにおける検索拡張生成 (RAG) を支援
- 幅広いデータ ソースの検索(インデックス作成とクエリ実行)が可能
- 構造化ドキュメント、半構造化ドキュメント、および非構造化ドキュメントやその他のデータ ソース
- エンリッチメント・パイプラインで抽出された分析情報をナレッジ ストアに格納し、インデックス データを強化
- エンリッチメント・パイプライン
- ドキュメント・クラッキング:テキスト・画像の抽出
- AIスキル適用:言語検出、OCR、画像分析、エンティティ抽出など
- フィールド生成:スキルの出力を JSON ドキュメントに追加
- 組込スキル
- 言語検出
- 翻訳
- 場所、エンティティ検出
- キーフレーズの決定と抽出
- PIIの識別と抽出(または削除)
- 画像からテキストを抽出
- 画像キャプションとタグの生成
- カスタム スキル
- カスタム ロジックを実行して、インデックスに組み込むことができる新しいフィールド値を返す。
- 多くの場合、ドキュメントからデータを抽出するように特別に設計されたサービスに関するラッパ
- 一般的なホスティング手法としては、Azure Functions や Containers の使用がある。
- インデックス検索
- インデックスに格納された JSON ドキュメントを検索し、フィルター、ソート、集計ができる。
- 検索クエリは Lucene ベースで、Simple と Full の 2 種類の構文が利用できる。
- インデックスの(検索動作を決定する)フィールド属性
- key:一意の識別子
- searchable:フルテキスト検索の対象
- filterable:フィルター条件に使用可能
- sortable:並べ替えに使用可能
- facetable:集計に使用可能
- retrievable:検索結果に含めるかどうか
- クエリ・パラメタ
- search:検索語句
- queryType:simple または full
- searchFields:検索対象フィールド
- select:返すフィールド
- searchMode:any(OR) / all(AND)
- $filter:OData フィルター式
- $orderby:並べ替え条件
- フルテキスト検索(Lucene クエリ)
searchにのみ適用される。以下の 2 種類をサポートする。
- Simple 構文:直感的・簡易的でキーワード検索に向く
- Full 構文:正規表現で、高度な検索が可能
- クエリ処理の流れ(4段階)
- クエリ解析(キーワード・フレーズ・プレフィックスなどに分解)
- 語句解析(小文字化、ストップワード除去、語幹化など)
- ドキュメント取得(一致する文書を検索)
- スコアリング(TF-IDF に基づく関連度計算)
- Azure AI Searchによるナレッジ マイニングに焦点を当てた手順
- Azure AI Search(Free tier)、Azure Storage Account(Blob Storage)を作成
- リソースを同じリージョンに作成
- 「リソースグループ」、「サブスクリプションID」、「場所」をメモ
- PDF ドキュメントのアップロード
- documents.zipをダウンロード
- documents.zipを解答しPDF ファイルを取得
- ストレージアカウント、Blob コンテナを作成しアップロード
- インデクサーの作成
Azure AI Search の Import dataを使用して以下を設定
- データソース:Blob コンテナ
- エンリッチメント:OCR を有効にするオプションを選択、すべてのテキストを merged_content フィールドに結合、ソース データ フィールドがmerged_content
- AI スキル:テキスト認知スキル(人名、場所、キーフレーズ)イメージ認知スキル(画像タグ・キャプション)
- ナレッジ ストア:Blob(書類)、Tables(文書、キーフレーズ)、File(抽出画像)
- ストレージ アカウントの接続文字列:既存の接続、ストレージアカウント、ドキュメントコンテナー
- 検索インデックス:名前、主キー:metadata_storage_path、Suggester 名が空白のまま、検索モードがanalyzingInfixMatching?
- 各フィールドの retrievable/filterable/sortable/facetable/searchableなどを設定
- インデクサー:名前、実行スケジュール:Once(1回)を指定して送信を押下し実行
- Search Explorer で検索テスト
Azure AI Search の Search Explorer を使用し、以下のようなクエリを実行
- 条件付き検索
{ "search": "New York", "count": true, "select": "metadata_storage_name,keyphrases", "filter": "metadata_storage_size lt 380000" }
- エンドポイント&APIキーを使用してアプリを実行
python search-app.py
- 検索クエリを対話的に入力
検索クエリに対応する検索結果が取得できるかを確認
- ナレッジ ストアの確認
ストレージ アカウント の ストレージ・ブラウザ で以下を確認:
- Blob:各ドキュメントごとに JSON が生成され、抽出情報が格納
- File:PDF 内の画像が JPEG として保存される
- Table:
・margiesSkillsetDocument?(ドキュメント一覧)
・margiesSkillsetKeyPhrases?(抽出キーフレーズ)
- クリーンアップ(課金防止)
- Azure Portal で、演習で使用したリソースグループを開く。
- Delete resource group を実行し、すべての関連リソースを削除。
詳細 †
以下、機械学習や深層学習の知識のみで回答可能なものは省略してある。
参考 †
リンク(公式) †
Training | Microsoft Learn †
学習ガイド †
製品ドキュメント系 †
ネット情報 †
コース †
試験前 †
申し込み †
Tags: :.NET開発, :構成管理ツール, :CI, :BI/AI