3 min de lectura

LangChain4j: IA generativa para desarrolladores Java

LangChain4j: IA generativa para desarrolladores Java

LangChain4j trae el poder de los LLMs al ecosistema Java. Aprende a construir aplicaciones de IA generativa de forma sencilla y efectiva.

¿Qué es LangChain4j?

LangChain4j es un framework Java que simplifica la integración con modelos de lenguaje:

  • Abstracción de modelos: OpenAI, Ollama, Azure, Anthropic, etc.
  • RAG integrado: Embeddings y vector stores
  • Agentes: Tools y function calling
  • Memoria: Conversaciones con contexto

Configuración inicial

<dependency>
    <groupId>dev.langchain4j</groupId>
    <artifactId>langchain4j</artifactId>
    <version>0.27.0</version>
</dependency>

<dependency>
    <groupId>dev.langchain4j</groupId>
    <artifactId>langchain4j-open-ai</artifactId>
    <version>0.27.0</version>
</dependency>

Primer chat con OpenAI

ChatLanguageModel model = OpenAiChatModel.builder()
    .apiKey(System.getenv("OPENAI_API_KEY"))
    .modelName("gpt-4")
    .temperature(0.7)
    .build();

String response = model.generate("Explica Kubernetes en 3 frases");
System.out.println(response);

AI Services: La forma idiomática

interface Assistant {

    @SystemMessage("Eres un experto en DevOps y Cloud Native")
    String chat(String userMessage);

    @SystemMessage("Resume el siguiente texto en máximo 3 puntos")
    String summarize(@UserMessage String text);
}

// Crear instancia
Assistant assistant = AiServices.create(Assistant.class, model);

// Usar
String response = assistant.chat("¿Cuándo usar Kubernetes vs Docker Compose?");

Modelos locales con Ollama

ChatLanguageModel localModel = OllamaChatModel.builder()
    .baseUrl("http://localhost:11434")
    .modelName("llama3")
    .temperature(0.0)
    .build();

// Ideal para desarrollo y datos sensibles
String response = localModel.generate("Genera un Dockerfile para Java 21");

RAG: Retrieval Augmented Generation

// 1. Crear embedding model
EmbeddingModel embeddingModel = OpenAiEmbeddingModel.builder()
    .apiKey(apiKey)
    .modelName("text-embedding-3-small")
    .build();

// 2. Vector store (en memoria o PostgreSQL)
EmbeddingStore<TextSegment> store = new InMemoryEmbeddingStore<>();

// 3. Cargar documentos
DocumentParser parser = new TextDocumentParser();
Document doc = FileSystemDocumentLoader.loadDocument("docs/manual.pdf", parser);

// 4. Dividir en chunks
DocumentSplitter splitter = DocumentSplitters.recursive(500, 50);
List<TextSegment> segments = splitter.split(doc);

// 5. Generar embeddings y almacenar
List<Embedding> embeddings = embeddingModel.embedAll(segments).content();
store.addAll(embeddings, segments);

// 6. Crear retriever
ContentRetriever retriever = EmbeddingStoreContentRetriever.builder()
    .embeddingStore(store)
    .embeddingModel(embeddingModel)
    .maxResults(3)
    .build();

// 7. AI Service con RAG
interface KnowledgeAssistant {
    String answer(String question);
}

KnowledgeAssistant assistant = AiServices.builder(KnowledgeAssistant.class)
    .chatLanguageModel(model)
    .contentRetriever(retriever)
    .build();

Function Calling / Tools

class WeatherTool {

    @Tool("Obtiene el clima actual de una ciudad")
    String getWeather(@P("Nombre de la ciudad") String city) {
        // Llamar a API de clima
        return weatherService.getCurrentWeather(city);
    }
}

interface WeatherAssistant {
    String chat(String message);
}

WeatherAssistant assistant = AiServices.builder(WeatherAssistant.class)
    .chatLanguageModel(model)
    .tools(new WeatherTool())
    .build();

// El modelo puede llamar a getWeather automáticamente
assistant.chat("¿Qué tiempo hace en Madrid?");

Memoria de conversación

ChatMemory memory = MessageWindowChatMemory.withMaxMessages(20);

interface ConversationalAssistant {
    String chat(@MemoryId String sessionId, String message);
}

ConversationalAssistant assistant = AiServices.builder(ConversationalAssistant.class)
    .chatLanguageModel(model)
    .chatMemoryProvider(memoryId -> memory)
    .build();

// Mantiene contexto entre mensajes
assistant.chat("user-123", "Mi nombre es Juan");
assistant.chat("user-123", "¿Cómo me llamo?"); // "Te llamas Juan"

Integración con Quarkus

@ApplicationScoped
public class AiConfig {

    @Produces
    @ApplicationScoped
    ChatLanguageModel chatModel() {
        return OpenAiChatModel.builder()
            .apiKey(ConfigProvider.getConfig().getValue("openai.api-key", String.class))
            .build();
    }
}

@Path("/api/chat")
public class ChatResource {

    @Inject
    ChatLanguageModel model;

    @POST
    public String chat(String message) {
        return model.generate(message);
    }
}

Conclusión

LangChain4j democratiza el acceso a la IA generativa para desarrolladores Java. Con su API intuitiva y soporte para múltiples proveedores, es la herramienta ideal para construir aplicaciones inteligentes en el ecosistema Java.

¿Te gustó? ¡Compártelo!

Comentarios (0)

Cargando...