Partilhar via


Biblioteca de cliente do Azure OpenAI para .NET – versão 1.0.0-beta.5

A biblioteca de cliente do Azure OpenAI para .NET é uma adaptação das APIs REST da OpenAI que fornece uma interface idiomática e uma integração avançada com o resto do ecossistema do SDK do Azure. Pode ligar-se aos recursos do Azure OpenAI ou ao ponto final de inferência não Azure OpenAI, tornando-o uma ótima opção para o desenvolvimento não Azure OpenAI.

Utilize a biblioteca de cliente do Azure OpenAI para:

O Azure OpenAI é um serviço gerido que permite aos programadores implementar, otimizar e gerar conteúdo a partir de modelos OpenAI em recursos do Azure.

Código fonte | Pacote (NuGet) | Documentação | de referência da APIDocumentação do | produto Exemplos

Introdução

Pré-requisitos

Se quiser utilizar um recurso do Azure OpenAI, tem de ter uma subscrição do Azure e acesso openAI do Azure. Isto permite-lhe criar um recurso do Azure OpenAI e obter um URL de ligação, bem como chaves de API. Para obter mais informações, veja Início Rápido: Começar a gerar texto com o Serviço OpenAI do Azure.

Se quiser utilizar a biblioteca de cliente .NET do Azure OpenAI para ligar ao OpenAI não Azure, precisará de uma chave de API de uma conta de programador em https://platform.openai.com/.

Instalar o pacote

Instale a biblioteca de cliente para .NET com NuGet:

dotnet add package Azure.AI.OpenAI --prerelease

Autenticar o cliente

Para interagir com o Azure OpenAI ou o OpenAI, terá de criar uma instância da classe OpenAIClient . Para configurar um cliente para utilização com o Azure OpenAI, forneça um URI de ponto final válido a um recurso do Azure OpenAI juntamente com uma credencial de chave correspondente, credencial de token ou credencial de identidade do Azure autorizada a utilizar o recurso do Azure OpenAI. Para, em vez disso, configurar o cliente para ligar ao serviço do OpenAI, forneça uma chave de API a partir do portal de programador da 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");

Criar OpenAIClient com uma Credencial do Azure Active Directory

A autenticação da chave de subscrição de cliente é utilizada na maioria dos exemplos neste guia de introdução, mas também pode autenticar com o Azure Active Directory com a biblioteca de Identidade do Azure. Para utilizar o fornecedor DefaultAzureCredential apresentado abaixo ou outros fornecedores de credenciais fornecidos com o SDK do Azure, instale o pacote Azure.Identity:

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

Conceitos-chave

O principal conceito a compreender é Conclusãos. Resumidamente, as conclusões fornecem a respetiva funcionalidade na forma de uma linha de texto que, ao utilizar um modelo específico, tentará, em seguida, corresponder ao contexto e aos padrões, fornecendo um texto de saída. O fragmento de código seguinte fornece uma descrição geral aproximada (podem ser encontrados mais detalhes no código de GenerateChatbotResponsesWithToken exemplo):

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

Segurança de threads

Garantimos que todos os métodos de instância de cliente são seguros para threads e independentes uns dos outros (orientação). Isto garante que a recomendação de reutilização de instâncias de cliente é sempre segura, mesmo entre threads.

Conceitos adicionais

Opções de | cliente Aceder à resposta | Operações de execução prolongada | Lidar com falhas | Diagnósticos | A gozar | Duração do cliente

Exemplos

Pode familiarizar-se com diferentes APIs com Exemplos.

Gerar Resposta do Chatbot

O GenerateChatbotResponse método autentica-se com um DefaultAzureCredential e, em seguida, gera respostas de texto a pedidos de entrada.

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

Gerar Múltiplas Respostas do Chatbot com a Chave de Subscrição

O GenerateMultipleChatbotResponsesWithSubscriptionKey método dá um exemplo de geração de respostas de texto a pedidos de entrada com uma chave de subscrição do 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}");
}

Resumir Texto com Conclusão

O SummarizeText método gera um resumo do pedido de entrada especificado.

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

Transmitir Mensagens de Chat em Fluxo com o OpenAI não 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();
}

Resolução de problemas

Quando interage com o Azure OpenAI com o SDK .NET, os erros devolvidos pelo serviço correspondem aos mesmos códigos de estado HTTP devolvidos para pedidos de API REST .

Por exemplo, se tentar criar um cliente com um ponto final que não corresponda ao ponto final do Recurso openAI do Azure, é devolvido um 404 erro que indica Resource Not Found.

Passos seguintes

  • Forneça uma ligação para exemplos de código adicionais, idealmente para aqueles que estão sentados ao lado do README no diretório do /samples pacote.
  • Se for adequado, aponte os utilizadores para outros pacotes que possam ser úteis.
  • Se acha que existe uma boa hipótese de os programadores encontrarem o seu pacote por engano (porque estão à procura de funcionalidades específicas e pensam erradamente que o pacote fornece essa funcionalidade), aponte-os para os pacotes que podem estar à procura.

Contribuir

Veja o CONTRIBUTING.md OpenAI para obter detalhes sobre como criar, testar e contribuir para esta biblioteca.

Agradecemos todas as contribuições e sugestões para este projeto. A maioria das contribuições requerem que celebre um Contrato de Licença de Contribuição (CLA) no qual se declare que tem o direito de conceder e que, na verdade, concede-nos os direitos para utilizar a sua contribuição. Para obter detalhes, visite cla.microsoft.com.

Quando submete um pedido Pull, um bot do CLA determina automaticamente se tem de fornecer um CLA e decorar o PR de forma adequada (por exemplo, etiqueta, comentário). Só tem de seguir as instruções fornecidas pelo bot. Apenas terá de fazer isto uma vez em todos os repositórios com o nosso CLA.

Este projeto adotou o Microsoft Open Source Code of Conduct (Código de Conduta do Microsoft Open Source). Para obter mais informações, consulte as FAQ do Código de Conduta ou o contacto opencode@microsoft.com com quaisquer perguntas ou comentários adicionais.

Impressões