Integrieren von OpenAI in eine App

Abgeschlossen

Azure OpenAI bietet sowohl sprachspezifische SDKs und eine REST-API, mit denen Entwickler KI-Funktionen zu ihren Anwendungen hinzufügen können. Generative KI-Funktionen in Azure OpenAI werden über Modelle bereitgestellt. Die im Azure OpenAI-Dienst verfügbaren Modelle gehören verschiedenen Familien mit jeweils eigenem Schwerpunkt an. Damit Sie eines dieser Modelle verwenden können, müssen Sie die Bereitstellung über den Azure OpenAI Service durchführen.

Nachdem Sie eine Azure OpenAI-Ressource erstellt und ein Modell bereitgestellt haben, können Sie Ihre App konfigurieren.

verfügbaren Endpunkten

Auf Azure OpenAI kann über eine REST-API oder über ein SDK zugegriffen werden, das für Python, C#, JavaScript und vieles mehr verfügbar ist. Die für die Interaktion mit einem bereitgestellten Modell verfügbaren Endpunkte werden unterschiedlich verwendet, und mit bestimmten Endpunkten können nur bestimmte Modelle verwendet werden. Verfügbare Endpunkte:

  • Completion – Vom Modell wird eine Aufforderung verwendet und mindestens eine vorhergesagte Vervollständigung generiert. Dieser Playground wird im Studio angezeigt, wird aber in diesem Modul nicht ausführlich behandelt.
  • ChatCompletion – Vom Modell werden Eingaben in Form einer Chatunterhaltung aufgenommen (bei der Rollen mit der gesendeten Nachricht angegeben werden), und die nächste Chatvervollständigung wird generiert.
  • Embeddings – Das Modell nimmt Eingaben an und gibt eine Vektordarstellung dieser Eingabe zurück.

Zum Beispiel ist die Eingabe für ChatCompletion eine Konversation mit klar definierten Rollen für jede Nachricht:

{"role": "system", "content": "You are a helpful assistant, teaching people about AI."},
{"role": "user", "content": "Does Azure OpenAI support multiple languages?"},
{"role": "assistant", "content": "Yes, Azure OpenAI supports several languages, and can translate between them."},
{"role": "user", "content": "Do other Azure AI Services support translation too?"}

Wenn Sie dem KI-Modell eine echte Unterhaltung verfügbar machen, kann es eine bessere Antwort generieren, in der Ausdrucksweise, Formulierung und Kontext präziser ausfallen. Der ChatCompletion-Endpunkt ermöglicht es dem Modell, eine realistischere Unterhaltung zu führen, indem der Chatverlauf mit der nächsten Benutzernachricht gesendet wird.

ChatCompletion ermöglicht auch Szenarien ohne Chat, z. B. Zusammenfassungen oder die Extraktion von Entitäten. Die Umsetzung erreichen Sie, indem Sie eine kurze Unterhaltung bereitstellen und dabei die Systeminformationen und die gewünschten Informationen zusammen mit der Benutzereingabe angeben. Wenn Sie beispielsweise eine Aufgabenbeschreibung generieren möchten, stellen Sie für ChatCompletion etwa die folgende Unterhaltung als Eingabe bereit.

{"role": "system", "content": "You are an assistant designed to write intriguing job descriptions."},
{"role": "user", "content": "Write a job description for the following job title: 'Business Intelligence Analyst'. It should include responsibilities, required qualifications, and highlight benefits like time off and flexible hours."}

Hinweis

Completion ist für frühere gpt-3-Generierungsmodelle verfügbar, während ChatCompletion die einzige unterstützte Option für gpt-4-Modelle und beim Verwenden des gpt-35-turbo-Modells der bevorzugte Endpunkt ist.

Verwenden der Azure OpenAI-REST-API

Azure OpenAI bietet eine REST-API für die Interaktion und die Generierung von Antworten, mit der Entwickler KI-Funktionen zu ihren Anwendungen hinzufügen können. In dieser Lerneinheit werden Beispielnutzung, Eingabe und Ausgabe der API behandelt.

Für jeden Aufruf der REST-API benötigen Sie den Endpunkt und einen Schlüssel aus Ihrer Azure OpenAI-Ressource sowie den Namen, den Sie für Ihr bereitgestelltes Modell angegeben haben. In den folgenden Beispielen werden die folgenden Platzhalter verwendet:

