Použijte LangChain s modely v Microsoft Foundry

Pomocí langchain-azure-ai sestavte aplikace LangChain, které volají modely nasazené v Microsoft Foundry. Modely s rozhraními API kompatibilními s OpenAI je možné použít přímo. V tomto článku vytvoříte klienty chatu a embeddingy, spustíte řetězce příkazů a zkombinujete generování s ověřovacími pracovními postupy.

Požadavky

  • Předplatné Azure. Vytvořte si ho zdarma.

  • Projekt Foundry.

  • Role Foundry User v projektu Foundry.

    Důležité

    Nedávno byly přejmenovány role Foundry RBAC. Foundry User, Foundry Owner, Foundry Account Owner a Foundry Project Manager se dříve nazývaly Uživatel Azure AI, Vlastník Azure AI, Vlastník účtu Azure AI a Správce projektů Azure AI. Během zavádění přejmenování se stále můžou zobrazovat předchozí názvy na některých místech. ID rolí a základní oprávnění se při přejmenování nezmění.

  • Nasazený chatovací model, který podporuje rozhraní API kompatibilní s OpenAI, například gpt-4.1 nebo Mistral-Large-3.

  • Nasazený model vkládání, například text-embedding-3-large.

  • Python verze 3.9 nebo novější.

Nainstalujte požadované balíčky:

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

Důležité

langchain-azure-ai používá novou sadu Microsoft Foundry SDK (v2). Pokud používáte Foundry Classic, použijte langchain-azure-ai[v1], která používá sadu SDK pro odvozování AI Azure (starší verze). Další informace

Konfigurace prostředí

Nastavte jeden z následujících vzorů připojení:

  • Projekt koncový bod s Microsoft Entra ID (doporučeno).
  • Přímý koncový bod s klíčem rozhraní API
import os

# Option 1: Project endpoint (recommended)
os.environ["FOUNDRY_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>"

Co tento fragment kódu dělá: Definuje proměnné prostředí používané třídami langchain-azure-ai modelu pro přístup k projektovým nebo přímým koncovým bodům.

Použití chatovacích modelů

Můžete snadno vytvořit instanci modelu pomocí init_chat_model.

from langchain.chat_models import init_chat_model

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

Důležité

Použití init_chat_model vyžaduje langchain>=1.2.13. Pokud nemůžete aktualizovat verzi, nakonfigurujte klienty přímo.

Všechny modely Foundry podporující rozhraní API kompatibilní s OpenAI je možné použít s klientem, musíte je ale nejprve nasadit do prostředku Foundry. Použití project_endpoint (proměnné prostředí FOUNDRY_PROJECT_ENDPOINT) vyžaduje Microsoft Entra ID pro ověřování a roli Foundry User.

Co tento fragment kódu dělá: Vytvoří klienta modelu chatu pomocí init_chat_model metody pohodlí. Klient směruje do zadaného modelu prostřednictvím koncového bodu projektu Foundry nebo přímého koncového bodu nakonfigurovaného v prostředí.

Odkazy:

Ověření nastavení

Spusťte jednoduché spuštění modelu

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

Co tento fragment kódu dělá: Odešle základní výzvu k ověření koncového bodu, ověřování a směrování modelu.

Odkazy:

Konfigurovatelné modely

Můžete také vytvořit model konfigurovatelný za běhu zadáním configurable_fields. Když parametr vynecháte model , stane se ve výchozím nastavení konfigurovatelným polem.

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?

Co tento fragment kódu dělá: Vytvoří konfigurovatelnou instanci modelu, která umožňuje snadno přepínat modely při vyvolání. Vzhledem k tomu, že parametr model chybí v init_chat_model, je ve výchozím nastavení konfigurovatelným polem a lze ho předat s invoke(). Další pole, která lze konfigurovat, můžete přidat konfigurací configurable_fields.

Přímá konfigurace klientů

Klienta modelu chatu můžete vytvořit také pomocí AzureAIOpenAIApiChatModel třídy.

import os

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

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

Ve výchozím nastavení AzureAIOpenAIApiChatModel používá rozhraní API pro odpovědi OpenAI. Toto chování můžete změnit předáním use_responses_api=False:

import os

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

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

Spouštění asynchronních volání

Pokud vaše aplikace volá modely pomocí ainvoke, použijte asynchronní přihlašovací údaje. Při použití Microsoft Entra ID pro ověřování použijte odpovídající asynchronní implementaci přihlašovacích údajů:

import os

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

model = AzureAIOpenAIApiChatModel(
	project_endpoint=os.environ["FOUNDRY_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())

Tip

Pokud tento kód spustíte v poznámkovém bloku Jupyter, můžete přímo použít await main() místo asyncio.run(main()).

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

Co tento fragment kódu dělá: Vytvoří asynchronního klienta a spustí neblokující požadavek s ainvoke.

Odkazy:

Uvažování

Mnoho modelů může provést vícekrokové uvažování, aby dospělo k závěru. To zahrnuje rozdělení složitých problémů do menších a lépe spravovatelných kroků.

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 ...

Odkazy:

Nástroje na straně serveru

Modely OpenAI nasazené v Foundry podporují smyčky volání nástrojů na straně serveru: modely můžou pracovat s webovým vyhledáváním, interprety kódu a dalšími nástroji a pak analyzovat výsledky jediným konverzačním turnem. Pokud model vyvolá nástroj na straně serveru, obsah zprávy odpovědi bude obsahovat obsah představující vyvolání a výsledek nástroje.

Důležité

Nástroje v oboru názvů langchain_azure_ai.tools.builtin jsou podporovány pouze v modelech OpenAI.

Tyto nástroje poskytuje OpenAI, které rozšiřují možnosti modelu. Úplný seznam podporovaných nástrojů najdete v předdefinovaných nástrojích.

Následující příklad ukazuje, jak používat vyhledávání na webu:

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))

Některé nástroje můžou vyžadovat konfiguraci jiných prostředků v projektu. Použijte azure-ai-projects ke konfiguraci těchto prostředků a pak na ně referujte z LangChain/LangGraph.

Následující příklad ukazuje, jak nakonfigurovat úložiště souborů před použitím v nástroji:

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

# Create clients to call Foundry API
project = AIProjectClient(
    endpoint=os.environ["FOUNDRY_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,
    )

Co tento fragment kódu dělá: Nastaví vektorové úložiště se souborem v Microsoft Foundry, aby model mohl později prohledávat obsah daného souboru (používá se s FileSearchTool v dalším bloku kódu).

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}]

