Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Neste início rápido, você aprenderá a criar um assistente de IA mínimo usando as bibliotecas openai ou do SDK do Azure OpenAI. Os assistentes de IA fornecem funcionalidades agente para ajudar os usuários a concluir tarefas usando ferramentas e modelos de IA. Nas seções a seguir, você aprenderá o seguinte:
- Principais componentes e conceitos de assistentes de IA
- Como criar um assistente usando o SDK do Azure OpenAI
- Como aprimorar e personalizar os recursos 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 por meio da Identidade do Azure ou de uma chave de acesso
Componentes principais de assistentes de IA
Os assistentes de IA são baseados em tópicos conversacionais com um usuário. O usuário envia prompts para o assistente em um thread de conversa, que orienta o assistente a 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 metas específicas. A maioria dos assistentes inclui os seguintes componentes:
Componente | Descrição |
---|---|
Assistente | O cliente de IA principal e a lógica que usa modelos do Azure OpenAI, gerencia threads de conversa e utiliza ferramentas configuradas. |
Tópico | Uma sessão de conversa entre um assistente e um usuário. Os threads armazenam mensagens e manipulam automaticamente 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 arquivos. As mensagens são armazenadas como uma lista no thread. |
Executar | Ativação de um assistente para começar a ser executado com base no conteúdo 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. |
Etapas de execução | Uma lista detalhada das etapas que o assistente realizou como parte de uma execução. Um assistente pode chamar ferramentas ou criar mensagens durante 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 interpretador de código: grava e executa código em um ambiente de execução em área restrita.
- Chamada de função: executa funções personalizadas locais que você define em seu código.
- Recursos de pesquisa de arquivos: enriquece o assistente com conhecimento de fora do 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 do .NET e adicionar o pacote necessário para trabalhar com os assistentes:
Em uma janela de terminal, navegue até um diretório vazio em seu dispositivo e crie um novo aplicativo com o comando
dotnet new
:dotnet new console -o AIAssistant
Adicione o pacote OpenAI ao seu aplicativo:
dotnet add package OpenAI --prerelease
Abra o novo aplicativo em seu editor de escolha, como o Visual Studio Code.
code .
Em uma janela de terminal, navegue até um diretório vazio em seu dispositivo e crie um novo aplicativo com o comando
dotnet new
:dotnet new console -o AIAssistant
Adicione o pacote Azure.AI.OpenAI ao seu aplicativo:
dotnet add package Azure.AI.OpenAI --prerelease
Abra o novo aplicativo em seu editor de escolha, como o Visual Studio Code.
code .
Criar o cliente assistente de IA
Abra o
Program.cs
arquivo e substitua o conteúdo do arquivo pelo 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 no
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);
Ative as funcionalidades para pesquisa de arquivos e interpretação 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
Assistant
e um thread para gerenciar 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: