Editar

Compartir a través de


Cómo alternar entre puntos de conexión de OpenAI y Azure OpenAI con Python

Aunque OpenAI y Azure OpenAI Service dependen de una biblioteca cliente común de Python, hay pequeños cambios que debe realizar en el código para alternar entre puntos de conexión. En este artículo se describen los cambios comunes y las diferencias que experimentará al trabajar en OpenAI y Azure OpenAI.

En este artículo solo se muestran ejemplos con la nueva biblioteca de API Python 1.x de OpenAI. Para obtener información sobre cómo migrar de 0.28.1 a 1.x, consulte nuestra guía de migración.

Requisitos previos

None

Authentication

Se recomienda usar variables de entorno. Si no lo ha hecho antes, nuestros inicios rápidos de Python le guiarán a través de esta configuración.

Clave de API

OpenAI Azure OpenAI
import os
from openai import OpenAI

client = OpenAI(
    api_key=os.getenv("OPENAI_API_KEY")
)



import os
from openai import AzureOpenAI
    
client = AzureOpenAI(
    api_key=os.getenv("AZURE_OPENAI_API_KEY"),  
    api_version="2023-12-01-preview",
    azure_endpoint=os.getenv("AZURE_OPENAI_ENDPOINT")
)

Microsoft Entra ID authentication

OpenAI Azure OpenAI
import os
from openai import OpenAI

client = OpenAI(
    api_key=os.getenv("OPENAI_API_KEY")
)








from azure.identity import DefaultAzureCredential, get_bearer_token_provider
from openai import AzureOpenAI

token_provider = get_bearer_token_provider(
    DefaultAzureCredential(), "https://cognitiveservices.azure.com/.default"
)

api_version = "2023-12-01-preview"
endpoint = "https://my-resource.openai.azure.com"

client = AzureOpenAI(
    api_version=api_version,
    azure_endpoint=endpoint,
    azure_ad_token_provider=token_provider,
)

Argumento de palabra clave para un modelo

OpenAI usa el argumento de palabra clave model para especificar qué modelo se va a usar. Azure OpenAI tiene el concepto de implementaciones de modelo únicas. Al usar Azure OpenAI model debe hacer referencia al nombre de implementación subyacente que eligió al implementar el modelo.

Importante

Al acceder al modelo a través de la API en Azure OpenAI, deberá hacer referencia al nombre de implementación en lugar del nombre del modelo subyacente en las llamadas API, lo cual es una de las diferencias clave entre OpenAI y Azure OpenAI. OpenAI solo requiere el nombre del modelo. Azure OpenAI siempre necesita el nombre de implementación, incluso cuando se usa el parámetro de modelo. En la documentación, a menudo hay ejemplos en los que los nombres de implementación se representan como idénticos a los nombres de modelo para ayudar a indicar qué modelo funciona con un punto de conexión de API determinado. En última instancia, los nombres de implementación pueden seguir cualquier convención de nomenclatura que sea mejor para el caso de uso.

OpenAI Azure OpenAI
completion = client.completions.create(
    model="gpt-3.5-turbo-instruct",
    prompt="<prompt>"
)

chat_completion = client.chat.completions.create(
    model="gpt-4",
    messages="<messages>"
)

embedding = client.embeddings.create(
    model="text-embedding-ada-002",
    input="<input>"
)
completion = client.completions.create(
    model="gpt-35-turbo-instruct", # This must match the custom deployment name you chose for your model.
    prompt="<prompt>"
)

chat_completion = client.chat.completions.create(
    model="gpt-35-turbo", # model = "deployment_name".
    messages="<messages>"
)

embedding = client.embeddings.create(
    model="text-embedding-ada-002", # model = "deployment_name".
    input="<input>"
)

Azure OpenAI integra compatibilidad para varias entradas

OpenAI y Azure OpenAI admiten actualmente matrices de entrada de hasta 2,048 elementos de entrada para text-embedding-ada-002. Ambos requieren que el límite máximo de tokens de entrada por solicitud API se mantenga por debajo de 8191 para este modelo.

OpenAI Azure OpenAI
inputs = ["A", "B", "C"] 

embedding = client.embeddings.create(
    input=inputs,
    model="text-embedding-ada-002"
)


inputs = ["A", "B", "C"] #max array size=2048

embedding = client.embeddings.create(
    input=inputs,
    model="text-embedding-ada-002" # This must match the custom deployment name you chose for your model.
    # engine="text-embedding-ada-002"
)