Photo by Wanan Wanan from Shutterstock
**はじめに**
MicrosoftのAzure AI Foundryは、インテリジェントなアプリケーションの構築・デプロイ・管理を一元的に行える統合プラットフォームで、AI開発をシンプルにします。言語モデル、データ管理、デプロイツールを単一の環境に集約したAI開発のハブとして機能し、AI開発の複雑さを抽象化しながら、高度なソリューション構築に必要な柔軟性も両立します。
まずは大規模言語モデルの基本的な会話機能を理解するため、シンプルなチャットから始めます。続いてAzure AI Foundry Agent Serviceを取り上げ、特定のタスクをこなし、会話のコンテキストを保持し、外部データソースと連携する専用エージェントの作成方法を見ていきます。
本記事では、学習データのみで動作する基本的なエージェントを手早く作成する方法を示したうえで、追加の知識ソースを組み込み、より正確な回答を返せるよう拡張したバージョンを紹介します。最後に、これらのエージェントをアプリケーションに直接組み込み、スケーラブルでインテリジェントなソリューションを実現するためのPythonコード例をご紹介します。
Azure AI Foundryエコシステム
AIエージェントの構成要素
**Azureポータル**
本記事では、AzureポータルからAzure AI FoundryとAgent Serviceを標準構成でセットアップします。前提条件は、Azureサブスクリプションへのアクセスと、いくつかの権限を備えていることだけです。
- Azureサブスクリプションを用意します。無料で始めることも可能です。
- サブスクリプションスコープでAzure AI Account OwnerとAzure AI Project Managerのロールが付与されていることを確認します。
- Azure AI Foundryの標準セットアップを構成する場合、関連リソース(Cosmos DB、Azure AI Search、Azure Blob Storage)に対してロールを割り当てる権限が必要です。Azure AI Foundry Agent Service固有のRBACロールについては、Azure AI Foundry Agent ServiceのRBACロールをご覧ください。必要な組み込みロールはRole Based Access Administratorで、これにより
Microsoft.Authorization/roleAssignments/writeという重要な権限が付与されます。 - プロバイダーが未登録というエラーが表示された場合は、エラーメッセージに記載されたプロバイダーを登録してください。
プロジェクトと基本AIエージェントをデプロイする
以下のカスタムデプロイテンプレートを使って、必要なAzure AI Foundryプロジェクトとエージェントをプロビジョニングします。
https://portal.azure.com/#create/Microsoft.Template/uri/https%3A%2F%2Fraw.githubusercontent.com%2Fazure-ai-foundry%2Ffoundry-samples%2Frefs%2Fheads%2Fmain%2Fsamples%2Fmicrosoft%2Finfrastructure-setup%2F40-basic-agent-setup%2Fbasic-setup.json
これによりAzureポータルが起動し、Azure AI Foundryプロジェクトが作成されます。独立した環境でAIのアイデアを素早く試したり、プロトタイプを構築したりできます。
サブスクリプションとリソースグループを選び、リージョンなどの項目を入力します。モデル関連の項目はデフォルトのままで構いません。これでプロジェクト作成とGPT-4oモデルのデプロイに必要な情報がそろいます。
「Review + create」ボタンをクリックしてテンプレートをデプロイします。完了まで数分かかります。
Azure AI Foundryリソースを作成するためのデプロイテンプレートのフォーム
デプロイが完了したら、「go to resource group」をクリックしてリソースを確認します。
デプロイされたプロジェクトが表示されたリソースグループ
プロジェクトのリンクをクリックすると、Azure AI Foundryポータルに移動します。
プロジェクトに移動するためのリンク
Azure AI Foundryポータル
モデルとチャットする
Azure AI Foundryポータルにアクセスし、プロジェクトのPlaygroundに直接移動しない場合は、メインページからプロジェクト名を選び、続いてPlaygroundsを開きます。これでgpt-4oのデプロイが自動的に選択され、モデルとのチャットを開始できます。いくつかプロンプトを送って結果を確かめてみましょう。モデルへの指示を変えてみたり、回答を特定のトピックに絞ったり、データソースを追加して独自データでモデルを補強したりすることもできます。
例えば、私はモデルに「地震に関する質問にだけ答えるように」と指示したうえで、レシピを尋ねてみました。
モデル指示のサンプルを設定したチャットPlayground
チャットボットをWebアプリとしてデプロイする
注目したい機能の一つが、シンプルなチャットボットをWebアプリとしてデプロイできる点です。デプロイには数分かかりますが、完了後はリンクからWebアプリを開いて試せます。本番運用に耐えるレベルにするには改善の余地が多々ありますが、基本的なチャットWebアプリがいかに手軽に作れるかが分かります。
Chat Playground画面の上部、「View code」ボタンの隣にある「Deploy as web app」を選択します。
チャットボットをWebアプリとしてデプロイ
デプロイ後にWebアプリを起動するには、「My assets/Web apps」から、デプロイ済みWebアプリのリンクをクリックします。

