Microsoft Foundry のモデルで LangChain を使用する

langchain-azure-ai を使用して、Microsoft Foundry にデプロイされたモデルを呼び出す LangChain アプリをビルドします。 OpenAI と互換性のある API を持つモデルを直接使用できます。 この記事では、チャットと埋め込みのクライアントを作成し、プロンプト チェーンを実行し、生成と検証ワークフローを組み合わせます。

前提 条件

  • Azure サブスクリプション。 無料で作成します

  • Foundry プロジェクト

  • Foundry プロジェクトにおける Foundry User ロール。

    重要

    Foundry RBAC ロールの名前が最近変更されました。 Foundry User, Foundry Owner, Foundry Account Owner、および Foundry Project Manager は、以前は、AZURE AI ユーザー、Azure AI 所有者、Azure AI アカウント所有者、および AZURE AI Project Manager という名前でした。 名前の変更がロールアウトされている間、以前の名前が表示される場合があります。ロール ID とコア アクセス許可は、名前の変更によって変更されません。

  • gpt-4.1Mistral-Large-3など、OpenAI と互換性のある API をサポートするデプロイされたチャット モデル。

  • text-embedding-3-largeなど、デプロイされた埋め込みモデル。

  • Python 3.9 以降。

必要なパッケージをインストールします。

pip install -U langchain langchain-azure-ai azure-identity

重要

langchain-azure-ai では、新しい Microsoft Foundry SDK (v2) が使用されます。 Foundry クラシックを使用している場合は、langchain-azure-ai[v1] を使用します。これは、Azure AI Inference SDK (レガシ) を使用します。 詳細については、こちらをご覧ください

環境を構成する

次のいずれかの接続パターンを設定します。

  • Microsoft Entra IDを使用したプロジェクトのエンドポイント (推奨)。
  • API キーを使用したダイレクト エンドポイント。
import os

# Option 1: Project endpoint (recommended)
os.environ["AZURE_AI_PROJECT_ENDPOINT"] = (
	"https://<resource>.services.ai.azure.com/api/projects/<project>"
)

# Option 2: Direct OpenAI-compatible endpoint + API key
os.environ["OPENAI_BASE_URL"] = (
	"https://<resource>.services.ai.azure.com/openai/v1"
)
os.environ["OPENAI_API_KEY"] = "<your-api-key>"

このスニペットの機能: プロジェクト ベースまたは直接エンドポイント アクセス用に langchain-azure-ai モデル クラスによって使用される環境変数を定義します。

チャット モデルを使用する

次の init_chat_modelを使用して、モデルを簡単にインスタンス化できます。

from langchain.chat_models import init_chat_model

model = init_chat_model("azure_ai:gpt-4.1")

重要

init_chat_modelを使用するには、langchain>=1.2.13が必要です。 バージョンを更新できない場合は、クライアントを 直接構成します。

OpenAI と互換性のある API をサポートするすべての Foundry モデルをクライアントで使用できますが、最初に Foundry リソースにデプロイする必要があります。 project_endpoint (環境変数 AZURE_AI_PROJECT_ENDPOINT) を使用するには、認証とロール Foundry User のMicrosoft Entra IDが必要です。

このスニペットの機能:init_chat_model便利なメソッドを使用して、チャット モデル クライアントを作成します。 クライアントは、Foundry プロジェクト エンドポイントまたは環境で構成された直接エンドポイントを介して、指定されたモデルにルーティングされます。

参照:

セットアップを確認する

単純なモデル呼び出しを実行します。

response = model.invoke("Say hello")
response.pretty_print()
================================== Ai Message ==================================
Hello! 👋 How can I help you today?

このスニペットの機能: エンドポイント、認証、およびモデルのルーティングを確認するための基本的なプロンプトを送信します。

参照:

構成可能なモデル

configurable_fieldsを指定して、ランタイムで構成可能なモデルを作成することもできます。 model パラメーターを省略すると、既定で構成可能なフィールドになります。

from langchain.chat_models import init_chat_model
from azure.identity import DefaultAzureCredential

configurable_model = init_chat_model(
    model_provider="azure_ai", 
    temperature=0,
	credential=DefaultAzureCredential()
)


configurable_model.invoke(
    "what's your name",
    config={"configurable": {"model": "gpt-5-nano"}},  # Run with GPT-5-nano
).pretty_print()

