Dev.to · 6 min read

Spring AI + OpenAI: Integración Completa de IA en Aplicaciones Java

Spring AI + OpenAI: Integración Completa de IA en Aplicaciones Java

Spring AI + OpenAI: Integración Completa de IA en Aplicaciones Java Introducción Spring AI es una iniciativa del ecosistema Spring que proporciona una abstracción unificada para integrar modelos de lenguaje (LLMs) en aplicaciones Java. En este artículo, exploraremos cómo construir una aplicación Spring Boot que se integra seamlessly con OpenAI, permitiendo crear aplicaciones inteligentes con conversaciones de chat, generación de embeddings y procesamiento de información en tiempo real. Durante los últimos años, la inteligencia artificial se ha convertido en un componente fundamental en el desarrollo de software. Sin embargo, integrar LLMs en aplicaciones empresariales Java ha sido un desafío debido a la falta de abstracciones estándar. Spring AI resuelve este problema proporcionando: Abstracción uniforme para múltiples proveedores de IA (OpenAI, Anthropic, Azure, Google, etc.) Soporte nativo para Spring Boot con autoconfiguration Manejo de contexto y memoria de conversaciones Integración con RAG (Retrieval-Augmented Generation) Seguridad y validación de salidas Gestión de tokens y costos ¿Qué es Spring AI? Spring AI es un framework de Spring que simplifica la integración de modelos de lenguaje en aplicaciones Java. Actúa como una capa de abstracción entre tu aplicación y los proveedores de IA, permitiendo cambiar de proveedor sin modificar tu lógica de negocio. Características Principales 1. ChatClient API La interfaz principal para interactuar con LLMs. Proporciona métodos simples para enviar prompts y recibir respuestas. 2. Soporte para Múltiples Proveedores OpenAI (GPT-4, GPT-3.5-turbo) Azure OpenAI Anthropic Claude Google Gemini Ollama (local) 3. Autoconfiguration Spring Boot detecta automáticamente tu API key y configura el cliente sin boilerplate. 4. Manejo de Contexto Mantiene el historial de conversaciones para crear experiencias de chat más naturales. 5. Embeddings y Vector Databases Soporte para generar embeddings e integrar con bases de datos vectoriales como Weaviate, Milvus y Chroma. Requisitos Previos Antes de comenzar, necesitas: Java 21+ (recomendado) Maven o Gradle para gestionar dependencias API Key de OpenAI (https://platform.openai.com/account/api-keys) IntelliJ IDEA o VS Code como IDE Maven >= 3.6 o Gradle >= 7.0 Configuración del Proyecto Paso 1: Crear el Proyecto Base mvn archetype:generate -DgroupId=pe.edu.galaxy.training \\ -DartifactId=api-spring-ai-demo-openai-v1 \\ -DarchetypeArtifactId=maven-archetype-quickstart Paso 2: Actualizar pom.xml 4.0.0 org.springframework.boot spring-boot-starter-parent 3.2.0 pe.edu.galaxy.training.java.spring.ai api-spring-ai-demo-openai-v1 1.0.0 api-spring-ai-demo-openai-v1 Spring AI + OpenAI Integration Demo 21 1.0.0-SNAPSHOT org.springframework.boot spring-boot-starter-web org.springframework.ai spring-ai-openai-spring-boot-starter ${spring-ai.version} org.projectlombok lombok true org.springframework.boot spring-boot-starter-test test org.springframework.boot spring-boot-maven-plugin org.projectlombok lombok Paso 3: Configurar application.yml spring: application: name: api-spring-ai-demo-openai-v1 ai: openai: api-key: ${OPENAI_API_KEY} chat: options: model: gpt-4o-mini temperature: 0.7 max-tokens: 2048 server: port: 8080 servlet: context-path: /api Implementación: ChatRunner Component Aquí está el corazón de nuestra integración con Spring AI. El componente ChatRunner demuestra cómo crear un cliente de chat totalmente funcional que interactúa con OpenAI a través de Spring AI. Este componente utiliza Spring Boot's CommandLineRunner para ejecutar código personalizado cuando la aplicación inicia. La magia ocurre en el método runner() donde inyectamos el ChatClient.Builder (autoconfigured por Spring AI), construimos el cliente, y realizamos una llamada a OpenAI para demostrar la integración. Sin Spring AI, necesitarías gestionar manualmente las llamadas HTTP, serialización JSON, manejo de errores, gestión de tokens y configuración de autenticación. Spring AI abstrae toda esta complejidad permitiéndote enfocarte puramente en tu lógica de negocio. El flujo es elegante: construyes el cliente, envías un prompt con el fluent API, llamas .call() para la solicitud sincrónica a OpenAI, y extraes la respuesta con .content(). package pe.edu.galaxy.training.java.spring.ai.api_spring_ai_demo_v1; import org.springframework.ai.chat.client.ChatClient; import org.springframework.boot.CommandLineRunner; import org.springframework.context.annotation.Bean; import org.springframework.stereotype.Component; @Component public class ChatRunner { @Bean public CommandLineRunner runner(ChatClient.Builder builder) { return (String[] args) -> { System.out.println(); System.out.println("Provider - OpenAI"); // Construir el cliente de chat con Spring AI ChatClient chatClient = builder.build(); // Realizar una conversación simple String response = chatClient .prompt(s: "¿Qué es Spring AI?") .call() .content(); // Mostrar la respuesta System.out.println(response); }; } } Construcción de una API REST Completa Aunque el ChatRunner es útil para pruebas iniciales, construir una API REST real es más práctico para aplicaciones en producción: package pe.edu.galaxy.training.java.spring.ai.api_spring_ai_demo_v1.controller; import lombok.RequiredArgsConstructor; import org.springframework.ai.chat.client.ChatClient; import org.springframework.web.bind.annotation.*; @RestController @RequestMapping("/chat") @RequiredArgsConstructor public class ChatController { private final ChatClient chatClient; @PostMapping("/message") public ChatResponse sendMessage(@RequestBody ChatRequest request) { String response = chatClient .prompt(request.getMessage()) .call() .content(); return new ChatResponse(response); } @GetMapping("/health") public String health() { return "Spring AI + OpenAI is running"; } } // Clases DTO record ChatRequest(String message) {} record ChatResponse(String message) {} Gestión de Errores y Validación En producción, necesitas manejar errores gracefully: @RestController @RequestMapping("/chat") @RequiredArgsConstructor public class ChatController { private final ChatClient chatClient; @PostMapping("/message") public ResponseEntity sendMessage(@RequestBody ChatRequest request) { try { if (request.message() == null || request.message().isBlank()) { return ResponseEntity.badRequest() .body(new ErrorResponse("Message cannot be empty")); } String response = chatClient .prompt(request.message()) .call() .content(); return ResponseEntity.ok(new ChatResponse(response)); } catch (Exception e) { return ResponseEntity.status(500) .body(new ErrorResponse("Error processing message: " + e.getMessage())); } } } record ErrorResponse(String error) {} Configuración de Variables de Entorno Para mantener tu API key segura, usa variables de entorno. En IntelliJ, la mejor práctica es usar VM options: VM Options (Recomendado): -Dspring.ai.openai.api-key=sk-proj-YOUR_KEY_HERE Environment Variables: OPENAI_API_KEY=sk-proj-YOUR_KEY_HERE application.yml: spring: ai: openai: api-key: ${OPENAI_API_KEY} Pruebas con curl Una vez que la aplicación está corriendo: curl -X POST http://localhost:8080/api/chat/message \\ -H "Content-Type: application/json" \\ -d '{"message":"¿Cuáles son las ventajas de Spring AI?"}' Casos de Uso Prácticos Chatbot de Soporte - Integra con bases de datos vectoriales para soporte contextual Análisis de Sentimientos - Procesa reviews automáticamente Generación de Contenido - Crea descripciones, artículos y correos Búsqueda Semántica - Implementa búsqueda inteligente con embeddings Procesamiento de Información - Extrae datos estructurados Mejores Prácticas Nunca hardcodees API keys - usa variables de entorno Implementa Rate Limiting - OpenAI tiene límites Cachea resultados - reutiliza respuestas idénticas Monitorea costos - cada llamada tiene costo Valida inputs - sanitiza prompts de usuarios Implementa timeouts - OpenAI puede ser lento Usa streaming - mejora UX para respuestas largas Conclusión Spring AI democratiza el acceso a LLMs avanzados para desarrolladores Java. La combinación de Spring Boot + Spring AI crea un stack potente para aplicaciones empresariales con IA. Ya sea chatbots, sistemas de recomendación o herramientas de análisis, Spring AI proporciona los cimientos necesarios. Próximos pasos: Explora RAG (Retrieval-Augmented Generation) Integra vector databases (Weaviate, Milvus) Implementa function calling Experimenta con diferentes modelos springai #openai #java #springboot #ia #llm #microservicios

This is a summary aggregated from Dev.to. Read the complete article on the original site:

Read full article at Dev.to

More AI & Machine Learning News