Platzhaltername Wert
YOUR_ENDPOINT_NAME Dieser Basisendpunkt befindet sich im Abschnitt Schlüssel und Endpunkt im Azure-Portal. Dies ist der Basisendpunkt Ihrer Ressource, z. B. https://sample.openai.azure.com/.
YOUR_API_KEY Schlüssel befinden sich im Abschnitt Schlüssel und Endpunkt im Azure-Portal. Sie können beide Schlüssel für Ihre Ressource verwenden.
YOUR_DEPLOYMENT_NAME Bei diesem Bereitstellungsnamen handelt es sich um den Namen, den Sie beim Bereitstellen Ihres Modells in Azure AI Foundry angegeben haben.

Chatvervollständigungen

Sobald Sie ein Modell in Ihrer Azure OpenAI-Ressource bereitgestellt haben, können Sie mit einer Anfrage eine POST-Anforderung an den Dienst senden.

curl https://YOUR_ENDPOINT_NAME.openai.azure.com/openai/deployments/YOUR_DEPLOYMENT_NAME/chat/completions?api-version=2023-03-15-preview \
  -H "Content-Type: application/json" \
  -H "api-key: YOUR_API_KEY" \
  -d '{"messages":[{"role": "system", "content": "You are a helpful assistant, teaching people about AI."},
{"role": "user", "content": "Does Azure OpenAI support multiple languages?"},
{"role": "assistant", "content": "Yes, Azure OpenAI supports several languages, and can translate between them."},
{"role": "user", "content": "Do other Azure AI Services support translation too?"}]}'

Die Antwort der API ähnelt der folgenden JSON:

{
    "id": "chatcmpl-6v7mkQj980V1yBec6ETrKPRqFjNw9",
    "object": "chat.completion",
    "created": 1679001781,
    "model": "gpt-35-turbo",
    "usage": {
        "prompt_tokens": 95,
        "completion_tokens": 84,
        "total_tokens": 179
    },
    "choices": [
        {
            "message":
                {
                    "role": "assistant",
                    "content": "Yes, other Azure AI Services also support translation. Azure AI Services offer translation between multiple languages for text, documents, or custom translation through Azure AI Services Translator."
                },
            "finish_reason": "stop",
            "index": 0
        }
    ]
}

REST-Endpunkte erlauben die Angabe weiterer optionaler Eingabeparameter, wie z. B. temperature, max_tokens und mehr. Wenn Sie einen dieser Parameter in Ihre Anforderung einschließen möchten, fügen Sie sie den Eingabedaten mit der Anforderung hinzu.

Einbettungen

Einbettungen sind hilfreich für bestimmte Formate, die problemlos von Machine Learning-Modellen genutzt werden können. Um Einbettungen aus dem Eingabetext zu generieren, senden Sie per POST eine Anforderung an den embeddings-Endpunkt.

curl https://YOUR_ENDPOINT_NAME.openai.azure.com/openai/deployments/YOUR_DEPLOYMENT_NAME/embeddings?api-version=2022-12-01 \
  -H "Content-Type: application/json" \
  -H "api-key: YOUR_API_KEY" \
  -d "{\"input\": \"The food was delicious and the waiter...\"}"

Achten Sie bei der Erstellung von Einbettungen darauf, dass Sie ein Modell in Azure OpenAI verwenden, das für Einbettungen gedacht ist. Diese Modelle beginnen mit text-embedding oder text-similarity, je nachdem, nach welcher Funktionalität Sie suchen.

Die Antwort der API ähnelt der folgenden JSON:

{
  "object": "list",
  "data": [
    {
      "object": "embedding",
      "embedding": [
        0.0172990688066482523,
        -0.0291879814639389515,
        ....
        0.0134544348834753042,
      ],
      "index": 0
    }
  ],
  "model": "text-embedding-ada:002"
}

Verwenden von Azure OpenAI mit SDKs

Zusätzlich zu den REST-APIs können Benutzer auch über C#- und Python-SDKs auf Azure OpenAI-Modelle zugreifen. Die gleiche Funktionalität ist sowohl über REST als auch über diese SDKs verfügbar.

