Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Из этого краткого руководства вы узнаете, как создать минимального помощника по искусственному интеллекту с помощью библиотек OpenAI или Azure OpenAI SDK. Помощники по искусственному интеллекту предоставляют агентические функции, помогающие пользователям выполнять задачи с помощью средств и моделей ИИ. В следующих разделах вы узнаете следующее:
- Основные компоненты и концепции помощников по искусственному интеллекту
- Создание помощника с помощью пакета SDK для Azure OpenAI
- Как улучшить и настроить возможности помощника
Предпосылки
- Установить .NET 8.0 или более поздней версии
- Visual Studio Code (необязательно)
- Visual Studio (опционально)
- Ключ доступа для модели OpenAI
- Установить .NET 8.0 или более поздней версии
- Visual Studio Code (необязательно)
- Visual Studio (опционально)
- Доступ к экземпляру Azure OpenAI с помощью идентификации Azure или ключа доступа
Основные компоненты помощников по искусственному интеллекту
Помощники по искусственному интеллекту основаны на беседных потоках с пользователем. Пользователь отправляет запрос помощнику в потоке беседы, который направляет помощника на выполнение задач с помощью доступных средств. Помощники могут обрабатывать и анализировать данные, принимать решения и взаимодействовать с пользователями или другими системами для достижения конкретных целей. Большинство помощников включают следующие компоненты:
| Компонент | Описание |
|---|---|
| Помощник | Основной клиент ИИ и логическая система, использующие модели Azure OpenAI, управляют потоками разговоров и применяют настроенные инструменты. |
| поток | Сеанс беседы между помощником и пользователем. Ветки обсуждения хранят сообщения и автоматически выполняют усечение, чтобы поместить содержимое в контекст модели. |
| Сообщение | Сообщение, созданное помощником или пользователем. Сообщения могут включать текст, изображения и другие файлы. Сообщения хранятся в потоке в виде списка. |
| Выполнить | Активация помощника для начала работы на основе содержимого потока. Помощник использует свою конфигурацию и сообщения потока для выполнения задач путем вызова моделей и инструментов. В рамках выполнения помощник добавляет сообщения в поток сообщений. |
| выполнение шагов | Подробный список шагов, которые помощник предпринял в рамках выполнения задачи. Помощник может вызывать инструменты или создавать сообщения во время своей работы. Изучение шагов выполнения позволяет понять, как помощник добивается своих крайних результатов. |
Помощники также можно настроить для использования нескольких инструментов параллельно с выполнением задач, включая следующие:
- инструмент интерпретатора кода: записывает и выполняет код в изолированной среде выполнения.
- Вызов функции: выполняет определенные в вашем коде локальные пользовательские функции.
- возможности поиска файлов: добавляет помощнику знания из внешних источников.
Понимая эти основные компоненты и как они взаимодействуют, вы можете создавать и настраивать мощных помощников по искусственному интеллекту в соответствии с вашими потребностями.
Создание приложения .NET
Выполните следующие действия, чтобы создать консольное приложение .NET и добавить пакет, необходимый для работы с помощниками:
В окне терминала перейдите к пустому каталогу на устройстве и создайте новое приложение с помощью команды
dotnet new:dotnet new console -o AIAssistantДобавьте пакет OpenAI в приложение:
dotnet add package OpenAIОткройте новое приложение в выбранном редакторе, например Visual Studio Code.
code .
В окне терминала перейдите к пустому каталогу на устройстве и создайте новое приложение с помощью команды
dotnet new:dotnet new console -o AIAssistantДобавьте в приложение пакет Azure.AI.OpenAI:
dotnet add package Azure.AI.OpenAIОткройте новое приложение в выбранном редакторе, например Visual Studio Code.
code .
Создание клиента помощника по искусственному интеллекту
Program.csОткройте файл и замените содержимое файла следующим кодом, чтобы создать необходимые клиенты: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();Создайте пример документа в памяти и отправьте его в
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);Включите возможности поиска файлов и инструментов интерпретации кода с помощью
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]), } } }, };Создайте
Assistantи поток для управления взаимодействием между пользователем и помощником:// 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 });Печать сообщений и сохранение созданного изображения из беседы с помощником:
// 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(); }Найдите и откройте сохраненный образ в каталоге приложений
bin, который должен выглядеть следующим образом: