OpenAI 的强大 GPT 模型(包括 GPT-35-Turbo 和 GPT-4)现在可以通过 Azure OpenAI 服务 访问。
此服务使开发人员能够轻松将这些模型集成到应用程序中,用于聊天机器人、代码生成、内容创建等任务,同时受益于 Azure 强大的基础设施。
本指南将帮助您使用 Python 开始使用这些模型。
为什么选择 Azure OpenAI?
Azure OpenAI 服务通过提供以下功能将 OpenAI 模型的功能扩展到企业级别:
-
企业级安全性:完全符合 ISO、SOC 等安全标准。
-
可扩展性:利用 Azure 的全球数据中心提供可用性和性能。
-
与 Azure 服务集成:无缝集成 Azure Functions、Logic Apps 和 Azure Machine Learning 等其他 Azure 服务。
价格表
https://azure.microsoft.com/en-us/pricing/details/cognitive-services/openai-service/#pricing
先决条件
在实施之前,请确保您具备以下条件:
-
Azure 订阅:您可以在此免费创建一个。
-
Python 3.8 或更高版本:确保您的机器上已安装 Python。
-
Azure OpenAI 资源:部署 GPT-35-Turbo 或 GPT-4 模型。请按照此指南设置资源。
-
Python 库:需要 OpenAI 库和
os
库来管理环境变量。
不同的集成方式
Azure OpenAI 服务支持不同的访问 GPT-35-Turbo 和 GPT-4 的方式:
-
REST API:通过 HTTP 请求与模型交互。
-
Python SDK:使用
openai
库在 Python 应用程序中集成模型。 -
Azure OpenAI Studio:一个用于测试、微调和管理模型的 Web 界面。
在本指南中,我们将重点介绍 Python SDK 方法,这是开发中最通用且最广泛使用的方法。
设置您的环境
1. 安装 OpenAI Python 客户端
第一步是安装 OpenAI Python 库,该库可让您与 GPT 模型进行交互:
pip install openai
该库由 OpenAI 维护并定期更新。您可以查看发布历史以保持最新的改进。
2. 获取 API 密钥和终端节点
要对 Azure OpenAI 进行身份验证请求,您需要两条重要信息:
-
API 密钥:在 Azure OpenAI 资源设置中的“密钥和终端节点”下找到。
-
终端节点:同样可在“密钥和终端节点”部分找到。
将这些值安全地存储在环境变量中,以避免在代码中硬编码敏感数据。
设置环境变量
对于 Windows:
setx AZURE_OPENAI_API_KEY "YOUR_API_KEY"
setx AZURE_OPENAI_ENDPOINT "YOUR_ENDPOINT"
对于 Linux/Mac:
export AZURE_OPENAI_API_KEY="YOUR_API_KEY"
export AZURE_OPENAI_ENDPOINT="YOUR_ENDPOINT"
或者,为了在生产环境中更好地保护安全性,可以将您的凭据存储在 Azure Key Vault 中。
创建一个基础的 Python 应用程序
现在您的环境已经设置好,让我们创建一个基础的 Python 应用程序与 GPT-35-Turbo 模型进行交互。我们将使用 openai
库向模型发送查询并打印响应。
1. 创建应用程序文件
创建一个名为 quickstart.py
的文件,并将以下代码粘贴到其中:
import os
from openai import AzureOpenAI
# Initialize the client
client = AzureOpenAI(
azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT"),
api_key = os.getenv("AZURE_OPENAI_API_KEY"),
api_version = "2024-02-01" # Update this if necessary
)
# Define the prompt and conversation
response = client.chat.completions.create(
model="gpt-35-turbo",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "What is Azure OpenAI?"}
]
)
# Print the assistant's response
print(response.choices[0].message.content)
2. 运行应用程序
要执行脚本,只需运行:
python quickstart.py
这将提示助手解释 Azure OpenAI 是什么,并在终端中打印响应。
理解代码结构
-
系统角色:定义助手的行为(例如,乐于助人、正式等)。
-
用户角色:向模型发送用户的查询。
-
助手角色:助手对用户的输入作出回应。
这种格式使处理对话式交互成为可能,尤其适用于多轮对话(用户和助手之间多次问题和答案的交换)。
添加高级功能
1. 管理长对话
Azure OpenAI 模型每个请求都有令牌限制。对于 GPT-35-Turbo,令牌限制为 4096。每次发出新的 API 请求时,您需要发送整个对话历史记录,以保留上下文。如果您的对话超过了这个限制,模型将无法处理。
为了解决这个问题,您可以移除较旧的消息,以保持在令牌限制之内。
以下是实现方法的示例:
import os
from openai import AzureOpenAI
import tiktoken
# Initialize the client
client = AzureOpenAI(
azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT"),
api_key = os.getenv("AZURE_OPENAI_API_KEY"),
api_version = "2024-02-01"
)
conversation = [{"role": "system", "content": "You are a helpful assistant."}]
max_tokens = 4096
def count_tokens(messages, model="gpt-35-turbo"):
encoding = tiktoken.encoding_for_model(model)
num_tokens = 0
for message in messages:
num_tokens += len(encoding.encode(message["content"]))
return num_tokens
while True:
user_input = input("You: ")
conversation.append({"role": "user", "content": user_input})
# Check if token limit is reached
if count_tokens(conversation) >= max_tokens:
del conversation[1] # Remove the oldest message except the system message
response = client.chat.completions.create(
model="gpt-35-turbo",
messages=conversation
)
conversation.append({"role": "assistant", "content": response.choices[0].message.content})
print("Assistant:", response.choices[0].message.content)
这个脚本将通过删除较旧的消息来动态管理令牌数量,以保持在限制范围内。
2. 微调模型
微调允许您根据特定任务定制 GPT 模型。目前,Azure OpenAI 支持 GPT-4 和 GPT-35-Turbo 模型的微调。
微调模型的步骤如下:
-
准备一个 JSONL 格式的数据集,其中每个条目都是带有
prompt
和completion
键的字典。 -
将数据集上传到 Azure Storage。
-
使用微调 API 在您的数据集上训练模型。
3. 为不同的用例定制系统角色
system
消息对于指导模型的行为非常强大。您可以定制助手以特定方式行事或提供安全防护。以下是一些示例:
示例 1:税务助手
{"role": "system", "content": "You are an expert tax advisor. Answer all questions related to taxes, but if you don't know the answer, recommend visiting the IRS website."}
示例 2:技术支持机器人
{"role": "system", "content": "You are a helpful support assistant. Your job is to answer questions related to Azure services and guide users through troubleshooting."}
示例 3:代码助手
{"role": "system", "content": "You are a coding assistant. Help users write and debug code snippets in Python and JavaScript."}
这种灵活性使您能够根据特定任务或领域调整助手的行为。
使用 Azure OpenAI REST API
除了 Python SDK 之外,Azure OpenAI 还提供 REST API 访问。以下是如何使用 curl
进行 API 调用的简要概述:
curl https://YOUR_ENDPOINT.openai.azure.com/openai/deployments/YOUR_DEPLOYMENT/completions?api-version=2024-02-01 \
-H "Content-Type: application/json" \
-H "api-key: YOUR_API_KEY" \
-d '{
"model": "gpt-35-turbo",
"messages": [{"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": "Tell me about Azure OpenAI."}]
}'
这将返回包含助手完成内容的 JSON 响应,类似于您从 Python SDK 获得的输出。
清理资源
实验结束后,请确保清理资源,以避免不必要的费用。您可以从 Azure 门户删除 Azure OpenAI 资源,也可以使用 Azure CLI 删除资源。
az resource delete --name YOUR_RESOURCE_NAME --resource-group YOUR_RESOURCE_GROUP
总结
Azure OpenAI 服务为将高级 GPT 模型(如 GPT-35-Turbo 和 GPT-4)集成到应用程序中提供了强大的方式。
无论您是构建智能聊天机器人、自动生成内容,还是提供个性化推荐,这些模型都可以帮助增强您的解决方案。
通过利用 Azure 的安全性和可扩展性,开发人员可以自信地在生产环境中部署 AI 驱动的功能。
通过本指南,您学习了如何设置 Azure OpenAI,使用 Python SDK,管理长对话,并探索微调等高级功能。
掌握这些知识后,您已经准备好开始构建强大的 AI 启用应用程序,充分利用 OpenAI 技术在 Azure 生态系统中的优势。祝您编码愉快!