Sie benötigen für beide in dieser Lerneinheit behandelten SDKs den Endpunkt und einen Schlüssel aus Ihrer Azure OpenAI-Ressource sowie den Namen, den Sie für Ihr bereitgestelltes Modell angegeben haben. In den folgenden Codeschnipseln werden die folgenden Platzhalter verwendet:

Platzhaltername Wert
YOUR_ENDPOINT_NAME Dieser Basisendpunkt befindet sich im Abschnitt Schlüssel und Endpunkt im Azure-Portal. Dies ist der Basisendpunkt Ihrer Ressource, z. B. https://sample.openai.azure.com/.
YOUR_API_KEY Schlüssel befinden sich im Abschnitt Schlüssel und Endpunkt im Azure-Portal. Sie können beide Schlüssel für Ihre Ressource verwenden.
YOUR_DEPLOYMENT_NAME Dieser Bereitstellungsname ist der Name, den Sie beim Bereitstellen Ihres Modells angegeben haben.

Installieren von Bibliotheken

Installieren Sie zunächst die Clientbibliothek für Ihre bevorzugte Sprache. Das C#-SDK ist eine .NET-Adaptation der REST-APIs, die speziell für Azure OpenAI entwickelt wurde. Es kann jedoch zum Herstellen einer Verbindung mit Azure OpenAI-Ressourcen oder Nicht-Azure-OpenAI-Endpunkten verwendet werden. Das Python-SDK wird von OpenAI entwickelt und verwaltet.

dotnet add package Azure.AI.OpenAI --version <insert preferred version>
pip install openai

Konfigurieren der App für den Zugriff auf Azure OpenAI-Ressourcen

Die Konfiguration für jede Sprache variiert geringfügig, aber für beide müssen dieselben Parameter festgelegt werden. Die erforderlichen Parameter sind endpoint, key und deployment name.

Fügen Sie Ihrer App die Bibliothek hinzu, und legen Sie die erforderlichen Parameter für Ihren Client fest.

// Add Azure OpenAI packages
using Azure.AI.OpenAI;
using OpenAI.Chat;

// Define parameters and initialize the client
string endpoint = "<YOUR_ENDPOINT_NAME>";
string key = "<YOUR_API_KEY>";
string deploymentName = "<YOUR_DEPLOYMENT_NAME>"; 

AzureOpenAIClient azureClient = new AzureOpenAIClient(new Uri(endpoint), new AzureKeyCredential(key));
ChatClient chatClient = azureClient.GetChatClient(deploymentName);
# Add OpenAI library
from openai import AzureOpenAI

deployment_name = '<YOUR_DEPLOYMENT_NAME>' 

# Initialize the Azure OpenAI client
client = AzureOpenAI(
        azure_endpoint = '<YOUR_ENDPOINT_NAME>', 
        api_key='<YOUR_API_KEY>',  
        api_version="20xx-xx-xx" #  Target version of the API, such as 2024-02-15-preview
        )

Aufrufen einer Azure OpenAI-Ressource

Nachdem Sie Ihre Verbindung mit Azure OpenAI konfiguriert haben, senden Sie Ihre Aufforderung an das Modell.

// Get chat completion
ChatCompletion completion = chatClient.CompleteChat(
    [
        new SystemChatMessage(systemMessage),
        new UserChatMessage(userMessage),
    ]);

// Print the response
Console.WriteLine($"{completion.Role}: {completion.Content[0].Text}");
response = client.chat.completions.create(
    model=deployment_name,
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "What is Azure OpenAI?"}
    ]
)
generated_text = response.choices[0].message.content

# Print the response
print("Response: " + generated_text + "\n")

Das Antwortobjekt enthält mehrere Werte, z. B. total_tokens und finish_reason. Die Vervollständigung des Antwortobjekts ähnelt der folgenden Vervollständigung:

"Azure OpenAI is a cloud-based artificial intelligence (AI) service that offers a range of tools and services for developing and deploying AI applications. Azure OpenAI provides a variety of services for training and deploying machine learning models, including a managed service for training and deploying deep learning models, a managed service for deploying machine learning models, and a managed service for managing and deploying machine learning models."

Sowohl in C# als auch in Python kann Ihr Aufruf optionale Parameter enthalten, z. B. temperature und max_tokens.