LangChain4j y Quarkus te permiten integrar inteligencia artificial en Java de forma sorprendentemente simple. Vamos a crear un asistente que responde preguntas: tú le preguntas algo, él responde. Sin configurar servidores de IA, sin descargar modelos manualmente, sin complicaciones.
¿Qué es LangChain4j?
LangChain4j es una librería Java para integrar modelos de lenguaje (LLMs) en tus aplicaciones. Quarkus ofrece extensiones oficiales para LangChain4j que hacen la integración muy sencilla. Por ejemplo, puedes conectar con OpenAI, Anthropic, Hugging Face y otros proveedores.
Sin embargo, en este tutorial usamos Ollama, que ejecuta modelos de lenguaje directamente en tu máquina. Es gratis, todo corre local (sin enviar datos a servidores externos), y por lo tanto no necesitas crear cuentas ni API keys. Los modelos como llama3.2 son redes neuronales entrenadas con miles de millones de textos.
Lo mejor: Dev Services levanta Ollama automáticamente.
Requisitos
- Java 17 ó 21 (soportadas por Quarkus)
- Maven 3.9 o superior
- Podman o Docker funcionando
- Quarkus CLI
¿No cumples todos los requisitos? Revisa Entorno de desarrollo ideal para Quarkus donde explicamos cómo instalar todo fácilmente.
Si usas Podman, te sugerimos revisar Usando Podman con Quarkus: la configuración esencial
💡 La primera ejecución descarga la imagen de contenedor Ollama (~6GB) y el modelo de IA (~2GB). Ten paciencia.
Crear el proyecto
quarkus create app io.quarkiverso:ia-asistente \
--extension=rest,langchain4j-ollamaEsto incluye:
- REST: para exponer el endpoint
- LangChain4j Ollama: integración con Ollama (activa Dev Services)
Entra al proyecto:
cd ia-asistentePuedes descargar el código fuente completo en github.com/quarkiverso/ia-asistente
Crear el servicio de IA
Crea el archivo src/main/java/io/quarkiverso/Asistente.java:
package io.quarkiverso;
import dev.langchain4j.service.SystemMessage;
import dev.langchain4j.service.UserMessage;
import io.quarkiverse.langchain4j.RegisterAiService;
@RegisterAiService
public interface Asistente {
@SystemMessage("{personalidad}")
String responder(@UserMessage String pregunta, String personalidad);
}Básicamente, es una interfaz con dos anotaciones:
@RegisterAiService: registra el servicio de IA@SystemMessage: define la personalidad (la recibimos como parámetro)@UserMessage: la pregunta del usuario
Como resultado, Quarkus genera la implementación automáticamente.
Crear el endpoint
Crea el archivo src/main/java/io/quarkiverso/AsistenteResource.java:
package io.quarkiverso;
import jakarta.inject.Inject;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.QueryParam;
import org.eclipse.microprofile.config.inject.ConfigProperty;
@Path("/asistente")
public class AsistenteResource {
@Inject
Asistente asistente;
@ConfigProperty(name = "personalidad")
String personalidad;
@GET
public String preguntar(@QueryParam("pregunta") String pregunta) {
return asistente.responder(pregunta, personalidad);
}
}Usamos @ConfigProperty para inyectar la personalidad desde application.properties y la pasamos al asistente.
Configurar la personalidad
Edita src/main/resources/application.properties:
# Personalidad del asistente (puedes cambiarla sin modificar codigo)
personalidad=Eres un asistente amable que responde en español de forma breve y clara.
# Otras personalidades de ejemplo:
# personalidad=Eres un experto en Java que responde con ejemplos de codigo.
# personalidad=Eres un chef que solo habla de recetas de cocina.
# personalidad=Eres un poeta que responde siempre en verso.
De esta manera, al externalizar la personalidad, puedes cambiarla sin modificar el código. El archivo tiene algunas personalidades de ejemplo comentadas, simplemente descomenta la que quieras probar.
Ejecutar
quarkus devDurante la primera ejecución verás que descarga el modelo. Esto puede tardar unos minutos dependiendo de tu conexión.
Pulling model llama3.2...Una vez listo, verás:
Dev Services for Ollama startedProbar
En otra terminal:
curl 'http://localhost:8080/asistente?pregunta=Hola'Respuesta (ejemplo):
¡Hola! ¿En qué puedo ayudarte hoy?Prueba otras preguntas:
curl 'http://localhost:8080/asistente?pregunta=Quien%20creo%20Java'curl 'http://localhost:8080/asistente?pregunta=Que%20es%20un%20microservicio'¡Tu asistente de IA con LangChain4j y Quarkus está funcionando!
¿Qué pasó por detrás?
- Quarkus detectó
langchain4j-ollamasin configuración - Dev Services levantó un contenedor con Ollama
- Descargó el modelo
llama3.2automáticamente - Tu interfaz
Asistentese conectó al modelo - Cada llamada envía la pregunta y recibe la respuesta
Todo esto sin escribir código de conexión, configurar URLs ni descargar modelos manualmente.
Configuración opcional
Además, si quieres usar un modelo diferente, edita application.properties agregando:
quarkus.langchain4j.ollama.chat-model.model-id=mistralModelos populares:
llama3.2(por defecto, equilibrado)tinyllama(ultraligero, respuestas rápidas pero simples)mistral(rápido, bueno para código)codellama(especializado en código)
Próximos pasos
- Prueba diferentes personalidades y modelos
- Explora el Dev UI en http://localhost:8080/q/dev-ui
- Agrega Swagger UI y prueba el asistente directamente desde el navegador
quarkus extension add quarkus-smallrye-openapi- http://localhost:8080/q/swagger-ui
Código fuente: github.com/quarkiverso/ia-asistente

