【備忘録】Azuer AI FoundryのPrompt フロー で Open AI のモデルを使う

# はじめに

このブログは、Azure AI Foundry の Prompt フロー を使って OpenAI のモデルを活用する際の手順や注意点をまとめた 備忘録 です。

私自身、試行錯誤しながら進めた部分も多く、設定ミスによるエラーに遭遇することもありました。そのため、同じように Azure AI Foundry を触ってみよう と思っている方の参考になればと思い、ポイントを整理して記録しています。

本記事では、ハブとプロジェクトの作成から始まり、OpenAI モデルの接続やストレージ設定、フローの実行に至るまでの手順を説明します。特に 注意が必要だった点 や 失敗から学んだこと も含めているので、スムーズにセットアップしたい方はぜひ活用してください。

# ハブとプロジェクトの作成
Azure AI Foundry を使用して OpenAI モデルを扱う際には、最初にハブとプロジェクトを作成する必要があります。これにより、作業の管理やモデルの運用がしやすくなります。ハブを作成した後、プロジェクトを設定し、適切なリソースを割り当てることで、円滑に AI モデルを活用できる環境が整います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103139/f66262f7-77ba-432f-90a7-722eb5e3bc59.png)

# OpenAI モデルを指す接続されたリソースの作成
OpenAI のモデルを利用するためには、適切な接続リソースを作成することが重要です。このリソースを設定することで、プロジェクト内でモデルへのアクセスが可能となり、スムーズな実行が実現します。Azure AI Foundry では、必要な情報を入力し、リソースを作成する手順が用意されており、簡単にセットアップできます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103139/b245f95b-2a81-4e03-bd54-2cb6bf235d2e.png)


以下のスクリーンショットでは、OpenAI モデルとの接続をハブ内で設定された状態がが示されています。

この接続には APIキー が含まれており、これは OpenAI ポータル から取得する必要があります。このキーを使用することで、Azure AI Foundry 内で OpenAI モデルを活用できるようになります。

また、この接続は ハブレベル で管理されるため、同じハブに属する 他のプロジェクトでも再利用 することが可能です。これにより、複数のプロジェクトで一貫したモデル利用が実現できます。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103139/a98581b9-231b-4351-868f-0a10010ce39e.png)

# OpenAI プロジェクトのクレジット確認
OpenAIモデルに接続された Prompt フロー を正常に動作させるためには、OpenAI プロジェクトに十分なクレジットがあること を確認する必要があります。クレジットが不足していると、Azure AI Foundry の Prompt フロー がモデルを使用できず、エラーが発生します。

実際に、以前クレジットが不足していたため、Model ノードの実行時にエラー が発生しました。この問題を回避するために、事前に OpenAI プロジェクトのクレジット残高を確認し、必要に応じて追加してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103139/ca46d34c-7878-4383-ba1c-052334e7fcbe.png)

# ストレージの設定

Prompt フロー を作成するユーザーは、関連する Azure ストレージコンテナ への書き込み権限を持っている必要があります。これは、Azure AI Foundry がさまざまなファイルやリソースをストレージアカウントに保存するためです。

適切な権限を設定することで、フローの実行時に必要なデータの保存や管理がスムーズに行えます。特に、「Storage Blob Data Contributor」 のロールを割り当てることで、ストレージ内のデータに対する書き込みや削除の操作が可能になります

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103139/1a258b01-8e74-42c9-8e1e-45a151c8b2fb.png)

Azure ポータルの権限設定画面に移動するには、以下のリンクをクリックしてください。下記のスクリーンショットに示されています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103139/0e4b549c-d857-4f0c-8133-5765c911135a.png)

Azure ポータルのストレージコンテナ管理画面にアクセスしたら、「Storage Blob Data Contributor」 のロールが自分に割り当てられていることを確認してください。

このロールを持つことで、ストレージ内のデータに対する書き込みや削除などの操作が可能になります。

また、この手順を 2つの Azure ストレージアカウントのコンテナ に対して繰り返し実行してください。これにより、必要なストレージ環境が整い、フローの実行に向けた準備が完了します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103139/e4d52873-4cb7-47d0-b8ad-dbdbdf387248.png)

# フローの作成とテンプレートの使用
作成したリソースを用いて、実際にフローを構築します。Azure AI Foundry では、テンプレートを活用して、効率的にフローを設定することが可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103139/6d069065-0850-404b-8b8c-2e673344faba.png)

# テンプレートを使用したフローの作成

今回選択したテンプレートは、Wiki の情報を基に簡単な質問に回答する 形式のものです。これにより、信頼性のある情報を活用しながら、適切な応答を生成することが可能になります。

また、「Clone」オプション を使用すると、ストレージ内のファイルをコピーし、それらをフローに追加できます。この機能を活用することで、既存のテンプレートを基にカスタマイズしながらフローを構築することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103139/480395b3-b34d-40db-abe7-eaba2e3de36d.png)

# フローの実行

フローを実行する前に、まず Compute session を開始する必要があります。これにより、フローの各ノードが適切な計算環境で動作するようになります。

また、入力データを指定することも重要です。今回は 「Nikola Tesla」 を入力文字列として設定しました。これにより、フローがこの情報を基に処理を行い、適切な結果を生成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103139/1dc390ca-0c5d-466f-82b9-748de77f9218.png)

フローを適切に動作させるためには、Prompt ノードを設定し、事前に作成した OpenAI 接続を使用するように構成することが重要です。これにより、正しくモデルにアクセスし、最適な結果を得ることができます。

なお、テンプレートには既にプロンプトが用意されていますが、自身のニーズに合わせて微調整することも可能です。内容を変更することで、より適切な応答を得たり、プロジェクトの目的に沿った調整を行ったりすることができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103139/6939e11d-6798-460f-95cc-b5123a72880e.png)


「Run」ボタンを押すと、フローが開始され、各ノードが順番に実行されます。この動作は、Jupyter Notebook のコードブロックがシーケンシャルに動作する仕組みに似ています。フローは最終的に Prompt ノードに到達し、そこで処理結果が生成されます。この結果には「SOURCES」が含まれており、情報の出典元（今回はどの Wiki 記事からの情報か）を示すことで、根拠のある回答を提供します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103139/0429219a-8e68-4744-a394-0fefdb0d848c.png)

最終的な出力は、設定したフローを実行した結果を示します。これにより、OpenAI のモデルを活用した処理の流れが確認でき、期待する成果を得ることができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103139/7a7ce70b-c595-44d4-a18b-e59c2f4ddac9.png)

きちんとSOURCESが示されているのが確認できます。