
Write HTML. Render video. Built for agents.
Solon-AI gives Java builders a unified way to call chat models, attach tools and skills, run RAG pipelines, and connect through MCP. It also includes ReAct and team-agent patterns, plus YAML flow orchestration for building agent-led apps.
Builders who are adding AI workflows to Java apps and want reusable modules for models, retrieval, tools, and agents.
You can build agent-led Java apps with shared patterns for model calls, retrieval, tools, and multi-agent coordination.
A unified LLM call interface with sync and reactive calls, tool support, skill support, and chat sessions.
Document loaders, splitters, embedding models, reranking models, and repositories for knowledge-base workflows.
Server and client support for the Model Context Protocol, including tool, resource, and prompt sharing.
ReAct agents and TeamAgent workflows for stepwise reasoning and multi-agent collaboration.
YAML-defined flow orchestration for chaining inputs, embeddings, repositories, chat, and output.
Adapters for OpenAI, Gemini, Claude, Ollama, DeepSeek, Dashscope, and other model providers.
Java LLM(tool, skill) & RAG & MCP & Agent(ReAct, Team) Application development framework
Restraint, efficiency and openness
It is the same type of development framework as LangChain, LangGraph and LlamaIndex
https://solon.noear.org/article/learn-solon-ai
Solon AI is one of the core subprojects of the Solon project. It is a full-scenario Java AI development framework, which aims to deeply integrate LLM large model, RAG knowledge base, MCP protocol and Agent collaboration choreography.
Examples of embeddings (including third-party frameworks) for solon-ai:
Support for synchronous and Reactive calls, built-in dialect adaptation, Tool, Skill, ChatSession, etc.
ChatModel chatModel = ChatModel.of("http://127.0.0.1:11434/api/chat")
.provider("ollama") //Need to specify vendor, used to identify interface style (also called dialect)
.model("qwen2.5:1.5b")
.defaultTalentAdd(new McpGatewayTalent())
.build();
// Synchronize the call and print the response message
AssistantMessage result = ChatchatModel.prompt("The weather in Hangzhou today?")
.options(op->op.toolAdd(new WeatherTools())) //Adding tools
.call()
.getMessage();
System.out.println(result);
// Stream call
chatModel.prompt("hello").stream(); //Flux<ChatEvent>, full semantic events
Talent talent = new TalentDesc("order_expert")
.description("Order Assistant")
// Dynamic admission: Activated only when "order" is mentioned
.isSupported(prompt -> prompt.getUserMessageContent().contains("order"))
// Dynamic instructions: Inject different Sops depending on whether the user is a VIP or not
.instruction(prompt -> {
if ("VIP".equals(prompt.getMeta("user_level"))) {
return "This is a VIP customer, please call fast_track_tool first.";
}
return "Process the order inquiry according to the normal process.";
})
.toolAdd(new OrderTools());
chatModel.prompt("Where is my order from yesterday?")
.options(o->o.talentAdd(talent))
.call();
It provides full-link support from DocumentLoader, DocumentSplitter, EmbeddingModel, and RerankingModel.
//Building a Knowledge Warehouse
EmbeddingModel embeddingModel = EmbeddingModel.of(apiUrl).apiKey(apiKey).provider(provider).model(model).batchSize(10).build();
RerankingModel rerankingModel = RerankingModel.of(apiUrl).apiKey(apiKey).provider(provider).model(model).build();
InMemoryRepository repository = new InMemoryRepository(TestUtils.getEmbeddingModel()); //3.初始化知识库
repository.insert(new PdfLoader(pdfUri).load());
//retrieval
List<Document> docs = repository.search(query);
//You can rearrange it if you want
docs = rerankingModel.rerank(query, docs);
//Cue enhancement is
ChatMessage message = ChatMessage.ofUserAugment(query, docs);
//Calling the llm
chatModel.prompt(message)
.call();
Deep integration with MCP protocol (MCP_2025_06_18), supporting cross-platform tool, resource, and prompt sharing.
//server
@McpServerEndpoint(channel = McpChannel.STREAMABLE, mcpEndpoint = "/mcp")
public class MyMcpServer {
@ToolMapping(description = "Checking the weather")
public String getWeather(@Param(description = "city") String location) {
return "It's sunny, 25 degrees";
}
}
//client
McpClientProvider clientProvider = McpClientProvider.builder()
.channel(McpChannel.STREAMABLE)
.url("http://localhost:8080/mcp")
.build();
The Solon AI Agent transforms reasoning logic into graph-driven collaboration flows, enabling ReAct introspective reasoning and multi-agent Team collaboration.
//Reflective intelligent agent:
ReActAgent agent = ReActAgent.of(chatModel) // 或者用 SimpleAgent.of(chatModel)
.name("weather_expert")
.description("Check the weather and provide advice")
.defaultToolAdd(weatherTool) // Inject MCP or local tools
.build();
agent.prompt("What to wear in Beijing today?").call(); // Autocomplete: Think -> Call tool -> Observe -> Summarize
// Constructing a team agent: Automatically arranging member roles through protocols
TeamAgent team = TeamAgent.of(chatModel)
.name("marketing_team")
.protocol(TeamProtocols.HIERARCHICAL) // Hierarchical collaboration (6 preset protocols)
.agentAdd(copywriterAgent) // Copywriter expert
.agentAdd(illustratorAgent) // Illustrator expert
.build();
team.prompt("Plan a promotion scheme for deep-sea mineral water").call(); // Supervisor automatically decomposes tasks and assigns them to corresponding experts .defaultToolAdd(weatherTool) // Inject MCP or local tools
The low-code flow application of Dify is simulated, and the links such as RAG, hint word enhancement and model call are YAML arranged.
id: demo1
layout:
- type: "start"
- task: "@VarInput"
meta:
message: "Solon 是谁开发的?"
- task: "@EmbeddingModel"
meta:
embeddingConfig: # "@type": "org.noear.solon.ai.embedding.EmbeddingConfig"
provider: "ollama"
model: "bge-m3"
apiUrl: "http://127.0.0.1:11434/api/embed"
- task: "@InMemoryRepository"
meta:
documentSources:
- "https://solon.noear.org/article/about?format=md"
splitPipeline:
- "org.noear.solon.ai.rag.splitter.RegexTextSplitter"
- "org.noear.solon.ai.rag.splitter.TokenSizeTextSplitter"
- task: "@ChatModel"
meta:
systemPrompt: "你是个知识库"
stream: false
chatConfig: # "@type": "org.noear.solon.ai.chat.ChatConfig"
provider: "ollama"
model: "qwen2.5:1.5b"
apiUrl: "http://127.0.0.1:11434/api/chat"
- task: "@ConsoleOutput"
# FlowEngine flowEngine = FlowEngine.newInstance();
# ...
# flowEngine.eval("demo1");
| Code repository | Description |
|---|---|
| /opensolon/solon | Solon ,Main code repository |
| /opensolon/solon-examples | Solon ,Official website supporting sample code repository |
| /opensolon/solon-ai | Solon Ai ,Code repository |
| /opensolon/solon-flow | Solon Flow ,Code repository |
| /opensolon/solon-expression | Solon Expression ,Code repository |
| /opensolon/solon-cloud | Solon Cloud ,Code repository |
| /opensolon/solon-admin | Solon Admin ,Code repository |
| /opensolon/solon-integration | Solon Integration ,Code repository |
| /opensolon/solon-java17 | Solon Java17 ,Code repository(base java17) |
| /opensolon/solon-java25 | Solon Java25 ,Code repository(base java25) |
| /opensolon/soloncode | SolonCode(Java8 impl version of "Claude Code") ,Code repository |
| /opensolon/solonclaw | SolonClaw(Java8 impl version of "OpenClaw") ,Code repository |
| /opensolon/solon-maven-plugin | Solon Maven ,Plugin code repository |
| /opensolon/solon-gradle-plugin | Solon Gradle ,Plugin code repository |
| /opensolon/solon-idea-plugin | Solon Idea ,Plugin code repository |
| /opensolon/solon-vscode-plugin | Solon VsCode ,Plugin code repository |
Solon AI is a full-scenario Java AI development framework that deeply integrates LLM large models, RAG knowledge bases, MCP protocol, and Agent collaboration orchestration. It's designed for building production-grade AI applications with Java.
Solon AI is built specifically for Java developers with seamless integration into the Java ecosystem:
Key differences:
Supported via dialect adaptation:
Add Maven dependency:
<dependency>
<groupId>org.noear</groupId>
<artifactId>solon-ai</artifactId>
</dependency>
Basic usage:
ChatModel chatModel = ChatModel.of("http://127.0.0.1:11434/api/chat")
.provider("ollama")
.model("qwen2.5:1.5b")
.build();
AssistantMessage result = chatModel.prompt("Hello").call().getMessage();
chatModel.prompt("What's the weather?")
.options(op -> op.toolAdd(new WeatherTools()))
.call();
EmbeddingModel embeddingModel = EmbeddingModel.of(apiUrl)
.apiKey(apiKey).provider(provider).model(model).build();
InMemoryRepository repository = new InMemoryRepository(embeddingModel);
repository.insert(new PdfLoader(pdfUri).load());
List<Document> docs = repository.search(query);
ChatMessage message = ChatMessage.ofUserAugment(query, docs);
chatModel.prompt(message).call();
Solon AI provides both MCP server and client:
Server:
@McpServerEndpoint(channel = McpChannel.STREAMABLE, mcpEndpoint = "/mcp")
public class MyMcpServer {
@ToolMapping(description = "Checking the weather")
public String getWeather(@Param(description = "city") String location) {
return "It's sunny, 25 degrees";
}
}
Client:
McpClientProvider client = McpClientProvider.builder()
.channel(McpChannel.STREAMABLE)
.url("http://localhost:8080/mcp")
.build();
Sign in to join the discussion.
No comments yet. Be the first to say what this is good for.

Write HTML. Render video. Built for agents.
Ultra-lightweight, open-source, self-hosted personal AI agent framework in Python with WebUI, tools, memory, MCP, multi-agent workflows, automation, and chat apps
SkillOpt is a text-space optimizer that trains reusable natural-language skills for frozen LLM agents through trajectory-driven edits, validation-gated updates, and deployable best_skill.md artifacts.

Omnigent is an open-source AI agent framework and meta-harness: orchestrate Claude Code, Codex, Cursor, Pi, and custom agents — swap harnesses without rewriting, enforce policies and sandboxing, and collaborate in real time from any device.
A theoretical reconstruction of the Claude Mythos architecture, built from first principles using the available research literature.
🕷️ An adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl!