以编程方式使用文档

您可以在 Azure 文档中找到有关 Azure OpenAI 最新模型及其成本、上下文窗口和支持的输入类型的信息 Azure 文档。有关 LangChain 中的完整 Microsoft 集成集合(包括 Azure AI Search、Azure Database for PostgreSQL 和 M365 套件等工具),请参阅 Microsoft 提供商页面.

概述

集成详情

ClassPackageSerializableJS/TS SupportDownloadsLatest Version
AzureChatOpenAIlangchain-openaibeta(npm)<a href="https://pypi.org/project/langchain-openai/" target="_blank"><img src="https://static.pepy.tech/badge/langchain-openai/month" alt="Downloads per month" noZoom height="100" class="rounded" /></a><a href="https://pypi.org/project/langchain-openai/" target="_blank"><img src="https://img.shields.io/pypi/v/langchain-openai?style=flat-square&label=%20&color=orange" alt="PyPI - Latest version" noZoom height="100" class="rounded" /></a>

模型功能

工具调用结构化输出图像输入音频输入视频输入令牌级流式输出原生异步令牌使用量对数概率

设置

要访问 Azure OpenAI 模型,您需要 创建一个 Azure 账户,创建 Azure OpenAI 模型的部署,获取部署的名称和端点,并安装 langchain-openai 集成包。

安装

    pip install -U langchain-openai
    
    uv add langchain-openai
    

凭据

ChatOpenAIAzureChatOpenAI 都支持使用 **Microsoft Entra ID** (推荐)或 **API 密钥**.

Microsoft Entra ID

Microsoft Entra ID 提供无密钥身份验证和自动令牌刷新。安装 azure-identity 包并创建令牌提供程序——同一提供程序同时适用于 ChatOpenAIAzureChatOpenAI:

pip install azure-identity
from azure.identity import DefaultAzureCredential, get_bearer_token_provider

token_provider = get_bearer_token_provider(
    DefaultAzureCredential(),
    "https://cognitiveservices.azure.com/.default",
)

API 密钥

前往 Azure 文档 创建您的部署并生成 API 密钥。设置 AZURE_OPENAI_API_KEYAZURE_OPENAI_ENDPOINT 环境变量:

if "AZURE_OPENAI_API_KEY" not in os.environ:
    os.environ["AZURE_OPENAI_API_KEY"] = getpass.getpass(
        "Enter your AzureOpenAI API key: "
    )
os.environ["AZURE_OPENAI_ENDPOINT"] = "https://YOUR-RESOURCE-NAME.openai.azure.com/"

要启用模型调用的自动跟踪,请设置您的 LangSmith API 密钥:

os.environ["LANGSMITH_API_KEY"] = getpass.getpass("Enter your LangSmith API key: ")
os.environ["LANGSMITH_TRACING"] = "true"

实例化

使用 v1 API 的 ChatOpenAI

base_url 设置为您的 Azure 端点,后跟 /openai/v1/ 。使用 v1 API,您可以调用部署在 Microsoft Foundry 中的任何模型(包括 OpenAI、Llama、DeepSeek、Mistral 和 Phi),通过单一接口指向 model 您的部署名称。

Entra ID (recommended)

将令牌提供程序传递给 api_key:

        from langchain_openai import ChatOpenAI

        llm = ChatOpenAI(
            model="gpt-5.4-mini",  # your Azure deployment name
            base_url="https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",
            api_key=token_provider,  # callable that handles token refresh
        )
        

API key

        from langchain_openai import ChatOpenAI

        llm = ChatOpenAI(
            model="gpt-5.4-mini",  # your Azure deployment name
            base_url="https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",
            api_key="your-azure-api-key",
        )
        

AzureChatOpenAI

使用 AzureChatOpenAI 处理需要传统 Azure OpenAI API 版本的情况 api_version.

Entra ID (recommended)

传递令牌提供程序到 azure_ad_token_provider:

        from langchain_openai import AzureChatOpenAI

        llm = AzureChatOpenAI(
            azure_deployment="gpt-5.4-mini",  # or your deployment
            api_version="2025-04-01-preview",  # or your api version
            azure_ad_token_provider=token_provider,
        )
        

API key

读取 AZURE_OPENAI_API_KEYAZURE_OPENAI_ENDPOINT 从环境变量:

        from langchain_openai import AzureChatOpenAI

        llm = AzureChatOpenAI(
            azure_deployment="gpt-5.4-mini",  # or your deployment
            api_version="2025-04-01-preview",  # or your api version
            temperature=0,
            max_tokens=None,
            timeout=None,
            max_retries=2,
            # other params...
        )
        

调用

messages = [
    (
        "system",
        "You are a helpful assistant that translates English to French. Translate the user sentence.",
    ),
    ("human", "I love programming."),
]
ai_msg = llm.invoke(messages)
print(ai_msg.text)
J'adore la programmation.

工具调用

使用 Pydantic 类、字典模式、LangChain 工具或函数将工具绑定到模型:

from langchain_openai import ChatOpenAI
from pydantic import BaseModel, Field


class GetWeather(BaseModel):
    """Get the current weather in a given location"""

    location: str = Field(description="The city and state, e.g. San Francisco, CA")


llm = ChatOpenAI(
    model="gpt-5.4-mini",
    base_url="https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",
    api_key="your-azure-api-key",
)

llm_with_tools = llm.bind_tools([GetWeather])

ai_msg = llm_with_tools.invoke("What is the weather like in San Francisco?")
ai_msg.tool_calls
[{'name': 'GetWeather',
  'args': {'location': 'San Francisco, CA'},
  'id': 'call_jUqhd8wzAIzInTJl72Rla8ht',
  'type': 'tool_call'}]

有关绑定工具和工具调用输出的更多信息,请参阅 工具调用 docs.

构建代理

使用 create_agent 使用 Azure OpenAI 和工具构建代理:

from langchain.agents import create_agent
from langchain_openai import ChatOpenAI

llm = ChatOpenAI(
    model="gpt-5.4-mini",
    base_url="https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",
    api_key="your-azure-api-key",
)


def get_weather(city: str) -> str:
    """Get weather for a given city."""
    return f"It's always sunny in {city}!"


agent = create_agent(
    model=llm,
    tools=[get_weather],
    system_prompt="You are a helpful assistant",
)

# Stream agent responses
stream = agent.stream_events(
    {"messages": [{"role": "user", "content": "What is the weather in SF?"}]},
    version="v3",
)
for snapshot in stream.values:
    print(snapshot["messages"][-1].text)

流式使用元数据

OpenAI 的 Chat Completions API 默认不流式传输令牌使用统计(请参阅 OpenAI API 参考中的流式传输选项).

要在流式传输时恢复令牌计数,请设置 stream_usage=True 作为初始化参数或在调用时:

from langchain_openai import ChatOpenAI

llm = ChatOpenAI(
    model="gpt-5.4-mini",
    base_url="https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",
    api_key="your-azure-api-key",
    stream_usage=True,  # [!code highlight]
)

Responses API

Azure OpenAI 支持 Responses API,它提供有状态对话、内置服务器端工具(代码解释器、图像生成、文件搜索和远程 MCP)以及结构化推理摘要。ChatOpenAI 在您设置 reasoning 参数时会自动路由到 Responses API,或者您可以显式选择加入 use_responses_api=True:

Entra ID (recommended)

        from langchain_openai import ChatOpenAI

        llm = ChatOpenAI(
            model="gpt-5.4-mini",  # your Azure deployment name
            base_url="https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",
            api_key=token_provider,
            use_responses_api=True,  # [!code highlight]
        )

        # Bind a built-in server-side tool
        llm_with_tools = llm.bind_tools(  # [!code highlight]
            [{"type": "code_interpreter", "container": {"type": "auto"}}]  # [!code highlight]
        )  # [!code highlight]

        response = llm_with_tools.invoke(
            "Use the code interpreter to compute the 25th Fibonacci number."
        )
        print(response.text)
        

API key

        from langchain_openai import ChatOpenAI

        llm = ChatOpenAI(
            model="gpt-5.4-mini",  # your Azure deployment name
            base_url="https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",
            api_key="your-azure-api-key",
            use_responses_api=True,  # [!code highlight]
        )

        # Bind a built-in server-side tool
        llm_with_tools = llm.bind_tools(  # [!code highlight]
            [{"type": "code_interpreter", "container": {"type": "auto"}}]  # [!code highlight]
        )  # [!code highlight]

        response = llm_with_tools.invoke(
            "Use the code interpreter to compute the 25th Fibonacci number."
        )
        print(response.text)
        

有关内置工具及其用法的详细信息,请参阅 Azure OpenAI Responses API 文档.

推理工作负载和摘要

Azure OpenAI 推理模型 (例如, o4-mini, gpt-5)在生成最终答案之前会花费额外的 token 来思考请求。通过 ChatOpenAI ,在 v1 API 上,你可以配置模型在推理上花费多少精力,并可选择请求其思维链的摘要。

推理力度

设置 reasoning_effort to "low", "medium", or "high"。更高的设置会让模型在推理上花费更多 token,这通常会以延迟为代价提高复杂任务的质量:

from langchain_openai import ChatOpenAI

llm = ChatOpenAI(
    model="gpt-5.4-mini",  # your Azure reasoning model deployment
    base_url="https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",
    api_key=token_provider,
    reasoning_effort="medium",
)

response = llm.invoke("Tell me about the bitter lesson.")
print(response.text)

推理摘要

通过 Responses API 使用推理模型时,你可以通过传递一个 reasoning 字典来请求模型思维链的摘要。设置 reasoning 会自动路由 ChatOpenAI 到 Responses API:

from langchain_openai import ChatOpenAI

reasoning = {
    "effort": "high",    # 'low', 'medium', or 'high'
    "summary": "auto",   # 'auto', 'concise', or 'detailed'
}

llm = ChatOpenAI(
    model="gpt-5.4-mini",  # your Azure reasoning model deployment
    base_url="https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",
    api_key=token_provider,
    reasoning=reasoning,
)

response = llm.invoke("What's the optimal strategy to win at poker?")

# Final answer
print(response.text)

# Reasoning summary blocks
for block in response.content_blocks:
    if block["type"] == "reasoning":
        print(block["reasoning"])

指定模型版本(传统 API)

使用 AzureChatOpenAI时,Azure OpenAI 响应包含一个 model_name 响应元数据属性。与原生 OpenAI 响应不同,它不包含模型的具体版本(版本在 Azure 上的部署中设置)。传递 model_version 来区分不同版本:

from langchain_openai import AzureChatOpenAI

llm = AzureChatOpenAI(
    azure_deployment="gpt-5.4-mini",  # or your deployment
    api_version="2025-04-01-preview",  # or your api version
    model_version="0301",
)

API 参考

有关所有功能和配置选项的详细文档,请访问 AzureChatOpenAI API 参考。