Webアプリの起動
Chat Playgroundでお気づきの通り、私はモデルに地震に関する質問のみ答えるよう指示していました。Webアプリのチャット画面でも、モデルはジョークには応じませんでしたが、地震に関する質問にはきちんと回答しました。ただし、このモデルの学習データは2023年10月までです。次のセクションでは、再学習なしにカスタムデータソースでモデルを補強する方法を紹介します。
チャットボットWebアプリの例
エージェント経由でモデルとチャットする
シンプルなエージェントを作成する
モデルとのチャットの仕組みが分かったところで、この機能をラップするエージェントで強化していきましょう。さらにカスタムデータソースでモデルの知識を補い、シンプルなPythonの例からエージェントを呼び出してみます
「Agents/New Agent」を選んで新しいエージェントを作成します。エージェント名と一連の指示を入力します。指示は必須で、エージェントが何をすべきかを具体的に書きます。今回は、地震に関する質問にだけ答えるエージェントとします。デプロイメントはデフォルトのgpt-4oのままで、TemperatureとTop Pもデフォルトで問題ありません。エージェントの設定変更は自動保存されます。

地震について会話するためのエージェント設定
「Try in playground」ボタンをクリックすると、先ほどモデルと直接チャットしたのと同じ要領でエージェントを試せます。
追加の知識でエージェントを補強する
Azure AI Foundryでは、AIアプリケーションやサービスにカスタムデータを統合する複数の方法が用意されています。本記事の範囲を超えるため詳細は割愛しますが、詳しくはこちらをご参照ください。
シンプルな例として、エージェントに地震の知識を追加するため、PDFファイルを1つデータソースとして登録します。私は2025年カムチャツカ半島地震に関するWikipediaページのPDFをダウンロードしました。同じ手順を試したい方はこちらからダウンロードできます。
PDFを用意したら、エージェント設定のKnowledge欄にある「+Add」ボタンをクリックし、「Files」を選んでファイルをアップロードします。新しいベクトルストアを作成するためのデフォルト設定はそのままで、「Upload and save」を選択します。

地震に関する追加知識をエージェントに与えるためにアップロードしたPDFファイル
もう一度「Try in playground」ボタンをクリックすると、今度は2025年7月の地震について質問できます。

データソース追加後のエージェントとのチャット
エージェントを呼び出すPythonの例
Azure AI Foundryでの基本的なエージェントの動きが分かったところで、Pythonコードからモデルエンドポイントを直接叩いてみましょう。その前に、概要ページからAzure AI FoundryプロジェクトのエンドポイントをコピーするとともにエージェントページからAgent IDを控えておきます。

Azure AI Foundryプロジェクトのエンドポイントが表示された概要ページ

