Condividi tramite


Libreria client OpenAI di Azure per .NET - versione 1.0.0-beta.5

La libreria client OpenAI di Azure per .NET è un adattamento delle API REST di OpenAI che fornisce un'interfaccia idiotica e un'integrazione completa con il resto dell'ecosistema di Azure SDK. Può connettersi alle risorse OpenAI di Azure o all'endpoint di inferenza non Azure OpenAI, rendendola una scelta ideale anche per lo sviluppo non Azure OpenAI.

Usare la libreria client per Azure OpenAI per:

Azure OpenAI è un servizio gestito che consente agli sviluppatori di distribuire, ottimizzare e generare contenuto dai modelli OpenAI nelle risorse di Azure.

Codice | sorgente Pacchetto (NuGet) | Documentazione | di riferimento sulle APIDocumentazione | del prodotto Campioni

Introduzione

Prerequisiti

Se si vuole usare una risorsa OpenAI di Azure, è necessario avere una sottoscrizione di Azure e l'accesso Ad Azure OpenAI. In questo modo sarà possibile creare una risorsa OpenAI di Azure e ottenere sia un URL di connessione che le chiavi API. Per altre informazioni, vedere Guida introduttiva: Introduzione alla generazione di testo con il servizio Azure OpenAI.

Se si vuole usare la libreria client .NET OpenAI di Azure per connettersi a OpenAI non Azure OpenAI, è necessaria una chiave API da un account sviluppatore all'indirizzo https://platform.openai.com/.

Installare il pacchetto

Installare la libreria client per .NET con NuGet:

dotnet add package Azure.AI.OpenAI --prerelease

Autenticare il client

Per interagire con Azure OpenAI o OpenAI, è necessario creare un'istanza della classe OpenAIClient . Per configurare un client per l'uso con Azure OpenAI, fornire un URI di endpoint valido a una risorsa OpenAI di Azure insieme a una credenziale di chiave, credenziali di token o credenziali di identità di Azure autorizzate a usare la risorsa Azure OpenAI. Per configurare invece il client per la connessione al servizio OpenAI, specificare una chiave API dal portale per sviluppatori di OpenAI.

OpenAIClient client = useAzureOpenAI
    ? new OpenAIClient(
        new Uri("https://your-azure-openai-resource.com/"),
        new AzureKeyCredential("your-azure-openai-resource-api-key"))
    : new OpenAIClient("your-api-key-from-platform.openai.com");

Creare OpenAIClient con credenziali di Azure Active Directory

L'autenticazione della chiave di sottoscrizione client viene usata nella maggior parte degli esempi di questa guida introduttiva, ma è anche possibile eseguire l'autenticazione con Azure Active Directory usando la libreria di identità di Azure. Per usare il provider DefaultAzureCredential illustrato di seguito o altri provider di credenziali forniti con Azure SDK, installare il pacchetto Azure.Identity:

dotnet add package Azure.Identity
string endpoint = "https://myaccount.openai.azure.com/";
var client = new OpenAIClient(new Uri(endpoint), new DefaultAzureCredential());

Concetti chiave

Il concetto principale da comprendere è Completions. Brevemente spiegato, i completamenti forniscono la relativa funzionalità sotto forma di prompt di testo, che usando un modello specifico, tenteranno quindi di trovare la corrispondenza con il contesto e i modelli, fornendo un testo di output. Il frammento di codice seguente offre una panoramica approssimativa (altri dettagli sono disponibili nel GenerateChatbotResponsesWithToken codice di esempio):

OpenAIClient client = useAzureOpenAI
    ? new OpenAIClient(
        new Uri("https://your-azure-openai-resource.com/"),
        new AzureKeyCredential("your-azure-openai-resource-api-key"))
    : new OpenAIClient("your-api-key-from-platform.openai.com");

Response<Completions> response = await client.GetCompletionsAsync(
    "text-davinci-003", // assumes a matching model deployment or model name
    "Hello, world!");

foreach (Choice choice in response.Value.Choices)
{
    Console.WriteLine(choice.Text);
}

Thread safety

Microsoft garantisce che tutti i metodi di istanza client siano thread-safe e indipendenti l'uno dall'altro (linee guida). Ciò garantisce che la raccomandazione di riutilizzare le istanze client sia sempre sicura, anche tra thread.

Concetti aggiuntivi

Opzioni | client Accesso alla risposta | Operazioni | a esecuzione prolungataGestione degli errori | Diagnostica | Beffardo | Durata del client

Esempio

È possibile acquisire familiarità con api diverse usando esempi.

Generare la risposta del chatbot

Il GenerateChatbotResponse metodo esegue l'autenticazione usando defaultAzureCredential, quindi genera risposte di testo alle richieste di input.

string endpoint = "https://myaccount.openai.azure.com/";
var client = new OpenAIClient(new Uri(endpoint), new DefaultAzureCredential());

string deploymentName = "text-davinci-003";
string prompt = "What is Azure OpenAI?";
Console.Write($"Input: {prompt}");

Response<Completions> completionsResponse = client.GetCompletions(deploymentName, prompt);
string completion = completionsResponse.Value.Choices[0].Text;
Console.WriteLine($"Chatbot: {completion}");

Generare più risposte chatbot con chiave di sottoscrizione

Il GenerateMultipleChatbotResponsesWithSubscriptionKey metodo fornisce un esempio di generazione di risposte di testo alle richieste di input usando una chiave di sottoscrizione di Azure