configurable_model.invoke(
    "what's your name",
    config={"configurable": {"model": "Mistral-Large-3"}}, # Run with Mistral Large
).pretty_print()
================================== Ai Message ==================================

Hi! I'm ChatGPT, an AI assistant built by OpenAI. You can call me ChatGPT or just Assistant. How can I help you today?
================================== Ai Message ==================================

I don't have a name, but you can call me **Assistant** or anything you like! 😊 What can I help you with today?

このスニペットの機能: 呼び出し時にモデルを簡単に切り替える構成可能なモデル インスタンスを作成します。 model パラメーターはinit_chat_modelにないため、既定では構成可能なフィールドであり、invoke()で渡すことができます。 configurable_fieldsを構成することで、構成可能な他のフィールドを追加できます。

クライアントを直接構成する

また、 AzureAIOpenAIApiChatModel クラスを使用してチャット モデル クライアントを作成することもできます。

import os

from azure.identity import DefaultAzureCredential
from langchain_azure_ai.chat_models import AzureAIOpenAIApiChatModel

model = AzureAIOpenAIApiChatModel(
	project_endpoint=os.environ["AZURE_AI_PROJECT_ENDPOINT"],
	credential=DefaultAzureCredential(),
	model="Mistral-Large-3",
)

既定では、 AzureAIOpenAIApiChatModel は OpenAI Responses API を使用します。 この動作は、 use_responses_api=False渡すことで変更できます。

import os

from azure.identity import DefaultAzureCredential
from langchain_azure_ai.chat_models import AzureAIOpenAIApiChatModel

model = AzureAIOpenAIApiChatModel(
    endpoint=os.environ["AZURE_AI_PROJECT_ENDPOINT"],
    credential=DefaultAzureCredential(),
    model="Mistral-Large-3",
    use_responses_api=False
)

非同期呼び出しを実行する

アプリが ainvokeを使用してモデルを呼び出す場合は、非同期資格情報を使用します。 認証にMicrosoft Entra IDを使用する場合は、資格情報に対応する非同期実装を使用します。

import os

from azure.identity.aio import DefaultAzureCredential as DefaultAzureCredentialAsync
from langchain_azure_ai.chat_models import AzureAIOpenAIApiChatModel

model = AzureAIOpenAIApiChatModel(
	project_endpoint=os.environ["AZURE_AI_PROJECT_ENDPOINT"],
	credential=DefaultAzureCredentialAsync(),
	model="gpt-4.1",
)


async def main():
	response = await model.ainvoke("Say hello asynchronously")
	response.pretty_print()


import asyncio
asyncio.run(main())

ヒント

このコードを Jupyter ノートブックで実行する場合は、await main()ではなく、asyncio.run(main())を直接使用できます。

================================== Ai Message ==================================
Hello! 👋 How can I help you today?

このスニペットの機能: 非同期クライアントを作成し、 ainvokeを使用して非ブロッキング要求を実行します。

参照:

推論

多くのモデルでは、結論を得るために複数ステップの推論を実行できます。 これには、複雑な問題をより小さく、より管理しやすい手順に分割する必要があります。

from langchain.chat_models import init_chat_model

model = init_chat_model("azure_ai:DeepSeek-R1-0528")

for chunk in model.stream("Why do parrots have colorful feathers?"):
    reasoning_steps = [r for r in chunk.content_blocks if r["type"] == "reasoning"]
    print(reasoning_steps if reasoning_steps else chunk.text, end="")

print("\n")
Parrots have colorful feathers primarily due to a combination of evolutionary ...

参照:

サーバー側ツール

Foundry にデプロイされた OpenAI モデルは、サーバー側のツール呼び出しループをサポートします。モデルは、Web 検索、コード インタープリター、その他のツールと対話し、その結果を 1 回の会話ターンで分析できます。 モデルがツール サーバー側を呼び出す場合、応答メッセージの内容には、ツールの呼び出しと結果を表すコンテンツが含まれます。

重要

名前空間 langchain_azure_ai.tools.builtin のツールは、OpenAI モデルでのみサポートされます。

これらは、モデルの機能を拡張する OpenAI によって提供されるツールです。 サポートされているツールの完全な一覧については、 組み込みのツールを参照してください。

次の例は、Web 検索の使用方法を示しています。

from langchain.chat_models import init_chat_model
from langchain_azure_ai.tools.builtin import WebSearchTool
from azure.identity import DefaultAzureCredential

