通过 Azure OpenAI 服务使用 GPT-35-Turbo and GPT-4(win版)

官方文档

Azure OpenAI 是微软提供的一项云服务,旨在将 OpenAI 的先进人工智能模型与 Azure 的基础设施和服务相结合。通过 Azure OpenAI,开发者和企业可以访问 OpenAI 的各种模型,如 GPT-3、Codex 和 DALL-E 等,并将其集成到自己的应用程序和服务中。

调用方式

  1. API 调用 :用户可以通过HTTP 请求来调用 Azure OpenAI 提供的 REST API。请求中需要包含 API 密钥进行身份验证,并指定所需的模型和参数。例如,发送 POST 请求到特定的 API 端点,附带请求体中的输入数据和请求头中的 API 密钥。

    python 复制代码
    import requests
    
    url = "https://<your-resource-name>.openai.azure.com/openai/deployments/<deployment-id>/completions?api-version=2023-07-01-preview"
    headers = {
        "Content-Type": "application/json",
        "api-key": "<your-api-key>"
    }
    data = {
        "prompt": "Hello, world!",
        "max_tokens": 5
    }
    
    response = requests.post(url, headers=headers, json=data)
    print(response.json())
  2. Azure SDK :微软提供了多种编程语言的 SDK(软件开发工具包),如 Python、C# 等,使得开发者能够更简便地与 Azure 服务进行交互。SDK 会封装底层的 API 调用,使得开发者可以通过更高层次的抽象和简化的代码来使用 Azure OpenAI 服务。

    以 Python SDK 为例:

    python 复制代码
    from azure.ai.openai import OpenAIClient
    from azure.identity import DefaultAzureCredential
    
    # 创建 OpenAI 客户端
    credential = DefaultAzureCredential()
    client = OpenAIClient(endpoint="https://<your-resource-name>.openai.azure.com/", credential=credential)
    
    # 调用模型生成文本
    response = client.completions.create(
        deployment_id="<deployment-id>",
        prompt="Hello, world!",
        max_tokens=5
    )
    
    print(response.choices[0].text)

Key 与 SDK 的区别

  1. API 密钥(Key)

    • 使用方式:通常直接通过 HTTP 请求的请求头或 URL 参数来传递。
    • 管理:需要在 Azure 门户中生成和管理 API 密钥。
    • 灵活性 :可以在不依赖特定编程语言或 SDK 的情况下使用,适合任何可以发出 HTTP 请求的环境。
  2. SDK: 需要endpoint和api-key

    • 使用方式:通过调用封装在 SDK 中的函数或方法来进行 API 调用。

    • 集成:通常与 Azure 生态系统中的其他服务更紧密集成,提供更一致的开发体验。

总的来说,API 密钥适合需要直接和灵活访问 API 的场景,而 SDK 适合需要简化开发流程和更深度集成的场景。

在pycharm的终端terminal运行

python 复制代码
pip install openai
$env:AZURE_OPENAI_API_KEY = 'REPLACE_WITH_YOUR_KEY_VALUE_HERE'
$env:AZURE_OPENAI_ENDPOINT = 'REPLACE_WITH_YOUR_ENDPOINT_HERE'
# [System.Environment]::SetEnvironmentVariable('AZURE_OPENAI_API_KEY', 'REPLACE_WITH_YOUR_KEY_VALUE_HERE', 'User')
# [System.Environment]::SetEnvironmentVariable('AZURE_OPENAI_ENDPOINT', 'REPLACE_WITH_YOUR_ENDPOINT_HERE', 'User')

创建一个新的.py运行即可测试

python 复制代码
import os
from openai import AzureOpenAI

client = AzureOpenAI(
  azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT"), 
  api_key=os.getenv("AZURE_OPENAI_API_KEY"),  
  api_version="2024-02-01"
)

response = client.chat.completions.create(
    model="gpt-35-turbo", # model = "deployment_name".
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "Does Azure OpenAI support customer managed keys?"},
        {"role": "assistant", "content": "Yes, customer managed keys are supported by Azure OpenAI."},
        {"role": "user", "content": "Do other Azure AI services support this too?"}
    ]
)

print(response.choices[0].message.content)

