Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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:
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óngpt-4o
y la temperatura0.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.