Dela via


Azure OpenAI-klientbibliotek för .NET – version 1.0.0-beta.5

Azure OpenAI-klientbiblioteket för .NET är en anpassning av OpenAI:s REST-API:er som ger ett idiomatiskt gränssnitt och omfattande integrering med resten av Azure SDK-ekosystemet. Den kan ansluta till Azure OpenAI-resurser eller till slutpunkten för icke-Azure OpenAI-slutsatsdragning, vilket gör det till ett bra val för även icke-Azure OpenAI-utveckling.

Använd klientbiblioteket för Azure OpenAI för att:

Azure OpenAI är en hanterad tjänst som gör det möjligt för utvecklare att distribuera, finjustera och generera innehåll från OpenAI-modeller på Azure-resurser.

Källkod | Paket (NuGet) | API-referensdokumentation | Produktdokumentation | Prover

Komma igång

Förutsättningar

Om du vill använda en Azure OpenAI-resurs måste du ha en Azure-prenumeration och Azure OpenAI-åtkomst. På så sätt kan du skapa en Azure OpenAI-resurs och hämta både en anslutnings-URL och API-nycklar. Mer information finns i Snabbstart: Kom igång med att generera text med Azure OpenAI Service.

Om du vill använda Azure OpenAI .NET-klientbiblioteket för att ansluta till icke-Azure OpenAI behöver du en API-nyckel från ett utvecklarkonto på https://platform.openai.com/.

Installera paketet

Installera klientbiblioteket för .NET med NuGet:

dotnet add package Azure.AI.OpenAI --prerelease

Autentisera klienten

För att kunna interagera med Azure OpenAI eller OpenAI måste du skapa en instans av klassen OpenAIClient . Om du vill konfigurera en klient för användning med Azure OpenAI anger du en giltig slutpunkts-URI till en Azure OpenAI-resurs tillsammans med motsvarande nyckelautentiseringsuppgifter, tokenautentiseringsuppgifter eller Azure-identitetsautentiseringsuppgifter som har behörighet att använda Azure OpenAI-resursen. Om du i stället vill konfigurera klienten för att ansluta till OpenAI:s tjänst anger du en API-nyckel från OpenAI:s utvecklarportal.

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");

Skapa OpenAIClient med en Azure Active Directory-autentiseringsuppgift

Nyckelautentisering för klientprenumerationer används i de flesta av exemplen i den här komma igång-guiden, men du kan också autentisera med Azure Active Directory med hjälp av Azure Identity-biblioteket. Om du vill använda DefaultAzureCredential-providern som visas nedan eller andra leverantörer av autentiseringsuppgifter som medföljer Azure SDK installerar du Azure.Identity-paketet:

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

Viktiga begrepp

Huvudkonceptet att förstå är Slutföranden. Kortfattat förklaras att slutföranden ger dess funktioner i form av en textprompt, som genom att använda en specifik modell sedan försöker matcha kontexten och mönstren, vilket ger en utdatatext. Följande kodfragment ger en ungefärlig översikt (mer information finns i GenerateChatbotResponsesWithToken exempelkoden):

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);
}

Trådsäkerhet

Vi garanterar att alla klientinstansmetoder är trådsäkra och oberoende av varandra (riktlinje). Detta säkerställer att rekommendationen att återanvända klientinstanser alltid är säker, även över trådar.

Ytterligare begrepp

Klientalternativ | Åtkomst till svaret | Långvariga åtgärder | Hantera fel | Diagnostik | Gäckande | Klientlivslängd

Exempel

Du kan bekanta dig med olika API:er med hjälp av exempel.

Generera chatbotsvar

Metoden autentiserar GenerateChatbotResponse med hjälp av en DefaultAzureCredential och genererar sedan textsvar på indatafrågor.

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}");

Generera flera chattrobotsvar med prenumerationsnyckel

Metoden GenerateMultipleChatbotResponsesWithSubscriptionKey ger ett exempel på hur du genererar textsvar på indatafrågor med hjälp av en Azure-prenumerationsnyckel

// 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}");
}

Sammanfatta text med slutförande

Metoden SummarizeText genererar en sammanfattning av den angivna indataprompten.

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}");

Strömma chattmeddelanden med icke-Azure OpenAI

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();
}

Felsökning

När du interagerar med Azure OpenAI med .NET SDK motsvarar fel som returneras av tjänsten samma HTTP-statuskoder som returneras för REST API-begäranden .

Om du till exempel försöker skapa en klient med en slutpunkt som inte matchar din Azure OpenAI-resursslutpunkt returneras ett 404 fel som anger Resource Not Found.

Nästa steg

  • Ange en länk till ytterligare kodexempel, helst till dem som sitter tillsammans med README i paketets /samples katalog.
  • Om det är lämpligt pekar du användare på andra paket som kan vara användbara.
  • Om du tror att det finns en god chans att utvecklare snubblar över paketet av misstag (eftersom de söker efter specifika funktioner och felaktigt tror att paketet tillhandahåller den funktionen) pekar du dem på de paket som de kanske letar efter.

Bidra

Mer information om hur du skapar, testar och bidrar till det här biblioteket finns i OpenAI-CONTRIBUTING.md .

Det här projektet välkomnar bidrag och förslag. Merparten av bidragen kräver att du godkänner ett licensavtal för bidrag, där du deklarerar att du har behörighet att bevilja oss rättigheten att använda ditt bidrag, och att du dessutom uttryckligen gör så. Mer information finns i cla.microsoft.com.

När du skickar en pull-förfrågan avgör en CLA-robot automatiskt om du måste tillhandahålla ett licensavtal för bidrag med lämplig PR (t.ex. etikett eller kommentar). Följ bara robotens anvisningar. Du behöver bara göra detta en gång för alla repor som använder vårt licensavtal för bidrag.

Det här projektet använder sig av Microsofts uppförandekod för öppen källkod. Mer information finns i Vanliga frågor och svar om uppförandekod eller kontakt opencode@microsoft.com med ytterligare frågor eller kommentarer.

Visningar