Použití modelů Foundry v agentech

Pomocí create_agent modelů připojených k Foundry můžete vytvářet smyčky agenta ve stylu 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.

Lze použít také nástroje na straně serveru, ale vyžadují volání 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.", 
)

Tip

Nástroj pro generování obrázků ve Foundry vyžaduje předání názvu nasazení modelu pro generování obrázku v rámci hlavičky. x-ms-oai-image-generation-deployment Při použití langchain-azure-aise zpracovává automaticky. Pokud ale plánujete tento nástroj používat s langchain-openai, je potřeba hlavičku předat ručně.

Použití modelů vkládání

Můžete snadno vytvořit instanci modelu pomocí init_embeddings.

from langchain.embeddings import init_embeddings

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

Co tento fragment kódu dělá: Vytvoří klienta embeddingového modelu pomocí init_embeddings zjednodušené metody.

Všechny modely Foundry podporující rozhraní API kompatibilní s OpenAI je možné použít s klientem, musíte je ale nejprve nasadit do prostředku Foundry. Použití project_endpoint (proměnné prostředí FOUNDRY_PROJECT_ENDPOINT) vyžaduje Microsoft Entra ID pro ověřování a roli Foundry User.

Nebo vytvořte klienta pro vkládání pomocí AzureAIOpenAIApiEmbeddingsModelpříkazu .

import os

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

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

Pro přímé ověření koncového bodu a ověření klíče rozhraní 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",
)

Co tento fragment kódu dělá: Nastavuje generování embeddingů pro pracovní postupy vektorového vyhledávání, načítání a řazení.

Odkazy:

Příklad: Spuštění vyhledávání podobnosti s úložištěm vektorů

Pro místní experimentování použijte úložiště vektorů v paměti.

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'}]

Co tento fragment kódu dělá: Přidá ukázkové dokumenty do úložiště vektorů a vrátí nejpodobnější dokument dotazu.

Odkazy:

Ladění požadavků pomocí protokolování

Povolením langchain_azure_ai záznamů ladění můžete zkontrolovat tok požadavku.

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)

Co tento fragment kódu dělá: Nakonfiguruje protokolování Python pro generování podrobných protokolů sady SDK, které pomáhají řešit potíže s koncovým bodem nebo datovou částí.

Odkazy:

Referenční informace k proměnným prostředí

Můžete nakonfigurovat následující proměnné prostředí. Tyto hodnoty lze také nakonfigurovat při vytváření objektů:

Proměnné Roli Příklad Parametr v konstruktoru
FOUNDRY_PROJECT_ENDPOINT Koncový bod projektu Foundry Použití koncového bodu projektu vyžaduje Microsoft Entra ID ověřování (doporučeno). https://contoso.services.ai.azure.com/api/projects/my-project project_endpoint
AZURE_OPENAI_ENDPOINT Základní zdroje pro OpenAI https://contoso.openai.azure.com Žádný.
OPENAI_BASE_URL Přímý koncový bod kompatibilní s OpenAI používaný pro volání modelu https://contoso.services.ai.azure.com/openai/v1 endpoint
OPENAI_API_KEY Nebo AZURE_OPENAI_API_KEY Klíč rozhraní API používaný pro ověřování založené na klíči pomocí OPENAI_BASE_URL nebo AZURE_OPENAI_ENDPOINT. <your-api-key> credential
AZURE_OPENAI_DEPLOYMENT_NAME Název použití modelu ve službě Foundry nebo OpenAI. Zkontrolujte název na portálu Foundry, protože názvy nasazení se můžou lišit od použitého základního modelu. Můžete použít jakýkoli model podporující rozhraní API kompatibilní s OpenAI, ale nemusí být podporovány všechny parametry. Mistral-Large-3 model
AZURE_OPENAI_API_VERSION Verze rozhraní API, která se má použít. Pokud je api_version k dispozici, vytvoříme klienty OpenAI a vložíme parametr dotazu api-version prostřednictvím default_query. v1 Nebo preview api_version

Důležité

Proměnné prostředí AZURE_AI_INFERENCE_ENDPOINT a AZURE_AI_CREDENTIALS použité pro AzureAIChatCompletionsModel nebo AzureAIEmbeddingsModel (v zastaralých systémech) se už nepoužívají.

Další krok