运行即可python test.py。如果要换其他模型比如GPT-4o(可用于标准和全球标准模型部署。) 需要在该模型可用的受支持标准或全球标准区域中创建或使用现有资源。

创建资源后,可以部署 GPT-4o 模型。 如果要执行编程部署,则"模型"名称为 gpt-4o,"版本"名称为 2024-05-13

报错没有找到环境变量,在终端查看:Get-ChildItem Env: 发现没有设置成功

命令行:与操作系统交互的文本接口。

Bash:主要用于 Unix 系统,命令行解释器的一种。

PowerShell:起源于 Windows,命令行解释器的一种。

PyCharm 中的终端:可配置为多种 shell,适应不同开发需求,在win里面就用PowerShell,在linux里面就用Bash。

正确的添加,(开头代码已修改为正确

复制代码
$env:AZURE_OPENAI_API_KEY = 'REPLACE_WITH_YOUR_KEY_VALUE_HERE'
$env:AZURE_OPENAI_ENDPOINT = 'REPLACE_WITH_YOUR_ENDPOINT_HERE'

原因,一个立即生效,一个有作用时间和范围

在 PowerShell 中,[System.Environment]::SetEnvironmentVariable
$env: 都是设置环境变量的方法,但它们的作用范围和生效时间有所不同,这就是为什么前者不行而后者可以的原因。

[System.Environment]::SetEnvironmentVariable 的行为

[System.Environment]::SetEnvironmentVariable

方法可以用于设置环境变量,并且可以指定作用范围(当前进程、当前用户、所有用户)。使用此方法设置的环境变量可能需要重新启动终端或进程才能生效,尤其是在
UserMachine 作用范围时。

powershell 复制代码
# 设置当前用户范围的环境变量 [System.Environment]::SetEnvironmentVariable('AZURE_OPENAI_API_KEY',
'REPLACE_WITH_YOUR_KEY_VALUE_HERE', 'User')
[System.Environment]::SetEnvironmentVariable('AZURE_OPENAI_ENDPOINT',
'REPLACE_WITH_YOUR_ENDPOINT_HERE', 'User') ```

此方法在 PyCharm 终端中可能不会立即生效,因为 PyCharm
终端是一个已经启动的进程,设置的用户或系统范围的环境变量不会影响当前已经运行的进程。

### `$env:` 的行为

`$env:` 是 PowerShell 中设置环境变量的另一种方式,这种方式直接在当前 PowerShell
会话中设置环境变量,并且立即生效。这就是为什么在 PyCharm 终端中使用 `$env:` 能够立即看到环境变量的变化。

```powershell
# 设置当前 PowerShell 会话的环境变量 $env:AZURE_OPENAI_API_KEY = 'REPLACE_WITH_YOUR_KEY_VALUE_HERE' $env:AZURE_OPENAI_ENDPOINT =
'REPLACE_WITH_YOUR_ENDPOINT_HERE' ```

### 区别总结

1. **作用范围**:
   - `[System.Environment]::SetEnvironmentVariable` 可以设置当前进程、当前用户或所有用户的环境变量。
   - `$env:` 仅在当前 PowerShell 会话中设置环境变量。

2. **生效时间**:
   - `[System.Environment]::SetEnvironmentVariable` 设置的环境变量可能需要重新启动终端或进程才能生效。
   - `$env:` 设置的环境变量在当前 PowerShell 会话中立即生效。

3. **适用场景**:
   - `[System.Environment]::SetEnvironmentVariable` 适用于需要在多个会话或系统范围内生效的环境变量设置。
   - `$env:` 适用于需要在当前 PowerShell 会话中临时使用的环境变量设置。

### 为什么前者不行后者可以

在 PyCharm 终端中,使用 `[System.Environment]::SetEnvironmentVariable`
设置用户范围的环境变量不会立即在当前终端会话中生效,因为当前终端是一个已经运行的进程,新的环境变量设置不会影响到它。而使用 `$env:`
则会立即在当前 PowerShell 会话中生效,因此可以立即看到和使用新设置的环境变量。

### 建议的使用方法

如果您需要在当前 PyCharm 终端会话中设置环境变量,请使用 `$env:` 方式:

```powershell $env:AZURE_OPENAI_API_KEY =
'REPLACE_WITH_YOUR_KEY_VALUE_HERE' $env:AZURE_OPENAI_ENDPOINT =
'REPLACE_WITH_YOUR_ENDPOINT_HERE' ```

如果您需要在多个会话或系统范围内生效,请使用 `[System.Environment]::SetEnvironmentVariable`
并重新启动终端或系统以确保设置生效:

```powershell
[System.Environment]::SetEnvironmentVariable('AZURE_OPENAI_API_KEY',
'REPLACE_WITH_YOUR_KEY_VALUE_HERE', 'User')
[System.Environment]::SetEnvironmentVariable('AZURE_OPENAI_ENDPOINT',
'REPLACE_WITH_YOUR_ENDPOINT_HERE', 'User') ```

这样可以确保环境变量在不同的使用场景中正确设置和生效。

response内容:

复制代码
{
  "id": "chatcmpl-9k4JY8EuQR3TLfai4ze8TMNylKTB0",
  "choices": [
    {
      "finish_reason": "stop",
      "index": 0,
      "logprobs": null,
      "message": {
        "content": "Yes, several other Azure AI services also support customer managed keys (CMK). This capability allows you to have greater control over the encryption of your data by using your own encryption keys stored in Azure Key Vault. Some of the Azure AI services that support CMK include:\n\n1. **Azure Cognitive Services**:\n   - Text Analytics\n   - Computer Vision\n   - Translator\n   - Speech Services\n\n2. **Azure Machine Learning**:\n   - Offers encryption of data at rest using customer managed keys.\n\n3. **Azure Synapse Analytics**:\n   - Provides support for customer managed keys for data encryption.\n\nBy using customer managed keys, you can satisfy compliance requirements and have more control over key rotation and revocation. For specific implementation details and supported features, it's always a good idea to check the latest documentation for each service, as Microsoft regularly updates and expands their support for security features.",
        "role": "assistant",
        "function_call": null,
        "tool_calls": null
      },
      "content_filter_results": {
        "hate": {"filtered": false, "severity": "safe"},
        "self_harm": {"filtered": false, "severity": "safe"},
        "sexual": {"filtered": false, "severity": "safe"},
        "violence": {"filtered": false, "severity": "safe"}
      }
    }
  ],
  "created": 1720766700,
  "model": "gpt-4o-2024-05-13",
  "object": "chat.completion",
  "service_tier": null,
  "system_fingerprint": "fp_abc28019ad",
  "usage": {
    "completion_tokens": 179,
    "prompt_tokens": 55,
    "total_tokens": 234
  },
  "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"}
      }
    }
  ]
}

可以看到response里面只有一个choice 为choice0,所以是response.choices0.message.content。

相关推荐
高级程序源3 天前
django招聘网站信息爬取与分析系统79704-计算机课程设计、毕业设计
后端·python·mysql·小程序·django·flask·课程设计
lpfasd1234 天前
配置文件格式对比 与 AI Coding 的选择逻辑
python·flask·numpy
troy1285 天前
Python 基础语法(九):Django/Flask/FastAPI 三大 Web 框架详细对比解析
python·jupyter·django·flask·github·fastapi
小白学大数据5 天前
Python 项目实战:用 Flask 构建生产级 MySQL 增删改查 REST API
开发语言·人工智能·python·mysql·flask
典典分享指南6 天前
用飞书 Wiki 搭内容作战室:从零搭建团队内容协作中枢
django·flask·numpy·pyqt
life码农6 天前
python框架Flask多语言配置示例
python·flask
毕业设计7038 天前
(免费领源码)基于Python的博物馆研学活动管理系统的设计与实现22724- java、PHP、python、C#、小程序、大数据、单片机、网络工程等)
python·mysql·随机森林·pycharm·django·flask·推荐算法
深圳市尚想信息技术有限公司8 天前
HITENX海速芯TM52F1363-SSOP24 8KB Flash存储+EEPROM,国产8位MCU单片机
单片机·mcu·flask·芯片·控制器·海速芯
李高钢10 天前
Python Flask 框架入门:从零搭建你的第一个 Web 应用
前端·python·flask
半亩码田11 天前
【.NET新特性·第17篇】EF Core 10 与 Aspire 13.1
python·flask·.net