Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Neste guia de início rápido, você aprenderá a criar um assistente de IA mínimo usando as bibliotecas OpenAI ou SDK do Azure OpenAI. Os assistentes de IA fornecem funcionalidade de agente para ajudar os usuários a concluir tarefas usando ferramentas e modelos de IA. Nas seções à frente, você aprenderá o seguinte:
- Principais componentes e conceitos dos assistentes de IA
- Como criar um assistente usando o SDK do Azure OpenAI
- Como melhorar e personalizar as capacidades de um assistente
Pré-requisitos
- Instalar o .NET 8.0 ou superior
- Visual Studio Code (opcional)
- Visual Studio (opcional)
- Uma chave de acesso para um modelo OpenAI
- Instalar o .NET 8.0 ou superior
- Visual Studio Code (opcional)
- Visual Studio (opcional)
- Acesso a uma instância do Azure OpenAI através da Identidade do Azure ou de uma chave de acesso
Principais componentes dos assistentes de IA
Os assistentes de IA são baseados em tópicos de conversação com um usuário. O usuário envia prompts para o assistente em um thread de conversa, que direcionam o assistente para concluir tarefas usando as ferramentas disponíveis. Os assistentes podem processar e analisar dados, tomar decisões e interagir com usuários ou outros sistemas para atingir objetivos específicos. A maioria dos assistentes inclui os seguintes componentes:
| Componente | Descrição |
|---|---|
| Assistente | O cliente de IA principal e a lógica que utiliza modelos da OpenAI no Azure, gerencia tópicos de conversa e utiliza ferramentas previamente configuradas. |
| Tópico | Uma sessão de conversação entre um assistente e um utilizador. Os threads armazenam mensagens e lidam automaticamente com o truncamento para ajustar o conteúdo ao contexto de um modelo. |
| Mensagem | Uma mensagem criada por um assistente ou um usuário. As mensagens podem incluir texto, imagens e outros ficheiros. As mensagens são armazenadas como uma lista no thread. |
| Executar | Ativação de um assistente para começar a funcionar com base nos conteúdos do thread. O assistente usa sua configuração e as mensagens do thread para executar tarefas chamando modelos e ferramentas. Como parte de uma execução, o assistente acrescenta mensagens ao thread. |
| Executar passos | Uma lista detalhada das etapas que o assistente tomou como parte de uma corrida. Um assistente pode chamar ferramentas ou criar mensagens durante a sua execução. Examinar as etapas de execução permite que você entenda como o assistente está chegando aos resultados finais. |
Os assistentes também podem ser configurados para usar várias ferramentas em paralelo para concluir tarefas, incluindo o seguinte:
- ferramenta de interpretador de código: Escreve e executa código em um ambiente de execução em área restrita.
- Chamadas de funções: Executa funções personalizadas locais definidas no seu código.
- Recursos de pesquisa de arquivos: Aumenta o assistente com conhecimento externo ao seu modelo.
Ao entender esses componentes principais e como eles interagem, você pode criar e personalizar poderosos assistentes de IA para atender às suas necessidades específicas.
Criar o aplicativo .NET
Conclua as seguintes etapas para criar um aplicativo de console .NET e adicionar o pacote necessário para trabalhar com assistentes:
Em uma janela do terminal, navegue até um diretório vazio no seu dispositivo e crie um novo aplicativo com o comando
dotnet new:dotnet new console -o AIAssistantAdicione o pacote OpenAI ao seu aplicativo:
dotnet add package OpenAIAbra o novo aplicativo no editor de sua escolha, como o Visual Studio Code.
code .
Em uma janela do terminal, navegue até um diretório vazio no seu dispositivo e crie um novo aplicativo com o comando
dotnet new:dotnet new console -o AIAssistantAdicione o pacote Azure.AI.OpenAI à sua aplicação:
dotnet add package Azure.AI.OpenAIAbra o novo aplicativo no editor de sua escolha, como o Visual Studio Code.
code .
Criar o cliente assistente de IA
Abra o
Program.csarquivo e substitua o conteúdo do arquivo com o seguinte código para criar os clientes necessários:using OpenAI; using OpenAI.Assistants; using OpenAI.Files; using Azure.AI.OpenAI; using Azure.Identity; // Create the OpenAI client OpenAIClient openAIClient = new("your-apy-key"); // For Azure OpenAI, use the following client instead: AzureOpenAIClient azureAIClient = new( new Uri("your-azure-openai-endpoint"), new DefaultAzureCredential()); #pragma warning disable OPENAI001 AssistantClient assistantClient = openAIClient.GetAssistantClient(); OpenAIFileClient fileClient = openAIClient.GetOpenAIFileClient();Crie um documento de exemplo na memória e carregue-o para o
OpenAIFileClient:// Create an in-memory document to upload to the file client using Stream document = BinaryData.FromBytes(""" { "description": "This document contains the sale history data for Contoso products.", "sales": [ { "month": "January", "by_product": { "113043": 15, "113045": 12, "113049": 2 } }, { "month": "February", "by_product": { "113045": 22 } }, { "month": "March", "by_product": { "113045": 16, "113055": 5 } } ] } """u8.ToArray()).ToStream(); // Upload the document to the file client OpenAIFile salesFile = fileClient.UploadFile( document, "monthly_sales.json", FileUploadPurpose.Assistants);Habilite os recursos de ferramentas de pesquisa de arquivos e interpretadores de código por meio do
AssistantCreationOptions:// Configure the assistant options AssistantCreationOptions assistantOptions = new() { Name = "Example: Contoso sales RAG", Instructions = "You are an assistant that looks up sales data and helps visualize the information based" + " on user queries. When asked to generate a graph, chart, or other visualization, use" + " the code interpreter tool to do so.", Tools = { new FileSearchToolDefinition(), // Enable the assistant to search and access files new CodeInterpreterToolDefinition(), // Enable the assistant to run code for data analysis }, ToolResources = new() { FileSearch = new() { NewVectorStores = { new VectorStoreCreationHelper([salesFile.Id]), } } }, };Crie o
Assistante um thread para gerenciar as interações entre o usuário e o assistente:// Create the assistant Assistant assistant = assistantClient.CreateAssistant("gpt-4o", assistantOptions); // Configure and create the conversation thread ThreadCreationOptions threadOptions = new() { InitialMessages = { "How well did product 113045 sell in February? Graph its trend over time." } }; ThreadRun threadRun = assistantClient.CreateThreadAndRun(assistant.Id, threadOptions); // Sent the prompt and monitor progress until the thread run is complete do { Thread.Sleep(TimeSpan.FromSeconds(1)); threadRun = assistantClient.GetRun(threadRun.ThreadId, threadRun.Id); } while (!threadRun.Status.IsTerminal); // Get the messages from the thread run var messages = assistantClient.GetMessagesAsync( threadRun.ThreadId, new MessageCollectionOptions() { Order = MessageCollectionOrder.Ascending });Imprima as mensagens e salve a imagem gerada da conversa com o assistente:
// Process the messages from the assistant await foreach (ThreadMessage message in messages) { // Print out the messages from the assistant Console.Write($"[{message.Role.ToString().ToUpper()}]: "); foreach (MessageContent contentItem in message.Content) { if (!string.IsNullOrEmpty(contentItem.Text)) { Console.WriteLine($"{contentItem.Text}"); if (contentItem.TextAnnotations.Count > 0) { Console.WriteLine(); } // Include annotations, if any foreach (TextAnnotation annotation in contentItem.TextAnnotations) { if (!string.IsNullOrEmpty(annotation.InputFileId)) { Console.WriteLine($"* File citation, file ID: {annotation.InputFileId}"); } if (!string.IsNullOrEmpty(annotation.OutputFileId)) { Console.WriteLine($"* File output, new file ID: {annotation.OutputFileId}"); } } } // Save the generated image file if (!string.IsNullOrEmpty(contentItem.ImageFileId)) { OpenAIFile imageInfo = fileClient.GetFile(contentItem.ImageFileId); BinaryData imageBytes = fileClient.DownloadFile(contentItem.ImageFileId); using FileStream stream = File.OpenWrite($"{imageInfo.Filename}.png"); imageBytes.ToStream().CopyTo(stream); Console.WriteLine($"<image: {imageInfo.Filename}.png>"); } } Console.WriteLine(); }Localize e abra a imagem salva no diretório do aplicativo
bin, que deve ser semelhante ao seguinte: