Краткое руководство. Чат с моделями Azure OpenAI с помощью собственных данных
Статья
В этом кратком руководстве вы можете использовать собственные данные с моделями Azure OpenAI. С помощью моделей Azure OpenAI в данных можно использовать мощную платформу ИИ для общения, которая обеспечивает более высокую и точную связь.
Выберите чат в разделе "Игровые площадки" в меню навигации слева и выберите развертывание модели.
На игровой площадке чата выберите "Добавить данные", а затем добавьте источник данных
В появившейся области выберите " Отправить файлы (предварительная версия) в разделе "Выбор источника данных". Azure OpenAI требует как ресурса хранилища, так и ресурса поиска для доступа к вашим данным и их индексации.
Для документов и наборов данных с длинным текстом рекомендуется использовать доступный скрипт подготовки данных.
Для доступа к учетной записи хранения Azure OpenAI необходимо включить общий доступ к ресурсам между источниками (CORS). Если CORS еще не включен для ресурса Хранилище BLOB-объектов Azure, нажмите кнопку "Включить CORS".
Выберите ресурс поиска ИИ Azure и выберите подтверждение, что подключение к нему приведет к использованию вашей учетной записи. Затем выберите Далее.
На панели "Отправить файлы" выберите "Обзор файла" и выберите файлы, скачанные из раздела предварительных требований, или собственные данные. Затем выберите " Отправить файлы". Затем выберите Далее.
Семантический поиск и векторный поиск подвергаются дополнительным ценам. Чтобы включить семантический поиск или векторный поиск, необходимо выбрать базовый или более высокий номер SKU . Дополнительные сведения см . в разделе "Разница в ценовой категории" и ограничения служб.
Чтобы повысить качество получения информации и ответов модели, рекомендуем включить семантический поиск для следующих исходных языков: английский, арабский, испанский, итальянский, итальянский, китайский, корейский, португальский, русский, французский и японский.
Просмотрите введенные сведения и нажмите кнопку "Сохранить и закрыть". Теперь вы можете общаться с моделью и использовать информацию из данных для создания ответа.
Детская площадка чата
Начните изучение возможностей Azure OpenAI с использованием подхода без кода на игровой площадке чата. Это просто текстовое поле, в котором можно отправить запрос на создание завершения. На этой странице можно быстро итерировать и экспериментировать с возможностями.
На детской площадке вы можете настроить взаимодействие с чатом. В верхнем меню можно выбрать "Развернуть" , чтобы определить, какая модель создает ответ с помощью результатов поиска из индекса. Вы выбираете количество прошлых сообщений, включаемых в журнал бесед для будущих созданных ответов.
Журнал бесед дает контекст для создания связанных ответов, но также использует использование маркеров. Индикатор хода выполнения входного маркера отслеживает количество маркеров, которые вы отправляете.
Дополнительные параметры слева — это параметры среды выполнения, которые позволяют управлять получением и поиском соответствующих сведений из данных. Хороший вариант использования заключается в том, что вы хотите убедиться, что ответы создаются только на основе данных, или модель не может создать ответ на основе существующих сведений о данных.
Строгость определяет агрессивность системы в фильтрации документов поиска на основе их показателей сходства. Установка строгости 5 указывает на то, что система будет агрессивно фильтровать документы, применяя очень высокий порог сходства.
Семантический поиск может быть полезным в этом сценарии, так как модели ранжирования делают лучшее задание вывода намерения запроса. Более подробные ответы создают более подробные ответы на более низкие уровни строгости, но также могут содержать сведения, которые не входят в индекс. По умолчанию это значение равно 3.
Извлеченные документы — это целое число, которое можно задать для 3, 5, 10 или 20, а также определяет количество блоков документов, предоставленных большой языковой модели для формирования окончательного ответа. По умолчанию это значение равно 5.
Если включено ограничение ответов на данные , модель пытается использовать только документы для ответов. По умолчанию это значение имеет значение true.
Отправьте первый запрос. Модели чата лучше всего работают в упражнениях с вопросом и ответами. Например, "Что такое мои доступные планы здравоохранения?", или "Что такое вариант "Здоровье плюс?".
Запросы, требующие анализа данных, вероятно, завершаются ошибкой, например "Какой план работоспособности наиболее популярен?". Запросы, требующие сведений обо всех ваших данных, также могут завершиться ошибкой, например "Сколько документов я отправил?". Помните, что поисковый механизм ищет фрагменты с точными или похожими терминами, фразами или конструкцией запроса. И хотя модель может понять вопрос, если результаты поиска являются блоками из набора данных, это не правильные сведения для ответа на этот вопрос.
Чаты ограничены количеством документов (фрагментов), возвращенных в ответе (ограничено 3–20 на игровой площадке портала Azure AI Foundry). Как вы можете себе представить, создание вопроса о "всех названиях" требует полного сканирования всего векторного хранилища.
Развертывание модели
Когда вы удовлетворены опытом, вы можете развернуть веб-приложение непосредственно на портале, нажав кнопку "Развернуть в ".
Это дает возможность либо развернуть в автономном веб-приложении, либо copilot в Copilot Studio (предварительная версия), если вы используете собственные данные в модели.
Например, если вы решили развернуть веб-приложение:
При первом развертывании веб-приложения следует выбрать команду "Создать новое веб-приложение". Выберите имя приложения, которое станет частью URL-адреса приложения. Например, https://<appname>.azurewebsites.net.
Выберите подписку, группу ресурсов, расположение и тарифный план для опубликованного приложения. Чтобы обновить существующее приложение, выберите "Опубликовать" в существующем веб-приложении и выберите имя предыдущего приложения в раскрывающемся меню.
Если вы решили развернуть веб-приложение, ознакомьтесь с важными рекомендациями по его использованию.
Выберите чат в разделе "Игровые площадки" в меню навигации слева и выберите развертывание модели.
На игровой площадке чата выберите "Добавить данные", а затем добавьте источник данных
В появившейся области выберите " Отправить файлы (предварительная версия) в разделе "Выбор источника данных". Azure OpenAI требует как ресурса хранилища, так и ресурса поиска для доступа к вашим данным и их индексации.
Для документов и наборов данных с длинным текстом рекомендуется использовать доступный скрипт подготовки данных.
Для доступа к учетной записи хранения Azure OpenAI необходимо включить общий доступ к ресурсам между источниками (CORS). Если CORS еще не включен для ресурса Хранилище BLOB-объектов Azure, нажмите кнопку "Включить CORS".
Выберите ресурс поиска ИИ Azure и выберите подтверждение, что подключение к нему приведет к использованию вашей учетной записи. Затем выберите Далее.
На панели "Отправить файлы" выберите "Обзор файла" и выберите файлы, скачанные из раздела предварительных требований, или собственные данные. Затем выберите " Отправить файлы". Затем выберите Далее.
Семантический поиск и векторный поиск подвергаются дополнительным ценам. Чтобы включить семантический поиск или векторный поиск, необходимо выбрать базовый или более высокий номер SKU . Дополнительные сведения см . в разделе "Разница в ценовой категории" и ограничения служб.
Чтобы повысить качество получения информации и ответов модели, рекомендуем включить семантический поиск для следующих исходных языков: английский, арабский, испанский, итальянский, итальянский, китайский, корейский, португальский, русский, французский и японский.
Просмотрите введенные сведения и нажмите кнопку "Сохранить и закрыть". Теперь вы можете общаться с моделью и использовать информацию из данных для создания ответа.
Получение сведений о ресурсе
Чтобы проверить подлинность приложения с помощью ресурса Azure OpenAI, необходимо получить следующие сведения. В этом кратком руководстве предполагается, что вы отправили данные в учетную запись хранения BLOB-объектов Azure и создали индекс поиска ИИ Azure. См. статью "Добавление данных с помощью портала Azure AI Foundry".
Это значение можно найти в разделе "Ключи и конечная точка" при проверке ресурса Azure OpenAI из портал Azure. Пример конечной точки: https://my-resoruce.openai.azure.com.
AZURE_OPENAI_DEPLOYMENT_ID
Это значение соответствует пользовательскому имени, выбранному для развертывания при развертывании модели. Это значение можно найти в разделе "Развертывания управления>ресурсами" в портал Azure.
AZURE_AI_SEARCH_ENDPOINT
Это значение можно найти в разделе "Обзор" при изучении ресурса поиска ИИ Azure из портал Azure.
AZURE_AI_SEARCH_INDEX
Это значение соответствует имени индекса, созданного для хранения данных. Его можно найти в разделе "Обзор" при изучении ресурса поиска ИИ Azure из портал Azure.
Это значение можно найти в разделе "Ключи и конечная точка" при проверке ресурса Azure OpenAI из портал Azure. Пример конечной точки: https://my-resoruce.openai.azure.com.
AZURE_OPENAI_API_KEY
Это значение можно найти в разделе "Ключи управления>ресурсами" и "Конечная точка" при изучении ресурса Azure OpenAI из портал Azure. Вы можете использовать KEY1 или KEY2. Наличие двух ключей позволяет безопасно менять и повторно создавать ключи без прерывания работы службы.
AZURE_OPENAI_DEPLOYMENT_ID
Это значение соответствует пользовательскому имени, выбранному для развертывания при развертывании модели. Это значение можно найти в разделе "Развертывания управления>ресурсами" в портал Azure.
AZURE_AI_SEARCH_ENDPOINT
Это значение можно найти в разделе "Обзор" при изучении ресурса поиска ИИ Azure из портал Azure.
AZURE_AI_SEARCH_API_KEY
Это значение можно найти в разделе "Ключи>параметров" при изучении ресурса поиска ИИ Azure из портал Azure. Вы можете использовать ключ первичного администратора или дополнительный ключ администратора. Наличие двух ключей позволяет безопасно менять и повторно создавать ключи без прерывания работы службы.
AZURE_AI_SEARCH_INDEX
Это значение соответствует имени индекса, созданного для хранения данных. Его можно найти в разделе "Обзор" при изучении ресурса поиска ИИ Azure из портал Azure.
Используйте ключи API с осторожностью. Не включайте ключ API непосредственно в код и никогда не публикуйте его. Если вы используете ключ API, сохраните его безопасно в Azure Key Vault. Дополнительные сведения об использовании ключей API безопасно в приложениях см. в разделе "Ключи API" с помощью Azure Key Vault.
В окне консоли (cmd, PowerShell или Bash) выполните команду dotnet new, чтобы создать консольное приложение с именем azure-openai-quickstart. Эта команда создает простой проект Hello World с одним исходным файлом C#: Program.cs.
Интерфейс командной строки.NET
dotnetnew console -n azure-openai-quickstart
Измените каталог на созданную папку приложения. Чтобы создать приложение, выполните следующую команду:
Интерфейс командной строки.NET
dotnetbuild
Выходные данные сборки не должны содержать предупреждений или ошибок.
Выходные данные
...
Build succeeded.
0 Warning(s)
0 Error(s)
...
Установите клиентская библиотека OpenAI .NET с помощью следующих компонентов:
Консоль
dotnet add package Azure.AI.OpenAI --prerelease
В каталоге проекта откройте файл Program.cs и замените его содержимое следующим кодом:
C#
using System;
using Azure.AI.OpenAI;
using System.ClientModel;
using Azure.AI.OpenAI.Chat;
using OpenAI.Chat;
usingstatic System.Environment;
string azureOpenAIEndpoint = GetEnvironmentVariable("AZURE_OPENAI_ENDPOINT");
string azureOpenAIKey = GetEnvironmentVariable("AZURE_OPENAI_API_KEY");
string deploymentName = GetEnvironmentVariable("AZURE_OPENAI_DEPLOYMENT_ID");
string searchEndpoint = GetEnvironmentVariable("AZURE_AI_SEARCH_ENDPOINT");
string searchKey = GetEnvironmentVariable("AZURE_AI_SEARCH_API_KEY");
string searchIndex = GetEnvironmentVariable("AZURE_AI_SEARCH_INDEX");
AzureOpenAIClient azureClient = new(
new Uri(azureOpenAIEndpoint),
new ApiKeyCredential(azureOpenAIKey));
ChatClient chatClient = azureClient.GetChatClient(deploymentName);
// Extension methods to use data sources with options are subject to SDK surface changes. Suppress the// warning to acknowledge and this and use the subject-to-change AddDataSource method.#pragmawarning disable AOAI001
ChatCompletionOptions options = new();
options.AddDataSource(new AzureSearchChatDataSource()
{
Endpoint = new Uri(searchEndpoint),
IndexName = searchIndex,
Authentication = DataSourceAuthentication.FromApiKey(searchKey),
});
ChatCompletion completion = chatClient.CompleteChat(
[
new UserChatMessage("What health plans are available?"),
],
options);
ChatMessageContext onYourDataContext = completion.GetMessageContext();
if (onYourDataContext?.Intent isnotnull)
{
Console.WriteLine($"Intent: {onYourDataContext.Intent}");
}
foreach (ChatCitation citation in onYourDataContext?.Citations ?? [])
{
Console.WriteLine($"Citation: {citation.Content}");
}
Важно!
Для рабочей среды используйте безопасный способ хранения и доступа к учетным данным, например Azure Key Vault. Дополнительные сведения о безопасности учетных данных см. в статье о безопасности служб искусственного интеллекта Azure.
Командная строка Windows
dotnet run program.cs
Выходные данные
Выходные данные
Contoso Electronics offers two health plans: Northwind Health Plus and Northwind Standard [doc1]. Northwind Health Plus is a comprehensive plan that provides coverage for medical, vision, and dental services, prescription drug coverage, mental health and substance abuse coverage, and coverage for preventive care services. It also offers coverage for emergency services, both in-network and out-of-network. On the other hand, Northwind Standard is a basic plan that provides coverage for medical, vision, and dental services, prescription drug coverage, and coverage for preventive care services. However, it does not offer coverage for emergency services, mental health and substance abuse coverage, or out-of-network services [doc1].
Intent: ["What are the available health plans?", "List of health plans available", "Health insurance options", "Types of health plans offered"]
Citation:
Contoso Electronics plan and benefit packages
Thank you for your interest in the Contoso electronics plan and benefit packages. Use this document to
learn more about the various options available to you...// Omitted for brevity
Ожидается, пока модель не создаст весь ответ перед печатью результатов.
Выберите чат в разделе "Игровые площадки" в меню навигации слева и выберите развертывание модели.
На игровой площадке чата выберите "Добавить данные", а затем добавьте источник данных
В появившейся области выберите " Отправить файлы (предварительная версия) в разделе "Выбор источника данных". Azure OpenAI требует как ресурса хранилища, так и ресурса поиска для доступа к вашим данным и их индексации.
Для документов и наборов данных с длинным текстом рекомендуется использовать доступный скрипт подготовки данных.
Для доступа к учетной записи хранения Azure OpenAI необходимо включить общий доступ к ресурсам между источниками (CORS). Если CORS еще не включен для ресурса Хранилище BLOB-объектов Azure, нажмите кнопку "Включить CORS".
Выберите ресурс поиска ИИ Azure и выберите подтверждение, что подключение к нему приведет к использованию вашей учетной записи. Затем выберите Далее.
На панели "Отправить файлы" выберите "Обзор файла" и выберите файлы, скачанные из раздела предварительных требований, или собственные данные. Затем выберите " Отправить файлы". Затем выберите Далее.
Семантический поиск и векторный поиск подвергаются дополнительным ценам. Чтобы включить семантический поиск или векторный поиск, необходимо выбрать базовый или более высокий номер SKU . Дополнительные сведения см . в разделе "Разница в ценовой категории" и ограничения служб.
Чтобы повысить качество получения информации и ответов модели, рекомендуем включить семантический поиск для следующих исходных языков: английский, арабский, испанский, итальянский, итальянский, китайский, корейский, португальский, русский, французский и японский.
Просмотрите введенные сведения и нажмите кнопку "Сохранить и закрыть". Теперь вы можете общаться с моделью и использовать информацию из данных для создания ответа.
Получение необходимых переменных
Чтобы успешно выполнить вызов к Azure OpenAI, вам потребуются следующие переменные. В этом кратком руководстве предполагается, что вы отправили данные в учетную запись хранения BLOB-объектов Azure и создали индекс поиска ИИ Azure. Дополнительные сведения см. в статье "Добавление данных с помощью Azure AI Foundry".
Имя переменной
Значение
AZURE_OPENAI_ENDPOINT
Это значение можно найти в разделе "Ключи и конечная точка" при проверке ресурса Azure OpenAI из портал Azure. Кроме того, можно найти значение в представлении кода игровой площадки>чата в Azure AI Foundry>Chat. Пример конечной точки: https://my-resource.openai.azure.com.
AZURE_OPENAI_API_KEY
Это значение можно найти в разделе "Ключи управления>ресурсами" и "Конечная точка" при изучении ресурса Azure OpenAI из портал Azure. Вы можете использовать KEY1 или KEY2. Наличие двух ключей позволяет безопасно менять и повторно создавать ключи без прерывания работы службы.
AZURE_OPEN_AI_DEPLOYMENT_ID
Это значение соответствует пользовательскому имени, выбранному для развертывания при развертывании модели. Это значение можно найти в разделе "Развертывания управления>ресурсами" в портал Azure или в разделе "Развертывания управления>" на портале Azure AI Foundry.
AZURE_AI_SEARCH_ENDPOINT
Это значение можно найти в разделе "Обзор" при изучении ресурса поиска ИИ Azure из портал Azure.
AZURE_AI_SEARCH_API_KEY
Это значение можно найти в разделе "Ключи>параметров" при изучении ресурса поиска ИИ Azure из портал Azure. Вы можете использовать ключ первичного администратора или дополнительный ключ администратора. Наличие двух ключей позволяет безопасно менять и повторно создавать ключи без прерывания работы службы.
AZURE_AI_SEARCH_INDEX
Это значение соответствует имени индекса, созданного для хранения данных. Его можно найти в разделе "Обзор" при изучении ресурса поиска ИИ Azure из портал Azure.
Переменные среды
Создайте и назначьте переменные постоянной среды для ключа и конечной точки.
Важно!
Используйте ключи API с осторожностью. Не включайте ключ API непосредственно в код и никогда не публикуйте его. Если вы используете ключ API, сохраните его безопасно в Azure Key Vault. Дополнительные сведения об использовании ключей API безопасно в приложениях см. в разделе "Ключи API" с помощью Azure Key Vault.
Spring AI по умолчанию использует имя gpt-35-turboмодели. Необходимо указать SPRING_AI_AZURE_OPENAI_MODEL значение только в том случае, если вы развернули модель с другим именем.
Spring AI в настоящее время не поддерживает AzureCognitiveSearchChatExtensionConfiguration варианты, позволяющие запросу ИИ Azure инкапсулировать метод получения дополненного поколения (RAG) и скрыть сведения от пользователя. В качестве альтернативы вы по-прежнему можете вызвать метод RAG непосредственно в приложении для запроса данных в индексе поиска ИИ Azure и использовать извлеченные документы для расширения запроса.
Spring AI поддерживает абстракцию VectorStore, и вы можете упаковать поиск ИИ Azure в реализацию Spring AI VectorStore для запроса пользовательских данных. Следующий проект реализует пользовательский VectorStore, поддерживаемый поиском ИИ Azure, и выполняет операции RAG напрямую.
В окне Bash создайте новый каталог для приложения и перейдите к нему.
Bash
mkdir ai-custom-data-demo && cd ai-custom-data-demo
Выполните команду spring init из рабочей папки. Эта команда создает стандартную структуру каталогов для проекта Spring, включая исходный файл класса Java и файл pom.xml , используемый для управления проектами на основе Maven.
Bash
spring init -a ai-custom-data-demo -n AICustomData --force --build maven -x
Созданные файлы и папки похожи на следующую структуру:
В корневом каталоге проекта откройте файл pom.xml в предпочтительном редакторе или интегрированной среде разработки и перезаписать файл следующим содержимым:
XML
<?xml version="1.0" encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.2.0</version><relativePath/><!-- lookup parent from repository --></parent><groupId>com.example</groupId><artifactId>ai-custom-data-demo</artifactId><version>0.0.1-SNAPSHOT</version><name>AICustomData</name><description>Demo project for Spring Boot</description><properties><java.version>17</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.experimental.ai</groupId><artifactId>spring-ai-azure-openai-spring-boot-starter</artifactId><version>0.7.0-SNAPSHOT</version></dependency><dependency><groupId>com.azure</groupId><artifactId>azure-search-documents</artifactId><version>11.6.0-beta.10</version><exclusions><!-- exclude this to avoid changing the default serializer and the null-value behavior --><exclusion><groupId>com.azure</groupId><artifactId>azure-core-serializer-json-jackson</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build><repositories><repository><id>spring-snapshots</id><name>Spring Snapshots</name><url>https://repo.spring.io/snapshot</url><releases><enabled>false</enabled></releases></repository></repositories></project>
В папке src/main/java/com/example/aicustomdatademo откройте AiCustomDataApplication.java в предпочтительном редакторе или интегрированной среде разработки и вставьте следующий код:
Java
package com.example.aicustomdatademo;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
import org.springframework.ai.client.AiClient;
import org.springframework.ai.document.Document;
import org.springframework.ai.embedding.EmbeddingClient;
import org.springframework.ai.prompt.Prompt;
import org.springframework.ai.prompt.SystemPromptTemplate;
import org.springframework.ai.prompt.messages.MessageType;
import org.springframework.ai.prompt.messages.UserMessage;
import org.springframework.ai.vectorstore.VectorStore;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import com.azure.core.credential.AzureKeyCredential;
import com.azure.core.util.Context;
import com.azure.search.documents.SearchClient;
import com.azure.search.documents.SearchClientBuilder;
import com.azure.search.documents.models.IndexingResult;
import com.azure.search.documents.models.SearchOptions;
import com.azure.search.documents.models.RawVectorQuery;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.extern.jackson.Jacksonized;
@SpringBootApplicationpublicclassAiCustomDataApplicationimplementsCommandLineRunner{
privatestaticfinal String ROLE_INFO_KEY = "role";
privatestaticfinal String template = """
You are a helpful assistant. Use the information from the DOCUMENTS section to augment answers.
DOCUMENTS:
{documents}
""";
@Value("${spring.ai.azure.cognitive-search.endpoint}")
private String acsEndpoint;
@Value("${spring.ai.azure.cognitive-search.api-key}")
private String acsApiKey;
@Value("${spring.ai.azure.cognitive-search.index}")
private String acsIndexName;
@Autowiredprivate AiClient aiClient;
@Autowiredprivate EmbeddingClient embeddingClient;
publicstaticvoidmain(String[] args){
SpringApplication.run(AiCustomDataApplication.class, args);
}
@Overridepublicvoidrun(String... args)throws Exception
{
System.out.println(String.format("Sending custom data prompt to AI service. One moment please...\r\n"));
finalvar store = vectorStore(embeddingClient);
final String question = "What are my available health plans?";
finalvar candidateDocs = store.similaritySearch(question);
finalvar userMessage = new UserMessage(question);
final String docPrompts =
candidateDocs.stream().map(entry -> entry.getContent()).collect(Collectors.joining("\n"));
final SystemPromptTemplate promptTemplate = new SystemPromptTemplate(template);
finalvar systemMessage = promptTemplate.createMessage(Map.of("documents", docPrompts));
finalvar prompt = new Prompt(List.of(systemMessage, userMessage));
finalvar resps = aiClient.generate(prompt);
System.out.println(String.format("Prompt created %d generated response(s).", resps.getGenerations().size()));
resps.getGenerations().stream()
.forEach(gen -> {
finalvar role = gen.getInfo().getOrDefault(ROLE_INFO_KEY, MessageType.ASSISTANT.getValue());
System.out.println(String.format("Generated respose from \"%s\": %s", role, gen.getText()));
});
}
@Beanpublic VectorStore vectorStore(EmbeddingClient embeddingClient){
final SearchClient searchClient = new SearchClientBuilder()
.endpoint(acsEndpoint)
.credential(new AzureKeyCredential(acsApiKey))
.indexName(acsIndexName)
.buildClient();
returnnew AzureCognitiveSearchVectorStore(searchClient, embeddingClient);
}
publicstaticclassAzureCognitiveSearchVectorStoreimplementsVectorStore{
privatestaticfinalint DEFAULT_TOP_K = 4;
privatestaticfinal Double DEFAULT_SIMILARITY_THRESHOLD = 0.0;
private SearchClient searchClient;
privatefinal EmbeddingClient embeddingClient;
publicAzureCognitiveSearchVectorStore(SearchClient searchClient, EmbeddingClient embeddingClient){
this.searchClient = searchClient;
this.embeddingClient = embeddingClient;
}
@Overridepublicvoidadd(List<Document> documents){
finalvar docs = documents.stream().map(document -> {
finalvar embeddings = embeddingClient.embed(document);
returnnew DocEntry(document.getId(), "", document.getContent(), embeddings);
}).toList();
searchClient.uploadDocuments(docs);
}
@Overridepublic Optional<Boolean> delete(List<String> idList){
final List<DocEntry> docIds = idList.stream().map(id -> DocEntry.builder().id(id).build())
.toList();
var results = searchClient.deleteDocuments(docIds);
boolean resSuccess = true;
for (IndexingResult result : results.getResults())
if (!result.isSucceeded()) {
resSuccess = false;
break;
}
return Optional.of(resSuccess);
}
@Overridepublic List<Document> similaritySearch(String query){
return similaritySearch(query, DEFAULT_TOP_K);
}
@Overridepublic List<Document> similaritySearch(String query, int k){
return similaritySearch(query, k, DEFAULT_SIMILARITY_THRESHOLD);
}
@Overridepublic List<Document> similaritySearch(String query, int k, double threshold){
finalvar searchQueryVector = new RawVectorQuery()
.setVector(toFloatList(embeddingClient.embed(query)))
.setKNearestNeighborsCount(k)
.setFields("contentVector");
finalvar searchResults = searchClient.search(null,
new SearchOptions().setVectorQueries(searchQueryVector), Context.NONE);
return searchResults.stream()
.filter(r -> r.getScore() >= threshold)
.map(r -> {
final DocEntry entry = r.getDocument(DocEntry.class);
final Document doc = new Document(entry.getId(), entry.getContent(), Collections.emptyMap());
doc.setEmbedding(entry.getContentVector());
return doc;
})
.collect(Collectors.toList());
}
private List<Float> toFloatList(List<Double> doubleList){
return doubleList.stream().map(Double::floatValue).toList();
}
}
@Data@Builder@Jacksonized@AllArgsConstructor@NoArgsConstructorstaticclassDocEntry{
private String id;
private String hash;
private String content;
private List<Double> contentVector;
}
}
Важно!
Для рабочей среды используйте безопасный способ хранения и доступа к учетным данным, например Azure Key Vault. Дополнительные сведения о безопасности учетных данных см. в статье о безопасности служб искусственного интеллекта Azure.
Вернитесь к корневой папке проекта и запустите приложение с помощью следующей команды:
Bash
./mvnw spring-boot:run
Выходные данные
Выходные данные
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v3.1.5)
2023-11-07T14:40:45.250-06:00 INFO 18557 --- [ main] c.e.a.AiCustomDataApplication : No active profile set, falling back to 1 default profile: "default"
2023-11-07T14:40:46.035-06:00 INFO 18557 --- [ main] c.e.a.AiCustomDataApplication : Started AiCustomDataApplication in 1.095 seconds (process running for 1.397)
Sending custom data prompt to AI service. One moment please...
Prompt created 1 generated response(s).
Generated response from "assistant": The available health plans in the Contoso Electronics plan and benefit packages are the Northwind Health Plus and Northwind Standard plans.
Azure CLI , используемый для проверки подлинности без пароля в локальной среде разработки, создайте необходимый контекст, выполнив вход с помощью Azure CLI.
Убедитесь, что вы назначены по крайней мере роль участника Cognitive Services для ресурса Azure OpenAI.
Скачайте примеры данных из GitHub , если у вас нет собственных данных.
Предварительные требования для идентификатора Microsoft Entra
Для рекомендуемой проверки подлинности без ключа с помощью идентификатора Microsoft Entra необходимо:
Установите Azure CLI, используемый для проверки подлинности без ключа с помощью идентификатора Microsoft Entra.
Назначьте роль учетной Cognitive Services User записи пользователя. Роли можно назначить в портал Azure в разделе управления доступом (IAM)>Добавить назначение ролей.
Добавление данных с помощью портала Azure AI Foundry
Выберите чат в разделе "Игровые площадки" в меню навигации слева и выберите развертывание модели.
На игровой площадке чата выберите "Добавить данные", а затем добавьте источник данных
В появившейся области выберите " Отправить файлы (предварительная версия) в разделе "Выбор источника данных". Azure OpenAI требует как ресурса хранилища, так и ресурса поиска для доступа к вашим данным и их индексации.
Для документов и наборов данных с длинным текстом рекомендуется использовать доступный скрипт подготовки данных.
Для доступа к учетной записи хранения Azure OpenAI необходимо включить общий доступ к ресурсам между источниками (CORS). Если CORS еще не включен для ресурса Хранилище BLOB-объектов Azure, нажмите кнопку "Включить CORS".
Выберите ресурс поиска ИИ Azure и выберите подтверждение, что подключение к нему приведет к использованию вашей учетной записи. Затем выберите Далее.
На панели "Отправить файлы" выберите "Обзор файла" и выберите файлы, скачанные из раздела предварительных требований, или собственные данные. Затем выберите " Отправить файлы". Затем выберите Далее.
Семантический поиск и векторный поиск подвергаются дополнительным ценам. Чтобы включить семантический поиск или векторный поиск, необходимо выбрать базовый или более высокий номер SKU . Дополнительные сведения см . в разделе "Разница в ценовой категории" и ограничения служб.
Чтобы повысить качество получения информации и ответов модели, рекомендуем включить семантический поиск для следующих исходных языков: английский, арабский, испанский, итальянский, итальянский, китайский, корейский, португальский, русский, французский и японский.
Просмотрите введенные сведения и нажмите кнопку "Сохранить и закрыть". Теперь вы можете общаться с моделью и использовать информацию из данных для создания ответа.
Получение сведений о ресурсе
Чтобы проверить подлинность приложения с помощью ресурса Azure OpenAI, необходимо получить следующие сведения. В этом кратком руководстве предполагается, что вы отправили данные в учетную запись хранения BLOB-объектов Azure и создали индекс поиска ИИ Azure. См. статью "Добавление данных с помощью портала Azure AI Foundry".
Это значение можно найти в разделе "Ключи и конечная точка" при проверке ресурса Azure OpenAI из портал Azure. Пример конечной точки: https://my-resoruce.openai.azure.com.
AZURE_OPENAI_DEPLOYMENT_ID
Это значение соответствует пользовательскому имени, выбранному для развертывания при развертывании модели. Это значение можно найти в разделе "Развертывания управления>ресурсами" в портал Azure.
AZURE_AI_SEARCH_ENDPOINT
Это значение можно найти в разделе "Обзор" при изучении ресурса поиска ИИ Azure из портал Azure.
AZURE_AI_SEARCH_INDEX
Это значение соответствует имени индекса, созданного для хранения данных. Его можно найти в разделе "Обзор" при изучении ресурса поиска ИИ Azure из портал Azure.
Это значение можно найти в разделе "Ключи и конечная точка" при проверке ресурса Azure OpenAI из портал Azure. Пример конечной точки: https://my-resoruce.openai.azure.com.
AZURE_OPENAI_API_KEY
Это значение можно найти в разделе "Ключи управления>ресурсами" и "Конечная точка" при изучении ресурса Azure OpenAI из портал Azure. Вы можете использовать KEY1 или KEY2. Наличие двух ключей позволяет безопасно менять и повторно создавать ключи без прерывания работы службы.
AZURE_OPENAI_DEPLOYMENT_ID
Это значение соответствует пользовательскому имени, выбранному для развертывания при развертывании модели. Это значение можно найти в разделе "Развертывания управления>ресурсами" в портал Azure.
AZURE_AI_SEARCH_ENDPOINT
Это значение можно найти в разделе "Обзор" при изучении ресурса поиска ИИ Azure из портал Azure.
AZURE_AI_SEARCH_API_KEY
Это значение можно найти в разделе "Ключи>параметров" при изучении ресурса поиска ИИ Azure из портал Azure. Вы можете использовать ключ первичного администратора или дополнительный ключ администратора. Наличие двух ключей позволяет безопасно менять и повторно создавать ключи без прерывания работы службы.
AZURE_AI_SEARCH_INDEX
Это значение соответствует имени индекса, созданного для хранения данных. Его можно найти в разделе "Обзор" при изучении ресурса поиска ИИ Azure из портал Azure.
Используйте ключи API с осторожностью. Не включайте ключ API непосредственно в код и никогда не публикуйте его. Если вы используете ключ API, сохраните его безопасно в Azure Key Vault. Дополнительные сведения об использовании ключей API безопасно в приложениях см. в разделе "Ключи API" с помощью Azure Key Vault.
В окне консоли (например, cmd, PowerShell или Bash) создайте новый каталог для приложения и перейдите в него. Затем выполните npm init команду, чтобы создать приложение узла с package.json файлом.
Консоль
npm init
Установка клиентской библиотеки
Установите клиент Azure OpenAI и библиотеки удостоверений Azure для JavaScript с помощью npm:
Консоль
npm install openai @azure/identity
Файл package.json приложения будет обновлен с помощью зависимостей.
Откройте командную строку, в которой должен быть создан новый проект, и создайте новый файл с именем ChatWithOwnData.js. Скопируйте следующий код в ChatWithOwnData.js файл.
JavaScript
const { DefaultAzureCredential, getBearerTokenProvider } = require("@azure/identity");
const { AzureOpenAI } = require("openai");
// Set the Azure and AI Search values from environment variablesconst endpoint = process.env["AZURE_OPENAI_ENDPOINT"];
const searchEndpoint = process.env["AZURE_AI_SEARCH_ENDPOINT"];
const searchIndex = process.env["AZURE_AI_SEARCH_INDEX"];
// keyless authentication const credential = new DefaultAzureCredential();
const scope = "https://cognitiveservices.azure.com/.default";
const azureADTokenProvider = getBearerTokenProvider(credential, scope);
// Required Azure OpenAI deployment name and API versionconst deploymentName = "gpt-4";
const apiVersion = "2024-10-21";
functiongetClient() {
returnnew AzureOpenAI({
endpoint,
azureADTokenProvider,
deployment: deploymentName,
apiVersion,
});
}
asyncfunctionmain() {
const client = getClient();
const messages = [
{ role: "user", content: "What are my available health plans?" },
];
console.log(`Message: ${messages.map((m) => m.content).join("\n")}`);
const events = await client.chat.completions.create({
stream: true,
messages: [
{
role: "user",
content:
"What's the most common feedback we received from our customers about the product?",
},
],
max_tokens: 128,
model: "",
data_sources: [
{
type: "azure_search",
parameters: {
endpoint: searchEndpoint,
index_name: searchIndex,
authentication: {
type: "api_key",
key: searchKey,
},
},
},
],
});
let response = "";
forawait (const event of events) {
for (const choice of event.choices) {
const newText = choice.delta?.content;
if (newText) {
response += newText;
// To see streaming results as they arrive, uncomment line below// console.log(newText);
}
}
}
console.log(response);
}
main().catch((err) => {
console.error("The sample encountered an error:", err);
});
Запустите приложение, выполнив следующую команду:
Консоль
node ChatWithOwnData.js
Откройте командную строку, в которой должен быть создан новый проект, и создайте новый файл с именем ChatWithOwnData.js. Скопируйте следующий код в ChatWithOwnData.js файл.
JavaScript
const { AzureOpenAI } = require("openai");
// Set the Azure and AI Search values from environment variablesconst endpoint = process.env["AZURE_OPENAI_ENDPOINT"];
const apiKey = process.env["AZURE_OPENAI_API_KEY"];
const searchEndpoint = process.env["AZURE_AI_SEARCH_ENDPOINT"];
const searchKey = process.env["AZURE_AI_SEARCH_API_KEY"];
const searchIndex = process.env["AZURE_AI_SEARCH_INDEX"];
// Required Azure OpenAI deployment name and API versionconst deploymentName = "gpt-4";
const apiVersion = "2024-10-21";
functiongetClient() {
returnnew AzureOpenAI({
endpoint,
apiKey,
deployment: deploymentName,
apiVersion,
});
}
asyncfunctionmain() {
const client = getClient();
const messages = [
{ role: "user", content: "What are my available health plans?" },
];
console.log(`Message: ${messages.map((m) => m.content).join("\n")}`);
const events = await client.chat.completions.create({
stream: true,
messages: [
{
role: "user",
content:
"What's the most common feedback we received from our customers about the product?",
},
],
max_tokens: 128,
model: "",
data_sources: [
{
type: "azure_search",
parameters: {
endpoint: searchEndpoint,
index_name: searchIndex,
authentication: {
type: "api_key",
key: searchKey,
},
},
},
],
});
let response = "";
forawait (const event of events) {
for (const choice of event.choices) {
const newText = choice.delta?.content;
if (newText) {
response += newText;
// To see streaming results as they arrive, uncomment line below// console.log(newText);
}
}
}
console.log(response);
}
main().catch((err) => {
console.error("The sample encountered an error:", err);
});
Запустите приложение, выполнив следующую команду:
Консоль
node ChatWithOwnData.js
Важно!
Для рабочей среды используйте безопасный способ хранения и доступа к учетным данным, например Azure Key Vault. Дополнительные сведения о безопасности учетных данных см. в статье о безопасности служб искусственного интеллекта Azure.
Выходные данные
Выходные данные
Message: What are my available health plans?
The available health plans in the Contoso Electronics plan and benefit packages are the Northwind Health Plus and Northwind Standard plans.
Azure CLI , используемый для проверки подлинности без пароля в локальной среде разработки, создайте необходимый контекст, выполнив вход с помощью Azure CLI.
Убедитесь, что вы назначены по крайней мере роль участника Cognitive Services для ресурса Azure OpenAI.
Скачайте примеры данных из GitHub , если у вас нет собственных данных.
Предварительные требования для идентификатора Microsoft Entra
Для рекомендуемой проверки подлинности без ключа с помощью идентификатора Microsoft Entra необходимо:
Установите Azure CLI, используемый для проверки подлинности без ключа с помощью идентификатора Microsoft Entra.
Назначьте роль учетной Cognitive Services User записи пользователя. Роли можно назначить в портал Azure в разделе управления доступом (IAM)>Добавить назначение ролей.
Добавление данных с помощью портала Azure AI Foundry
Выберите чат в разделе "Игровые площадки" в меню навигации слева и выберите развертывание модели.
На игровой площадке чата выберите "Добавить данные", а затем добавьте источник данных
В появившейся области выберите " Отправить файлы (предварительная версия) в разделе "Выбор источника данных". Azure OpenAI требует как ресурса хранилища, так и ресурса поиска для доступа к вашим данным и их индексации.
Для документов и наборов данных с длинным текстом рекомендуется использовать доступный скрипт подготовки данных.
Для доступа к учетной записи хранения Azure OpenAI необходимо включить общий доступ к ресурсам между источниками (CORS). Если CORS еще не включен для ресурса Хранилище BLOB-объектов Azure, нажмите кнопку "Включить CORS".
Выберите ресурс поиска ИИ Azure и выберите подтверждение, что подключение к нему приведет к использованию вашей учетной записи. Затем выберите Далее.
На панели "Отправить файлы" выберите "Обзор файла" и выберите файлы, скачанные из раздела предварительных требований, или собственные данные. Затем выберите " Отправить файлы". Затем выберите Далее.
Семантический поиск и векторный поиск подвергаются дополнительным ценам. Чтобы включить семантический поиск или векторный поиск, необходимо выбрать базовый или более высокий номер SKU . Дополнительные сведения см . в разделе "Разница в ценовой категории" и ограничения служб.
Чтобы повысить качество получения информации и ответов модели, рекомендуем включить семантический поиск для следующих исходных языков: английский, арабский, испанский, итальянский, итальянский, китайский, корейский, португальский, русский, французский и японский.
Просмотрите введенные сведения и нажмите кнопку "Сохранить и закрыть". Теперь вы можете общаться с моделью и использовать информацию из данных для создания ответа.
Получение сведений о ресурсе
Чтобы проверить подлинность приложения с помощью ресурса Azure OpenAI, необходимо получить следующие сведения. В этом кратком руководстве предполагается, что вы отправили данные в учетную запись хранения BLOB-объектов Azure и создали индекс поиска ИИ Azure. См. статью "Добавление данных с помощью портала Azure AI Foundry".
Это значение можно найти в разделе "Ключи и конечная точка" при проверке ресурса Azure OpenAI из портал Azure. Пример конечной точки: https://my-resoruce.openai.azure.com.
AZURE_OPENAI_DEPLOYMENT_ID
Это значение соответствует пользовательскому имени, выбранному для развертывания при развертывании модели. Это значение можно найти в разделе "Развертывания управления>ресурсами" в портал Azure.
AZURE_AI_SEARCH_ENDPOINT
Это значение можно найти в разделе "Обзор" при изучении ресурса поиска ИИ Azure из портал Azure.
AZURE_AI_SEARCH_INDEX
Это значение соответствует имени индекса, созданного для хранения данных. Его можно найти в разделе "Обзор" при изучении ресурса поиска ИИ Azure из портал Azure.
Это значение можно найти в разделе "Ключи и конечная точка" при проверке ресурса Azure OpenAI из портал Azure. Пример конечной точки: https://my-resoruce.openai.azure.com.
AZURE_OPENAI_API_KEY
Это значение можно найти в разделе "Ключи управления>ресурсами" и "Конечная точка" при изучении ресурса Azure OpenAI из портал Azure. Вы можете использовать KEY1 или KEY2. Наличие двух ключей позволяет безопасно менять и повторно создавать ключи без прерывания работы службы.
AZURE_OPENAI_DEPLOYMENT_ID
Это значение соответствует пользовательскому имени, выбранному для развертывания при развертывании модели. Это значение можно найти в разделе "Развертывания управления>ресурсами" в портал Azure.
AZURE_AI_SEARCH_ENDPOINT
Это значение можно найти в разделе "Обзор" при изучении ресурса поиска ИИ Azure из портал Azure.
AZURE_AI_SEARCH_API_KEY
Это значение можно найти в разделе "Ключи>параметров" при изучении ресурса поиска ИИ Azure из портал Azure. Вы можете использовать ключ первичного администратора или дополнительный ключ администратора. Наличие двух ключей позволяет безопасно менять и повторно создавать ключи без прерывания работы службы.
AZURE_AI_SEARCH_INDEX
Это значение соответствует имени индекса, созданного для хранения данных. Его можно найти в разделе "Обзор" при изучении ресурса поиска ИИ Azure из портал Azure.
Используйте ключи API с осторожностью. Не включайте ключ API непосредственно в код и никогда не публикуйте его. Если вы используете ключ API, сохраните его безопасно в Azure Key Vault. Дополнительные сведения об использовании ключей API безопасно в приложениях см. в разделе "Ключи API" с помощью Azure Key Vault.
В окне консоли (например, cmd, PowerShell или Bash) создайте новый каталог для приложения и перейдите в него. Затем выполните npm init команду, чтобы создать приложение узла с package.json файлом.
Консоль
npm init
Установка клиентской библиотеки
Установите клиент Azure OpenAI и библиотеки удостоверений Azure для JavaScript с помощью npm:
Консоль
npm install openai @azure/identity @azure/openai
Зависимость @azure/openai/types включается для расширения модели Azure OpenAI для data_sources свойства. Этот импорт необходим только для TypeScript.
Файл package.json приложения будет обновлен с помощью зависимостей.
Откройте командную строку, в которой должен быть создан новый проект, и создайте новый файл с именем ChatWithOwnData.ts. Скопируйте следующий код в ChatWithOwnData.ts файл.
TypeScript
import { AzureOpenAI } from"openai";
import { DefaultAzureCredential, getBearerTokenProvider } from"@azure/identity";
import"@azure/openai/types";
// Set the Azure and AI Search values from environment variablesconst endpoint = process.env["AZURE_OPENAI_ENDPOINT"];
const searchEndpoint = process.env["AZURE_AI_SEARCH_ENDPOINT"];
const searchIndex = process.env["AZURE_AI_SEARCH_INDEX"];
// keyless authentication const credential = new DefaultAzureCredential();
const scope = "https://cognitiveservices.azure.com/.default";
const azureADTokenProvider = getBearerTokenProvider(credential, scope);
// Required Azure OpenAI deployment name and API versionconst deploymentName = "gpt-4";
const apiVersion = "2024-07-01-preview";
functiongetClient(): AzureOpenAI{
returnnew AzureOpenAI({
endpoint,
azureADTokenProvider,
deployment: deploymentName,
apiVersion,
});
}
asyncfunctionmain() {
const client = getClient();
const messages = [
{ role: "user", content: "What are my available health plans?" },
];
console.log(`Message: ${messages.map((m) => m.content).join("\n")}`);
const events = await client.chat.completions.create({
stream: true,
messages: [
{
role: "user",
content:
"What's the most common feedback we received from our customers about the product?",
},
],
max_tokens: 128,
model: "",
data_sources: [
{
type: "azure_search",
parameters: {
endpoint: searchEndpoint,
index_name: searchIndex,
authentication: {
type: "api_key",
key: searchKey,
},
},
},
],
});
let response = "";
forawait (const event of events) {
for (const choice of event.choices) {
const newText = choice.delta?.content;
if (newText) {
response += newText;
// To see streaming results as they arrive, uncomment line below// console.log(newText);
}
}
}
console.log(response);
}
main().catch((err) => {
console.error("The sample encountered an error:", err);
});
Создайте приложение с помощью следующей команды:
Консоль
tsc
Запустите приложение, выполнив следующую команду:
Консоль
node ChatWithOwnData.js
Откройте командную строку, в которой должен быть создан новый проект, и создайте новый файл с именем ChatWithOwnData.ts. Скопируйте следующий код в ChatWithOwnData.ts файл.
TypeScript
import { AzureOpenAI } from"openai";
import"@azure/openai/types";
// Set the Azure and AI Search values from environment variablesconst endpoint = process.env["AZURE_OPENAI_ENDPOINT"];
const apiKey = process.env["AZURE_OPENAI_API_KEY"];
const searchEndpoint = process.env["AZURE_AI_SEARCH_ENDPOINT"];
const searchKey = process.env["AZURE_AI_SEARCH_API_KEY"];
const searchIndex = process.env["AZURE_AI_SEARCH_INDEX"];
// Required Azure OpenAI deployment name and API versionconst deploymentName = "gpt-4";
const apiVersion = "2024-07-01-preview";
functiongetClient(): AzureOpenAI{
returnnew AzureOpenAI({
endpoint,
apiKey,
deployment: deploymentName,
apiVersion,
});
}
asyncfunctionmain() {
const client = getClient();
const messages = [
{ role: "user", content: "What are my available health plans?" },
];
console.log(`Message: ${messages.map((m) => m.content).join("\n")}`);
const events = await client.chat.completions.create({
stream: true,
messages: [
{
role: "user",
content:
"What's the most common feedback we received from our customers about the product?",
},
],
max_tokens: 128,
model: "",
data_sources: [
{
type: "azure_search",
parameters: {
endpoint: searchEndpoint,
index_name: searchIndex,
authentication: {
type: "api_key",
key: searchKey,
},
},
},
],
});
let response = "";
forawait (const event of events) {
for (const choice of event.choices) {
const newText = choice.delta?.content;
if (newText) {
response += newText;
// To see streaming results as they arrive, uncomment line below// console.log(newText);
}
}
}
console.log(response);
}
main().catch((err) => {
console.error("The sample encountered an error:", err);
});
Создайте приложение с помощью следующей команды:
Консоль
tsc
Запустите приложение, выполнив следующую команду:
Консоль
node ChatWithOwnData.js
Важно!
Для рабочей среды используйте безопасный способ хранения и доступа к учетным данным, например Azure Key Vault. Дополнительные сведения о безопасности учетных данных см. в статье о безопасности служб искусственного интеллекта Azure.
Выходные данные
Выходные данные
Message: What are my available health plans?
The available health plans in the Contoso Electronics plan and benefit packages are the Northwind Health Plus and Northwind Standard plans.
Выберите чат в разделе "Игровые площадки" в меню навигации слева и выберите развертывание модели.
На игровой площадке чата выберите "Добавить данные", а затем добавьте источник данных
В появившейся области выберите " Отправить файлы (предварительная версия) в разделе "Выбор источника данных". Azure OpenAI требует как ресурса хранилища, так и ресурса поиска для доступа к вашим данным и их индексации.
Для документов и наборов данных с длинным текстом рекомендуется использовать доступный скрипт подготовки данных.
Для доступа к учетной записи хранения Azure OpenAI необходимо включить общий доступ к ресурсам между источниками (CORS). Если CORS еще не включен для ресурса Хранилище BLOB-объектов Azure, нажмите кнопку "Включить CORS".
Выберите ресурс поиска ИИ Azure и выберите подтверждение, что подключение к нему приведет к использованию вашей учетной записи. Затем выберите Далее.
На панели "Отправить файлы" выберите "Обзор файла" и выберите файлы, скачанные из раздела предварительных требований, или собственные данные. Затем выберите " Отправить файлы". Затем выберите Далее.
Семантический поиск и векторный поиск подвергаются дополнительным ценам. Чтобы включить семантический поиск или векторный поиск, необходимо выбрать базовый или более высокий номер SKU . Дополнительные сведения см . в разделе "Разница в ценовой категории" и ограничения служб.
Чтобы повысить качество получения информации и ответов модели, рекомендуем включить семантический поиск для следующих исходных языков: английский, арабский, испанский, итальянский, итальянский, китайский, корейский, португальский, русский, французский и японский.
Просмотрите введенные сведения и нажмите кнопку "Сохранить и закрыть". Теперь вы можете общаться с моделью и использовать информацию из данных для создания ответа.
Получение сведений о ресурсе
Чтобы проверить подлинность приложения с помощью ресурса Azure OpenAI, необходимо получить следующие сведения. В этом кратком руководстве предполагается, что вы отправили данные в учетную запись хранения BLOB-объектов Azure и создали индекс поиска ИИ Azure. См. статью "Добавление данных с помощью портала Azure AI Foundry".
Это значение можно найти в разделе "Ключи и конечная точка" при проверке ресурса Azure OpenAI из портал Azure. Пример конечной точки: https://my-resoruce.openai.azure.com.
AZURE_OPENAI_DEPLOYMENT_ID
Это значение соответствует пользовательскому имени, выбранному для развертывания при развертывании модели. Это значение можно найти в разделе "Развертывания управления>ресурсами" в портал Azure.
AZURE_AI_SEARCH_ENDPOINT
Это значение можно найти в разделе "Обзор" при изучении ресурса поиска ИИ Azure из портал Azure.
AZURE_AI_SEARCH_INDEX
Это значение соответствует имени индекса, созданного для хранения данных. Его можно найти в разделе "Обзор" при изучении ресурса поиска ИИ Azure из портал Azure.
Это значение можно найти в разделе "Ключи и конечная точка" при проверке ресурса Azure OpenAI из портал Azure. Пример конечной точки: https://my-resoruce.openai.azure.com.
AZURE_OPENAI_API_KEY
Это значение можно найти в разделе "Ключи управления>ресурсами" и "Конечная точка" при изучении ресурса Azure OpenAI из портал Azure. Вы можете использовать KEY1 или KEY2. Наличие двух ключей позволяет безопасно менять и повторно создавать ключи без прерывания работы службы.
AZURE_OPENAI_DEPLOYMENT_ID
Это значение соответствует пользовательскому имени, выбранному для развертывания при развертывании модели. Это значение можно найти в разделе "Развертывания управления>ресурсами" в портал Azure.
AZURE_AI_SEARCH_ENDPOINT
Это значение можно найти в разделе "Обзор" при изучении ресурса поиска ИИ Azure из портал Azure.
AZURE_AI_SEARCH_API_KEY
Это значение можно найти в разделе "Ключи>параметров" при изучении ресурса поиска ИИ Azure из портал Azure. Вы можете использовать ключ первичного администратора или дополнительный ключ администратора. Наличие двух ключей позволяет безопасно менять и повторно создавать ключи без прерывания работы службы.
AZURE_AI_SEARCH_INDEX
Это значение соответствует имени индекса, созданного для хранения данных. Его можно найти в разделе "Обзор" при изучении ресурса поиска ИИ Azure из портал Azure.
Используйте ключи API с осторожностью. Не включайте ключ API непосредственно в код и никогда не публикуйте его. Если вы используете ключ API, сохраните его безопасно в Azure Key Vault. Дополнительные сведения об использовании ключей API безопасно в приложениях см. в разделе "Ключи API" с помощью Azure Key Vault.
Версия 0.28.1 библиотеки OpenAI Python устарела. Рекомендуем использовать 1.x. Ознакомьтесь с нашим руководством по миграции, чтобы получить информацию о переходе из 0.28.1 .1.x
import os
import openai
import dotenv
import requests
dotenv.load_dotenv()
openai.api_base = os.environ.get("AZURE_OPENAI_ENDPOINT")
# Azure OpenAI on your own data is only supported by the 2023-08-01-preview API version
openai.api_version = "2023-08-01-preview"
openai.api_type = 'azure'
openai.api_key = os.environ.get("AZURE_OPENAI_API_KEY")
defsetup_byod(deployment_id: str) -> None:"""Sets up the OpenAI Python SDK to use your own data for the chat endpoint.
:param deployment_id: The deployment ID for the model to use with your own data.
To remove this configuration, simply set openai.requestssession to None.
"""classBringYourOwnDataAdapter(requests.adapters.HTTPAdapter):defsend(self, request, **kwargs):
request.url = f"{openai.api_base}/openai/deployments/{deployment_id}/extensions/chat/completions?api-version={openai.api_version}"return super().send(request, **kwargs)
session = requests.Session()
# Mount a custom adapter which will use the extensions endpoint for any call using the given `deployment_id`
session.mount(
prefix=f"{openai.api_base}/openai/deployments/{deployment_id}",
adapter=BringYourOwnDataAdapter()
)
openai.requestssession = session
aoai_deployment_id = os.environ.get("AZURE_OPENAI_DEPLOYMENT_ID")
setup_byod(aoai_deployment_id)
completion = openai.ChatCompletion.create(
messages=[{"role": "user", "content": "What are my available health plans?"}],
deployment_id=os.environ.get("AZURE_OPENAI_DEPLOYMENT_ID"),
dataSources=[ # camelCase is intentional, as this is the format the API expects
{
"type": "AzureCognitiveSearch",
"parameters": {
"endpoint": os.environ.get("AZURE_AI_SEARCH_ENDPOINT"),
"key": os.environ.get("AZURE_AI_SEARCH_API_KEY"),
"indexName": os.environ.get("AZURE_AI_SEARCH_INDEX"),
}
}
]
)
print(completion)
Важно!
Для рабочей среды используйте безопасный способ хранения и доступа к учетным данным, например Azure Key Vault. Дополнительные сведения о безопасности учетных данных см. в статье о безопасности служб искусственного интеллекта Azure.
Выполните следующую команду:
Командная строка Windows
python main.py
Приложение печатает ответ в формате JSON, подходящем для использования во многих сценариях. Он включает как ответы на запрос, так и ссылки из отправленных файлов.
Выберите чат в разделе "Игровые площадки" в меню навигации слева и выберите развертывание модели.
На игровой площадке чата выберите "Добавить данные", а затем добавьте источник данных
В появившейся области выберите " Отправить файлы (предварительная версия) в разделе "Выбор источника данных". Azure OpenAI требует как ресурса хранилища, так и ресурса поиска для доступа к вашим данным и их индексации.
Для документов и наборов данных с длинным текстом рекомендуется использовать доступный скрипт подготовки данных.
Для доступа к учетной записи хранения Azure OpenAI необходимо включить общий доступ к ресурсам между источниками (CORS). Если CORS еще не включен для ресурса Хранилище BLOB-объектов Azure, нажмите кнопку "Включить CORS".
Выберите ресурс поиска ИИ Azure и выберите подтверждение, что подключение к нему приведет к использованию вашей учетной записи. Затем выберите Далее.
На панели "Отправить файлы" выберите "Обзор файла" и выберите файлы, скачанные из раздела предварительных требований, или собственные данные. Затем выберите " Отправить файлы". Затем выберите Далее.
Семантический поиск и векторный поиск подвергаются дополнительным ценам. Чтобы включить семантический поиск или векторный поиск, необходимо выбрать базовый или более высокий номер SKU . Дополнительные сведения см . в разделе "Разница в ценовой категории" и ограничения служб.
Чтобы повысить качество получения информации и ответов модели, рекомендуем включить семантический поиск для следующих исходных языков: английский, арабский, испанский, итальянский, итальянский, китайский, корейский, португальский, русский, французский и японский.
Просмотрите введенные сведения и нажмите кнопку "Сохранить и закрыть". Теперь вы можете общаться с моделью и использовать информацию из данных для создания ответа.
Получение сведений о ресурсе
Чтобы проверить подлинность приложения с помощью ресурса Azure OpenAI, необходимо получить следующие сведения. В этом кратком руководстве предполагается, что вы отправили данные в учетную запись хранения BLOB-объектов Azure и создали индекс поиска ИИ Azure. См. статью "Добавление данных с помощью портала Azure AI Foundry".
Это значение можно найти в разделе "Ключи и конечная точка" при проверке ресурса Azure OpenAI из портал Azure. Пример конечной точки: https://my-resoruce.openai.azure.com.
AZURE_OPENAI_DEPLOYMENT_ID
Это значение соответствует пользовательскому имени, выбранному для развертывания при развертывании модели. Это значение можно найти в разделе "Развертывания управления>ресурсами" в портал Azure.
AZURE_AI_SEARCH_ENDPOINT
Это значение можно найти в разделе "Обзор" при изучении ресурса поиска ИИ Azure из портал Azure.
AZURE_AI_SEARCH_INDEX
Это значение соответствует имени индекса, созданного для хранения данных. Его можно найти в разделе "Обзор" при изучении ресурса поиска ИИ Azure из портал Azure.
Это значение можно найти в разделе "Ключи и конечная точка" при проверке ресурса Azure OpenAI из портал Azure. Пример конечной точки: https://my-resoruce.openai.azure.com.
AZURE_OPENAI_API_KEY
Это значение можно найти в разделе "Ключи управления>ресурсами" и "Конечная точка" при изучении ресурса Azure OpenAI из портал Azure. Вы можете использовать KEY1 или KEY2. Наличие двух ключей позволяет безопасно менять и повторно создавать ключи без прерывания работы службы.
AZURE_OPENAI_DEPLOYMENT_ID
Это значение соответствует пользовательскому имени, выбранному для развертывания при развертывании модели. Это значение можно найти в разделе "Развертывания управления>ресурсами" в портал Azure.
AZURE_AI_SEARCH_ENDPOINT
Это значение можно найти в разделе "Обзор" при изучении ресурса поиска ИИ Azure из портал Azure.
AZURE_AI_SEARCH_API_KEY
Это значение можно найти в разделе "Ключи>параметров" при изучении ресурса поиска ИИ Azure из портал Azure. Вы можете использовать ключ первичного администратора или дополнительный ключ администратора. Наличие двух ключей позволяет безопасно менять и повторно создавать ключи без прерывания работы службы.
AZURE_AI_SEARCH_INDEX
Это значение соответствует имени индекса, созданного для хранения данных. Его можно найти в разделе "Обзор" при изучении ресурса поиска ИИ Azure из портал Azure.
Используйте ключи API с осторожностью. Не включайте ключ API непосредственно в код и никогда не публикуйте его. Если вы используете ключ API, сохраните его безопасно в Azure Key Vault. Дополнительные сведения об использовании ключей API безопасно в приложениях см. в разделе "Ключи API" с помощью Azure Key Vault.
Модели чата Azure OpenAI оптимизированы для работы с входными данными, отформатированными в виде беседы. Переменная messages передает массив словарей с разными ролями в беседе, очерченной системой, пользователем, инструментом и помощником. Переменная dataSources подключается к индексу Когнитивный поиск Azure и позволяет моделям Azure OpenAI реагировать с помощью данных.
Чтобы активировать ответ от модели, необходимо завершить сообщение пользователя, указывающее, что это очередь помощника, чтобы ответить.
Совет
Существует несколько параметров, которые можно использовать для изменения ответа модели, например temperature или top_p. Дополнительные сведения см. в справочной документации.
PowerShell
# Azure OpenAI metadata variables$openai = @{
api_key = $Env:AZURE_OPENAI_API_KEY
api_base = $Env:AZURE_OPENAI_ENDPOINT# your endpoint should look like the following https://YOUR_RESOURCE_NAME.openai.azure.com/
api_version = '2023-07-01-preview'# this may change in the future
name = 'YOUR-DEPLOYMENT-NAME-HERE'#This will correspond to the custom name you chose for your deployment when you deployed a model.
}
$acs = @{
search_endpoint = 'YOUR ACS ENDPOINT'# your endpoint should look like the following https://YOUR_RESOURCE_NAME.search.windows.net/
search_key = 'YOUR-ACS-KEY-HERE'# or use the Get-Secret cmdlet to retrieve the value
search_index = 'YOUR-INDEX-NAME-HERE'# the name of your ACS index
}
# Completion text$body = @{
dataSources = @(
@{
type = 'AzureCognitiveSearch'
parameters = @{
endpoint = $acs.search_endpoint
key = $acs.search_key
indexName = $acs.search_index
}
}
)
messages = @(
@{
role = 'user'
content = 'What are my available health plans?'
}
)
} | convertto-json -depth5# Header for authentication$headers = [ordered]@{
'api-key' = $openai.api_key
}
# Send a completion call to generate an answer$url = "$($openai.api_base)/openai/deployments/$($openai.name)/extensions/chat/completions?api-version=$($openai.api_version)"$response = Invoke-RestMethod -Uri$url -Headers$headers -Body$body -Method Post -ContentType'application/json'return$response.choices.messages[1].content
Пример результата
text
The available health plans in the Contoso Electronics plan and benefit packages are the Northwind Health Plus and Northwind Standard plans.
Важно!
Для рабочей среды используйте безопасный способ хранения и доступа к учетным данным, таким как Управление секретами PowerShell с помощью Azure Key Vault. Дополнительные сведения о безопасности учетных данных см. в статье о безопасности служб искусственного интеллекта Azure.
Чат с моделью с помощью веб-приложения
Чтобы начать чат с моделью Azure OpenAI, использующую данные, можно развернуть веб-приложение с помощью портала Azure AI Foundry или примера кода, который мы предоставляем на сайте GitHub. Это приложение развертывает с помощью службы приложений Azure и предоставляет пользовательский интерфейс для отправки запросов. Это приложение можно использовать с моделями Azure OpenAI, которые используют данные или модели, которые не используют данные. Ознакомьтесь с файлом readme в репозитории с инструкциями по требованиям, настройке и развертыванию. При необходимости можно настроить интерфейсную и серверную логику веб-приложения, внося изменения в исходный код.
Выберите чат в разделе "Игровые площадки" в меню навигации слева и выберите развертывание модели.
На игровой площадке чата выберите "Добавить данные", а затем добавьте источник данных
В появившейся области выберите " Отправить файлы (предварительная версия) в разделе "Выбор источника данных". Azure OpenAI требует как ресурса хранилища, так и ресурса поиска для доступа к вашим данным и их индексации.
Для документов и наборов данных с длинным текстом рекомендуется использовать доступный скрипт подготовки данных.
Для доступа к учетной записи хранения Azure OpenAI необходимо включить общий доступ к ресурсам между источниками (CORS). Если CORS еще не включен для ресурса Хранилище BLOB-объектов Azure, нажмите кнопку "Включить CORS".
Выберите ресурс поиска ИИ Azure и выберите подтверждение, что подключение к нему приведет к использованию вашей учетной записи. Затем выберите Далее.
На панели "Отправить файлы" выберите "Обзор файла" и выберите файлы, скачанные из раздела предварительных требований, или собственные данные. Затем выберите " Отправить файлы". Затем выберите Далее.
Семантический поиск и векторный поиск подвергаются дополнительным ценам. Чтобы включить семантический поиск или векторный поиск, необходимо выбрать базовый или более высокий номер SKU . Дополнительные сведения см . в разделе "Разница в ценовой категории" и ограничения служб.
Чтобы повысить качество получения информации и ответов модели, рекомендуем включить семантический поиск для следующих исходных языков: английский, арабский, испанский, итальянский, итальянский, китайский, корейский, португальский, русский, французский и японский.
Просмотрите введенные сведения и нажмите кнопку "Сохранить и закрыть". Теперь вы можете общаться с моделью и использовать информацию из данных для создания ответа.
Получение сведений о ресурсе
Чтобы проверить подлинность приложения с помощью ресурса Azure OpenAI, необходимо получить следующие сведения. В этом кратком руководстве предполагается, что вы отправили данные в учетную запись хранения BLOB-объектов Azure и создали индекс поиска ИИ Azure. См. статью "Добавление данных с помощью портала Azure AI Foundry".
Это значение можно найти в разделе "Ключи и конечная точка" при проверке ресурса Azure OpenAI из портал Azure. Пример конечной точки: https://my-resoruce.openai.azure.com.
AZURE_OPENAI_DEPLOYMENT_ID
Это значение соответствует пользовательскому имени, выбранному для развертывания при развертывании модели. Это значение можно найти в разделе "Развертывания управления>ресурсами" в портал Azure.
AZURE_AI_SEARCH_ENDPOINT
Это значение можно найти в разделе "Обзор" при изучении ресурса поиска ИИ Azure из портал Azure.
AZURE_AI_SEARCH_INDEX
Это значение соответствует имени индекса, созданного для хранения данных. Его можно найти в разделе "Обзор" при изучении ресурса поиска ИИ Azure из портал Azure.
Это значение можно найти в разделе "Ключи и конечная точка" при проверке ресурса Azure OpenAI из портал Azure. Пример конечной точки: https://my-resoruce.openai.azure.com.
AZURE_OPENAI_API_KEY
Это значение можно найти в разделе "Ключи управления>ресурсами" и "Конечная точка" при изучении ресурса Azure OpenAI из портал Azure. Вы можете использовать KEY1 или KEY2. Наличие двух ключей позволяет безопасно менять и повторно создавать ключи без прерывания работы службы.
AZURE_OPENAI_DEPLOYMENT_ID
Это значение соответствует пользовательскому имени, выбранному для развертывания при развертывании модели. Это значение можно найти в разделе "Развертывания управления>ресурсами" в портал Azure.
AZURE_AI_SEARCH_ENDPOINT
Это значение можно найти в разделе "Обзор" при изучении ресурса поиска ИИ Azure из портал Azure.
AZURE_AI_SEARCH_API_KEY
Это значение можно найти в разделе "Ключи>параметров" при изучении ресурса поиска ИИ Azure из портал Azure. Вы можете использовать ключ первичного администратора или дополнительный ключ администратора. Наличие двух ключей позволяет безопасно менять и повторно создавать ключи без прерывания работы службы.
AZURE_AI_SEARCH_INDEX
Это значение соответствует имени индекса, созданного для хранения данных. Его можно найти в разделе "Обзор" при изучении ресурса поиска ИИ Azure из портал Azure.
Используйте ключи API с осторожностью. Не включайте ключ API непосредственно в код и никогда не публикуйте его. Если вы используете ключ API, сохраните его безопасно в Azure Key Vault. Дополнительные сведения об использовании ключей API безопасно в приложениях см. в разделе "Ключи API" с помощью Azure Key Vault.
Создайте новую папку с именем openai-go для проекта и новый файл кода Go с именем sample.go. Перейдите в этот каталог:
Командная строка Windows
mkdir openai-go
cd openai-go
Создание приложения
В каталоге проекта откройте файл sample.go и добавьте следующий код:
golang
package main
import (
"context""fmt""log""os""github.com/Azure/azure-sdk-for-go/sdk/ai/azopenai""github.com/Azure/azure-sdk-for-go/sdk/azcore""github.com/Azure/azure-sdk-for-go/sdk/azcore/to"
)
funcmain() {
azureOpenAIKey := os.Getenv("AZURE_OPENAI_API_KEY")
modelDeploymentID := os.Getenv("AZURE_OPENAI_DEPLOYMENT_ID")
// Ex: "https://<your-azure-openai-host>.openai.azure.com"
azureOpenAIEndpoint := os.Getenv("AZURE_OPENAI_ENDPOINT")
// Azure AI Search configuration
searchIndex := os.Getenv("AZURE_AI_SEARCH_INDEX")
searchEndpoint := os.Getenv("AZURE_AI_SEARCH_ENDPOINT")
searchAPIKey := os.Getenv("AZURE_AI_SEARCH_API_KEY")
if azureOpenAIKey == "" || modelDeploymentID == "" || azureOpenAIEndpoint == "" || searchIndex == "" || searchEndpoint == "" || searchAPIKey == "" {
fmt.Fprintf(os.Stderr, "Skipping example, environment variables missing\n")
return
}
keyCredential := azcore.NewKeyCredential(azureOpenAIKey)
// In Azure OpenAI you must deploy a model before you can use it in your client. For more information// see here: https://learn.microsoft.com/azure/cognitive-services/openai/how-to/create-resource
client, err := azopenai.NewClientWithKeyCredential(azureOpenAIEndpoint, keyCredential, nil)
if err != nil {
// TODO: Update the following line with your application specific error handling logic
log.Fatalf("ERROR: %s", err)
}
resp, err := client.GetChatCompletions(context.TODO(), azopenai.ChatCompletionsOptions{
Messages: []azopenai.ChatRequestMessageClassification{
&azopenai.ChatRequestUserMessage{Content: azopenai.NewChatRequestUserMessageContent("What are my available health plans?")},
},
MaxTokens: to.Ptr[int32](512),
AzureExtensionsOptions: []azopenai.AzureChatExtensionConfigurationClassification{
&azopenai.AzureSearchChatExtensionConfiguration{
// This allows Azure OpenAI to use an Azure AI Search index.//// > Because the model has access to, and can reference specific sources to support its responses, answers are not only based on its pretrained knowledge// > but also on the latest information available in the designated data source. This grounding data also helps the model avoid generating responses// > based on outdated or incorrect information.//// Quote from here: https://learn.microsoft.com/en-us/azure/ai-services/openai/concepts/use-your-data
Parameters: &azopenai.AzureSearchChatExtensionParameters{
Endpoint: &searchEndpoint,
IndexName: &searchIndex,
Authentication: &azopenai.OnYourDataAPIKeyAuthenticationOptions{
Key: &searchAPIKey,
},
},
},
},
DeploymentName: &modelDeploymentID,
}, nil)
if err != nil {
// TODO: Update the following line with your application specific error handling logic
log.Fatalf("ERROR: %s", err)
}
fmt.Fprintf(os.Stderr, "Extensions Context Role: %s\nExtensions Context (length): %d\n",
*resp.Choices[0].Message.Role,
len(*resp.Choices[0].Message.Content))
fmt.Fprintf(os.Stderr, "ChatRole: %s\nChat content: %s\n",
*resp.Choices[0].Message.Role,
*resp.Choices[0].Message.Content,
)
}
Важно!
Для рабочей среды используйте безопасный способ хранения и доступа к учетным данным, например Azure Key Vault. Дополнительные сведения о безопасности учетных данных см. в статье о безопасности служб искусственного интеллекта Azure.
Теперь откройте командную строку и выполните следующую команду:
Командная строка Windows
go mod init sample.go
Следующий запуск:
Командная строка Windows
go mod tidy
go run sample.go
Приложение печатает ответ, включая ответы на запрос и ссылки из отправленных файлов.
Выберите чат в разделе "Игровые площадки" в меню навигации слева и выберите развертывание модели.
На игровой площадке чата выберите "Добавить данные", а затем добавьте источник данных
В появившейся области выберите " Отправить файлы (предварительная версия) в разделе "Выбор источника данных". Azure OpenAI требует как ресурса хранилища, так и ресурса поиска для доступа к вашим данным и их индексации.
Для документов и наборов данных с длинным текстом рекомендуется использовать доступный скрипт подготовки данных.
Для доступа к учетной записи хранения Azure OpenAI необходимо включить общий доступ к ресурсам между источниками (CORS). Если CORS еще не включен для ресурса Хранилище BLOB-объектов Azure, нажмите кнопку "Включить CORS".
Выберите ресурс поиска ИИ Azure и выберите подтверждение, что подключение к нему приведет к использованию вашей учетной записи. Затем выберите Далее.
На панели "Отправить файлы" выберите "Обзор файла" и выберите файлы, скачанные из раздела предварительных требований, или собственные данные. Затем выберите " Отправить файлы". Затем выберите Далее.
Семантический поиск и векторный поиск подвергаются дополнительным ценам. Чтобы включить семантический поиск или векторный поиск, необходимо выбрать базовый или более высокий номер SKU . Дополнительные сведения см . в разделе "Разница в ценовой категории" и ограничения служб.
Чтобы повысить качество получения информации и ответов модели, рекомендуем включить семантический поиск для следующих исходных языков: английский, арабский, испанский, итальянский, итальянский, китайский, корейский, португальский, русский, французский и японский.
Просмотрите введенные сведения и нажмите кнопку "Сохранить и закрыть". Теперь вы можете общаться с моделью и использовать информацию из данных для создания ответа.
Получение сведений о ресурсе
Чтобы проверить подлинность приложения с помощью ресурса Azure OpenAI, необходимо получить следующие сведения. В этом кратком руководстве предполагается, что вы отправили данные в учетную запись хранения BLOB-объектов Azure и создали индекс поиска ИИ Azure. См. статью "Добавление данных с помощью портала Azure AI Foundry".
Это значение можно найти в разделе "Ключи и конечная точка" при проверке ресурса Azure OpenAI из портал Azure. Пример конечной точки: https://my-resoruce.openai.azure.com.
AZURE_OPENAI_DEPLOYMENT_ID
Это значение соответствует пользовательскому имени, выбранному для развертывания при развертывании модели. Это значение можно найти в разделе "Развертывания управления>ресурсами" в портал Azure.
AZURE_AI_SEARCH_ENDPOINT
Это значение можно найти в разделе "Обзор" при изучении ресурса поиска ИИ Azure из портал Azure.
AZURE_AI_SEARCH_INDEX
Это значение соответствует имени индекса, созданного для хранения данных. Его можно найти в разделе "Обзор" при изучении ресурса поиска ИИ Azure из портал Azure.
Это значение можно найти в разделе "Ключи и конечная точка" при проверке ресурса Azure OpenAI из портал Azure. Пример конечной точки: https://my-resoruce.openai.azure.com.
AZURE_OPENAI_API_KEY
Это значение можно найти в разделе "Ключи управления>ресурсами" и "Конечная точка" при изучении ресурса Azure OpenAI из портал Azure. Вы можете использовать KEY1 или KEY2. Наличие двух ключей позволяет безопасно менять и повторно создавать ключи без прерывания работы службы.
AZURE_OPENAI_DEPLOYMENT_ID
Это значение соответствует пользовательскому имени, выбранному для развертывания при развертывании модели. Это значение можно найти в разделе "Развертывания управления>ресурсами" в портал Azure.
AZURE_AI_SEARCH_ENDPOINT
Это значение можно найти в разделе "Обзор" при изучении ресурса поиска ИИ Azure из портал Azure.
AZURE_AI_SEARCH_API_KEY
Это значение можно найти в разделе "Ключи>параметров" при изучении ресурса поиска ИИ Azure из портал Azure. Вы можете использовать ключ первичного администратора или дополнительный ключ администратора. Наличие двух ключей позволяет безопасно менять и повторно создавать ключи без прерывания работы службы.
AZURE_AI_SEARCH_INDEX
Это значение соответствует имени индекса, созданного для хранения данных. Его можно найти в разделе "Обзор" при изучении ресурса поиска ИИ Azure из портал Azure.
Используйте ключи API с осторожностью. Не включайте ключ API непосредственно в код и никогда не публикуйте его. Если вы используете ключ API, сохраните его безопасно в Azure Key Vault. Дополнительные сведения об использовании ключей API безопасно в приложениях см. в разделе "Ключи API" с помощью Azure Key Vault.
Модели чата Azure OpenAI оптимизированы для работы с входными данными, отформатированными в виде беседы. Переменная messages передает массив словарей с разными ролями в беседе, очерченной системой, пользователем, инструментом и помощником. Переменная dataSources подключается к индексу поиска ИИ Azure и позволяет моделям Azure OpenAI реагировать с помощью данных.
Чтобы активировать ответ от модели, необходимо завершить сообщение пользователя, указывающее, что это очередь помощника, чтобы ответить.
Совет
Существует несколько параметров, которые можно использовать для изменения ответа модели, например temperature или top_p. Дополнительные сведения см. в справочной документации.
{
"id": "12345678-1a2b-3c4e5f-a123-12345678abcd",
"model": "gpt-4",
"created": 1709835345,
"object": "extensions.chat.completion",
"choices": [
{
"index": 0,
"finish_reason": "stop",
"message": {
"role": "assistant",
"content": "The available health plans in the Contoso Electronics plan and benefit packages are the Northwind Health Plus and Northwind Standard plans. [doc1].",
"end_turn": true,
"context": {
"citations": [
{
"content": "...",
"title": "...",
"url": "https://mysearch.blob.core.windows.net/xyz/001.txt",
"filepath": "001.txt",
"chunk_id": "0"
}
],
"intent": "[\"Available health plans\"]"
}
}
}
],
"usage": {
"prompt_tokens": 3779,
"completion_tokens": 105,
"total_tokens": 3884
},
"system_fingerprint": "fp_65792305e4"
}
Чат с моделью с помощью веб-приложения
Чтобы начать чат с моделью Azure OpenAI, использующую данные, можно развернуть веб-приложение с помощью портала Azure AI Foundry или примера кода, который мы предоставляем на сайте GitHub. Это приложение развертывает с помощью службы приложений Azure и предоставляет пользовательский интерфейс для отправки запросов. Это приложение можно использовать с моделями Azure OpenAI, которые используют данные или модели, которые не используют данные. Ознакомьтесь с файлом readme в репозитории с инструкциями по требованиям, настройке и развертыванию. При необходимости можно настроить интерфейсную и серверную логику веб-приложения, внося изменения в исходный код.
Очистка ресурсов
Если вы хотите очистить и удалить ресурс Azure OpenAI или azure AI Search, можно удалить ресурс или группу ресурсов. При удалении группы ресурсов также удаляются все связанные с ней ресурсы.
Присоединитесь к серии встреч для создания масштабируемых решений искусственного интеллекта на основе реальных вариантов использования с другими разработчиками и экспертами.
In this module, you learn how to deploy a Spring Boot app to Azure Container Apps. You deploy a Spring Boot application to Azure Container Apps and maintain it using the built-in Java stack.