Udostępnij za pośrednictwem


Biblioteka klienta usługi Azure OpenAI dla platformy .NET — wersja 1.0.0-beta.5

Biblioteka klienta usługi Azure OpenAI dla platformy .NET to adaptacja interfejsów API REST platformy OpenAI, która zapewnia idiomatyczny interfejs i bogatą integrację z resztą ekosystemu zestawu Azure SDK. Może ona łączyć się z zasobami usługi Azure OpenAI lub z punktem końcowym wnioskowania spoza platformy Azure OpenAI, co czyni go doskonałym wyborem nawet w przypadku tworzenia aplikacji spoza platformy Azure OpenAI.

Użyj biblioteki klienta dla usługi Azure OpenAI, aby:

Azure OpenAI to zarządzana usługa, która umożliwia deweloperom wdrażanie, dostrajanie i generowanie zawartości z modeli OpenAI na zasobach platformy Azure.

Kod | źródłowy Pakiet (NuGet) | Dokumentacja referencyjna interfejsu | API Dokumentacja | produktu Próbki

Wprowadzenie

Wymagania wstępne

Jeśli chcesz użyć zasobu usługi Azure OpenAI, musisz mieć subskrypcję platformy Azure i dostęp do usługi Azure OpenAI. Pozwoli to utworzyć zasób usługi Azure OpenAI i uzyskać zarówno adres URL połączenia, jak i klucze interfejsu API. Aby uzyskać więcej informacji, zobacz Szybki start: wprowadzenie do generowania tekstu przy użyciu usługi Azure OpenAI Service.

Jeśli chcesz użyć biblioteki klienta platformy .NET platformy Azure OpenAI do nawiązania połączenia z usługą inną niż Azure OpenAI, musisz mieć klucz interfejsu API z konta dewelopera pod adresem https://platform.openai.com/.

Instalowanie pakietu

Zainstaluj bibliotekę klienta dla platformy .NET za pomocą narzędzia NuGet:

dotnet add package Azure.AI.OpenAI --prerelease

Uwierzytelnianie klienta

Aby wchodzić w interakcje z usługą Azure OpenAI lub OpenAI, należy utworzyć wystąpienie klasy OpenAIClient . Aby skonfigurować klienta do użycia z usługą Azure OpenAI, podaj prawidłowy identyfikator URI punktu końcowego dla zasobu usługi Azure OpenAI wraz z odpowiednimi poświadczeniami klucza, poświadczeniami tokenu lub poświadczeniami tożsamości platformy Azure, które są autoryzowane do korzystania z zasobu usługi Azure OpenAI. Aby zamiast tego skonfigurować klienta w celu nawiązania połączenia z usługą OpenAI, podaj klucz interfejsu API z portalu dla deweloperów 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");

Tworzenie obiektu OpenAIClient przy użyciu poświadczeń usługi Azure Active Directory

Uwierzytelnianie klucza subskrypcji klienta jest używane w większości przykładów w tym przewodniku wprowadzającym, ale można również uwierzytelniać się w usłudze Azure Active Directory przy użyciu biblioteki tożsamości platformy Azure. Aby użyć przedstawionego poniżej dostawcy DefaultAzureCredential lub innych dostawców poświadczeń dostarczanych z zestawem Azure SDK, zainstaluj pakiet Azure.Identity:

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

Kluczowe pojęcia

Główną koncepcją do zrozumienia jest uzupełnianie. Krótko wyjaśnione, ukończenia zapewniają jego funkcjonalność w postaci monitu tekstowego, który przy użyciu określonego modelu podejmie próbę dopasowania kontekstu i wzorców, dostarczając tekst wyjściowy. Poniższy fragment kodu zawiera przybliżone omówienie (więcej szczegółów można znaleźć w przykładowym GenerateChatbotResponsesWithToken kodzie):

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

Bezpieczeństwo wątkowe

Gwarantujemy, że wszystkie metody wystąpienia klienta są bezpieczne wątkowo i niezależne od siebie (wytyczne). Dzięki temu zalecenie ponownego obsługi wystąpień klienta jest zawsze bezpieczne, nawet w wątkach.

Dodatkowe pojęcia

Opcje | klienta Uzyskiwanie dostępu do odpowiedzi | Długotrwałe operacje | Obsługa błędów | Diagnostyka | Szyderczy | Okres istnienia klienta

Przykłady

Możesz zapoznać się z różnymi interfejsami API przy użyciu przykładów.

Generuj odpowiedź czatbota

Metoda GenerateChatbotResponse uwierzytelnia się przy użyciu elementu DefaultAzureCredential, a następnie generuje odpowiedzi tekstowe na monity wejściowe.

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

Generowanie wielu odpowiedzi czatbota przy użyciu klucza subskrypcji

Metoda GenerateMultipleChatbotResponsesWithSubscriptionKey przedstawia przykład generowania odpowiedzi tekstowych na monity wejściowe przy użyciu klucza subskrypcji platformy 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}");
}

Podsumuj tekst z uzupełnianiem

Metoda SummarizeText generuje podsumowanie danego monitu wejściowego.

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

Przesyłanie strumieniowe komunikatów czatu za pomocą interfejsu OpenAI platformy 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();
}

Rozwiązywanie problemów

W przypadku interakcji z usługą Azure OpenAI przy użyciu zestawu SDK platformy .NET błędy zwracane przez usługę odpowiadają tym samym kodom stanu HTTP zwracanym dla żądań interfejsu API REST .

Jeśli na przykład spróbujesz utworzyć klienta przy użyciu punktu końcowego, który nie jest zgodny z punktem końcowym zasobu usługi Azure OpenAI, 404 zostanie zwrócony błąd wskazujący Resource Not Foundwartość .

Następne kroki

  • Podaj link do dodatkowych przykładów kodu, najlepiej dla osób znajdujących się obok pliku README w katalogu pakietu /samples .
  • W razie potrzeby wskaż użytkownikom inne pakiety, które mogą być przydatne.
  • Jeśli uważasz, że istnieje prawdopodobieństwo, że deweloperzy mogą napotkać błąd pakietu (ponieważ wyszukują określone funkcje i błędnie uważają, że pakiet zapewnia tę funkcjonalność), wskaż im pakiety, których mogą szukać.

Współtworzenie

Zobacz CONTRIBUTING.md OpenAI , aby uzyskać szczegółowe informacje na temat kompilowania, testowania i współtworzenia tej biblioteki.

W tym projekcie zachęcamy do współtworzenia i zgłaszania sugestii. Współtworzenie w większości przypadków wymaga zgody na umowę licencyjną dotyczącą współautorów (CLA, Contributor License Agreement), zgodnie z którą współautor ma prawo udzielić i faktycznie udziela nam praw do używania wytworzonej przez siebie zawartości. Aby uzyskać szczegółowe informacje, odwiedź cla.microsoft.com.

Po przesłaniu żądania ściągnięcia robot CLA automatycznie określi, czy musisz przekazać umowę CLA, i doda odpowiednie informacje do tego żądania (na przykład etykietę czy komentarz). Po prostu postępuj zgodnie z instrukcjami robota. Wystarczy zrobić to raz dla wszystkich repozytoriów, w przypadku których jest używana nasza umowa CLA.

W tym projekcie przyjęto Kodeks postępowania oprogramowania Open Source firmy Microsoft. Aby uzyskać więcej informacji, zobacz Często zadawane pytania dotyczące kodeksu postępowania lub skontaktuj się z opencode@microsoft.com dodatkowymi pytaniami lub komentarzami.

Wrażenia