Microsoft Foundry'de modellerle LangChain kullanma

langchain-azure-ai kullanarak Microsoft Foundry'de dağıtılan modelleri çağıran LangChain uygulamaları oluşturun. OpenAI uyumlu API'lere sahip modeller doğrudan kullanılabilir. Bu makalede sohbet ve ekleme istemcileri oluşturacak, istem zincirlerini çalıştıracak ve oluşturma işlemini doğrulama iş akışlarıyla birleştiracaksınız.

Önkoşullar

  • Azure aboneliği. Ücretsiz bir tane oluşturun.
  • Dökümhane projesi.
  • Foundry projesindeki Azure AI User rolü.
  • gpt-4.1 veya Mistral-Large-3 gibi OpenAI uyumlu API'leri destekleyen dağıtılmış bir sohbet modeli.
  • text-embedding-3-large gibi dağıtılmış bir gömme modeli.
  • Python 3.9 veya üzeri.

Gerekli paketleri yükleyin:

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

Önemli

langchain-azure-ai yeni Microsoft Döküm SDK'sını (v2) kullanır. Foundry klasik kullanıyorsanız langchain-azure-ai[v1] kullanın; bu, Azure AI Çıkarım SDK'sını (eski) kullanır. Daha fazla bilgi edinin.

Ortamı yapılandırma

Aşağıdaki bağlantı desenlerinden birini ayarlayın:

  • Microsoft Entra ID ile Project uç noktası (önerilir).
  • API anahtarıyla doğrudan uç nokta.
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>"

Bu kod parçacığının yaptığı iş: Proje tabanlı veya doğrudan uç nokta erişimi için model sınıfları tarafından langchain-azure-ai kullanılan ortam değişkenlerini tanımlar.

Sohbet modellerini kullanma

kullanarak init_chat_modelbir modelin örneğini kolayca oluşturabilirsiniz:

from langchain.chat_models import init_chat_model

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

Önemli

Kullanmak için init_chat_modellangchain>=1.2.13 gerekir. Sürümünüzü güncelleştiremiyorsanız istemcileri doğrudan yapılandırın.

OpenAI uyumlu API'leri destekleyen tüm Foundry modelleri istemciyle kullanılabilir, ancak önce Foundry kaynağınıza dağıtılması gerekir. project_endpoint (ortam değişkeni AZURE_AI_PROJECT_ENDPOINT) kullanmak için Microsoft Entra ID ile kimlik doğrulaması ve Azure AI Kullanıcısı rolü gereklidir.

Bu kod parçacığının yaptığı iş: Kolaylık yöntemini kullanarak init_chat_model bir sohbet modeli istemcisi oluşturur. İstemci, belirtilen modele Foundry proje uç noktası veya ortama göre yapılandırılmış doğrudan uç nokta aracılığıyla yönlendirilir.

Referanslar:

Kurulumunuzu doğrulama

Basit bir model çağrısı çalıştırın:

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

Bu kod parçacığının yaptığı iş: Uç nokta, kimlik doğrulaması ve model yönlendirmesini doğrulamak için temel bir istem gönderir.

Referanslar:

Yapılandırılabilir modeller

ayrıca belirterek configurable_fieldsçalışma zamanı yapılandırılabilir bir model de oluşturabilirsiniz. parametresini model atladığınızda, varsayılan olarak yapılandırılabilir bir alan haline gelir.

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?

Bu kod parçacığının yaptığı iş: Çağırma zamanında modelleri kolayca değiştirmenizi sağlayan yapılandırılabilir bir model örneği oluşturur. model parametresi içinde init_chat_modeleksik olduğundan, varsayılan olarak yapılandırılabilir bir alandır ve ile invoke()geçirilebilir. configurable_fields yapılandırarak, yapılandırılabilir olacak başka alanlar ekleyebilirsiniz.

İstemcileri doğrudan yapılandırın

Sınıf kullanarak AzureAIOpenAIApiChatModel sohbet modeli istemcisi de oluşturabilirsiniz.

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

Varsayılan olarak OpenAI AzureAIOpenAIApiChatModel Yanıtları API'sini kullanır. use_responses_api=False geçirerek bu davranışı değiştirebilirsiniz.

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
)

Zaman uyumsuz çağrıları çalıştırma

Uygulamanız ainvoke modellerini çağırıyorsa, zaman uyumsuz kimlik bilgilerini kullanın. Kimlik doğrulaması için Microsoft Entra ID kullanırken, kimlik bilgileri için ilgili zaman uyumsuz uygulamayı kullanın:

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

Ipucu

Bu kodu bir Jupyter not defterinde çalıştırırsanız, yerine await main()doğrudan kullanabilirsinizasyncio.run(main()).

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

Bu kod parçacığının yaptığı iş: Zaman uyumsuz bir istemci oluşturur ve ainvoke ile bloklanmayan bir istek çalıştırır.

Referanslar:

Akıl

Birçok model, bir sonuca ulaşmak için çok adımlı mantık gerçekleştirebilir. Bu, karmaşık sorunları daha küçük ve daha yönetilebilir adımlara ayırmayı içerir.

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

Referanslar:

Sunucu tarafı araçları

Foundry'de dağıtılan OpenAI modelleri sunucu tarafı araç çağırma döngülerini destekler: modeller web araması, kod yorumlayıcıları ve diğer araçlarla etkileşime girip sonuçları tek bir konuşma dönüşünde analiz edebilir. Model bir araç sunucu tarafı çağırırsa, yanıt iletisinin içeriği aracın çağrısını ve sonucunu temsil eden içeriği içerir.

Önemli

Ad alanı langchain_azure_ai.tools.builtin içindeki araçlar yalnızca OpenAI modellerinde desteklenir.

Bunlar OpenAI tarafından sağlanan ve modelin özelliklerini genişleten araçlardır. Desteklenen araçların tam listesini görmek için bkz. yerleşik araçlar.

Aşağıdaki örnekte web aramasının nasıl kullanılacağı gösterilmektedir:

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

Bazı araçlar projenizdeki diğer kaynakların yapılandırılması gerektirebilir. Bu kaynakları yapılandırmak ve ardından LangChain/LangGraph'dan bunlara başvurmak için kullanın azure-ai-projects .

Aşağıdaki örnekte, bir araçta kullanmadan önce dosya deposunun nasıl yapılandırılır gösterilmektedir:

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

Bu kod parçacığının yaptığı iş: Modelin daha sonra söz konusu dosyanın içeriğini (sonraki kod bloğunda FileSearchTool ile birlikte) arayabilmesi için Microsoft Foundry'de dosya içeren bir vektör deposu ayarlar.

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

Aracılarda Foundry modellerini kullanma

ReAct tarzı araç döngüleri oluşturmak için create_agent ile Foundry'ye bağlı modelleri kullanın.

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.

Sunucu tarafı araçları da kullanılabilir, ancak çağrılması gerekir 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.", 
)

Ipucu

Foundry'deki görüntü oluşturma aracı, model dağıtım adının bir üst bilgiye dahil edilmesini, böylece görüntü oluşturmanın sağlanmasını gerektirir. x-ms-oai-image-generation-deployment kullanılırken langchain-azure-aibu işlem otomatik olarak işlenir. Ancak, bu aracı langchain-openai ile kullanmayı planlıyorsanız, üst bilgiyi el ile vermeniz gerekir.

Ekleme modellerini kullanma

kullanarak init_embeddingsbir modelin örneğini kolayca oluşturabilirsiniz:

from langchain.embeddings import init_embeddings

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

Bu kod parçacığının yaptığı iş: Kolaylık yöntemini kullanarak init_embeddings bir ekleme modeli istemcisi oluşturur.

OpenAI uyumlu API'leri destekleyen tüm Foundry modelleri istemciyle kullanılabilir, ancak önce Foundry kaynağınıza dağıtılması gerekir. project_endpoint (ortam değişkeni AZURE_AI_PROJECT_ENDPOINT) kullanmak için Microsoft Entra ID ile kimlik doğrulaması ve Azure AI Kullanıcısı rolü gereklidir.

veya AzureAIOpenAIApiEmbeddingsModel ile embeddings istemcisini oluşturabilirsiniz.

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

Doğrudan uç nokta ve API anahtarı kimlik doğrulaması için:

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

Bu kod parçacığının yaptığı iş: Vektör arama, çıkarım ve sıralama iş akışları için gömme oluşturmayı yapılandırmak.

Referanslar:

Örnek: Vektör deposuyla benzerlik araması çalıştırma

Yerel denemeler için bellek içi vektör deposu kullanın.

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

Bu kod parçacığının yaptığı iş: Vektör deposuna örnek belgeler ekler ve sorgu için en benzer belgeyi döndürür.

Referanslar:

Günlüğe kaydetme ile isteklerde hata ayıklama

İstek akışını incelemek için hata ayıklama günlüğünü etkinleştirinlangchain_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)

Bu kod parçacığı: Uç nokta veya yük sorunlarını gidermeye yardımcı olan ayrıntılı SDK logları çıkarmak üzere Python günlüğünü yapılandırır.

Referanslar:

Ortam değişkenleri rehberi

Aşağıdaki ortam değişkenlerini yapılandırabilirsiniz. Bu değerler, nesneleri oluştururken de yapılandırılabilir:

Değişken Rolü Örnek Oluşturucuda parametre
AZURE_AI_PROJECT_ENDPOINT Dökümhane proje uç noktası. Proje uç noktasının kullanılması için Microsoft Entra ID kimlik doğrulaması gerekir (önerilir). https://contoso.services.ai.azure.com/api/projects/my-project project_endpoint
AZURE_OPENAI_ENDPOINT OpenAI kaynaklarını destekleyin. https://contoso.openai.azure.com Hiçbiri.
OPENAI_BASE_URL OpenAI uyumlu doğrudan uç nokta model çağrıları için kullanılır. https://contoso.services.ai.azure.com/openai/v1 endpoint
OPENAI_API_KEY Veya AZURE_OPENAI_API_KEY Veya OPENAI_BASE_URL ile AZURE_OPENAI_ENDPOINT anahtar tabanlı kimlik doğrulaması için kullanılan API anahtarı. <your-api-key> credential
AZURE_OPENAI_DEPLOYMENT_NAME Modelin Foundry veya OpenAI kaynağındaki dağıtım adı. Dağıtım adlarının kullanılan temel modelden farklı olabileceğini göz önünde bulundurarak, Foundry portalında kayıtlı adı kontrol edin. OpenAI uyumlu API'leri destekleyen tüm modeller kullanılabilir, ancak tüm parametreler desteklenmeyebilir. Mistral-Large-3 model
AZURE_OPENAI_API_VERSION Kullanılacak API sürümü. api_version kullanılabilir olduğunda OpenAI istemcilerini oluşturur ve default_query aracılığıyla api-version sorgu parametresini ekleriz. v1 Veya preview api_version

Önemli

Artık AzureAIChatCompletionsModel veya AzureAIEmbeddingsModel (eski) için kullanılan AZURE_AI_INFERENCE_ENDPOINT ve AZURE_AI_CREDENTIALS ortam değişkenleri kullanılmıyor.

Sonraki adım