// Replace with your Azure OpenAI key
string key = "YOUR_AZURE_OPENAI_KEY";
string endpoint = "https://myaccount.openai.azure.com/";
var client = new OpenAIClient(new Uri(endpoint), new AzureKeyCredential(key));

List<string> examplePrompts = new(){
    "How are you today?",
    "What is Azure OpenAI?",
    "Why do children love dinosaurs?",
    "Generate a proof of Euler's identity",
    "Describe in single words only the good things that come into your mind about your mother.",
};

string deploymentName = "text-davinci-003";

foreach (string prompt in examplePrompts)
{
    Console.Write($"Input: {prompt}");
    CompletionsOptions completionsOptions = new CompletionsOptions();
    completionsOptions.Prompts.Add(prompt);

    Response<Completions> completionsResponse = client.GetCompletions(deploymentName, completionsOptions);
    string completion = completionsResponse.Value.Choices[0].Text;
    Console.WriteLine($"Chatbot: {completion}");
}

Riepilogare il testo con completamento

Il SummarizeText metodo genera un riepilogo del prompt di input specificato.

string endpoint = "https://myaccount.openai.azure.com/";
var client = new OpenAIClient(new Uri(endpoint), new DefaultAzureCredential());

string textToSummarize = @"
    Two independent experiments reported their results this morning at CERN, Europe's high-energy physics laboratory near Geneva in Switzerland. Both show convincing evidence of a new boson particle weighing around 125 gigaelectronvolts, which so far fits predictions of the Higgs previously made by theoretical physicists.

    ""As a layman I would say: 'I think we have it'. Would you agree?"" Rolf-Dieter Heuer, CERN's director-general, asked the packed auditorium. The physicists assembled there burst into applause.
:";

string summarizationPrompt = @$"
    Summarize the following text.

    Text:
    """"""
    {textToSummarize}
    """"""

    Summary:
";

Console.Write($"Input: {summarizationPrompt}");
var completionsOptions = new CompletionsOptions()
{
    Prompts = { summarizationPrompt },
};

string deploymentName = "text-davinci-003";

Response<Completions> completionsResponse = client.GetCompletions(deploymentName, completionsOptions);
string completion = completionsResponse.Value.Choices[0].Text;
Console.WriteLine($"Summarization: {completion}");

Trasmettere messaggi di chat con OpenAI non Azure

string nonAzureOpenAIApiKey = "your-api-key-from-platform.openai.com";
var client = new OpenAIClient(nonAzureOpenAIApiKey, new OpenAIClientOptions());
var chatCompletionsOptions = new ChatCompletionsOptions()
{
    Messages =
    {
        new ChatMessage(ChatRole.System, "You are a helpful assistant. You will talk like a pirate."),
        new ChatMessage(ChatRole.User, "Can you help me?"),
        new ChatMessage(ChatRole.Assistant, "Arrrr! Of course, me hearty! What can I do for ye?"),
        new ChatMessage(ChatRole.User, "What's the best way to train a parrot?"),
    }
};

Response<StreamingChatCompletions> response = await client.GetChatCompletionsStreamingAsync(
    deploymentOrModelName: "gpt-3.5-turbo",
    chatCompletionsOptions);
using StreamingChatCompletions streamingChatCompletions = response.Value;

await foreach (StreamingChatChoice choice in streamingChatCompletions.GetChoicesStreaming())
{
    await foreach (ChatMessage message in choice.GetMessageStreaming())
    {
        Console.Write(message.Content);
    }
    Console.WriteLine();
}

Risoluzione dei problemi

Quando si interagisce con Azure OpenAI usando .NET SDK, gli errori restituiti dal servizio corrispondono agli stessi codici di stato HTTP restituiti per le richieste dell'API REST .

Ad esempio, se si tenta di creare un client usando un endpoint che non corrisponde all'endpoint della risorsa OpenAI di Azure, viene restituito un 404 errore che indica Resource Not Found.

Passaggi successivi

  • Fornire un collegamento ad altri esempi di codice, idealmente a quelli seduti insieme al FILE README nella directory del /samples pacchetto.
  • Se appropriato, indirizzare gli utenti ad altri pacchetti che potrebbero essere utili.
  • Se si ritiene che ci sia una buona possibilità che gli sviluppatori potrebbero inciampare nel pacchetto in errore (perché stanno cercando funzionalità specifiche e pensano erroneamente che il pacchetto fornisca tale funzionalità), indirizzarli ai pacchetti che potrebbero cercare.

Contributo

Per informazioni dettagliate sulla compilazione, il test e il contributo a questa libreria, vedere l'CONTRIBUTING.md OpenAI .

In questo progetto sono benvenuti i contributi e i suggerimenti. Per la maggior parte dei contenuti è necessario sottoscrivere un contratto di licenza di collaborazione (CLA, Contributor License Agreement) che stabilisce che l'utente ha il diritto di concedere, e di fatto concede a Microsoft i diritti d'uso del suo contributo. Per informazioni dettagliate, visitare cla.microsoft.com.

Quando si invia una richiesta pull, un bot CLA determina automaticamente se è necessario specificare un contratto CLA e completare la richiesta pull in modo appropriato (ad esempio con un'etichetta e un commento). Seguire le istruzioni specificate dal bot. È sufficiente eseguire questa operazione una sola volta per tutti i repository che usano il contratto CLA Microsoft.

Questo progetto ha adottato il Codice di comportamento di Microsoft per l'open source. Per altre informazioni, vedere Code of Conduct FAQ (Domande frequenti sul Codice di comportamento Open Source di Microsoft) oppure contattare opencode@microsoft.com per eventuali altre domande o commenti.

Impression