AzureChatOpenAI
本指南将帮助你开始使用 AzureOpenAI 聊天模型。如需 AzureChatOpenAI 所有功能和配置的详细文档,请访问 API 参考。
Azure OpenAI 拥有多种聊天模型。你可以在 Azure 文档 中找到有关其最新模型及其成本、上下文窗口和支持的输入类型的信息。
Azure OpenAI 指的是托管在 Microsoft Azure 平台 上的 OpenAI 模型。OpenAI 也提供自己的模型 API。要直接访问 OpenAI 服务,请使用 ChatOpenAI 集成。
概览
集成详情
| 类 | 包 | 本地 | 可序列化 | JS 支持 | 包下载量 | 包最新版本 |
|---|---|---|---|---|---|---|
| AzureChatOpenAI | langchain-openai | ❌ | beta | ✅ |
模型功能
| 工具调用 | 结构化输出 | JSON 模式 | 图像输入 | 音频输入 | 视频输入 | Token 级流式传输 | 原生异步 | Token 使用情况跟踪 | Logprobs |
|---|---|---|---|---|---|---|---|---|---|
| ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ |
设置
要访问 AzureOpenAI 模型,你需要创建一个 Azure 帐户,创建一个 Azure OpenAI 模型部署,获取部署的名称和终结点,获取 Azure OpenAI API 密钥,并安装 langchain-openai 集成包。
凭据
前往 Azure 文档 来创建你的部署并生成 API 密钥。完成此操作后,设置 AZURE_OPENAI_API_KEY 和 AZURE_OPENAI_ENDPOINT 环境变量:
import getpass
import os
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-ENDPOINT.openai.azure.com/"
为了能够自动追踪您的模型调用,请设置您的 LangSmith API 密钥:
# os.environ["LANGSMITH_API_KEY"] = getpass.getpass("Enter your LangSmith API key: ")
# os.environ["LANGSMITH_TRACING"] = "true"
安装
LangChain AzureOpenAI 集成位于 langchain-openai 包中:
%pip install -qU langchain-openai
实例化
现在我们可以实例化模型对象并生成聊天补全了。
- 将
azure_deployment替换为您部署的名称。 - 您可以在此处找到最新支持的
api_version:https://learn.microsoft.com/en-us/azure/ai-services/openai/reference。
from langchain_openai import AzureChatOpenAI
llm = AzureChatOpenAI(
azure_deployment="gpt-35-turbo", # or your deployment
api_version="2023-06-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)
ai_msg
AIMessage(content="J'adore la programmation.", response_metadata={'token_usage': {'completion_tokens': 8, 'prompt_tokens': 31, 'total_tokens': 39}, 'model_name': 'gpt-35-turbo', 'system_fingerprint': None, 'prompt_filter_results': [{'prompt_index': 0, 'content_filter_results': {'hate': {'filtered': False, 'severity': 'safe'}, 'self_harm': {'filtered': False, 'severity': 'safe'}, 'sexual': {'filtered': False, 'severity': 'safe'}, 'violence': {'filtered': False, 'severity': 'safe'}}}], 'finish_reason': 'stop', 'logprobs': None, 'content_filter_results': {'hate': {'filtered': False, 'severity': 'safe'}, 'self_harm': {'filtered': False, 'severity': 'safe'}, 'sexual': {'filtered': False, 'severity': 'safe'}, 'violence': {'filtered': False, 'severity': 'safe'}}}, id='run-bea4b46c-e3e1-4495-9d3a-698370ad963d-0', usage_metadata={'input_tokens': 31, 'output_tokens': 8, 'total_tokens': 39})
print(ai_msg.content)
J'adore la programmation.
链式处理
我们可以像这样将我们的模型与提示模板进行链式处理:
from langchain_core.prompts import ChatPromptTemplate
prompt = ChatPromptTemplate.from_messages(
[
(
"system",
"You are a helpful assistant that translates {input_language} to {output_language}.",
),
("human", "{input}"),
]
)
chain = prompt | llm
chain.invoke(
{
"input_language": "English",
"output_language": "German",
"input": "I love programming.",
}
)
AIMessage(content='Ich liebe das Programmieren.', response_metadata={'token_usage': {'completion_tokens': 6, 'prompt_tokens': 26, 'total_tokens': 32}, 'model_name': 'gpt-35-turbo', 'system_fingerprint': None, 'prompt_filter_results': [{'prompt_index': 0, 'content_filter_results': {'hate': {'filtered': False, 'severity': 'safe'}, 'self_harm': {'filtered': False, 'severity': 'safe'}, 'sexual': {'filtered': False, 'severity': 'safe'}, 'violence': {'filtered': False, 'severity': 'safe'}}}], 'finish_reason': 'stop', 'logprobs': None, 'content_filter_results': {'hate': {'filtered': False, 'severity': 'safe'}, 'self_harm': {'filtered': False, 'severity': 'safe'}, 'sexual': {'filtered': False, 'severity': 'safe'}, 'violence': {'filtered': False, 'severity': 'safe'}}}, id='run-cbc44038-09d3-40d4-9da2-c5910ee636ca-0', usage_metadata={'input_tokens': 26, 'output_tokens': 6, 'total_tokens': 32})
指定模型版本
Azure OpenAI 响应包含 model_name 响应元数据属性,该属性是用于生成响应的模型名称。但是,与原生 OpenAI 响应不同,它不包含模型的确切版本,该版本是在 Azure 中的部署上设置的。例如,它不区分 gpt-35-turbo-0125 和 gpt-35-turbo-0301。这使得确定用于生成响应的模型版本变得困难,从而可能导致例如使用 OpenAICallbackHandler 错误的计算总成本。
为了解决这个问题,您可以将 model_version 参数传递给 AzureChatOpenAI 类,该参数将添加到 LLM 输出的模型名称中。这样,您可以轻松地区分模型的不同版本。
%pip install -qU langchain-community
from langchain_community.callbacks import get_openai_callback
with get_openai_callback() as cb:
llm.invoke(messages)
print(
f"Total Cost (USD): ${format(cb.total_cost, '.6f')}"
) # without specifying the model version, flat-rate 0.002 USD per 1k input and output tokens is used
Total Cost (USD): $0.000063
llm_0301 = AzureChatOpenAI(
azure_deployment="gpt-35-turbo", # or your deployment
api_version="2023-06-01-preview", # or your api version
model_version="0301",
)
with get_openai_callback() as cb:
llm_0301.invoke(messages)
print(f"Total Cost (USD): ${format(cb.total_cost, '.6f')}")
Total Cost (USD): $0.000074
API 参考
有关所有 AzureChatOpenAI 功能和配置的详细文档,请访问 API 参考:https://python.langchain.com/api_reference/openai/chat_models/langchain_openai.chat_models.azure.AzureChatOpenAI.html
Related
- Chat model conceptual guide
- Chat model how-to guides