Använda Azure OpenAI i Fabric med REST API (förhandsversion)

Viktigt!

Den här funktionen är i förhandsversion.

Det här dokumentet visar exempel på hur du använder Azure OpenAI i Fabric med hjälp av REST API.

Initiering

from synapse.ml.fabric.service_discovery import get_fabric_env_config
from synapse.ml.fabric.token_utils import TokenUtils

fabric_env_config = get_fabric_env_config().fabric_env_config
auth_header_value = TokenUtils().get_openai_auth_header()

auth_headers = {
    "Authorization": auth_header_value,
    "Content-Type": "application/json"
}

Chatt

GPT-4.1 och GPT-4.1-mini är språkmodeller som är optimerade för konversationsgränssnitt. Använd GPT-5 för resonemangsfunktioner.

import requests

def print_chat_result(messages, response_code, response):
    print("=" * 90)
    print("| OpenAI Input    |")
    for msg in messages:
        if msg["role"] == "system":
            print("[System]", msg["content"])
        elif msg["role"] == "user":
            print("Q:", msg["content"])
        else:
            print("A:", msg["content"])
    print("-" * 90)
    print("| Response Status |", response_code)
    print("-" * 90)
    print("| OpenAI Output   |")
    if response.status_code == 200:
        print(response.json()["choices"][0]["message"]["content"])
    else:
        print(response.content)
    print("=" * 90)

deployment_name = "gpt-4.1"

openai_url = (
    f"{fabric_env_config.ml_workload_endpoint}cognitive/openai/openai/deployments/"
    f"{deployment_name}/chat/completions?api-version=2024-02-15-preview"
)

payload = {
    "messages": [
        {"role": "system", "content": "You are an AI assistant that helps people find information."},
        {"role": "user", "content": "Does Azure OpenAI support customer managed keys?"}
    ]
}

response = requests.post(openai_url, headers=auth_headers, json=payload)
print_chat_result(payload["messages"], response.status_code, response)

Utgång

==========================================================================================
| OpenAI Input    |
[System] You are an AI assistant that helps people find information.
Q: Does Azure OpenAI support customer managed keys?
------------------------------------------------------------------------------------------
| Response Status | 200
------------------------------------------------------------------------------------------
| OpenAI Output   |
Yes, **Azure OpenAI Service** supports **customer managed keys (CMK)** for encrypting your data at rest. This allows organizations to control and manage their own encryption keys using **Azure Key Vault**. By integrating with Azure Key Vault, you can bring your own keys (BYOK) to have full control over the encryption of data stored and processed by Azure OpenAI.

**Reference:**
- [Azure OpenAI encryption documentation - Microsoft Learn](https://learn.microsoft.com/en-us/azure/ai-services/openai/concepts/security#encryption)
- [Azure OpenAI Security - Microsoft Learn](https://learn.microsoft.com/en-us/azure/ai-services/openai/concepts/security)

**Key features:**
- Data at rest is encrypted by default with a service-managed key.
- You can specify your own customer managed key (CMK) in Azure Key Vault for additional control.
- Supported for both Standard and Enterprise Azure OpenAI deployments.

**Summary:**  
You can use customer managed keys with Azure OpenAI for enhanced security and regulatory compliance.
==========================================================================================

Inbäddningar

En inbäddning är ett särskilt datarepresentationsformat som maskininlärningsmodeller och algoritmer enkelt kan använda. Den innehåller informationsrik semantisk betydelse för en text som representeras av en vektor med flyttalsnummer. Avståndet mellan två inbäddningar i vektorutrymmet är relaterat till den semantiska likheten mellan två ursprungliga indata. Om två texter till exempel är liknande bör deras vektorrepresentationer också vara liknande.

Om du vill komma åt Azure OpenAI-inbäddningsslutpunkten i Fabric kan du skicka en API-begäran med följande format:

POST <url_prefix>/openai/deployments/<deployment_name>/embeddings?api-version=2024-02-01

deployment_name kan vara text-embedding-ada-002.

from synapse.ml.fabric.service_discovery import get_fabric_env_config
from synapse.ml.fabric.token_utils import TokenUtils
import requests


fabric_env_config = get_fabric_env_config().fabric_env_config

auth_header_value = TokenUtils().get_openai_auth_header()
auth_headers = {
    "Authorization": auth_header_value,
    "Content-Type": "application/json"
}

def print_embedding_result(prompts, response_code, response):
    print("=" * 90)
    print("| OpenAI Input    |\n\t" + "\n\t".join(prompts))
    print("-" * 90)
    print("| Response Status |", response_code)
    print("-" * 90)
    print("| OpenAI Output   |")
    if response_code == 200:
        for data in response.json()['data']:
            print("\t[" + ", ".join([f"{n:.8f}" for n in data["embedding"][:10]]) + ", ... ]")
    else:
        print(response.content)
    print("=" * 90)

deployment_name = "text-embedding-ada-002"
openai_url = (
    f"{fabric_env_config.ml_workload_endpoint}cognitive/openai/openai/deployments/"
    f"{deployment_name}/embeddings?api-version=2024-02-15-preview"
)

payload = {
    "input": [
        "empty prompt, need to fill in the content before the request",
        "Once upon a time"
    ]
}

response = requests.post(openai_url, headers=auth_headers, json=payload)
print_embedding_result(payload["input"], response.status_code, response)

Utdata:

==========================================================================================
| OpenAI Input    |
	empty prompt, need to fill in the content before the request
	Once upon a time
------------------------------------------------------------------------------------------
| Response Status | 200
------------------------------------------------------------------------------------------
| OpenAI Output   |
	[-0.00263638, -0.00441368, -0.01702866, 0.00410065, -0.03052361, 0.01894856, -0.01293149, -0.01421838, -0.03505902, -0.01835033, ... ]
	[0.02133885, -0.02018847, -0.00464259, -0.01151640, -0.01114348, 0.00194205, 0.00229917, -0.01371602, 0.00857094, -0.01467678, ... ]
==========================================================================================