The latest release of the Agent Development Kit for Java, version 0.2.0, marks a significant expansion of its capabilities through the integration with the LangChain4j LLM framework, which opens it up to all the large language models supported by the framework.
Before integrating LangChain4j, ADK for Java only supported two models, Google Gemini and Anthropic Claude. This contrasted with the Python ADK, which offered broader support via via LiteLLM. With LangChain4j, Java developers can now use model from OpenAI, Anthropic, Mistral, as well as all models supported by Ollama or Docker Model Runner, like Gemma, Qwen, Phi, and others.
Google developer relations engineer Guillaume Laforge, who is also a contributor to LangChain4j and one of the developers behind its integration into the ADK, explains that using LangChain4j makes it possible mixing models together in multi-agent scenarios. This can be achieved through agent tools, which allow one agent to use another like a tool.
Mixing different models in a multi-agent scenario is quite interesting, as you can use the best model for the job. Maybe you’ll need to use a super fast model to do a simple classification task to route requests depending on the ask, while you’ll use a beefier model for the main task that requires more advanced thinking (like a Gemini 2.5 thinking model).
Laforge also provides a basic implementation with a main agent powered by Claude and a tool agent using OpenAI to deliver weather information. Once you have the two agents instantiated, let’s call them weatherAgent
and claudeModel
, you can combine them by instantiating an agent as follows:
LlmAgent agent = LlmAgent.builder()
.name("friendly-weather-app")
.description("Friend agent that knows about the weather")
.model(new LangChain4j(claudeModel, CLAUDE_3_7_SONNET_20250219))
.instruction("""
You are a friendly assistant.
If asked about the weather forecast for a city,
you MUST call the `weather-agent` function.
""")
.tools(AgentTool.create(weatherAgent))
.build();
Besides LangChain4j integration, ADK 0.2.0 introduces a range of significant enhancements aimed at improving both tooling capabilities and agent performance. On the agent tool side, it adds support for creating FunctionTools
from object instances, improves asynchronous tool operation, and provides finer programmatic control over agent execution. On the agent logic and memory side, it strengthens logic and memory handling through callback chaining and new memory management primitives offering more flexibility in controlling how agents store, retrieve, and process information.
Part of its broader Agent Development Kit, introduced earlier this year, the ADK for Java is still in its early stages. To start using ADK for Java documentation, head to the getting started guide, or fork Laforge’s template project from GitHub.