Compartir a través de


Ejemplo de inteligencia artificial de PetClinic en Java en Introducción a Container Apps

El ejemplo de Spring PetClinic es una aplicación de referencia clásica que muestra el uso de Spring Boot con Java. En este tutorial se incluye una versión mejorada con inteligencia artificial basada en Azure Container Apps que amplía el tradicional sistema de administración de PetClinic con funcionalidades modernas de inteligencia artificial.

La aplicación que se compila en este tutorial es un asistente de chat de IA que usa la generación aumentada de recuperación (RAG). Para conectarse al servicio de Azure OpenAI, la aplicación utiliza los SDK de Spring AI para dar soporte a la aplicación web. Para más información sobre RAG, consulte Implementación de la generación aumentada de recuperación (RAG) con Azure OpenAI Service.

La aplicación cuenta con muchos servicios que trabajan conjuntamente para presentar las características relacionadas con la inteligencia artificial en el ejemplo de Spring PetClinic.

Arquitectura de la aplicación de inteligencia artificial en Azure Container Apps

En el diagrama siguiente se muestra la arquitectura de la aplicación de inteligencia artificial en Azure Container Apps:

Diagrama de la arquitectura de la aplicación de inteligencia artificial, que incluye un entorno de Container Apps, una puerta de enlace de API y Entra ID para la autenticación, entre otros componentes.

La puerta de enlace de API de la aplicación, que está hospedada en el entorno de Azure Container Apps, actúa como punto de entrada central para todas las solicitudes externas.

Esta puerta de enlace realiza las siguientes funciones:

  • Enruta y administra la comunicación entre los componentes de la aplicación.
  • Autentica los usuarios mediante Microsoft Entra ID.
  • Protege el acceso a Azure Container Registry y a los servicios cognitivos mediante identidades administradas.
  • Controla todas las solicitudes entrantes de los usuarios externos.

La puerta de enlace funciona en una red virtual dedicada, lo que garantiza una comunicación segura y aislada entre la aplicación y los sistemas externos.

En la siguiente tabla se describen los componentes y servicios clave que se incluyen en la aplicación:

Servicio o característica Descripción
Azure Container Apps Una plataforma de contenedor sin servidor totalmente administrada para compilar e implementar aplicaciones modernas. Controla el escalado automático, la división del tráfico y la administración de revisiones de las aplicaciones en contenedores.
Entorno de Azure Container Apps Un límite seguro alrededor de un grupo de aplicaciones de contenedor que comparten redes, escalado y configuraciones de administración. Proporciona el entorno de ejecución básico para una implementación de aplicaciones de contenedor.
Servicio Azure OpenAI Proporciona acceso de API REST a ChatGPT, incrustaciones de OpenAI y eficaces modelos de lenguaje, como GPT-4. Habilita las funcionalidades de la inteligencia artificial con características de cumplimiento y seguridad de nivel empresarial.
Azure Container Registry Un servicio privado de registro de Docker para almacenar y administrar imágenes de contenedores. Admite compilaciones automatizadas de contenedores, examen de vulnerabilidades y replicación geográfica.
Identidades administradas Proporciona a los servicios de Azure identidades administradas automáticamente en Azure AD. Elimina la necesidad de administración de credenciales, ya que permite la autenticación segura entre servicios sin que haya que almacenar credenciales en el código.
IA de primavera Marco de Spring para la ingeniería de inteligencia artificial que aplica los principios del diseño de inteligencia artificial al ecosistema de Spring. Una alternativa es Langchain4j, que es otro marco de inteligencia artificial con su propio ejemplo de PetClinic en spring-petclinic-langchain4j. Para más información, consulte Chat Client API.

Para más información sobre la infraestructura como elementos de código de la aplicación, consulte los scripts de Bicep en el repositorio Traiga su primera aplicación de IA en Azure Container Apps.

Implementación de código

En las siguientes secciones se proporciona una introducción al código que le ayudará a conocer el flujo de esta primera aplicación de inteligencia artificial.

Realización de llamadas REST

El controlador ChatClient es responsable de la comunicación con el punto de conexión del cliente de chat. La sintaxis para enviar una indicación en PetclinicChatClient.java incluye el objeto chatClient para enviar la entrada del usuario.

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

Personalizaciones de chat

La clase ChatConfiguration personaliza las solicitudes enviadas a chatClient. En la siguiente lista se describen algunos valores de configuración clave de chatClient:

  • Autenticación de conexiones: el cliente se conecta a Azure OpenAI. Se admiten tanto la autenticación mediante clave de API como la autenticación mediante identidad administrada.
  • Ubicación de los valores de configuración: en el caso de ChatModel, la implementación gpt-4o y la temperatura 0.7 se establecen en el archivo de configuración.
  • Base de datos vectorial: la base de datos vectorial almacena representaciones matemáticas de documentos de origen, conocidas como embeddings. La API de chat usa los datos vectoriales para buscar documentos relevantes para la pregunta de un usuario.
  • Indicación del sistema: personalice el comportamiento de la inteligencia artificial y mejore el rendimiento.
  • Puntos de conexión de API: las características de la aplicación personalizan los puntos de conexión de Azure Functions para que OpenAI pueda interactuar con la aplicación.
  • Asesores: los asesores proporcionan una forma flexible y eficaz de interceptar, modificar y mejorar las interacciones controladas por las inteligencia artificial en las aplicaciones de Spring.

Ejemplo

En el ejemplo de código siguiente se muestra la forma en que la clase ChatClientCustomizer carga información de configuración:

@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));
}

Puntos de conexión de API

Los beans definidos en java.util.Function son funciones definidas en el contexto de la aplicación. Estas funciones son la interfaz entre los modelos de inteligencia artificial y la aplicación de PetClinic.

Hay funciones de ejemplo en AIFunctionConfiguration.java que se comunican con la aplicación de PetClinic. Tenga en cuenta los siguientes detalles sobre estas funciones:

  • Las anotaciones @Description para las funciones ayudan a los modelos de inteligencia artificial a conocer las funciones en un lenguaje natural.
  • El cuerpo de la función varía en función de los requisitos empresariales.

Asesores

Los asesores son componentes que modifican o mejoran las indicaciones de la inteligencia artificial, que actúan como middleware para el procesamiento de indicaciones.

Esta aplicación usa dos asesores diferentes:

  • QuestionAnswerAdvisor llama a los modelos de inteligencia artificial para generar una consulta de usuario que incluya los resultados del vector de búsqueda antes de finalizar el mensaje.
  • PromptChatMemoryAdvisor agrega memoria de chat al símbolo del sistema y proporciona un historial de conversaciones al modelo de chat. Con este contexto, el modelo de inteligencia artificial no solo puede recordar el contexto del chat, sino también mejorar la calidad del mismo.

Para más información, consulte Advisors API.

Pasos siguientes