model = init_chat_model("azure_ai:gpt-4.1", credential=DefaultAzureCredential())
model_with_web_search = model.bind_tools([WebSearchTool()])

result = model_with_web_search.invoke("What is the current price of gold? Give me the answer in one sentence.")
result.content[-1]["text"]
As of today, March 24, 2026, the spot price of gold is approximately $4,397.80 per ounce. ([tradingeconomics.com](https://tradingeconomics.com/commodity/gold))

一部のツールでは、プロジェクト内の他のリソースの構成が必要になる場合があります。 azure-ai-projectsを使用してこれらのリソースを構成し、LangChain/LangGraph から参照します。

次の例は、ツールで使用する前にファイル ストアを構成する方法を示しています。

import os
from azure.ai.projects import AIProjectClient
from azure.identity import DefaultAzureCredential

# Create clients to call Foundry API
project = AIProjectClient(
    endpoint=os.environ["AZURE_AI_PROJECT_ENDPOINT"],
    credential=DefaultAzureCredential(),
)
openai = project.get_openai_client()

# Create vector store and upload file
vector_store = openai.vector_stores.create(name="ProductInfoStore")
vector_store_id = vector_store.id

with open("product_info.md", "rb") as file_handle:
    vector_store_file = openai.vector_stores.files.upload_and_poll(
        vector_store_id=vector_store.id,
        file=file_handle,
    )

このスニペットで行う内容: 後でそのファイルの内容をモデルが検索できるように、Microsoft Foundry のファイルを含むベクター ストアを設定します (次のコード ブロックの FileSearchTool で使用されます)。

from langchain_azure_ai.tools.builtin import FileSearchTool

model_with_tools = model.bind_tools([FileSearchTool(vector_store_ids=[vector_store.id])])

results = model_with_tools.invoke("Tell me about Contoso products")
print("Answer:", results.content[-1]["text"])
print("Annotations:", results.content[-1]["annotations"])
Answer: Contoso offers the following products:

1. **The widget**
   - Description: A high-quality widget that is perfect for all your widget needs.
   - Price: $19.99

2. **The gadget**
   - Description: An advanced gadget that offers exceptional performance and reliability.
   - Price: $49.99

These products are part of Contoso's main offerings as detailed in their product information documentation.
Annotations: [{'file_id': 'assistant-MvU5SEqUcUBumoLUV5BXxn', 'filename': 'product_info.md', 'type': 'file_citation', 'file_index': 395}]

エージェントで Foundry モデルを使用する

Foundry に接続されているモデルで create_agent を使用して、ReAct スタイルのエージェント ループを作成します。

from langchain.agents import create_agent

agent = create_agent(
    model="azure_ai:gpt-5.2", 
    system_prompt="You're an informational agent. Answer questions cheerfully.", 
)

response = agent.invoke({"messages": "what's your name?"})
response["messages"][-1].pretty_print()
================================== Ai Message ==================================

I’m ChatGPT, your AI assistant.

サーバー側ツールも使用できますが、 bind_toolsを呼び出す必要があります。

from langchain.chat_models import init_chat_model
from langchain.agents import create_agent
from langchain_azure_ai.tools.builtin import ImageGenerationTool

model = init_chat_model("azure_ai:gpt-5.2")
tools = [ImageGenerationTool(model="gpt-image-1.5", size="1024x1024")]
model_with_tools = model.bind_tools(tools)

agent = create_agent(
    model=model_with_tools,
    tools=tools,
    system_prompt="You're an informational agent. Answer questions with graphics.", 
)

ヒント

Foundry のイメージ生成ツールでは、 x-ms-oai-image-generation-deploymentヘッダーの一部として、イメージ生成用のモデル デプロイ名を渡す必要があります。 langchain-azure-aiを使用する場合、これは自動的に処理されます。 ただし、 langchain-openaiでこのツールを使用する場合は、ヘッダーを手動で渡す必要があります。

埋め込みモデルを使用する

次の init_embeddingsを使用して、モデルを簡単にインスタンス化できます。

from langchain.embeddings import init_embeddings

embed_model = init_embeddings("azure_ai:text-embedding-3-small")

このスニペットの機能:init_embeddings便利なメソッドを使用して、埋め込みモデル クライアントを作成します。

OpenAI と互換性のある API をサポートするすべての Foundry モデルをクライアントで使用できますが、最初に Foundry リソースにデプロイする必要があります。 project_endpoint (環境変数 AZURE_AI_PROJECT_ENDPOINT) を使用するには、認証とロール Foundry User のMicrosoft Entra IDが必要です。

または、 AzureAIOpenAIApiEmbeddingsModelを使用して埋め込みクライアントを作成します。

import os

from azure.identity import DefaultAzureCredential
from langchain_azure_ai.embeddings import AzureAIOpenAIApiEmbeddingsModel

embed_model = AzureAIOpenAIApiEmbeddingsModel(
	project_endpoint=os.environ["AZURE_AI_PROJECT_ENDPOINT"],
	credential=DefaultAzureCredential(),
	model="text-embedding-3-large",
)

直接エンドポイントと API キー認証の場合:

import os

from langchain_azure_ai.embeddings import AzureAIOpenAIApiEmbeddingsModel

embed_model = AzureAIOpenAIApiEmbeddingsModel(
	endpoint=os.environ["OPENAI_BASE_URL"],
	credential=os.environ["OPENAI_API_KEY"],
	model="text-embedding-3-large",
)

このスニペットの機能: ベクター検索、取得、およびランク付けワークフローの埋め込み生成を構成します。

参照:

例: ベクター ストアを使用して類似性検索を実行する

ローカル実験にはメモリ内ベクター ストアを使用します。

from langchain_core.documents import Document
from langchain_core.vectorstores import InMemoryVectorStore

vector_store = InMemoryVectorStore(embed_model)

documents = [
	Document(id="1", page_content="foo", metadata={"baz": "bar"}),
	Document(id="2", page_content="thud", metadata={"bar": "baz"}),
]

vector_store.add_documents(documents=documents)

results = vector_store.similarity_search(query="thud", k=1)
for doc in results:
	print(f"* {doc.page_content} [{doc.metadata}]")
* thud [{'bar': 'baz'}]

このスニペットの機能: ベクター ストアにサンプル ドキュメントを追加し、クエリの最も似たドキュメントを返します。

参照:

ログ記録を使用して要求をデバッグする

デバッグ ログ langchain_azure_ai 有効にして、要求フローを検査します。

import logging
import sys

logger = logging.getLogger("langchain_azure_ai")
logger.setLevel(logging.DEBUG)

handler = logging.StreamHandler(stream=sys.stdout)
formatter = logging.Formatter(
	"%(asctime)s:%(levelname)s:%(name)s:%(message)s"
)
handler.setFormatter(formatter)
logger.addHandler(handler)

このスニペットが行う内容:エンドポイントまたはペイロードの問題のトラブルシューティングに役立つ詳細な SDK ログを出力するようにPythonログを構成します。

参照:

環境変数リファレンス

次の環境変数を構成できます。 これらの値は、オブジェクトを構築するときにも構成できます。

変数 役割 コンストラクターのパラメーター
AZURE_AI_PROJECT_ENDPOINT Foundry プロジェクト エンドポイント。 プロジェクト エンドポイントを使用するには、Microsoft Entra ID認証が必要です (推奨)。 https://contoso.services.ai.azure.com/api/projects/my-project project_endpoint
AZURE_OPENAI_ENDPOINT OpenAI のリソースの基点。 https://contoso.openai.azure.com なし。
OPENAI_BASE_URL モデル呼び出しに使用される OpenAI 互換の直接エンドポイント。 https://contoso.services.ai.azure.com/openai/v1 endpoint
OPENAI_API_KEY または AZURE_OPENAI_API_KEY キーベースの認証に OPENAI_BASE_URL または AZURE_OPENAI_ENDPOINT で使用される API キー。 <your-api-key> credential
AZURE_OPENAI_DEPLOYMENT_NAME Foundry または OpenAI リソース内のモデルのデプロイ名。 Foundry ポータルで名前を確認します。デプロイ名は、使用される基になるモデルとは異なる場合があります。 OpenAI 互換 API をサポートするすべてのモデルを使用できますが、すべてのパラメーターがサポートされているわけではありません。 Mistral-Large-3 model
AZURE_OPENAI_API_VERSION 使用する API バージョン。 api_versionが使用可能になったら、OpenAI クライアントを構築し、api-versionを使用して default_query クエリ パラメーターを挿入します。 v1 または preview api_version

重要

AZURE_AI_INFERENCE_ENDPOINTまたはAZURE_AI_CREDENTIALS (レガシ) に使用AzureAIChatCompletionsModel環境変数とAzureAIEmbeddingsModelは使用されなくなりました。

次の手順