Agent IDが表示されたエージェントページ
以下のソースコードをローカルにコピーし、agent_earthquake_chat.pyというファイル名で保存してください。本番運用にはまったく向かない、ちょっとお遊び程度のPythonサンプルです :)
from azure.ai.projects import AIProjectClient
from azure.identity import DefaultAzureCredential
from azure.ai.agents.models import ListSortOrder
import os
endpoint = os.getenv("AZURE_FOUNDRY_ENDPOINT")
agent_id = os.getenv("AZURE_FOUNDRY_AGENT_ID")
if not endpoint or not agent_id:
raise EnvironmentError("AZURE_FOUNDRY_ENDPOINT and AZURE_FOUNDRY_AGENT_ID must be set in your environment.")
project = AIProjectClient(
credential=DefaultAzureCredential(),
endpoint=endpoint)
agent = project.agents.get_agent(agent_id)
thread = project.agents.threads.create()
print(f"Created agent thread, ID: {thread.id}")
print("Type 'quit' to exit the chat.")
# Initial message
message = project.agents.messages.create(
thread_id=thread.id,
role="user",
content="Hi Agent"
)
run = project.agents.runs.create_and_process(
thread_id=thread.id,
agent_id=agent.id)
if run.status == "failed":
print(f"Run failed: {run.last_error}")
else:
messages = project.agents.messages.list(thread_id=thread.id, order=ListSortOrder.ASCENDING)
for message in messages:
if message.text_messages:
print(f"{message.role}: {message.text_messages[-1].text.value}")
# Chat loop
while True:
user_input = input("You: ").strip()
if user_input.lower() == "quit":
print("Conversation ended. See you next time.")
break
# Add user message
project.agents.messages.create(
thread_id=thread.id,
role="user",
content=user_input
)
# Run agent again
run = project.agents.runs.create_and_process(
thread_id=thread.id,
agent_id=agent.id)
if run.status == "failed":
print(f"Run failed: {run.last_error}")
continue
# Display latest response
messages = list(project.agents.messages.list(thread_id=thread.id, order=ListSortOrder.ASCENDING))
for message in reversed(messages):
if message.role == "assistant" and message.text_messages:
print(f"Agent: {message.text_messages[-1].text.value}\n")
break
グローバルパッケージに依存しない独立したPython環境でスクリプトを実行するための、手順とコマンドを順を追ってご紹介します。
- ダウンロードしたソースコードと同じフォルダ内で、Python仮想環境を作成します:
python3 -m venv foundry-env
2. 環境をアクティブ化します:
source foundry-env/bin/activate
3. pipをアップグレードします(推奨):
pip install --upgrade pip
4. 必要なAzure依存パッケージをインストールします:
pip install azure-ai-projects azure-identity
5. Azure AI Foundry Agent用の環境変数を、ご自身の値で設定します:
export AZURE_FOUNDRY_ENDPOINT="https://foundryyizp.services.ai.azure.com/api/projects/foundry-demo-project"
export AZURE_FOUNDRY_AGENT_ID="asst_ABCfRyUC7X4AenJN3wyRY7AJ"
6. スクリプトを実行します:
python agent_earthquake_chat.py
Pythonによるチャットの実行例
(foundry-env) david@Mac azure-ai-foundry % python agent_earthquake_chat.py
Created agent thread, ID: thread_Y9FxpLWwVELeY3wlNoE1K6ez
Type 'quit' to exit the chat.
MessageRole.USER: Hi Agent
MessageRole.AGENT: Hello! How can I assist you with earthquake-related information today?
You: What is Azure AI Foundry?
Agent: I'm here to assist with earthquake-related information only. Let me know if you have any questions about earthquakes!
You: What was the tsunami impact of the July 2025 earthquake not far from Russia?
Agent: The July 2025 earthquake off the coast of Kamchatka, Russia, had widespread tsunami impacts. Tsunami waves reached heights of up to 15 meters in some Russian regions, causing local panic and destruction, particularly in Severo-Kurilsk, Komandorsky Islands, and nearby areas. Coastal regions as far as Hawaii, Alaska, and Japan observed increased wave activity, with localized alerts issued in the Pacific Rim. Evacuations were prompted in Japan and parts of the United States due to concerns of waves exceeding several meters in height【8:0†source】【8:1†source】【8:19†source】.
You: Give me 10 bullet points explaining what happens when an earthquake occurs.
Agent: Here are 10 key points explaining what happens during an earthquake:
1. **Rupture at Fault Line**: Earthquakes begin when stress in Earth's crust surpasses the strength of the rocks, causing a sudden rupture along fault lines.
2. **Release of Energy**: This rupture releases a burst of energy in the form of seismic waves, propagating through the Earth.
3. **Seismic Waves Propagate**:
- *Primary Waves (P-Waves)*: Travel fastest and move through solids, liquids, and gases.
- *Secondary Waves (S-Waves)*: Slower than P-waves and cannot travel through liquids.
4. **Ground Shaking**: These seismic waves cause the ground to shake, with the intensity depending on the earthquake's magnitude and depth.
5. **Surface Displacement**: In some cases, visible breaks or shifts appear at the Earth's surface along the fault line.
6. **Aftershocks**: Smaller earthquakes occur as the crust adjusts to the changes caused by the mainquake.
7. **Tsunamis** (if under ocean): Submarine earthquakes displace water, potentially generating tsunamis that radiate outward.
8. **Landslides and Liquefaction**: Ground disturbances can lead to landslides or liquefaction of soils, which compromise stability in affected areas.
9. **Damage and Destruction**: Seismic activity damages buildings, infrastructure, and natural landscapes, depending on proximity and construction standards.
10. **Human Response and Resilience**: People respond with evacuations, rescue operations, and rebuilding efforts, adapting to the earthquake's aftermath.
Let me know if you'd like details on any specific aspect!
You: quit
Conversation ended. See you next time!
Azureリソースのクリーンアップ
本記事の手順で作成したリソースのコストはごく僅かですが、1〜2ドル程度はかかると見ておいてください。プロジェクトを作成し、チャットPlaygroundとPythonの例でプロンプトを数十回試した私の場合、コストは3ドル未満で済みました。
本記事で使用したAzureリソースのクリーンアップは、Azure側で非常にシンプルにできるようになっています。Azureポータルに戻り、リソースグループに移動して本記事で作成したリソースグループを選び、「Delete resource group」をクリックして削除します。

Azureポータルでリソースグループを削除
シンプルなチャットから始まり、外部知識を統合した専用エージェントの構築へと進み、最後は実環境への組み込みを想定したPythonの例で締めくくりました。Azure AI Foundryは、AIの複雑さと開発者にとっての扱いやすさのギャップを巧みに埋め、技術的な細部に振り回されることなく、洗練されたスケーラブルでインテリジェントなアプリケーションを構築するためのツールを提供します。本記事で取り上げた以外にもAzure AI Foundryには見どころが多くあります。ここでご紹介したのはほんの一部に過ぎませんが、Azureで魅力的なAIアプリケーションを構築するためのヒントときっかけになれば幸いです。
生成AIや機械学習、コスト最適化やインフラ自動化、セキュリティ強化、クラウドアーキテクチャ設計まで、DoiT Internationalは複数のクラウド領域にわたって豊富な知見を備えています。AIの導入や、その他のクラウドインフラのモダナイゼーションをDoiTがどのように支援できるかにご関心をお持ちの方は、ぜひお問い合わせのうえ、当社のクラウドエンジニアリングソリューションについてお気軽にご相談ください。