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://langchain-python.dev.org.tw/api_reference/openai/chat_models/langchain_openai.chat_models.azure.AzureChatOpenAI.html