
Langchain4j Ai Services Patterns
Bootstrap LangChain4j AiServices interfaces in Java with chat models, memory windows, and production-oriented patterns instead of hand-rolling HTTP to OpenAI.
Overview
langchain4j-ai-services-patterns is an agent skill for the Build phase that teaches production-ready LangChain4j AiServices patterns for Java chat and memory-backed assistants.
Install
npx skills add https://github.com/giuseppe-trisciuoglio/developer-kit --skill langchain4j-ai-services-patternsWhat is this skill?
- Production-oriented LangChain4j AiServices examples from basic stateless chat to memory-backed assistants
- Demonstrates OpenAiChatModel builder with env-based API keys, model names, and temperature tuning
- Stateful pattern uses MessageWindowChatMemory for multi-turn windows (e.g. 10-message history)
- Interface-first design: declare Java interfaces with @UserMessage-style contracts and let AiServices generate implementa
- Examples include a 10-message MessageWindowChatMemory scenario for stateful assistants
Adoption & trust: 1.2k installs on skills.sh; 271 GitHub stars; 3/3 security scanners passed (skills.sh audits).
What problem does it solve?
You are wiring LLMs into a Java backend but lack copy-paste-safe AiServices, memory, and OpenAiChatModel setup examples.
Who is it for?
Java developers adding LangChain4j to APIs, workers, or agent backends who want interface-first LLM integration.
Skip if: Python LangChain users, frontend-only chat UIs without server code, or teams avoiding JVM stacks entirely.
When should I use this skill?
Implementing or refactoring Java backends that should use LangChain4j AiServices, chat models, and bounded conversation memory.
What do I get? / Deliverables
You can implement interface-driven AI services with configured chat models and optional message-window memory ready to drop into a JVM project.
- Java interface + AiServices builder examples for stateless and memory-backed chat
- Configured OpenAiChatModel builder snippets ready to adapt
Recommended Skills
Journey fit
AI service interfaces are implemented during backend build when wiring LLM providers into Spring or plain Java services. Examples center on OpenAiChatModel, AiServices.builder, and MessageWindowChatMemory—server-side integration code, not frontend UI.
How it compares
Curated LangChain4j code patterns—not generic Spring AI docs or an MCP tool server.
Common Questions / FAQ
Who is langchain4j-ai-services-patterns for?
Solo and indie JVM builders integrating OpenAI-compatible models via LangChain4j AiServices in APIs or automation services.
When should I use langchain4j-ai-services-patterns?
Use it in Build/backend while implementing chat endpoints, assistants with session memory, or refactoring ad-hoc HTTP LLM calls into AiServices interfaces.
Is langchain4j-ai-services-patterns safe to install?
Examples use environment variables for API keys; review the Security Audits panel on this page and never commit real keys into generated code.
SKILL.md
READMESKILL.md - Langchain4j Ai Services Patterns
# LangChain4j AI Services - Practical Examples This document provides practical, production-ready examples for LangChain4j AI Services patterns. ## 1. Basic Chat Interface **Scenario**: Simple conversational interface without memory. ```java import dev.langchain4j.service.AiServices; import dev.langchain4j.service.UserMessage; import dev.langchain4j.model.openai.OpenAiChatModel; interface SimpleChat { String chat(String userMessage); } public class BasicChatExample { public static void main(String[] args) { var chatModel = OpenAiChatModel.builder() .apiKey(System.getenv("OPENAI_API_KEY")) .modelName("gpt-4o-mini") .temperature(0.7) .build(); var chat = AiServices.builder(SimpleChat.class) .chatModel(chatModel) .build(); String response = chat.chat("What is Spring Boot?"); System.out.println(response); } } ``` ## 2. Stateful Assistant with Memory **Scenario**: Multi-turn conversation with 10-message history. ```java import dev.langchain4j.service.AiServices; import dev.langchain4j.memory.chat.MessageWindowChatMemory; import dev.langchain4j.model.openai.OpenAiChatModel; interface ConversationalAssistant { String chat(String userMessage); } public class StatefulAssistantExample { public static void main(String[] args) { var chatModel = OpenAiChatModel.builder() .apiKey(System.getenv("OPENAI_API_KEY")) .modelName("gpt-4o-mini") .build(); var assistant = AiServices.builder(ConversationalAssistant.class) .chatModel(chatModel) .chatMemory(MessageWindowChatMemory.withMaxMessages(10)) .build(); // Multi-turn conversation System.out.println(assistant.chat("My name is Alice")); System.out.println(assistant.chat("What is my name?")); // Remembers: "Your name is Alice" System.out.println(assistant.chat("What year was Spring Boot released?")); // Answers: "2014" System.out.println(assistant.chat("Tell me more about it")); // Context aware } } ``` ## 3. Multi-User Memory with `@`MemoryId **Scenario**: Separate conversation history per user. ```java import dev.langchain4j.service.AiServices; import dev.langchain4j.service.MemoryId; import dev.langchain4j.memory.chat.MessageWindowChatMemory; import dev.langchain4j.model.openai.OpenAiChatModel; interface MultiUserAssistant { String chat(@MemoryId int userId, String userMessage); } public class MultiUserMemoryExample { public static void main(String[] args) { var chatModel = OpenAiChatModel.builder() .apiKey(System.getenv("OPENAI_API_KEY")) .modelName("gpt-4o-mini") .build(); var assistant = AiServices.builder(MultiUserAssistant.class) .chatModel(chatModel) .chatMemoryProvider(memoryId -> MessageWindowChatMemory.withMaxMessages(20)) .build(); // User 1 conversation System.out.println(assistant.chat(1, "I like Java")); System.out.println(assistant.chat(1, "What language do I prefer?")); // Java // User 2 conversation - separate memory System.out.println(assistant.chat(2, "I prefer Python")); System.out.println(assistant.chat(2, "What language do I prefer?")); // Python // User 1 - still remembers Java System.out.println(assistant.chat(1, "What about me?")); // Java } } ``` ## 4. System Message & Template Variables **Scenario**: Configurable system prompt with dynamic template variables. ```java import dev.langchain4j.service.AiServices; import dev.langchain4j.service.SystemMessage; import dev.langchain4j.service.UserMessage; import dev.langchain4j.service.V; import dev.langchain4j.model.openai.OpenAiChatModel; interface TemplatedAssistant { @SystemMessage("You are a {{role}} expert. Be concise and professional.") String chat(@V("role") String r