官方文檔
Azure OpenAI 是微軟提供的一項云服務,旨在將 OpenAI 的先進人工智能模型與 Azure 的基礎設施和服務相結合。通過 Azure OpenAI,開發者和企業可以訪問 OpenAI 的各種模型,如 GPT-3、Codex 和 DALL-E 等,并將其集成到自己的應用程序和服務中。
調用方式
-
API 調用:用戶可以通過
HTTP 請求
來調用 Azure OpenAI 提供的 REST API。請求中需要包含 API 密鑰進行身份驗證,并指定所需的模型和參數。例如,發送 POST 請求到特定的 API 端點,附帶請求體中的輸入數據和請求頭中的 API 密鑰。import requestsurl = "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())
-
Azure SDK:微軟提供了多種編程語言的 SDK(軟件開發工具包),如 Python、C# 等,使得開發者能夠更簡便地與 Azure 服務進行交互。SDK 會封裝底層的 API 調用,使得開發者可以通過更高層次的抽象和簡化的代碼來使用 Azure OpenAI 服務。
以 Python SDK 為例:
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 的區別
-
API 密鑰(Key):
- 使用方式:通常直接通過 HTTP 請求的請求頭或 URL 參數來傳遞。
- 管理:需要在 Azure 門戶中生成和管理 API 密鑰。
- 靈活性:可以在
不依賴特定編程語言
或 SDK 的情況下使用,適合任何可以發出 HTTP 請求的環境。
-
SDK: 需要endpoint和api-key
-
使用方式:通過調用封裝在 SDK 中的函數或方法來進行 API 調用。
-
集成:通常與 Azure 生態系統中的其他服務更緊密集成,提供更一致的開發體驗。
-
總的來說,API 密鑰適合需要直接和靈活訪問 API 的場景,而 SDK 適合需要簡化開發流程和更深度集成的場景。
在pycharm的終端terminal運行
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運行即可測試
import os
from openai import AzureOpenAIclient = 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
方法可以用于設置環境變量,并且可以指定作用范圍(當前進程、當前用戶、所有用戶)。使用此方法設置的環境變量可能需要重新啟動終端或進程才能生效,尤其是在
User
或Machine
作用范圍時。# 設置當前用戶范圍的環境變量 [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 為choice[0],所以是response.choices[0].message.content。