LoginSignup
18
9

Power Platform から VNet を使用して Azure OpenAI へ通信する

Last updated at Posted at 2023-07-10

はじめに

これまで、Power Platform と Azure OpenAI を連携する方法についていくつか記事を書いてきました。

ローコードのため、かなり早く作成できますし、ちょっとしたカスタマイズ、修正もすぐに出来るのがメリットです。

しかし、以下のような構成の場合、すぐに作成できますが、Power Automate から Azure OpenAI への通信周りについて、パブリックな通信になってしまう点が気になります。

image.png

対して、以下のような構成の場合、Azure APIM への通信については、パブリックな通信となってしまいますが、Azure AD で認証認可周りが強化されています。

image.png

しかし、こちらの構成については、色々柔軟性はあるものの、実装のハードルが高くなってしまいます。

そのため、今回は、以下の機能を利用して、Power Platform から VNet を使用して Azure OpenAI へ通信する方法について試してみた結果を共有しようと思います。

マイクロソフトサポートチームの以下のブログ記事より、こちらの機能のプレビューが取り下げられたようです。。内部的には、機能自体は削除されていないようですが、残念ながら本機能は現状サポートされていないようです。Power Platform から Azure OpenAI の生成 AI を利用するという意味では、その他の記事で紹介している通り、AI Builder を利用する方法がございます。しかし、利用するモデル、機能等の要件により、直接 Azure OpenAI と連携したいというケースも多くあると思います。結果的に、生成 AI 技術を民主化 (誰でも利用できるようにする) という意味でも、もちろん、マイクロソフトのビジネスにとってもメリットがあると思うので、Power Platform と Azure OpenAI のネットワークセキュリティ強化の観点でその他代替案が出てくることを期待したいです。

以下、イメージになります。

image.png

仮想ネットワーク データ ゲートウェイの作成

サブスクリプションで、Microsoft.PowerPlatform プロバイダーを選択し、登録を行います。

image.png

仮想ネットワークを作成し、[サブネットの委任]ドロップダウン リストから [Microsoft.PowerPlatform/vnetaccesslinks] を選択します。

image.png

ネットワーク共同作成者を付与しておきます。

image.png

Power Platform 側で、VNet データ ゲートウェイを作成します。

image.png

image.png

権限が不足していると、以下のようなエラーが出ます。

image.png

Azure OpenAI の設定変更

Azure OpenAI 側では、以下のように、選択したネットワークから接続を受け付けるようにして、作成した仮想ネットワークを選択します。

image.png

カスタムコネクタ―の設定

まず、カスタムコネクタベースで、Azure OpenAI の ChatGPT と連携させる際のアプローチは以下のような感じです。

Power Apps 側

Power Apps 側で送信ボタンを押した際の処理は以下のような感じです。colChat コレクションに Power Automate からの戻り値を格納していきます。他の記事で書いたように、トークンが増えてきた際は少し加工してもいいかもです。

Set(
    gblChatGPTCustomConnectorResponse,
    ChatGPTAzureOpenAICustomConnector.Run(
        JSON(
            Collect(
                colChat,
                {
                    role: "user",
                    content: txtRequestDetail.Text
                }
            )
        )
    )
);
Collect(
    colChat,
    {
        role: gblChatGPTCustomConnectorResponse.role,
        content: gblChatGPTCustomConnectorResponse.content
    }
);

Power Automate 側

Power Autoamte 側は非常にシンプルです。

image.png

Power Apps から受け取った値を以下のようにしてカスタムコネクタに渡します。

JSON(triggerBody()['text'])

カスタムコネクタの戻り値を以下のようにして Power Apps に返します。

first(outputs('callChatGPT')?['body/choices'])?['message']?['content']

first(outputs('callChatGPT')?['body/choices'])?['message']?['role']

仮想ネットワークゲートウェイ経由で利用する

カスタムコネクタ―側では、以下の設定をオンにし、接続作成時にゲートウェイを選択します。

image.png

image.png

動作確認

まず、HTTP コネクタで Azure OpenAI に接続しようとすると、以下の通りエラーになりました。

image.png

エラーメッセージより、正しく動作しているようです。

{
  "error": {
    "code": "AccessDenied",
    "message": "A Virtual Network is configured for this resource. Please use the correct endpoint for making requests. Check https://aka.ms/cogsvc-vnet for more details."
  },
  "debugInfo": "clientRequestId: bc9b949f-e76b-429b-990e-9592fb206f3f"
}

プレイグラウンドでも以下の通りエラーになります。

image.png

次に、カスタムコネクタで接続してみます。無事に結果を取得できました。

image.png

まとめ

今回、仮想ネットワーク データ ゲートウェイを使用して、Power Platform から Azure OpenAI への接続をセキュアにする方法について説明しました。

既にカスタムコネクタで実装をしている場合は、少し変更をするだけで実現できる方法のため、Power Platform と Azure OpenAI を連携させる一つのソリューションとして参考にしていただけると幸いです。

18
9
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
9