Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Neste tutorial, você criará um aplicativo RAG (recuperação de Java geração aumentada) usando o Spring Boot, Azure OpenAI e Azure AI Search e o implantará no Azure App Service. Este aplicativo demonstra como implementar uma interface de chat que recupera informações de seus próprios documentos e aproveita os serviços de IA em Azure para fornecer respostas precisas e contextualmente conscientes com citações adequadas. A solução usa identidades gerenciadas para autenticação sem senha entre serviços.
Dica
Embora este tutorial use o Spring Boot, os principais conceitos de criação de um aplicativo RAG com Azure OpenAI e Azure AI Search se aplicam a qualquer aplicativo Web Java. Se você estiver usando uma opção de hospedagem diferente no Serviço de Aplicativo, como Tomcat ou JBoss EAP, poderá adaptar os padrões de autenticação e Azure SDK uso mostrados aqui à sua estrutura preferida.
Neste tutorial, você aprenderá como:
- Implante um aplicativo Spring Boot que usa o padrão RAG com serviços de IA em Azure.
- Configure Azure OpenAI e Azure AI Search para pesquisa híbrida.
- Carregue e indexe documentos para uso em seu aplicativo alimentado por IA.
- Use identidades gerenciadas para proteger a comunicação serviço a serviço.
- Teste sua implementação de RAG localmente com serviços de produção.
Visão geral da arquitetura
Antes de começar a implantação, é útil entender a arquitetura do aplicativo que você criará. O diagrama a seguir é do Custom RAG pattern para Azure AI Search:
Neste tutorial, o aplicativo Blazer no Serviço de Aplicativo cuida da experiência do aplicativo e do servidor de aplicativos. No entanto, ele não faz uma consulta de conhecimento separada para Azure AI Search. Instrui o Azure OpenAI a realizar a consulta de conhecimento, especificando o Azure AI Search como a fonte de dados. Essa arquitetura oferece várias vantagens principais:
- Vectorização Integrada: as funcionalidades de vetorização integrada do Azure AI Search facilitam a rápida ingestão de todos os documentos para pesquisa, sem exigir mais código para gerar incorporações.
- Simplified API Access: ao usar o padrão Azure OpenAI On Your Data com o Azure AI Search como fonte de dados para completions do Azure OpenAI, não é necessário implementar a geração de embeddings ou a pesquisa vetorial complexa. É apenas uma chamada à API e o Azure OpenAI gerencia tudo, incluindo ajuste de prompts e otimização de consultas.
- Capacidades Avançadas de Pesquisa: A vetorização integrada fornece tudo o que é necessário para uma pesquisa híbrida avançada com reranqueamento semântico, que combina os pontos fortes da correspondência de palavras-chave, da similaridade vetorial e da classificação impulsionada por IA.
- Suporte completo à citação: as respostas incluem automaticamente citações a documentos de origem, tornando as informações verificáveis e rastreáveis.
Pré-requisitos
- Uma conta Azure com uma assinatura ativa - Criar uma conta gratuita.
- GitHub conta para usar GitHub Codespaces – Aprende mais sobre GitHub Codespaces.
1. Abra o exemplo com codespaces
A maneira mais fácil de começar é usando GitHub Codespaces, que fornece um ambiente de desenvolvimento completo com todas as ferramentas necessárias pré-instaladas.
Navegue até o repositório GitHub em https://github.com/Azure-Samples/app-service-rag-openai-ai-search-java.
Selecione o botão Código , selecione a guia Codespaces e clique em Criar codespace na principal.
Aguarde alguns instantes para que o codespace seja inicializado. Quando estiver pronto, você verá um ambiente do VS Code totalmente configurado em seu navegador.
2. Implantar a arquitetura de exemplo
No terminal, faça logon no Azure usando Azure Developer CLI:
azd auth loginSiga as instruções para concluir o processo de autenticação.
Provisione os recursos Azure com o modelo do AZD:
azd provisionQuando solicitado, dê as seguintes respostas:
Pergunta Resposta Insira um novo nome de ambiente: Digite um nome exclusivo. Selecione uma assinatura Azure a ser usada: Selecione a assinatura. Escolha um grupo de recursos a ser usado: Selecione Criar um grupo de recursos. Selecione um local para criar o grupo de recursos em: Selecione qualquer região. Os recursos serão, de fato, criados no Leste dos EUA 2. Insira um nome para o novo grupo de recursos: Digite ENTER. Aguarde até que a implantação seja concluída. Esse processo será:
- Crie todos os recursos de Azure necessários.
- Implante o aplicativo para Azure App Service.
- Configure a autenticação de serviço a serviço segura usando identidades gerenciadas.
- Configure as atribuições de função necessárias para acesso seguro entre os serviços.
Observação
Para saber mais sobre como as identidades gerenciadas funcionam, consulte O que são identidades gerenciadas para recursos Azure? e Como usar identidades gerenciadas com o Serviço de Aplicativo.
Após a implantação bem-sucedida, você verá uma URL para seu aplicativo implantado. Anote essa URL, mas ainda não a acesse porque você ainda precisa configurar o índice de pesquisa.
3. Carregar documentos e criar um índice de pesquisa
Agora que a infraestrutura está implantada, você precisa carregar documentos e criar um índice de pesquisa que o aplicativo usará:
No portal Azure, navegue até a conta de armazenamento que foi criada pela implantação. O nome começará com o nome do ambiente fornecido anteriormente.
SelecioneContêineres de > de Dados no menu de navegação à esquerda e abra o contêiner de documentos.
Carregue documentos de exemplo clicando em Carregar. Você pode usar os documentos de exemplo da pasta
sample-docsno repositório ou seus próprios arquivos PDF, Word ou texto.
Navegue até o serviço Azure AI Search no portal do Azure.
Selecione Importar dados (novo) para iniciar o processo de criação de um índice de pesquisa.
Na etapa Conectar-se aos seus dados :
- Selecione Azure Blob Storage como a Fonte de Dados.
- Selecione RAG.
- Escolha sua conta de armazenamento e o contêiner de documentos .
- Selecione Autenticar usando a identidade gerenciada.
- Selecione Próximo.
Na etapa Vetorizar seu texto :
- Selecione seu serviço Azure OpenAI.
- Escolha text-embedding-ada-002 como o modelo de inserção. O template AZD já implementou este modelo para você.
- Selecione a identidade atribuída pelo sistema para autenticação.
- Selecione a caixa de seleção de confirmação para custos adicionais.
- Selecione Próximo.
Dica
Saiba mais sobre Pesquisa vetorial no Azure AI Search e incorporações de texto no Azure OpenAI.
Na etapa Vetorizar e enriquecer suas imagens :
- Mantenha as configurações padrão.
- Selecione Próximo.
Na etapa configurações avançadas :
- Verifique se Habilitar o classificador semântico está selecionado.
- (Opcional) Selecione uma agenda de indexação. Isso é útil se você quiser atualizar seu índice regularmente com as alterações de arquivo mais recentes.
- Selecione Próximo.
Na etapa Examinar e criar :
- Copie o valor do prefixo de nome de objetos. É o nome do índice de pesquisa.
- Selecione Criar para iniciar o processo de indexação.
Aguarde a conclusão do processo de indexação. Isso pode levar alguns minutos dependendo do tamanho e do número de seus documentos.
Para testar a importação de dados, selecione Iniciar a pesquisa e tente uma consulta de pesquisa como "Fale-me sobre sua empresa".
De volta ao terminal do Codespace, defina o nome do índice de pesquisa como uma variável de ambiente do AZD:
azd env set SEARCH_INDEX_NAME <your-search-index-name>Substitua
<your-search-index-name>pelo nome do índice copiado anteriormente. O AZD usa essa variável nas implantações seguintes para definir a configuração do aplicativo do Serviço de Aplicativo.
4. Testar o aplicativo e implantar
Se você preferir testar o aplicativo localmente antes ou depois da implantação, poderá executá-lo diretamente do seu Codespace:
No terminal do Codespace, obtenha os valores de ambiente do AZD:
azd env get-valuesAbra src/main/resources/application.properties. Usando a saída do terminal, atualize os seguintes valores nos respectivos espaços reservados
<input-manually-for-local-testing>:azure.openai.endpointazure.search.urlazure.search.index.name
Entre no Azure com o Azure CLI:
az loginIsso permite que a biblioteca de clientes do Azure Identity no código de exemplo receba um token de autenticação para o usuário conectado.
Execute o aplicativo localmente:
mvn spring-boot:runQuando você vir que seu aplicativo em execução na porta 8080 está disponível, selecione Abrir no Navegador.
Tente fazer algumas perguntas na interface de chat. Se você receber uma resposta, seu aplicativo estará se conectando com êxito ao recurso Azure OpenAI.
Interrompa o servidor de desenvolvimento com Ctrl+C.
Aplique a nova configuração de
SEARCH_INDEX_NAMEno Azure e implante o código de aplicativo de exemplo:azd up
5. Testar o aplicativo RAG implantado
Com o aplicativo totalmente implantado e configurado, agora você pode testar a funcionalidade rag:
Abra a URL do aplicativo fornecida no final da implantação.
Você vê uma interface de chat em que pode inserir perguntas sobre o conteúdo dos documentos carregados.
Tente fazer perguntas específicas ao conteúdo de seus documentos. Por exemplo, se você carregou os documentos na pasta sample-docs , poderá experimentar estas perguntas:
- Como a Contoso usa meus dados pessoais?
- Como você solicita uma garantia?
Observe como as respostas incluem citações que fazem referência aos documentos de origem. Essas citações ajudam os usuários a verificar a precisão das informações e encontrar mais detalhes no material de origem.
Teste os recursos de pesquisa híbrida fazendo perguntas que podem se beneficiar de diferentes abordagens de pesquisa:
- Perguntas com terminologia específica (boa para pesquisa de palavra-chave).
- Perguntas sobre conceitos que podem ser descritos usando termos diferentes (bom para pesquisa de vetor).
- Perguntas complexas que exigem o contexto de compreensão (bom para classificação semântica).
Limpar os recursos
Quando terminar de usar o aplicativo, você poderá excluir todos os recursos para evitar incorrer em custos adicionais:
azd down --purge
Esse comando exclui todos os recursos associados ao seu aplicativo.
Perguntas frequentes
- Como o código de exemplo recupera citações das compleções de chat do Azure OpenAI?
- Qual é a vantagem de usar identidades gerenciadas nesta solução?
- Como a identidade gerenciada atribuída pelo sistema é usada nesta arquitetura e aplicativo de exemplo?
- Como a pesquisa híbrida com o classificador semântico é implementada no aplicativo de exemplo?
- Por que todos os recursos são criados no East US 2?
- Não posso usar meus próprios modelos OpenAI em vez daqueles fornecidos por Azure?
- Como posso melhorar a qualidade das respostas?
Como o código de exemplo recupera citações dos completamentos de chat do OpenAI no Azure?
O exemplo recupera citações usando a AzureSearchChatExtensionConfiguration fonte de dados para o cliente de chat. Quando uma conclusão de chat é solicitada, a resposta inclui um Citations objeto dentro do contexto da mensagem. O código extrai essas citações da seguinte maneira:
public static ChatResponse fromChatCompletions(ChatCompletions completions) {
ChatResponse response = new ChatResponse();
if (completions.getChoices() != null && !completions.getChoices().isEmpty()) {
var message = completions.getChoices().get(0).getMessage();
if (message != null) {
response.setContent(message.getContent());
if (message.getContext() != null && message.getContext().getCitations() != null) {
var azureCitations = message.getContext().getCitations();
for (int i = 0; i < azureCitations.size(); i++) {
var azureCitation = azureCitations.get(i);
Citation citation = new Citation();
citation.setIndex(i + 1);
citation.setTitle(azureCitation.getTitle());
citation.setContent(azureCitation.getContent());
citation.setFilePath(azureCitation.getFilepath());
citation.setUrl(azureCitation.getUrl());
response.getCitations().add(citation);
}
}
}
}
return response;
}
Na resposta de chat, o conteúdo usa a notação [doc#] para referenciar a citação correspondente na lista, permitindo que os usuários rastreiem informações de volta para os documentos originais. Para obter mais informações, consulte:
Qual é a vantagem de usar identidades gerenciadas nesta solução?
As identidades gerenciadas eliminam a necessidade de armazenar credenciais em seu código ou configuração. Usando identidades gerenciadas, o aplicativo pode acessar com segurança Azure serviços como Azure OpenAI e Azure AI Search sem gerenciar segredos. Essa abordagem segue os princípios de segurança Zero Trust e reduz o risco de exposição de credenciais.
Como a identidade gerenciada atribuída pelo sistema é usada nesta arquitetura e aplicativo de exemplo?
A implantação do AZD cria identidades gerenciadas atribuídas pelo sistema para Azure App Service, Azure OpenAI e Azure AI Search. Ele também faz as respectivas atribuições de função para cada uma delas (consulte o arquivo main.bicep ). Para obter informações sobre as atribuições de função necessárias, consulte Rede e a configuração de acesso para Azure OpenAI nos Seus Dados.
No aplicativo de Java de exemplo, o Azure SDKs usar essa identidade gerenciada para autenticação segura, portanto, você não precisa armazenar credenciais ou segredos em qualquer lugar. Por exemplo, o OpenAIAsyncClient é inicializado com DefaultAzureCredential, que usa automaticamente a identidade gerenciada ao executar em Azure:
@Bean
public TokenCredential tokenCredential() {
return new DefaultAzureCredentialBuilder().build();
}
@Bean
public OpenAIAsyncClient openAIClient(TokenCredential tokenCredential) {
return new OpenAIClientBuilder()
.endpoint(openAiEndpoint)
.credential(tokenCredential)
.buildAsyncClient();
}
Da mesma forma, ao configurar a fonte de dados para Azure AI Search, a identidade gerenciada é especificada para autenticação:
AzureSearchChatExtensionConfiguration searchConfiguration =
new AzureSearchChatExtensionConfiguration(
new AzureSearchChatExtensionParameters(appSettings.getSearch().getUrl(), appSettings.getSearch().getIndex().getName())
.setAuthentication(new OnYourDataSystemAssignedManagedIdentityAuthenticationOptions())
// ...
);
Essa configuração permite uma comunicação segura e sem senha entre seu aplicativo Spring Boot e serviços de Azure, seguindo as práticas recomendadas para Zero Trust segurança. Saiba mais sobre DefaultAzureCredential e a biblioteca de clientes Azure Identity para Java.
Como a pesquisa híbrida com o classificador semântico é implementada no aplicativo de exemplo?
O aplicativo de exemplo configura a pesquisa híbrida com classificação semântica usando os SDKs Azure OpenAI e Azure AI Search Java. No back-end, a fonte de dados é configurada da seguinte maneira:
AzureSearchChatExtensionParameters parameters = new AzureSearchChatExtensionParameters(
appSettings.getSearch().getUrl(),
appSettings.getSearch().getIndex().getName())
// ...
.setQueryType(AzureSearchQueryType.VECTOR_SEMANTIC_HYBRID)
.setEmbeddingDependency(new OnYourDataDeploymentNameVectorizationSource(appSettings.getOpenai().getEmbedding().getDeployment()))
.setSemanticConfiguration(appSettings.getSearch().getIndex().getName() + "-semantic-configuration");
Essa configuração permite que o aplicativo combine pesquisa de vetor (similaridade semântica), correspondência de palavra-chave e classificação semântica em uma única consulta. O classificador semântico reorganiza os resultados para retornar as respostas mais relevantes e contextualmente apropriadas, que são usadas por Azure OpenAI para gerar respostas.
O nome da configuração semântica é definido automaticamente pelo processo de vetorização integrado. Ele usa o nome do índice de pesquisa como o prefixo e acrescenta -semantic-configuration como o sufixo. Isso garante que a configuração semântica esteja associada exclusivamente ao índice correspondente e siga uma convenção de nomenclatura consistente.
Por que todos os recursos são criados no East US 2?
O exemplo usa os modelos gpt-4o-mini e text-embedding-ada-002 , ambos disponíveis com o tipo de implantação Standard no Leste dos EUA 2. Esses modelos também são escolhidos porque não estão planejados para serem desativados em breve, proporcionando estabilidade para a implantação do exemplo. Os tipos de disponibilidade e implantação do modelo podem variar de acordo com a região, portanto, o Leste dos EUA 2 foi selecionado para garantir que o exemplo funcione imediatamente. Se você quiser usar uma região ou modelos diferentes, selecione modelos disponíveis para o mesmo tipo de implantação na mesma região. Ao escolher seus próprios modelos, verifique as datas de disponibilidade e de aposentadoria para evitar interrupções.
- Disponibilidade do modelo: modelos Azure OpenAI Service
- Datas de desativação do modelo: Obsolescências e desativações do modelo do Azure OpenAI Service.
Posso usar meus próprios modelos OpenAI em vez dos fornecidos pelo Azure?
Essa solução foi projetada para trabalhar com Azure OpenAI Service. Embora você possa modificar o código para usar outros modelos openai, você perderia os recursos de segurança integrados, o suporte à identidade gerenciada e a integração perfeita com Azure AI Search que essa solução fornece.
Como posso melhorar a qualidade das respostas?
Você pode melhorar a qualidade da resposta:
- Carregando documentos de maior qualidade e mais relevantes.
- Ajustando estratégias de fragmentação no pipeline de indexação do Azure AI Search. No entanto, você não pode personalizar o agrupamento com a vetorização integrada mostrada neste tutorial.
- Experimentação de modelos de prompt diferentes no código do aplicativo.
- Ajuste fino da pesquisa com outras propriedades na classe AzureSearchChatExtensionParameters.
- Usando modelos Azure OpenAI mais especializados para o seu domínio específico.