Guia de início rápido: converse com modelos OpenAI do Azure usando seus próprios dados
Neste guia de início rápido, você pode usar seus próprios dados com modelos do Azure OpenAI. Usar os modelos do Azure OpenAI em seus dados pode fornecer uma poderosa plataforma de IA conversacional que permite uma comunicação mais rápida e precisa.
Pré-requisitos
Os seguintes recursos:
- Azure OpenAI
- Armazenamento de Blobs do Azure
- Azure AI Search
- Um recurso OpenAI do Azure implantado em uma região com suporte e com um modelo suportado.
- Certifique-se de que lhe foi atribuída pelo menos a função de Colaborador dos Serviços Cognitivos para o recurso OpenAI do Azure.
- Baixe os dados de exemplo do GitHub se você não tiver seus próprios dados.
Adicione seus dados usando o Azure OpenAI Studio
Gorjeta
Você pode usar a CLI do Desenvolvedor do Azure para criar programaticamente os recursos necessários para o Azure OpenAI On Your Data
Navegue até o Azure OpenAI Studio e entre com credenciais que têm acesso ao seu recurso do Azure OpenAI. Durante ou após o fluxo de trabalho de entrada, selecione o diretório apropriado, a assinatura do Azure e o recurso do Azure OpenAI.
Selecione o bloco Traga seus próprios dados
No espaço de monitorização de chat, selecione Adicionar os seus dados e, em seguida, Adicionar uma fonte de dados
No painel exibido, selecione Carregar arquivos (visualização) em Selecionar fonte de dados. O Azure OpenAI precisa de um recurso de armazenamento e de um recurso de pesquisa para aceder e indexar os seus dados.
Gorjeta
- Consulte o seguinte recurso para obter mais informações:
- Para documentos e conjuntos de dados com texto longo, recomendamos o uso do script de preparação de dados disponível.
Para que o Azure OpenAI acesse sua conta de armazenamento, você precisará ativar o compartilhamento de recursos entre origens (CORS). Se o CORS ainda não estiver ativado para o recurso Armazenamento de Blobs do Azure, selecione Ativar CORS.
Selecione seu recurso Azure AI Search e selecione a confirmação de que conectá-lo incorrerá em uso em sua conta. Em seguida, selecione Seguinte.
No painel Carregar arquivos, selecione Procurar um arquivo e selecione os arquivos baixados da seção de pré-requisitos ou seus próprios dados. Em seguida, selecione Carregar arquivos. Em seguida, selecione Seguinte.
No painel Gerenciamento de dados, você pode escolher se deseja habilitar a pesquisa semântica ou a pesquisa vetorial para seu índice.
Importante
- A pesquisa semântica e a pesquisa vetorial estão sujeitas a preços adicionais. Você precisa escolher SKU básico ou superior para habilitar a pesquisa semântica ou a pesquisa vetorial. Consulte a diferença de nível de preço e os limites de serviço para obter mais informações.
- Para ajudar a melhorar a qualidade da recuperação de informações e da resposta do modelo, recomendamos habilitar a pesquisa semântica para os seguintes idiomas de fonte de dados: inglês, francês, espanhol, português, italiano, alemão, chinês (zh), japonês, coreano, russo e árabe.
Reveja os detalhes introduzidos e selecione Guardar e fechar. Agora você pode conversar com o modelo e ele usará informações de seus dados para construir a resposta.
Playground de bate-papo
Comece a explorar os recursos do Azure OpenAI com uma abordagem sem código por meio do playground de bate-papo. É simplesmente uma caixa de texto onde você pode enviar um prompt para gerar uma conclusão. Nesta página, você pode iterar e experimentar rapidamente os recursos.
O playground oferece opções para personalizar sua experiência de bate-papo. À direita, você pode selecionar Implantação para determinar qual modelo gera uma resposta usando os resultados da pesquisa do seu índice. Você escolhe o número de mensagens passadas a serem incluídas como histórico de conversas para futuras respostas geradas. O histórico de conversas fornece contexto para gerar respostas relacionadas, mas também consome o uso de tokens. O indicador de progresso do token de entrada controla a contagem de tokens da pergunta enviada.
As configurações avançadas à esquerda são parâmetros de tempo de execução, que lhe dão controle sobre a recuperação e pesquisa de informações relevantes de seus dados. Um bom caso de uso é quando você quer ter certeza de que as respostas são geradas apenas com base em seus dados ou você acha que o modelo não pode gerar uma resposta com base em informações existentes em seus dados.
O rigor determina a agressividade do sistema na filtragem de documentos de pesquisa com base nas suas pontuações de semelhança. Definir rigor como 5 indica que o sistema filtrará agressivamente os documentos, aplicando um limite de similaridade muito alto. A pesquisa semântica pode ser útil nesse cenário porque os modelos de classificação fazem um trabalho melhor de inferir a intenção da consulta. Níveis mais baixos de rigor produzem respostas mais detalhadas, mas também podem incluir informações que não estão no seu índice. Isso é definido como 3 por padrão.
Documentos recuperados é um número inteiro que pode ser definido como 3, 5, 10 ou 20 e controla o número de blocos de documentos fornecidos ao modelo de linguagem grande para formular a resposta final. Por padrão, isso é definido como 5.
Quando a opção Limitar respostas aos seus dados está ativada, o modelo tenta confiar apenas nos seus documentos para obter respostas. Isso é definido como true por padrão.
Envie a sua primeira consulta. Os modelos de chat têm o melhor desempenho em exercícios de perguntas e respostas. Por exemplo, "Quais são os meus planos de saúde disponíveis?" ou "Qual é a opção saúde mais?".
Consultas que exigem análise de dados provavelmente falhariam, como "Qual plano de saúde é mais popular?". Consultas que exigem informações sobre todos os seus dados provavelmente também falharão, como "Quantos documentos eu carreguei?". Lembre-se de que o mecanismo de pesquisa procura partes com termos, frases ou construções exatas ou semelhantes à consulta. E embora o modelo possa entender a pergunta, se os resultados da pesquisa forem partes do conjunto de dados, não é a informação certa para responder a esse tipo de pergunta.
Os chats são limitados pelo número de documentos (partes) retornados na resposta (limitado a 3-20 no playground do Azure OpenAI Studio). Como você pode imaginar, fazer uma pergunta sobre "todos os títulos" requer uma varredura completa de todo o repositório vetorial.
Implementar o modelo
Quando estiver satisfeito com a experiência no estúdio OpenAI do Azure, você poderá implantar um aplicativo Web diretamente do Studio selecionando o botão Implantar em .
Isso lhe dá a opção de implantar em um aplicativo Web autônomo ou um copiloto no Copilot Studio (visualização) se você estiver usando seus próprios dados no modelo.
Por exemplo, se você optar por implantar um aplicativo Web:
Na primeira vez que implantar um aplicativo Web, selecione Criar um novo aplicativo Web. Escolha um nome para o aplicativo, que se tornará parte do URL do aplicativo. Por exemplo, https://<appname>.azurewebsites.net
.
Selecione a sua subscrição, grupo de recursos, localização e plano de preços para a aplicação publicada. Para atualizar um aplicativo existente, selecione Publicar em um aplicativo Web existente e escolha o nome do aplicativo anterior no menu suspenso.
Se você optar por implantar um aplicativo Web, consulte as considerações importantes para usá-lo.
Pré-requisitos
Os seguintes recursos:
- Azure OpenAI
- Armazenamento de Blobs do Azure
- Azure AI Search
- Um recurso OpenAI do Azure implantado em uma região com suporte e com um modelo suportado.
- Certifique-se de que lhe foi atribuída pelo menos a função de Colaborador dos Serviços Cognitivos para o recurso OpenAI do Azure.
- Baixe os dados de exemplo do GitHub se você não tiver seus próprios dados.
- O SDK do .NET 8
Adicione seus dados usando o Azure OpenAI Studio
Gorjeta
Você pode usar a CLI do Desenvolvedor do Azure para criar programaticamente os recursos necessários para o Azure OpenAI On Your Data
Navegue até o Azure OpenAI Studio e entre com credenciais que têm acesso ao seu recurso do Azure OpenAI. Durante ou após o fluxo de trabalho de entrada, selecione o diretório apropriado, a assinatura do Azure e o recurso do Azure OpenAI.
Selecione o bloco Traga seus próprios dados
No espaço de monitorização de chat, selecione Adicionar os seus dados e, em seguida, Adicionar uma fonte de dados
No painel exibido, selecione Carregar arquivos (visualização) em Selecionar fonte de dados. O Azure OpenAI precisa de um recurso de armazenamento e de um recurso de pesquisa para aceder e indexar os seus dados.
Gorjeta
- Consulte o seguinte recurso para obter mais informações:
- Para documentos e conjuntos de dados com texto longo, recomendamos o uso do script de preparação de dados disponível.
Para que o Azure OpenAI acesse sua conta de armazenamento, você precisará ativar o compartilhamento de recursos entre origens (CORS). Se o CORS ainda não estiver ativado para o recurso Armazenamento de Blobs do Azure, selecione Ativar CORS.
Selecione seu recurso Azure AI Search e selecione a confirmação de que conectá-lo incorrerá em uso em sua conta. Em seguida, selecione Seguinte.
No painel Carregar arquivos, selecione Procurar um arquivo e selecione os arquivos baixados da seção de pré-requisitos ou seus próprios dados. Em seguida, selecione Carregar arquivos. Em seguida, selecione Seguinte.
No painel Gerenciamento de dados, você pode escolher se deseja habilitar a pesquisa semântica ou a pesquisa vetorial para seu índice.
Importante
- A pesquisa semântica e a pesquisa vetorial estão sujeitas a preços adicionais. Você precisa escolher SKU básico ou superior para habilitar a pesquisa semântica ou a pesquisa vetorial. Consulte a diferença de nível de preço e os limites de serviço para obter mais informações.
- Para ajudar a melhorar a qualidade da recuperação de informações e da resposta do modelo, recomendamos habilitar a pesquisa semântica para os seguintes idiomas de fonte de dados: inglês, francês, espanhol, português, italiano, alemão, chinês (zh), japonês, coreano, russo e árabe.
Reveja os detalhes introduzidos e selecione Guardar e fechar. Agora você pode conversar com o modelo e ele usará informações de seus dados para construir a resposta.
Recuperar variáveis necessárias
Para fazer uma chamada com êxito no Azure OpenAI, você precisa das seguintes variáveis. Este guia de início rápido pressupõe que você carregou seus dados em uma conta de armazenamento de blob do Azure e criou um índice do Azure AI Search. Consulte Adicionar seus dados usando o estúdio de IA do Azure
Nome da variável | Value |
---|---|
AZURE_OPENAI_ENDPOINT |
Esse valor pode ser encontrado na seção Chaves & Ponto de Extremidade ao examinar seu recurso do Azure OpenAI no portal do Azure. Como alternativa, você pode encontrar o valor na visualização Código do playground>de bate-papo do estúdio Azure AI>. Um exemplo de ponto de extremidade é: https://my-resoruce.openai.azure.com . |
AZURE_OPENAI_API_KEY |
Esse valor pode ser encontrado na seção Chaves de gerenciamento de>recursos & Ponto de extremidade ao examinar seu recurso do Azure OpenAI no portal do Azure. Pode utilizar KEY1 ou KEY2 . Ter sempre duas chaves permite-lhe rodar e regenerar chaves de forma segura sem causar uma interrupção do serviço. |
AZURE_OPENAI_DEPLOYMENT_ID |
Esse valor corresponde ao nome personalizado que você escolheu para sua implantação quando implantou um modelo. Esse valor pode ser encontrado em Implantações de Gerenciamento de>Recursos no portal do Azure ou, alternativamente, em Implantações de Gerenciamento>no estúdio de IA do Azure. |
AZURE_AI_SEARCH_ENDPOINT |
Esse valor pode ser encontrado na seção Visão geral ao examinar seu recurso Azure AI Search no portal do Azure. |
AZURE_AI_SEARCH_API_KEY |
Esse valor pode ser encontrado na seção Chaves de Configurações> ao examinar seu recurso Azure AI Search no portal do Azure. Você pode usar a chave de administração primária ou a chave de administração secundária. Ter sempre duas chaves permite-lhe rodar e regenerar chaves de forma segura sem causar uma interrupção do serviço. |
AZURE_AI_SEARCH_INDEX |
Esse valor corresponde ao nome do índice que você criou para armazenar seus dados. Você pode encontrá-lo na seção Visão geral ao examinar seu recurso Azure AI Search no portal do Azure. |
Variáveis de ambiente
Crie e atribua variáveis de ambiente persistentes para sua chave e endpoint.
Importante
Se você usar uma chave de API, armazene-a com segurança em outro lugar, como no Cofre de Chaves do Azure. Não inclua a chave da API diretamente no seu código e nunca a publique publicamente.
Para obter mais informações sobre segurança de serviços de IA, consulte Autenticar solicitações para serviços de IA do Azure.
setx AZURE_OPENAI_ENDPOINT REPLACE_WITH_YOUR_AOAI_ENDPOINT_VALUE_HERE
setx AZURE_OPENAI_API_KEY REPLACE_WITH_YOUR_AOAI_KEY_VALUE_HERE
setx AZURE_OPENAI_DEPLOYMENT_ID REPLACE_WITH_YOUR_AOAI_DEPLOYMENT_VALUE_HERE
setx AZURE_AI_SEARCH_ENDPOINT REPLACE_WITH_YOUR_AZURE_SEARCH_RESOURCE_VALUE_HERE
setx AZURE_AI_SEARCH_API_KEY REPLACE_WITH_YOUR_AZURE_SEARCH_RESOURCE_KEY_VALUE_HERE
setx AZURE_AI_SEARCH_INDEX REPLACE_WITH_YOUR_INDEX_NAME_HERE
Criar uma nova aplicação .NET Core
Em uma janela de console (como cmd, PowerShell ou Bash), use o dotnet new
comando para criar um novo aplicativo de console com o nome azure-openai-quickstart
. Este comando cria um projeto "Hello World" simples com um único arquivo de origem C#: Program.cs.
dotnet new console -n azure-openai-quickstart
Altere seu diretório para a pasta do aplicativo recém-criada. Você pode criar o aplicativo com:
dotnet build
A saída da compilação não deve conter avisos ou erros.
...
Build succeeded.
0 Warning(s)
0 Error(s)
...
Instale a biblioteca de cliente OpenAI .NET com:
dotnet add package Azure.AI.OpenAI --prerelease
No diretório do projeto, abra o arquivo Program.cs e substitua seu conteúdo pelo seguinte código:
Sem streaming de resposta
using Azure;
using Azure.AI.OpenAI;
using Azure.AI.OpenAI.Chat;
using OpenAI.Chat;
using System.Text.Json;
using static 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");
#pragma warning disable AOAI001
AzureOpenAIClient azureClient = new(
new Uri(azureOpenAIEndpoint),
new AzureKeyCredential(azureOpenAIKey));
ChatClient chatClient = azureClient.GetChatClient(deploymentName);
ChatCompletionOptions options = new();
options.AddDataSource(new AzureSearchChatDataSource()
{
Endpoint = new Uri(searchEndpoint),
IndexName = searchIndex,
Authentication = DataSourceAuthentication.FromApiKey(searchKey),
});
ChatCompletion completion = chatClient.CompleteChat(
[
new UserChatMessage("What are my available health plans?"),
], options);
Console.WriteLine(completion.Content[0].Text);
AzureChatMessageContext onYourDataContext = completion.GetAzureMessageContext();
if (onYourDataContext?.Intent is not null)
{
Console.WriteLine($"Intent: {onYourDataContext.Intent}");
}
foreach (AzureChatCitation citation in onYourDataContext?.Citations ?? [])
{
Console.WriteLine($"Citation: {citation.Content}");
}
Importante
Para produção, use uma maneira segura de armazenar e acessar suas credenciais, como o Azure Key Vault. Para obter mais informações sobre segurança de credenciais, consulte o artigo de segurança dos serviços de IA do Azure.
dotnet run program.cs
Saída
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
Isso aguardará até que o modelo gere toda a sua resposta antes de imprimir os resultados. Como alternativa, se quiser transmitir a resposta de forma assíncrona e imprimir os resultados, você pode substituir o conteúdo do Program.cs pelo código no próximo exemplo.
Assíncrono com streaming
using Azure;
using Azure.AI.OpenAI;
using Azure.AI.OpenAI.Chat;
using OpenAI.Chat;
using static 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");
#pragma warning disable AOAI001
AzureOpenAIClient azureClient = new(
new Uri(azureOpenAIEndpoint),
new AzureKeyCredential(azureOpenAIKey));
ChatClient chatClient = azureClient.GetChatClient(deploymentName);
ChatCompletionOptions options = new();
options.AddDataSource(new AzureSearchChatDataSource()
{
Endpoint = new Uri(searchEndpoint),
IndexName = searchIndex,
Authentication = DataSourceAuthentication.FromApiKey(searchKey),
});
var chatUpdates = chatClient.CompleteChatStreamingAsync(
[
new UserChatMessage("What are my available health plans?"),
], options);
AzureChatMessageContext onYourDataContext = null;
await foreach (var chatUpdate in chatUpdates)
{
if (chatUpdate.Role.HasValue)
{
Console.WriteLine($"{chatUpdate.Role}: ");
}
foreach (var contentPart in chatUpdate.ContentUpdate)
{
Console.Write(contentPart.Text);
}
if (onYourDataContext == null)
{
onYourDataContext = chatUpdate.GetAzureMessageContext();
}
}
Console.WriteLine();
if (onYourDataContext?.Intent is not null)
{
Console.WriteLine($"Intent: {onYourDataContext.Intent}");
}
foreach (AzureChatCitation citation in onYourDataContext?.Citations ?? [])
{
Console.Write($"Citation: {citation.Content}");
}
Pré-requisitos
Os seguintes recursos:
- Azure OpenAI
- Armazenamento de Blobs do Azure
- Azure AI Search
- Um recurso OpenAI do Azure implantado em uma região com suporte e com um modelo suportado.
- Certifique-se de que lhe foi atribuída pelo menos a função de Colaborador dos Serviços Cognitivos para o recurso OpenAI do Azure.
- Baixe os dados de exemplo do GitHub se você não tiver seus próprios dados.
Adicione seus dados usando o Azure OpenAI Studio
Gorjeta
Você pode usar a CLI do Desenvolvedor do Azure para criar programaticamente os recursos necessários para o Azure OpenAI On Your Data
Navegue até o Azure OpenAI Studio e entre com credenciais que têm acesso ao seu recurso do Azure OpenAI. Durante ou após o fluxo de trabalho de entrada, selecione o diretório apropriado, a assinatura do Azure e o recurso do Azure OpenAI.
Selecione o bloco Traga seus próprios dados
No espaço de monitorização de chat, selecione Adicionar os seus dados e, em seguida, Adicionar uma fonte de dados
No painel exibido, selecione Carregar arquivos (visualização) em Selecionar fonte de dados. O Azure OpenAI precisa de um recurso de armazenamento e de um recurso de pesquisa para aceder e indexar os seus dados.
Gorjeta
- Consulte o seguinte recurso para obter mais informações:
- Para documentos e conjuntos de dados com texto longo, recomendamos o uso do script de preparação de dados disponível.
Para que o Azure OpenAI acesse sua conta de armazenamento, você precisará ativar o compartilhamento de recursos entre origens (CORS). Se o CORS ainda não estiver ativado para o recurso Armazenamento de Blobs do Azure, selecione Ativar CORS.
Selecione seu recurso Azure AI Search e selecione a confirmação de que conectá-lo incorrerá em uso em sua conta. Em seguida, selecione Seguinte.
No painel Carregar arquivos, selecione Procurar um arquivo e selecione os arquivos baixados da seção de pré-requisitos ou seus próprios dados. Em seguida, selecione Carregar arquivos. Em seguida, selecione Seguinte.
No painel Gerenciamento de dados, você pode escolher se deseja habilitar a pesquisa semântica ou a pesquisa vetorial para seu índice.
Importante
- A pesquisa semântica e a pesquisa vetorial estão sujeitas a preços adicionais. Você precisa escolher SKU básico ou superior para habilitar a pesquisa semântica ou a pesquisa vetorial. Consulte a diferença de nível de preço e os limites de serviço para obter mais informações.
- Para ajudar a melhorar a qualidade da recuperação de informações e da resposta do modelo, recomendamos habilitar a pesquisa semântica para os seguintes idiomas de fonte de dados: inglês, francês, espanhol, português, italiano, alemão, chinês (zh), japonês, coreano, russo e árabe.
Reveja os detalhes introduzidos e selecione Guardar e fechar. Agora você pode conversar com o modelo e ele usará informações de seus dados para construir a resposta.
Recuperar variáveis necessárias
Para fazer uma chamada com êxito no Azure OpenAI, você precisa das seguintes variáveis. Este guia de início rápido pressupõe que você carregou seus dados em uma conta de armazenamento de blob do Azure e criou um índice do Azure AI Search. Para obter mais informações, consulte Adicionar seus dados usando o Azure AI studio.
Nome da variável | Value |
---|---|
AZURE_OPENAI_ENDPOINT |
Você pode encontrar esse valor na seção Chaves & Ponto de Extremidade ao examinar seu recurso do Azure OpenAI no portal do Azure. Como alternativa, você pode encontrar o valor na visualização Código do playground>de bate-papo do estúdio Azure AI>. Um exemplo de ponto de extremidade é: https://my-resource.openai.azure.com . |
AZURE_OPENAI_API_KEY |
Você pode encontrar esse valor na seção Chaves de gerenciamento de>recursos & Ponto de extremidade ao examinar seu recurso do Azure OpenAI no portal do Azure. Pode utilizar KEY1 ou KEY2 . Ter sempre duas chaves permite-lhe rodar e regenerar chaves de forma segura sem causar uma interrupção do serviço. |
AZURE_OPEN_AI_DEPLOYMENT_ID |
Esse valor corresponde ao nome personalizado que você escolheu para sua implantação quando implantou um modelo. Você pode encontrar esse valor em Implantações de Gerenciamento de>Recursos no portal do Azure ou, alternativamente, em Implantações de Gerenciamento>no estúdio de IA do Azure. |
AZURE_AI_SEARCH_ENDPOINT |
Você pode encontrar esse valor na seção Visão geral ao examinar seu recurso Azure AI Search no portal do Azure. |
AZURE_AI_SEARCH_API_KEY |
Você pode encontrar esse valor na seção Chaves de Configurações> ao examinar seu recurso Azure AI Search no portal do Azure. Você pode usar a chave de administração primária ou a chave de administração secundária. Ter sempre duas chaves permite-lhe rodar e regenerar chaves de forma segura sem causar uma interrupção do serviço. |
AZURE_AI_SEARCH_INDEX |
Esse valor corresponde ao nome do índice que você criou para armazenar seus dados. Você pode encontrá-lo na seção Visão geral ao examinar seu recurso Azure AI Search no portal do Azure. |
Variáveis de ambiente
Crie e atribua variáveis de ambiente persistentes para sua chave e endpoint.
Importante
Se você usar uma chave de API, armazene-a com segurança em outro lugar, como no Cofre de Chaves do Azure. Não inclua a chave da API diretamente no seu código e nunca a publique publicamente.
Para obter mais informações sobre segurança de serviços de IA, consulte Autenticar solicitações para serviços de IA do Azure.
Nota
O Spring AI padroniza o nome do modelo como gpt-35-turbo
. Só é necessário fornecer o SPRING_AI_AZURE_OPENAI_MODEL
valor se você tiver implantado um modelo com um nome diferente.
export SPRING_AI_AZURE_OPENAI_ENDPOINT=REPLACE_WITH_YOUR_AOAI_ENDPOINT_VALUE_HERE
export SPRING_AI_AZURE_OPENAI_API_KEY=REPLACE_WITH_YOUR_AOAI_KEY_VALUE_HERE
export SPRING_AI_AZURE_COGNITIVE_SEARCH_ENDPOINT=REPLACE_WITH_YOUR_AZURE_SEARCH_RESOURCE_VALUE_HERE
export SPRING_AI_AZURE_COGNITIVE_SEARCH_API_KEY=REPLACE_WITH_YOUR_AZURE_SEARCH_RESOURCE_KEY_VALUE_HERE
export SPRING_AI_AZURE_COGNITIVE_SEARCH_INDEX=REPLACE_WITH_YOUR_INDEX_NAME_HERE
export SPRING_AI_AZURE_OPENAI_MODEL=REPLACE_WITH_YOUR_MODEL_NAME_HERE
Criar um novo aplicativo Spring
Atualmente, o Spring AI não oferece suporte às AzureCognitiveSearchChatExtensionConfiguration
opções que permitem que uma consulta de IA do Azure encapsular o método RAG (Retrieval Augmented Generation) e oculte os detalhes do usuário. Como alternativa, você ainda pode invocar o método RAG diretamente em seu aplicativo para consultar dados em seu índice do Azure AI Search e usar documentos recuperados para aumentar sua consulta.
O Spring AI dá suporte a uma abstração do VectorStore e você pode envolver o Azure AI Search em uma implementação do Spring AI VectorStore para consultar seus dados personalizados. O projeto a seguir implementa um VectorStore personalizado apoiado pelo Azure AI Search e executa diretamente operações RAG.
Em uma janela Bash, crie um novo diretório para seu aplicativo e navegue até ele.
mkdir ai-custom-data-demo && cd ai-custom-data-demo
Execute o comando a spring init
partir do seu diretório de trabalho. Este comando cria uma estrutura de diretórios padrão para seu projeto Spring, incluindo o arquivo de origem da classe Java principal e o arquivo pom.xml usado para gerenciar projetos baseados no Maven.
spring init -a ai-custom-data-demo -n AICustomData --force --build maven -x
Os arquivos e pastas gerados se assemelham à seguinte estrutura:
ai-custom-data-demo/
|-- pom.xml
|-- mvn
|-- mvn.cmd
|-- HELP.md
|-- src/
|-- main/
| |-- resources/
| | |-- application.properties
| |-- java/
| |-- com/
| |-- example/
| |-- aicustomdatademo/
| |-- AiCustomDataApplication.java
|-- test/
|-- java/
|-- com/
|-- example/
|-- aicustomdatademo/
|-- AiCustomDataApplicationTests.java
Editar aplicativo Spring
Edite o arquivo pom.xml .
Na raiz do diretório do projeto, abra o arquivo pom.xml em seu editor ou IDE preferido e substitua o arquivo pelo seguinte conteúdo:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="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>
Na pasta src/main/java/com/example/aicustomdatademo , abra AiCustomDataApplication.java em seu editor ou IDE preferido e cole o seguinte código:
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; @SpringBootApplication public class AiCustomDataApplication implements CommandLineRunner { private static final String ROLE_INFO_KEY = "role"; private static final 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; @Autowired private AiClient aiClient; @Autowired private EmbeddingClient embeddingClient; public static void main(String[] args) { SpringApplication.run(AiCustomDataApplication.class, args); } @Override public void run(String... args) throws Exception { System.out.println(String.format("Sending custom data prompt to AI service. One moment please...\r\n")); final var store = vectorStore(embeddingClient); final String question = "What are my available health plans?"; final var candidateDocs = store.similaritySearch(question); final var userMessage = new UserMessage(question); final String docPrompts = candidateDocs.stream().map(entry -> entry.getContent()).collect(Collectors.joining("\n")); final SystemPromptTemplate promptTemplate = new SystemPromptTemplate(template); final var systemMessage = promptTemplate.createMessage(Map.of("documents", docPrompts)); final var prompt = new Prompt(List.of(systemMessage, userMessage)); final var resps = aiClient.generate(prompt); System.out.println(String.format("Prompt created %d generated response(s).", resps.getGenerations().size())); resps.getGenerations().stream() .forEach(gen -> { final var role = gen.getInfo().getOrDefault(ROLE_INFO_KEY, MessageType.ASSISTANT.getValue()); System.out.println(String.format("Generated respose from \"%s\": %s", role, gen.getText())); }); } @Bean public VectorStore vectorStore(EmbeddingClient embeddingClient) { final SearchClient searchClient = new SearchClientBuilder() .endpoint(acsEndpoint) .credential(new AzureKeyCredential(acsApiKey)) .indexName(acsIndexName) .buildClient(); return new AzureCognitiveSearchVectorStore(searchClient, embeddingClient); } public static class AzureCognitiveSearchVectorStore implements VectorStore { private static final int DEFAULT_TOP_K = 4; private static final Double DEFAULT_SIMILARITY_THRESHOLD = 0.0; private SearchClient searchClient; private final EmbeddingClient embeddingClient; public AzureCognitiveSearchVectorStore(SearchClient searchClient, EmbeddingClient embeddingClient) { this.searchClient = searchClient; this.embeddingClient = embeddingClient; } @Override public void add(List<Document> documents) { final var docs = documents.stream().map(document -> { final var embeddings = embeddingClient.embed(document); return new DocEntry(document.getId(), "", document.getContent(), embeddings); }).toList(); searchClient.uploadDocuments(docs); } @Override public 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); } @Override public List<Document> similaritySearch(String query) { return similaritySearch(query, DEFAULT_TOP_K); } @Override public List<Document> similaritySearch(String query, int k) { return similaritySearch(query, k, DEFAULT_SIMILARITY_THRESHOLD); } @Override public List<Document> similaritySearch(String query, int k, double threshold) { final var searchQueryVector = new RawVectorQuery() .setVector(toFloatList(embeddingClient.embed(query))) .setKNearestNeighborsCount(k) .setFields("contentVector"); final var 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 @NoArgsConstructor static class DocEntry { private String id; private String hash; private String content; private List<Double> contentVector; } }
Importante
Para produção, use uma maneira segura de armazenar e acessar suas credenciais, como o Azure Key Vault. Para obter mais informações sobre segurança de credenciais, consulte o artigo de segurança dos serviços de IA do Azure.
Navegue de volta para a pasta raiz do projeto e execute o aplicativo usando o seguinte comando:
./mvnw spring-boot:run
Saída
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: 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.
Pré-requisitos
Uma assinatura do Azure - Crie uma gratuitamente.
CLI do Azure usada para autenticação sem senha em um ambiente de desenvolvimento local, crie o contexto necessário entrando com a CLI do Azure.
Um recurso OpenAI do Azure implantado em uma região com suporte e com um modelo suportado.
Certifique-se de que lhe foi atribuída pelo menos a função de Colaborador dos Serviços Cognitivos para o recurso OpenAI do Azure.
Baixe os dados de exemplo do GitHub se você não tiver seus próprios dados.
Documentação | de referência Pacote de código-fonte | (npm)Amostras |
Adicione seus dados usando o Azure OpenAI Studio
Gorjeta
Você pode usar a CLI do Desenvolvedor do Azure para criar programaticamente os recursos necessários para o Azure OpenAI On Your Data
Navegue até o Azure OpenAI Studio e entre com credenciais que têm acesso ao seu recurso do Azure OpenAI. Durante ou após o fluxo de trabalho de entrada, selecione o diretório apropriado, a assinatura do Azure e o recurso do Azure OpenAI.
Selecione o bloco Traga seus próprios dados
No espaço de monitorização de chat, selecione Adicionar os seus dados e, em seguida, Adicionar uma fonte de dados
No painel exibido, selecione Carregar arquivos (visualização) em Selecionar fonte de dados. O Azure OpenAI precisa de um recurso de armazenamento e de um recurso de pesquisa para aceder e indexar os seus dados.
Gorjeta
- Consulte o seguinte recurso para obter mais informações:
- Para documentos e conjuntos de dados com texto longo, recomendamos o uso do script de preparação de dados disponível.
Para que o Azure OpenAI acesse sua conta de armazenamento, você precisará ativar o compartilhamento de recursos entre origens (CORS). Se o CORS ainda não estiver ativado para o recurso Armazenamento de Blobs do Azure, selecione Ativar CORS.
Selecione seu recurso Azure AI Search e selecione a confirmação de que conectá-lo incorrerá em uso em sua conta. Em seguida, selecione Seguinte.
No painel Carregar arquivos, selecione Procurar um arquivo e selecione os arquivos baixados da seção de pré-requisitos ou seus próprios dados. Em seguida, selecione Carregar arquivos. Em seguida, selecione Seguinte.
No painel Gerenciamento de dados, você pode escolher se deseja habilitar a pesquisa semântica ou a pesquisa vetorial para seu índice.
Importante
- A pesquisa semântica e a pesquisa vetorial estão sujeitas a preços adicionais. Você precisa escolher SKU básico ou superior para habilitar a pesquisa semântica ou a pesquisa vetorial. Consulte a diferença de nível de preço e os limites de serviço para obter mais informações.
- Para ajudar a melhorar a qualidade da recuperação de informações e da resposta do modelo, recomendamos habilitar a pesquisa semântica para os seguintes idiomas de fonte de dados: inglês, francês, espanhol, português, italiano, alemão, chinês (zh), japonês, coreano, russo e árabe.
Reveja os detalhes introduzidos e selecione Guardar e fechar. Agora você pode conversar com o modelo e ele usará informações de seus dados para construir a resposta.
Recuperar variáveis necessárias
Para fazer uma chamada com êxito no Azure OpenAI, você precisa das seguintes variáveis. Este guia de início rápido pressupõe que você carregou seus dados em uma conta de armazenamento de blob do Azure e criou um índice do Azure AI Search. Consulte Adicionar seus dados usando o estúdio de IA do Azure
Nome da variável | Value |
---|---|
AZURE_OPENAI_ENDPOINT |
Esse valor pode ser encontrado na seção Chaves & Ponto de Extremidade ao examinar seu recurso do Azure OpenAI no portal do Azure. Como alternativa, você pode encontrar o valor na visualização Código do playground>de bate-papo do estúdio Azure AI>. Um exemplo de ponto de extremidade é: https://my-resoruce.openai.azure.com . |
AZURE_OPENAI_API_KEY |
Esse valor pode ser encontrado na seção Chaves de gerenciamento de>recursos & Ponto de extremidade ao examinar seu recurso do Azure OpenAI no portal do Azure. Pode utilizar KEY1 ou KEY2 . Ter sempre duas chaves permite-lhe rodar e regenerar chaves de forma segura sem causar uma interrupção do serviço. |
AZURE_OPENAI_DEPLOYMENT_ID |
Esse valor corresponde ao nome personalizado que você escolheu para sua implantação quando implantou um modelo. Esse valor pode ser encontrado em Implantações de Gerenciamento de>Recursos no portal do Azure ou, alternativamente, em Implantações de Gerenciamento>no estúdio de IA do Azure. |
AZURE_AI_SEARCH_ENDPOINT |
Esse valor pode ser encontrado na seção Visão geral ao examinar seu recurso Azure AI Search no portal do Azure. |
AZURE_AI_SEARCH_API_KEY |
Esse valor pode ser encontrado na seção Chaves de Configurações> ao examinar seu recurso Azure AI Search no portal do Azure. Você pode usar a chave de administração primária ou a chave de administração secundária. Ter sempre duas chaves permite-lhe rodar e regenerar chaves de forma segura sem causar uma interrupção do serviço. |
AZURE_AI_SEARCH_INDEX |
Esse valor corresponde ao nome do índice que você criou para armazenar seus dados. Você pode encontrá-lo na seção Visão geral ao examinar seu recurso Azure AI Search no portal do Azure. |
Variáveis de ambiente
Crie e atribua variáveis de ambiente persistentes para sua chave e endpoint.
Importante
Se você usar uma chave de API, armazene-a com segurança em outro lugar, como no Cofre de Chaves do Azure. Não inclua a chave da API diretamente no seu código e nunca a publique publicamente.
Para obter mais informações sobre segurança de serviços de IA, consulte Autenticar solicitações para serviços de IA do Azure.
setx AZURE_OPENAI_ENDPOINT REPLACE_WITH_YOUR_AOAI_ENDPOINT_VALUE_HERE
setx AZURE_OPENAI_API_KEY REPLACE_WITH_YOUR_AOAI_KEY_VALUE_HERE
setx AZURE_OPENAI_DEPLOYMENT_ID REPLACE_WITH_YOUR_AOAI_DEPLOYMENT_VALUE_HERE
setx AZURE_AI_SEARCH_ENDPOINT REPLACE_WITH_YOUR_AZURE_SEARCH_RESOURCE_VALUE_HERE
setx AZURE_AI_SEARCH_API_KEY REPLACE_WITH_YOUR_AZURE_SEARCH_RESOURCE_KEY_VALUE_HERE
setx AZURE_AI_SEARCH_INDEX REPLACE_WITH_YOUR_INDEX_NAME_HERE
Inicializar um aplicativo Node.js
Numa janela de consola (como cmd, PowerShell ou Bash), crie um novo diretório para a sua aplicação e navegue para a mesma. Em seguida, execute o npm init
comando para criar um aplicativo de nó com um arquivo package.json .
npm init
Instalar a biblioteca de cliente
Instale o cliente OpenAI do Azure e as bibliotecas do Azure Identity para JavaScript com npm:
npm install @azure/openai @azure/identity
O arquivo de package.json do seu aplicativo será atualizado com as dependências.
Adicionar o código JavaScript
Abra um prompt de comando onde você deseja o novo projeto e crie um novo arquivo chamado
ChatWithOwnData.js
. Copie o código a seguir para oChatWithOwnData.js
arquivo.const { DefaultAzureCredential, getBearerTokenProvider } = require("@azure/identity"); const { AzureOpenAI } = require("openai"); // Set the Azure and AI Search values from environment variables const 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 version const deploymentName = "gpt-4"; const apiVersion = "2024-07-01-preview"; function getClient() { return new AzureOpenAI({ endpoint, azureADTokenProvider, deployment: deploymentName, apiVersion, }); } async function main() { 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 = ""; for await (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); });
Execute o aplicativo com o seguinte comando:
node ChatWithOwnData.js
Importante
Para produção, use uma maneira segura de armazenar e acessar suas credenciais, como o Azure Key Vault. Para obter mais informações sobre segurança de credenciais, consulte o artigo de segurança dos serviços de IA do Azure.
Saída
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.
Pré-requisitos
Uma assinatura do Azure - Crie uma gratuitamente.
CLI do Azure usada para autenticação sem senha em um ambiente de desenvolvimento local, crie o contexto necessário entrando com a CLI do Azure.
Um recurso OpenAI do Azure implantado em uma região com suporte e com um modelo suportado.
Certifique-se de que lhe foi atribuída pelo menos a função de Colaborador dos Serviços Cognitivos para o recurso OpenAI do Azure.
Baixe os dados de exemplo do GitHub se você não tiver seus próprios dados.
Documentação | de referência Pacote de código-fonte | (npm)Amostras |
Adicione seus dados usando o Azure OpenAI Studio
Gorjeta
Você pode usar a CLI do Desenvolvedor do Azure para criar programaticamente os recursos necessários para o Azure OpenAI On Your Data
Navegue até o Azure OpenAI Studio e entre com credenciais que têm acesso ao seu recurso do Azure OpenAI. Durante ou após o fluxo de trabalho de entrada, selecione o diretório apropriado, a assinatura do Azure e o recurso do Azure OpenAI.
Selecione o bloco Traga seus próprios dados
No espaço de monitorização de chat, selecione Adicionar os seus dados e, em seguida, Adicionar uma fonte de dados
No painel exibido, selecione Carregar arquivos (visualização) em Selecionar fonte de dados. O Azure OpenAI precisa de um recurso de armazenamento e de um recurso de pesquisa para aceder e indexar os seus dados.
Gorjeta
- Consulte o seguinte recurso para obter mais informações:
- Para documentos e conjuntos de dados com texto longo, recomendamos o uso do script de preparação de dados disponível.
Para que o Azure OpenAI acesse sua conta de armazenamento, você precisará ativar o compartilhamento de recursos entre origens (CORS). Se o CORS ainda não estiver ativado para o recurso Armazenamento de Blobs do Azure, selecione Ativar CORS.
Selecione seu recurso Azure AI Search e selecione a confirmação de que conectá-lo incorrerá em uso em sua conta. Em seguida, selecione Seguinte.
No painel Carregar arquivos, selecione Procurar um arquivo e selecione os arquivos baixados da seção de pré-requisitos ou seus próprios dados. Em seguida, selecione Carregar arquivos. Em seguida, selecione Seguinte.
No painel Gerenciamento de dados, você pode escolher se deseja habilitar a pesquisa semântica ou a pesquisa vetorial para seu índice.
Importante
- A pesquisa semântica e a pesquisa vetorial estão sujeitas a preços adicionais. Você precisa escolher SKU básico ou superior para habilitar a pesquisa semântica ou a pesquisa vetorial. Consulte a diferença de nível de preço e os limites de serviço para obter mais informações.
- Para ajudar a melhorar a qualidade da recuperação de informações e da resposta do modelo, recomendamos habilitar a pesquisa semântica para os seguintes idiomas de fonte de dados: inglês, francês, espanhol, português, italiano, alemão, chinês (zh), japonês, coreano, russo e árabe.
Reveja os detalhes introduzidos e selecione Guardar e fechar. Agora você pode conversar com o modelo e ele usará informações de seus dados para construir a resposta.
Recuperar variáveis necessárias
Para fazer uma chamada com êxito no Azure OpenAI, você precisa das seguintes variáveis. Este guia de início rápido pressupõe que você carregou seus dados em uma conta de armazenamento de blob do Azure e criou um índice do Azure AI Search. Consulte Adicionar seus dados usando o estúdio de IA do Azure
Nome da variável | Value |
---|---|
AZURE_OPENAI_ENDPOINT |
Esse valor pode ser encontrado na seção Chaves & Ponto de Extremidade ao examinar seu recurso do Azure OpenAI no portal do Azure. Como alternativa, você pode encontrar o valor na visualização Código do playground>de bate-papo do estúdio Azure AI>. Um exemplo de ponto de extremidade é: https://my-resoruce.openai.azure.com . |
AZURE_OPENAI_API_KEY |
Esse valor pode ser encontrado na seção Chaves de gerenciamento de>recursos & Ponto de extremidade ao examinar seu recurso do Azure OpenAI no portal do Azure. Pode utilizar KEY1 ou KEY2 . Ter sempre duas chaves permite-lhe rodar e regenerar chaves de forma segura sem causar uma interrupção do serviço. |
AZURE_OPENAI_DEPLOYMENT_ID |
Esse valor corresponde ao nome personalizado que você escolheu para sua implantação quando implantou um modelo. Esse valor pode ser encontrado em Implantações de Gerenciamento de>Recursos no portal do Azure ou, alternativamente, em Implantações de Gerenciamento>no estúdio de IA do Azure. |
AZURE_AI_SEARCH_ENDPOINT |
Esse valor pode ser encontrado na seção Visão geral ao examinar seu recurso Azure AI Search no portal do Azure. |
AZURE_AI_SEARCH_API_KEY |
Esse valor pode ser encontrado na seção Chaves de Configurações> ao examinar seu recurso Azure AI Search no portal do Azure. Você pode usar a chave de administração primária ou a chave de administração secundária. Ter sempre duas chaves permite-lhe rodar e regenerar chaves de forma segura sem causar uma interrupção do serviço. |
AZURE_AI_SEARCH_INDEX |
Esse valor corresponde ao nome do índice que você criou para armazenar seus dados. Você pode encontrá-lo na seção Visão geral ao examinar seu recurso Azure AI Search no portal do Azure. |
Variáveis de ambiente
Crie e atribua variáveis de ambiente persistentes para sua chave e endpoint.
Importante
Se você usar uma chave de API, armazene-a com segurança em outro lugar, como no Cofre de Chaves do Azure. Não inclua a chave da API diretamente no seu código e nunca a publique publicamente.
Para obter mais informações sobre segurança de serviços de IA, consulte Autenticar solicitações para serviços de IA do Azure.
setx AZURE_OPENAI_ENDPOINT REPLACE_WITH_YOUR_AOAI_ENDPOINT_VALUE_HERE
setx AZURE_OPENAI_API_KEY REPLACE_WITH_YOUR_AOAI_KEY_VALUE_HERE
setx AZURE_OPENAI_DEPLOYMENT_ID REPLACE_WITH_YOUR_AOAI_DEPLOYMENT_VALUE_HERE
setx AZURE_AI_SEARCH_ENDPOINT REPLACE_WITH_YOUR_AZURE_SEARCH_RESOURCE_VALUE_HERE
setx AZURE_AI_SEARCH_API_KEY REPLACE_WITH_YOUR_AZURE_SEARCH_RESOURCE_KEY_VALUE_HERE
setx AZURE_AI_SEARCH_INDEX REPLACE_WITH_YOUR_INDEX_NAME_HERE
Inicializar um aplicativo Node.js
Numa janela de consola (como cmd, PowerShell ou Bash), crie um novo diretório para a sua aplicação e navegue para a mesma. Em seguida, execute o npm init
comando para criar um aplicativo de nó com um arquivo package.json .
npm init
Instalar a biblioteca de cliente
Instale o cliente OpenAI do Azure e as bibliotecas do Azure Identity para JavaScript com npm:
npm install openai @azure/identity @azure/openai
A @azure/openai/types
dependência é incluída para estender o modelo OpenAI do Azure para a data_sources
propriedade. Essa importação só é necessária para o TypeScript.
O arquivo de package.json do seu aplicativo será atualizado com as dependências.
Adicionar o código TypeScript
Abra um prompt de comando onde você deseja o novo projeto e crie um novo arquivo chamado
ChatWithOwnData.ts
. Copie o código a seguir para oChatWithOwnData.ts
arquivo.import { AzureOpenAI } from "openai"; import { DefaultAzureCredential, getBearerTokenProvider } from "@azure/identity"; import "@azure/openai/types"; // Set the Azure and AI Search values from environment variables const 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 version const deploymentName = "gpt-4"; const apiVersion = "2024-07-01-preview"; function getClient(): AzureOpenAI { return new AzureOpenAI({ endpoint, azureADTokenProvider, deployment: deploymentName, apiVersion, }); } async function main() { 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 = ""; for await (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); });
Crie o aplicativo com o seguinte comando:
tsc
Execute o aplicativo com o seguinte comando:
node ChatWithOwnData.js
Importante
Para produção, use uma maneira segura de armazenar e acessar suas credenciais, como o Azure Key Vault. Para obter mais informações sobre segurança de credenciais, consulte o artigo de segurança dos serviços de IA do Azure.
Saída
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.
Pré-requisitos
Os seguintes recursos:
- Azure OpenAI
- Armazenamento de Blobs do Azure
- Azure AI Search
- Um recurso OpenAI do Azure implantado em uma região com suporte e com um modelo suportado.
- Certifique-se de que lhe foi atribuída pelo menos a função de Colaborador dos Serviços Cognitivos para o recurso OpenAI do Azure.
- Baixe os dados de exemplo do GitHub se você não tiver seus próprios dados.
Pacote de código | fonte de referência | (pypi)Amostras |
Esses links fazem referência à API OpenAI para Python. Não há nenhum SDK Python OpenAI específico do Azure. Saiba como alternar entre os serviços OpenAI e os serviços Azure OpenAI.
Adicione seus dados usando o Azure OpenAI Studio
Gorjeta
Você pode usar a CLI do Desenvolvedor do Azure para criar programaticamente os recursos necessários para o Azure OpenAI On Your Data
Navegue até o Azure OpenAI Studio e entre com credenciais que têm acesso ao seu recurso do Azure OpenAI. Durante ou após o fluxo de trabalho de entrada, selecione o diretório apropriado, a assinatura do Azure e o recurso do Azure OpenAI.
Selecione o bloco Traga seus próprios dados
No espaço de monitorização de chat, selecione Adicionar os seus dados e, em seguida, Adicionar uma fonte de dados
No painel exibido, selecione Carregar arquivos (visualização) em Selecionar fonte de dados. O Azure OpenAI precisa de um recurso de armazenamento e de um recurso de pesquisa para aceder e indexar os seus dados.
Gorjeta
- Consulte o seguinte recurso para obter mais informações:
- Para documentos e conjuntos de dados com texto longo, recomendamos o uso do script de preparação de dados disponível.
Para que o Azure OpenAI acesse sua conta de armazenamento, você precisará ativar o compartilhamento de recursos entre origens (CORS). Se o CORS ainda não estiver ativado para o recurso Armazenamento de Blobs do Azure, selecione Ativar CORS.
Selecione seu recurso Azure AI Search e selecione a confirmação de que conectá-lo incorrerá em uso em sua conta. Em seguida, selecione Seguinte.
No painel Carregar arquivos, selecione Procurar um arquivo e selecione os arquivos baixados da seção de pré-requisitos ou seus próprios dados. Em seguida, selecione Carregar arquivos. Em seguida, selecione Seguinte.
No painel Gerenciamento de dados, você pode escolher se deseja habilitar a pesquisa semântica ou a pesquisa vetorial para seu índice.
Importante
- A pesquisa semântica e a pesquisa vetorial estão sujeitas a preços adicionais. Você precisa escolher SKU básico ou superior para habilitar a pesquisa semântica ou a pesquisa vetorial. Consulte a diferença de nível de preço e os limites de serviço para obter mais informações.
- Para ajudar a melhorar a qualidade da recuperação de informações e da resposta do modelo, recomendamos habilitar a pesquisa semântica para os seguintes idiomas de fonte de dados: inglês, francês, espanhol, português, italiano, alemão, chinês (zh), japonês, coreano, russo e árabe.
Reveja os detalhes introduzidos e selecione Guardar e fechar. Agora você pode conversar com o modelo e ele usará informações de seus dados para construir a resposta.
Recuperar variáveis necessárias
Para fazer uma chamada com êxito no Azure OpenAI, você precisa das seguintes variáveis. Este guia de início rápido pressupõe que você carregou seus dados em uma conta de armazenamento de blob do Azure e criou um índice do Azure AI Search. Consulte Adicionar seus dados usando o estúdio de IA do Azure
Nome da variável | Value |
---|---|
AZURE_OPENAI_ENDPOINT |
Esse valor pode ser encontrado na seção Chaves & Ponto de Extremidade ao examinar seu recurso do Azure OpenAI no portal do Azure. Como alternativa, você pode encontrar o valor na visualização Código do playground>de bate-papo do estúdio Azure AI>. Um exemplo de ponto de extremidade é: https://my-resoruce.openai.azure.com . |
AZURE_OPENAI_API_KEY |
Esse valor pode ser encontrado na seção Chaves de gerenciamento de>recursos & Ponto de extremidade ao examinar seu recurso do Azure OpenAI no portal do Azure. Pode utilizar KEY1 ou KEY2 . Ter sempre duas chaves permite-lhe rodar e regenerar chaves de forma segura sem causar uma interrupção do serviço. |
AZURE_OPENAI_DEPLOYMENT_ID |
Esse valor corresponde ao nome personalizado que você escolheu para sua implantação quando implantou um modelo. Esse valor pode ser encontrado em Implantações de Gerenciamento de>Recursos no portal do Azure ou, alternativamente, em Implantações de Gerenciamento>no estúdio de IA do Azure. |
AZURE_AI_SEARCH_ENDPOINT |
Esse valor pode ser encontrado na seção Visão geral ao examinar seu recurso Azure AI Search no portal do Azure. |
AZURE_AI_SEARCH_API_KEY |
Esse valor pode ser encontrado na seção Chaves de Configurações> ao examinar seu recurso Azure AI Search no portal do Azure. Você pode usar a chave de administração primária ou a chave de administração secundária. Ter sempre duas chaves permite-lhe rodar e regenerar chaves de forma segura sem causar uma interrupção do serviço. |
AZURE_AI_SEARCH_INDEX |
Esse valor corresponde ao nome do índice que você criou para armazenar seus dados. Você pode encontrá-lo na seção Visão geral ao examinar seu recurso Azure AI Search no portal do Azure. |
Variáveis de ambiente
Crie e atribua variáveis de ambiente persistentes para sua chave e endpoint.
Importante
Se você usar uma chave de API, armazene-a com segurança em outro lugar, como no Cofre de Chaves do Azure. Não inclua a chave da API diretamente no seu código e nunca a publique publicamente.
Para obter mais informações sobre segurança de serviços de IA, consulte Autenticar solicitações para serviços de IA do Azure.
setx AZURE_OPENAI_ENDPOINT REPLACE_WITH_YOUR_AOAI_ENDPOINT_VALUE_HERE
setx AZURE_OPENAI_API_KEY REPLACE_WITH_YOUR_AOAI_KEY_VALUE_HERE
setx AZURE_OPENAI_DEPLOYMENT_ID REPLACE_WITH_YOUR_AOAI_DEPLOYMENT_VALUE_HERE
setx AZURE_AI_SEARCH_ENDPOINT REPLACE_WITH_YOUR_AZURE_SEARCH_RESOURCE_VALUE_HERE
setx AZURE_AI_SEARCH_API_KEY REPLACE_WITH_YOUR_AZURE_SEARCH_RESOURCE_KEY_VALUE_HERE
setx AZURE_AI_SEARCH_INDEX REPLACE_WITH_YOUR_INDEX_NAME_HERE
Criar um ambiente Python
- Crie uma nova pasta chamada openai-python para seu projeto e um novo arquivo de código Python chamado main.py. Altere para esse diretório:
mkdir openai-python
cd openai-python
- Instale as seguintes bibliotecas Python:
pip install openai
pip install python-dotenv
Criar o aplicativo Python
- No diretório do projeto, abra o arquivo main.py e adicione o seguinte código:
import os
import openai
import dotenv
dotenv.load_dotenv()
endpoint = os.environ.get("AZURE_OPENAI_ENDPOINT")
api_key = os.environ.get("AZURE_OPENAI_API_KEY")
deployment = os.environ.get("AZURE_OPENAI_DEPLOYMENT_ID")
client = openai.AzureOpenAI(
azure_endpoint=endpoint,
api_key=api_key,
api_version="2024-02-01",
)
completion = client.chat.completions.create(
model=deployment,
messages=[
{
"role": "user",
"content": "What are my available health plans?",
},
],
extra_body={
"data_sources":[
{
"type": "azure_search",
"parameters": {
"endpoint": os.environ["AZURE_AI_SEARCH_ENDPOINT"],
"index_name": os.environ["AZURE_AI_SEARCH_INDEX"],
"authentication": {
"type": "api_key",
"key": os.environ["AZURE_AI_SEARCH_API_KEY"],
}
}
}
],
}
)
print(completion.model_dump_json(indent=2))
Importante
Para produção, use uma maneira segura de armazenar e acessar suas credenciais, como o Azure Key Vault. Para obter mais informações sobre segurança de credenciais, consulte o artigo de segurança dos serviços de IA do Azure.
- Execute o seguinte comando:
python main.py
O aplicativo imprime a resposta em um formato JSON adequado para uso em muitos cenários. Inclui respostas à sua consulta e citações dos ficheiros carregados.
Pré-requisitos
Os seguintes recursos:
- Azure OpenAI
- Armazenamento de Blobs do Azure
- Azure AI Search
- Um recurso OpenAI do Azure implantado em uma região com suporte e com um modelo suportado.
- Certifique-se de que lhe foi atribuída pelo menos a função de Colaborador dos Serviços Cognitivos para o recurso OpenAI do Azure.
- Baixe os dados de exemplo do GitHub se você não tiver seus próprios dados.
Adicione seus dados usando o Azure OpenAI Studio
Gorjeta
Você pode usar a CLI do Desenvolvedor do Azure para criar programaticamente os recursos necessários para o Azure OpenAI On Your Data
Navegue até o Azure OpenAI Studio e entre com credenciais que têm acesso ao seu recurso do Azure OpenAI. Durante ou após o fluxo de trabalho de entrada, selecione o diretório apropriado, a assinatura do Azure e o recurso do Azure OpenAI.
Selecione o bloco Traga seus próprios dados
No espaço de monitorização de chat, selecione Adicionar os seus dados e, em seguida, Adicionar uma fonte de dados
No painel exibido, selecione Carregar arquivos (visualização) em Selecionar fonte de dados. O Azure OpenAI precisa de um recurso de armazenamento e de um recurso de pesquisa para aceder e indexar os seus dados.
Gorjeta
- Consulte o seguinte recurso para obter mais informações:
- Para documentos e conjuntos de dados com texto longo, recomendamos o uso do script de preparação de dados disponível.
Para que o Azure OpenAI acesse sua conta de armazenamento, você precisará ativar o compartilhamento de recursos entre origens (CORS). Se o CORS ainda não estiver ativado para o recurso Armazenamento de Blobs do Azure, selecione Ativar CORS.
Selecione seu recurso Azure AI Search e selecione a confirmação de que conectá-lo incorrerá em uso em sua conta. Em seguida, selecione Seguinte.
No painel Carregar arquivos, selecione Procurar um arquivo e selecione os arquivos baixados da seção de pré-requisitos ou seus próprios dados. Em seguida, selecione Carregar arquivos. Em seguida, selecione Seguinte.
No painel Gerenciamento de dados, você pode escolher se deseja habilitar a pesquisa semântica ou a pesquisa vetorial para seu índice.
Importante
- A pesquisa semântica e a pesquisa vetorial estão sujeitas a preços adicionais. Você precisa escolher SKU básico ou superior para habilitar a pesquisa semântica ou a pesquisa vetorial. Consulte a diferença de nível de preço e os limites de serviço para obter mais informações.
- Para ajudar a melhorar a qualidade da recuperação de informações e da resposta do modelo, recomendamos habilitar a pesquisa semântica para os seguintes idiomas de fonte de dados: inglês, francês, espanhol, português, italiano, alemão, chinês (zh), japonês, coreano, russo e árabe.
Reveja os detalhes introduzidos e selecione Guardar e fechar. Agora você pode conversar com o modelo e ele usará informações de seus dados para construir a resposta.
Recuperar variáveis necessárias
Para fazer uma chamada com êxito no Azure OpenAI, você precisa das seguintes variáveis. Este guia de início rápido pressupõe que você carregou seus dados em uma conta de armazenamento de blob do Azure e criou um índice do Azure AI Search. Consulte Adicionar seus dados usando o estúdio de IA do Azure
Nome da variável | Value |
---|---|
AZURE_OPENAI_ENDPOINT |
Esse valor pode ser encontrado na seção Chaves & Ponto de Extremidade ao examinar seu recurso do Azure OpenAI no portal do Azure. Como alternativa, você pode encontrar o valor na visualização Código do playground>de bate-papo do estúdio Azure AI>. Um exemplo de ponto de extremidade é: https://my-resoruce.openai.azure.com . |
AZURE_OPENAI_API_KEY |
Esse valor pode ser encontrado na seção Chaves de gerenciamento de>recursos & Ponto de extremidade ao examinar seu recurso do Azure OpenAI no portal do Azure. Pode utilizar KEY1 ou KEY2 . Ter sempre duas chaves permite-lhe rodar e regenerar chaves de forma segura sem causar uma interrupção do serviço. |
AZURE_OPENAI_DEPLOYMENT_ID |
Esse valor corresponde ao nome personalizado que você escolheu para sua implantação quando implantou um modelo. Esse valor pode ser encontrado em Implantações de Gerenciamento de>Recursos no portal do Azure ou, alternativamente, em Implantações de Gerenciamento>no estúdio de IA do Azure. |
AZURE_AI_SEARCH_ENDPOINT |
Esse valor pode ser encontrado na seção Visão geral ao examinar seu recurso Azure AI Search no portal do Azure. |
AZURE_AI_SEARCH_API_KEY |
Esse valor pode ser encontrado na seção Chaves de Configurações> ao examinar seu recurso Azure AI Search no portal do Azure. Você pode usar a chave de administração primária ou a chave de administração secundária. Ter sempre duas chaves permite-lhe rodar e regenerar chaves de forma segura sem causar uma interrupção do serviço. |
AZURE_AI_SEARCH_INDEX |
Esse valor corresponde ao nome do índice que você criou para armazenar seus dados. Você pode encontrá-lo na seção Visão geral ao examinar seu recurso Azure AI Search no portal do Azure. |
Variáveis de ambiente
Crie e atribua variáveis de ambiente persistentes para sua chave e endpoint.
Importante
Se você usar uma chave de API, armazene-a com segurança em outro lugar, como no Cofre de Chaves do Azure. Não inclua a chave da API diretamente no seu código e nunca a publique publicamente.
Para obter mais informações sobre segurança de serviços de IA, consulte Autenticar solicitações para serviços de IA do Azure.
setx AZURE_OPENAI_ENDPOINT REPLACE_WITH_YOUR_AOAI_ENDPOINT_VALUE_HERE
setx AZURE_OPENAI_API_KEY REPLACE_WITH_YOUR_AOAI_KEY_VALUE_HERE
setx AZURE_OPENAI_DEPLOYMENT_ID REPLACE_WITH_YOUR_AOAI_DEPLOYMENT_VALUE_HERE
setx AZURE_AI_SEARCH_ENDPOINT REPLACE_WITH_YOUR_AZURE_SEARCH_RESOURCE_VALUE_HERE
setx AZURE_AI_SEARCH_API_KEY REPLACE_WITH_YOUR_AZURE_SEARCH_RESOURCE_KEY_VALUE_HERE
setx AZURE_AI_SEARCH_INDEX REPLACE_WITH_YOUR_INDEX_NAME_HERE
Exemplo de comandos do PowerShell
Os modelos de chat do Azure OpenAI são otimizados para trabalhar com entradas formatadas como uma conversa. A messages
variável passa por uma matriz de dicionários com diferentes papéis na conversação delineados por sistema, usuário, ferramenta e assistente. A dataSources
variável se conecta ao seu índice de Pesquisa Cognitiva do Azure e permite que os modelos do Azure OpenAI respondam usando seus dados.
Para acionar uma resposta do modelo, você deve terminar com uma mensagem de usuário indicando que é a vez do assistente responder.
Gorjeta
Há vários parâmetros que você pode usar para alterar a resposta do modelo, como temperature
ou top_p
. Consulte a documentação de referência para obter mais informações.
# 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 -depth 5
# 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
Exemplo de saída
The available health plans in the Contoso Electronics plan and benefit packages are the Northwind Health Plus and Northwind Standard plans.
Importante
Para produção, use uma maneira segura de armazenar e acessar suas credenciais, como o Gerenciamento Secreto do PowerShell com o Cofre de Chaves do Azure. Para obter mais informações sobre segurança de credenciais, consulte o artigo de segurança dos serviços de IA do Azure.
Converse com seu modelo usando um aplicativo Web
Para começar a conversar com o modelo do Azure OpenAI que usa seus dados, você pode implantar um aplicativo Web usando o estúdio do Azure OpenAI ou o código de exemplo que fornecemos no GitHub. Este aplicativo implanta usando o serviço de aplicativo do Azure e fornece uma interface de usuário para enviar consultas. Este aplicativo pode ser usado com modelos do Azure OpenAI que usam seus dados ou modelos que não usam seus dados. Consulte o arquivo readme no repositório para obter instruções sobre requisitos, configuração e implantação. Opcionalmente, você pode personalizar a lógica de frontend e back-end do aplicativo Web fazendo alterações no código-fonte.
Pré-requisitos
Os seguintes recursos:
- Azure OpenAI
- Armazenamento de Blobs do Azure
- Azure AI Search
- Um recurso OpenAI do Azure implantado em uma região com suporte e com um modelo suportado.
- Certifique-se de que lhe foi atribuída pelo menos a função de Colaborador dos Serviços Cognitivos para o recurso OpenAI do Azure.
- Baixe os dados de exemplo do GitHub se você não tiver seus próprios dados.
Pacote de código | fonte de referência | (Go)Amostras |
Adicione seus dados usando o Azure OpenAI Studio
Gorjeta
Você pode usar a CLI do Desenvolvedor do Azure para criar programaticamente os recursos necessários para o Azure OpenAI On Your Data
Navegue até o Azure OpenAI Studio e entre com credenciais que têm acesso ao seu recurso do Azure OpenAI. Durante ou após o fluxo de trabalho de entrada, selecione o diretório apropriado, a assinatura do Azure e o recurso do Azure OpenAI.
Selecione o bloco Traga seus próprios dados
No espaço de monitorização de chat, selecione Adicionar os seus dados e, em seguida, Adicionar uma fonte de dados
No painel exibido, selecione Carregar arquivos (visualização) em Selecionar fonte de dados. O Azure OpenAI precisa de um recurso de armazenamento e de um recurso de pesquisa para aceder e indexar os seus dados.
Gorjeta
- Consulte o seguinte recurso para obter mais informações:
- Para documentos e conjuntos de dados com texto longo, recomendamos o uso do script de preparação de dados disponível.
Para que o Azure OpenAI acesse sua conta de armazenamento, você precisará ativar o compartilhamento de recursos entre origens (CORS). Se o CORS ainda não estiver ativado para o recurso Armazenamento de Blobs do Azure, selecione Ativar CORS.
Selecione seu recurso Azure AI Search e selecione a confirmação de que conectá-lo incorrerá em uso em sua conta. Em seguida, selecione Seguinte.
No painel Carregar arquivos, selecione Procurar um arquivo e selecione os arquivos baixados da seção de pré-requisitos ou seus próprios dados. Em seguida, selecione Carregar arquivos. Em seguida, selecione Seguinte.
No painel Gerenciamento de dados, você pode escolher se deseja habilitar a pesquisa semântica ou a pesquisa vetorial para seu índice.
Importante
- A pesquisa semântica e a pesquisa vetorial estão sujeitas a preços adicionais. Você precisa escolher SKU básico ou superior para habilitar a pesquisa semântica ou a pesquisa vetorial. Consulte a diferença de nível de preço e os limites de serviço para obter mais informações.
- Para ajudar a melhorar a qualidade da recuperação de informações e da resposta do modelo, recomendamos habilitar a pesquisa semântica para os seguintes idiomas de fonte de dados: inglês, francês, espanhol, português, italiano, alemão, chinês (zh), japonês, coreano, russo e árabe.
Reveja os detalhes introduzidos e selecione Guardar e fechar. Agora você pode conversar com o modelo e ele usará informações de seus dados para construir a resposta.
Recuperar variáveis necessárias
Para fazer uma chamada com êxito no Azure OpenAI, você precisa das seguintes variáveis. Este guia de início rápido pressupõe que você carregou seus dados em uma conta de armazenamento de blob do Azure e criou um índice do Azure AI Search. Consulte Adicionar seus dados usando o estúdio de IA do Azure
Nome da variável | Value |
---|---|
AZURE_OPENAI_ENDPOINT |
Esse valor pode ser encontrado na seção Chaves & Ponto de Extremidade ao examinar seu recurso do Azure OpenAI no portal do Azure. Como alternativa, você pode encontrar o valor na visualização Código do playground>de bate-papo do estúdio Azure AI>. Um exemplo de ponto de extremidade é: https://my-resoruce.openai.azure.com . |
AZURE_OPENAI_API_KEY |
Esse valor pode ser encontrado na seção Chaves de gerenciamento de>recursos & Ponto de extremidade ao examinar seu recurso do Azure OpenAI no portal do Azure. Pode utilizar KEY1 ou KEY2 . Ter sempre duas chaves permite-lhe rodar e regenerar chaves de forma segura sem causar uma interrupção do serviço. |
AZURE_OPENAI_DEPLOYMENT_ID |
Esse valor corresponde ao nome personalizado que você escolheu para sua implantação quando implantou um modelo. Esse valor pode ser encontrado em Implantações de Gerenciamento de>Recursos no portal do Azure ou, alternativamente, em Implantações de Gerenciamento>no estúdio de IA do Azure. |
AZURE_AI_SEARCH_ENDPOINT |
Esse valor pode ser encontrado na seção Visão geral ao examinar seu recurso Azure AI Search no portal do Azure. |
AZURE_AI_SEARCH_API_KEY |
Esse valor pode ser encontrado na seção Chaves de Configurações> ao examinar seu recurso Azure AI Search no portal do Azure. Você pode usar a chave de administração primária ou a chave de administração secundária. Ter sempre duas chaves permite-lhe rodar e regenerar chaves de forma segura sem causar uma interrupção do serviço. |
AZURE_AI_SEARCH_INDEX |
Esse valor corresponde ao nome do índice que você criou para armazenar seus dados. Você pode encontrá-lo na seção Visão geral ao examinar seu recurso Azure AI Search no portal do Azure. |
Variáveis de ambiente
Crie e atribua variáveis de ambiente persistentes para sua chave e endpoint.
Importante
Se você usar uma chave de API, armazene-a com segurança em outro lugar, como no Cofre de Chaves do Azure. Não inclua a chave da API diretamente no seu código e nunca a publique publicamente.
Para obter mais informações sobre segurança de serviços de IA, consulte Autenticar solicitações para serviços de IA do Azure.
setx AZURE_OPENAI_ENDPOINT REPLACE_WITH_YOUR_AOAI_ENDPOINT_VALUE_HERE
setx AZURE_OPENAI_API_KEY REPLACE_WITH_YOUR_AOAI_KEY_VALUE_HERE
setx AZURE_OPENAI_DEPLOYMENT_ID REPLACE_WITH_YOUR_AOAI_DEPLOYMENT_VALUE_HERE
setx AZURE_AI_SEARCH_ENDPOINT REPLACE_WITH_YOUR_AZURE_SEARCH_RESOURCE_VALUE_HERE
setx AZURE_AI_SEARCH_API_KEY REPLACE_WITH_YOUR_AZURE_SEARCH_RESOURCE_KEY_VALUE_HERE
setx AZURE_AI_SEARCH_INDEX REPLACE_WITH_YOUR_INDEX_NAME_HERE
Criar um ambiente Go
Crie uma nova pasta chamada openai-go para seu projeto e um novo arquivo de código Go chamado sample.go. Altere para esse diretório:
mkdir openai-go cd openai-go
Instale os seguintes pacotes Go:
go get github.com/Azure/azure-sdk-for-go/sdk/ai/azopenai
Habilite o controle de dependência para seu código.
go mod init example/azure-openai
Criar a aplicação Go
No diretório do projeto, abra o arquivo sample.go e adicione o seguinte código:
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" ) func main() { 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://video2.skills-academy.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://video2.skills-academy.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, ) }
Importante
Para produção, use uma maneira segura de armazenar e acessar suas credenciais, como o Azure Key Vault. Para obter mais informações sobre segurança de credenciais, consulte o artigo de segurança dos serviços de IA do Azure.
Execute o seguinte comando:
go run sample.go
A aplicação imprime a resposta, incluindo as respostas à sua consulta e as citações dos ficheiros carregados.
Pré-requisitos
Os seguintes recursos:
- Azure OpenAI
- Armazenamento de Blobs do Azure
- Azure AI Search
- Um recurso OpenAI do Azure implantado em uma região com suporte e com um modelo suportado.
- Certifique-se de que lhe foi atribuída pelo menos a função de Colaborador dos Serviços Cognitivos para o recurso OpenAI do Azure.
- Baixe os dados de exemplo do GitHub se você não tiver seus próprios dados.
Adicione seus dados usando o Azure OpenAI Studio
Gorjeta
Você pode usar a CLI do Desenvolvedor do Azure para criar programaticamente os recursos necessários para o Azure OpenAI On Your Data
Navegue até o Azure OpenAI Studio e entre com credenciais que têm acesso ao seu recurso do Azure OpenAI. Durante ou após o fluxo de trabalho de entrada, selecione o diretório apropriado, a assinatura do Azure e o recurso do Azure OpenAI.
Selecione o bloco Traga seus próprios dados
No espaço de monitorização de chat, selecione Adicionar os seus dados e, em seguida, Adicionar uma fonte de dados
No painel exibido, selecione Carregar arquivos (visualização) em Selecionar fonte de dados. O Azure OpenAI precisa de um recurso de armazenamento e de um recurso de pesquisa para aceder e indexar os seus dados.
Gorjeta
- Consulte o seguinte recurso para obter mais informações:
- Para documentos e conjuntos de dados com texto longo, recomendamos o uso do script de preparação de dados disponível.
Para que o Azure OpenAI acesse sua conta de armazenamento, você precisará ativar o compartilhamento de recursos entre origens (CORS). Se o CORS ainda não estiver ativado para o recurso Armazenamento de Blobs do Azure, selecione Ativar CORS.
Selecione seu recurso Azure AI Search e selecione a confirmação de que conectá-lo incorrerá em uso em sua conta. Em seguida, selecione Seguinte.
No painel Carregar arquivos, selecione Procurar um arquivo e selecione os arquivos baixados da seção de pré-requisitos ou seus próprios dados. Em seguida, selecione Carregar arquivos. Em seguida, selecione Seguinte.
No painel Gerenciamento de dados, você pode escolher se deseja habilitar a pesquisa semântica ou a pesquisa vetorial para seu índice.
Importante
- A pesquisa semântica e a pesquisa vetorial estão sujeitas a preços adicionais. Você precisa escolher SKU básico ou superior para habilitar a pesquisa semântica ou a pesquisa vetorial. Consulte a diferença de nível de preço e os limites de serviço para obter mais informações.
- Para ajudar a melhorar a qualidade da recuperação de informações e da resposta do modelo, recomendamos habilitar a pesquisa semântica para os seguintes idiomas de fonte de dados: inglês, francês, espanhol, português, italiano, alemão, chinês (zh), japonês, coreano, russo e árabe.
Reveja os detalhes introduzidos e selecione Guardar e fechar. Agora você pode conversar com o modelo e ele usará informações de seus dados para construir a resposta.
Recuperar variáveis necessárias
Para fazer uma chamada com êxito no Azure OpenAI, você precisa das seguintes variáveis. Este guia de início rápido pressupõe que você carregou seus dados em uma conta de armazenamento de blob do Azure e criou um índice do Azure AI Search. Consulte Adicionar seus dados usando o estúdio de IA do Azure
Nome da variável | Value |
---|---|
AZURE_OPENAI_ENDPOINT |
Esse valor pode ser encontrado na seção Chaves & Ponto de Extremidade ao examinar seu recurso do Azure OpenAI no portal do Azure. Como alternativa, você pode encontrar o valor na visualização Código do playground>de bate-papo do estúdio Azure AI>. Um exemplo de ponto de extremidade é: https://my-resoruce.openai.azure.com . |
AZURE_OPENAI_API_KEY |
Esse valor pode ser encontrado na seção Chaves de gerenciamento de>recursos & Ponto de extremidade ao examinar seu recurso do Azure OpenAI no portal do Azure. Pode utilizar KEY1 ou KEY2 . Ter sempre duas chaves permite-lhe rodar e regenerar chaves de forma segura sem causar uma interrupção do serviço. |
AZURE_OPENAI_DEPLOYMENT_ID |
Esse valor corresponde ao nome personalizado que você escolheu para sua implantação quando implantou um modelo. Esse valor pode ser encontrado em Implantações de Gerenciamento de>Recursos no portal do Azure ou, alternativamente, em Implantações de Gerenciamento>no estúdio de IA do Azure. |
AZURE_AI_SEARCH_ENDPOINT |
Esse valor pode ser encontrado na seção Visão geral ao examinar seu recurso Azure AI Search no portal do Azure. |
AZURE_AI_SEARCH_API_KEY |
Esse valor pode ser encontrado na seção Chaves de Configurações> ao examinar seu recurso Azure AI Search no portal do Azure. Você pode usar a chave de administração primária ou a chave de administração secundária. Ter sempre duas chaves permite-lhe rodar e regenerar chaves de forma segura sem causar uma interrupção do serviço. |
AZURE_AI_SEARCH_INDEX |
Esse valor corresponde ao nome do índice que você criou para armazenar seus dados. Você pode encontrá-lo na seção Visão geral ao examinar seu recurso Azure AI Search no portal do Azure. |
Variáveis de ambiente
Crie e atribua variáveis de ambiente persistentes para sua chave e endpoint.
Importante
Se você usar uma chave de API, armazene-a com segurança em outro lugar, como no Cofre de Chaves do Azure. Não inclua a chave da API diretamente no seu código e nunca a publique publicamente.
Para obter mais informações sobre segurança de serviços de IA, consulte Autenticar solicitações para serviços de IA do Azure.
setx AZURE_OPENAI_ENDPOINT REPLACE_WITH_YOUR_AOAI_ENDPOINT_VALUE_HERE
setx AZURE_OPENAI_API_KEY REPLACE_WITH_YOUR_AOAI_KEY_VALUE_HERE
setx AZURE_OPENAI_DEPLOYMENT_ID REPLACE_WITH_YOUR_AOAI_DEPLOYMENT_VALUE_HERE
setx AZURE_AI_SEARCH_ENDPOINT REPLACE_WITH_YOUR_AZURE_SEARCH_RESOURCE_VALUE_HERE
setx AZURE_AI_SEARCH_API_KEY REPLACE_WITH_YOUR_AZURE_SEARCH_RESOURCE_KEY_VALUE_HERE
setx AZURE_AI_SEARCH_INDEX REPLACE_WITH_YOUR_INDEX_NAME_HERE
Exemplo de comandos cURL
Os modelos de chat do Azure OpenAI são otimizados para trabalhar com entradas formatadas como uma conversa. A messages
variável passa por uma matriz de dicionários com diferentes papéis na conversação delineados por sistema, usuário, ferramenta e assistente. A dataSources
variável se conecta ao seu índice do Azure AI Search e permite que os modelos do Azure OpenAI respondam usando seus dados.
Para acionar uma resposta do modelo, você deve terminar com uma mensagem de usuário indicando que é a vez do assistente responder.
Gorjeta
Há vários parâmetros que você pode usar para alterar a resposta do modelo, como temperature
ou top_p
. Consulte a documentação de referência para obter mais informações.
curl -i -X POST $AZURE_OPENAI_ENDPOINT/openai/deployments/$AZURE_OPENAI_DEPLOYMENT_ID/chat/completions?api-version=2024-02-15-preview \
-H "Content-Type: application/json" \
-H "api-key: $AZURE_OPENAI_API_KEY" \
-d \
'
{
"data_sources": [
{
"type": "azure_search",
"parameters": {
"endpoint": "'$AZURE_AI_SEARCH_ENDPOINT'",
"key": "'$AZURE_AI_SEARCH_API_KEY'",
"index_name": "'$AZURE_AI_SEARCH_INDEX'"
}
}
],
"messages": [
{
"role": "user",
"content": "What are my available health plans?"
}
]
}
'
Exemplo de saída
{
"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
}
}
Converse com seu modelo usando um aplicativo Web
Para começar a conversar com o modelo do Azure OpenAI que usa seus dados, você pode implantar um aplicativo Web usando o estúdio do Azure OpenAI ou o código de exemplo que fornecemos no GitHub. Este aplicativo implanta usando o serviço de aplicativo do Azure e fornece uma interface de usuário para enviar consultas. Este aplicativo pode ser usado com modelos do Azure OpenAI que usam seus dados ou modelos que não usam seus dados. Consulte o arquivo readme no repositório para obter instruções sobre requisitos, configuração e implantação. Opcionalmente, você pode personalizar a lógica de frontend e back-end do aplicativo Web fazendo alterações no código-fonte.
Clean up resources (Limpar recursos)
Se quiser limpar e remover um recurso do Azure OpenAI ou Azure AI Search, você pode excluir o recurso ou grupo de recursos. A exclusão do grupo de recursos também exclui quaisquer outros recursos associados a ele.
- Recursos de serviços de IA do Azure
- Recursos do Azure AI Search
- Recursos do serviço de aplicativo do Azure