Build AI agents with LangChain4j - basic agent, memory, tools/MCP, agentic workflows, guardrails, and observability
90
90%
Does it follow best practices?
Impact
90%
2.90xAverage score across 3 eval scenarios
Passed
No known issues
{
"context": "Tests whether the agent correctly uses LangChain4j's per-user memory isolation pattern with @MemoryId and chatMemoryProvider, implements the ChatMemoryStore persistence interface with the required methods, uses MessageWindowChatMemory with the standard builder, and sets up the Maven BOM correctly.",
"type": "weighted_checklist",
"checklist": [
{
"name": "BOM version",
"description": "pom.xml declares langchain4j-bom version 1.13.0 in dependencyManagement with type 'pom' and scope 'import'",
"max_score": 8
},
{
"name": "BOM-managed versions",
"description": "Core langchain4j dependencies in pom.xml do NOT specify a version tag (version managed by BOM)",
"max_score": 7
},
{
"name": "@MemoryId annotation",
"description": "The AI service interface method uses @MemoryId on the user/session identifier parameter",
"max_score": 12
},
{
"name": "chatMemoryProvider used",
"description": "Agent is built using .chatMemoryProvider(memoryId -> ...) rather than a single shared .chatMemory()",
"max_score": 12
},
{
"name": "MessageWindowChatMemory builder",
"description": "chatMemoryProvider creates MessageWindowChatMemory instances using the builder with .id() and .maxMessages() calls",
"max_score": 10
},
{
"name": "ChatMemoryStore interface",
"description": "Custom store class implements ChatMemoryStore (from dev.langchain4j.store.memory.chat) rather than an ad-hoc solution",
"max_score": 10
},
{
"name": "Store method signatures",
"description": "ChatMemoryStore implementation defines all three required methods: getMessages(), updateMessages(), and deleteMessages()",
"max_score": 10
},
{
"name": "@MemoryId import package",
"description": "Code imports @MemoryId from dev.langchain4j.service package",
"max_score": 8
},
{
"name": "Memory linked to store",
"description": "MessageWindowChatMemory builder calls .chatMemoryStore(store) to connect the custom persistence backend",
"max_score": 8
},
{
"name": "Per-user isolation documented",
"description": "design-notes.md mentions per-user memory isolation, the @MemoryId mechanism, or chatMemoryProvider",
"max_score": 7
},
{
"name": "AiServices builder pattern",
"description": "Agent is created using AiServices.builder(Interface.class).chatModel(model).build() pattern",
"max_score": 8
}
]
}