Compartilhar via


Exemplo de Java PetClinic AI em visão geral de aplicativos de contêiner

O exemplo Spring PetClinic é um aplicativo de referência clássico que demonstra o uso do Spring Boot com Java. Esse tutorial apresenta uma versão aprimorada por IA criada no Aplicativos de Contêiner do Azure que estende o sistema de gerenciamento tradicional da PetClinic com recursos modernos de IA.

O aplicativo que você cria nesse tutorial é um assistente de chat de IA que usa Retrieval Augmented Generation (RAG). Para se conectar ao Azure OpenAI Service, o aplicativo usa SDKs do Spring AI para dar suporte ao aplicativo Web. Para obter mais informações sobre RAG, veja Implementar a geração aumentada de recuperação (RAG) com o Serviço OpenAI do Azure.

O aplicativo apresenta muitos serviços diferentes trabalhando juntos para introduzir recursos relacionados à IA no exemplo Spring PetClinic.

Arquitetura do aplicativo de IA em aplicativos de contêiner do Azure

O diagrama a seguir mostra a arquitetura do aplicativo de IA no Aplicativos de Contêiner do Azure:

Diagrama da arquitetura do aplicativo de IA, que inclui um ambiente de aplicativos de contêiner, um gateway de API, Entra ID para autenticação e outros componentes.

O gateway de API do aplicativo, hospedado no ambiente do Aplicativos de Contêiner do Azure, serve como ponto de entrada central para todas as solicitações externas.

Esse gateway executa as seguintes funções:

  • Roteia e gerencia a comunicação entre componentes do aplicativo.
  • Autentica usuários por meio do Microsoft Entra ID.
  • Protege o acesso ao Registro de Contêiner do Azure e aos serviços cognitivos usando identidades gerenciadas.
  • Lida com todas as solicitações de usuários externos recebidas.

O gateway opera dentro de uma rede virtual dedicada, garantindo comunicação segura e isolada entre o aplicativo e sistemas externos.

A tabela a seguir descreve os principais componentes e serviços apresentados no aplicativo:

Serviço ou recurso Descrição
Aplicativos de Contêiner do Azure Uma plataforma de contêiner totalmente gerenciada e sem servidor para criar e implantar aplicativos modernos. Lida com dimensionamento automático, divisão de tráfego e gerenciamento de revisão de aplicativos em contêineres.
Ambiente de Aplicativos de Contêiner do Azure Um limite seguro em torno de um grupo de aplicativos de contêiner que compartilham configurações de rede, escala e gerenciamento. Fornece o tempo de execução fundamental para uma implantação de aplicativos de contêiner.
Serviço OpenAI do Azure Fornece acesso à API REST do ChatGPT da OpenAI, aos embeddings e a modelos de linguagem poderosos, como o GPT-4. Habilita recursos de IA com recursos de segurança e conformidade de nível empresarial.
Registro de Contêiner do Azure Um serviço de registro privado do Docker para armazenar e gerenciar imagens de contêiner. Suporta compilações automatizadas de contêineres, varredura de vulnerabilidades e replicação geográfica.
Identidades Gerenciadas Fornece serviços do Azure com identidades gerenciadas automaticamente no Azure AD. Elimina a necessidade de gerenciamento de credenciais permitindo autenticação segura de serviço para serviço sem armazenar credenciais em código.
IA de primavera Framework Spring para engenharia de IA que aplica princípios de design de IA ao ecossistema Spring. Alternativamente, Langchain4j é outra estrutura de IA com seu próprio exemplo PetClinic em spring-petclinic-langchain4j. Para obter mais informações, veja API do cliente de chat.

Para obter mais informações sobre a infraestrutura como elementos de código do aplicativo, veja os scripts bicep no repositório Traga seu primeiro aplicativo de IA para aplicativos de contêiner do Azure .

Implementação de código

As seções a seguir fornecem uma introdução ao código para ajudar você a entender o fluxo dessa primeira aplicação de IA.

Fazendo chamadas REST

O controlador ChatClient é responsável pela comunicação com o endpoint do cliente de chat. A sintaxe para enviar um prompt em PetclinicChatClient.java inclui o objeto chatClient para enviar a entrada do usuário.

return this.chatClient.prompt().user(u -> u.text(query)).call().content();

Personalizações de chat

A classe ChatConfiguration personaliza as solicitações enviadas parachatClient. A lista a seguir descreve algumas configurações principais de chatClient:

  • Autenticação de conexões: o cliente se conecta ao Azure OpenAI. Tanto a autenticação de chave de API quanto a autenticação de identidade gerenciada são suportadas.
  • Localização das definições de configuração: Para ChatModel, implantação gpt-4o e temperatura 0.7 são definidas no arquivo de configuração.
  • Banco de dados de vetores: O banco de dados de vetores armazena representações matemáticas de documentos de origem, conhecidas como embeddings. Os dados vetoriais são usados ​​pela API de chat para encontrar documentos relevantes para a pergunta de um usuário.
  • Aviso do sistema: personalize o comportamento da IA ​​e melhore o desempenho.
  • Pontos de extremidade da API: o aplicativo apresenta pontos de extremidade personalizados do Azure Functions para que o OpenAI possa interagir com o aplicativo.
  • Consultores: os consultores fornecem uma maneira flexível e poderosa de interceptar, modificar e aprimorar interações orientadas por IA em seus aplicativos Spring.

Exemplo

O exemplo de código a seguir mostra como a classe ChatClientCustomizer carrega informações de configuração:

@Bean
public ChatClientCustomizer chatClientCustomizer(VectorStore vectorStore, ChatModel model) {
    ChatMemory chatMemory = new InMemoryChatMemory();

    return b -> b.defaultSystem(systemResource)
        .defaultFunctions("listOwners", "listVets", "addPetToOwner", "addOwnerToPetclinic")
        .defaultAdvisors(new PromptChatMemoryAdvisor(chatMemory),
            new ModeledQuestionAnswerAdvisor(vectorStore, SearchRequest.defaults(), model));
}

Endpoints de API

Os beans definidos em java.util.Function são funções definidas no contexto do aplicativo. Essas funções são a interface entre os modelos de IA e o aplicativo PetClinic.

Há funções de exemplo em AIFunctionConfiguration.java que se comunicam com o aplicativo PetClinic. Tenha em mente os seguintes detalhes sobre essas funções:

  • As anotações @Description nas funções ajudam os modelos de IA a entender as funções em uma linguagem natural.
  • O corpo da função varia dependendo dos requisitos do seu negócio.

Consultores

Os consultores são componentes que modificam ou aprimoram os prompts de IA, que atuam como middleware para processamento de prompts.

Esse aplicativo usa dois consultores diferentes:

  • QuestionAnswerAdvisor chama os modelos de IA para gerar uma nova consulta de usuário que inclui os resultados do vetor de pesquisa, antes de finalizar o prompt.
  • PromptChatMemoryAdvisor adiciona memória de bate-papo ao prompt e fornece um histórico de conversas ao modelo de chat. Com esse contexto, o modelo de IA pode lembrar o contexto do bate-papo e melhorar a qualidade do chat

Para obter mais informações, veja API de consultores.

Próximas etapas