AzureChatOpenAI
本指南将帮助你开始使用 AzureOpenAI 聊天模型。有关所有 AzureChatOpenAI 功能和配置的详细文档,请转到 API 参考。
Azure OpenAI 有多种聊天模型。可以在 Azure 文档中找到有关其最新模型及其成本、上下文窗口和支持的输入类型的信息。
Azure OpenAI 是指托管在 Microsoft Azure 平台上的 OpenAI 模型。OpenAI 也提供了自己的模型 API。要直接访问 OpenAI 服务,请使用 ChatOpenAI 集成。
概述
集成详细信息
| 类 | 包 | 本地化 | 序列 化 | JS 支持 | 软件包下载 | 最新包装 |
|---|---|---|---|---|---|---|
| AzureChatOpenAI | langchain-openai | ❌ | beta | ✅ |
模型特点
| 工具调用 | 结构化输出 | JSON 模式 | 图像输入 | 音频输入 | 视频输入 | 令牌级流式处理 | 本机异步 | Token 使用情况 | 日志 |
|---|---|---|---|---|---|---|---|---|---|
| ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ |
设置
若要访问 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
实例
现在我们可以实例化我们的 Model 对象并生成聊天补全。
- 取代
azure_deployment替换为您的部署名称, - 您可以找到最新的 Supported
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.
链接
我们可以用 prompt 模板链接我们的模型,如下所示:
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_nameresponse 元数据属性,该属性是用于生成响应的模型的名称。但是,与本机 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