Solon AI
Solon AI 是一款面向 Java 开发者 的全栈智能体(Agent)应用开发框架。它秉承 Solon 家族一贯的“克制、高效、开放”理念,向上抽象统一接口屏蔽模型差异,向下深度集成向量库、MCP 协议与复杂流控制。
核心理念:
- 一份代码,跨模型运行;极致轻量,从 Java 8 纵跳至 Java 26。
核心架构图谱:
| 维度 | 核心能力 | 支持生态 |
|---|---|---|
| 接入层 | 统一 Chat / Generate / Embedding 模型接口 | OpenAI, Claude, Gemini, DeepSeek, QWen, Ollama, 豆包等... |
| 感知层 | 全链路 RAG、多格式文档加载、多向量库适配 | Chroma, Milvus, ES, Redis, Qdrant... |
| 执行层 | MCP 协议、ACP协议、Function Call、Skills 技能包 | 实时天气、数据库操作、本地 CLI、自定义 Skill |
| 大脑层 | ReAct 自省推理、多智能体(Team)协作、AI-Flow | 自动任务拆解、层级式协作、YAML 工作流 |
能用来开发什么应用?
- 通用自主智能体应用(比如:Manus、OpenOperator、Claude Code、OpenClaw)
- 智能助理与 RAG 知识库应用(比如:Dify、Coze)
- 多 Agent 协作的任务编排应用(比如:AutoGPT、MetaGPT)
- 业务驱动的受控流程审批应用(比如:智能版钉钉审批流、SAP 智能模块)
- 结构化数据处理与 ETL 应用(比如:Instabase、Unstructured.io)
- 实时数据智能看板应用(比如:Text-to-SQL 类应用)
- 自动化测试与质量保障应用(比如:GitHub Copilot Workspace)
- 低代码/可视化 AI 工作流平台(比如:LangFlow、Flowise)
- 等等...
智能体综合示例项目(可直接用于生产或定制)
SolonCode(基于 Java8 实现的 "Claude Code" 或 "OpenCode"):
SolonClaw(基于 Java8 实现的 "OpenClaw" 或 "Moltbot"):
最近更新
- 新增 solon-ai-repo-dashvector-official 插件
- 添加 solon-ai-core ChatModel.getModel 方法
- 添加 solon-ai-core ChatModel.getProvider 方法
- 添加 solon-ai-core ChatOptions.name 方便 agent 传递 name(打印日志)
- 添加 solon-ai-core 基于语义的分割器 SemanticSplitter
- 添加 solon-ai-core AiConfig.name, description 配置属性(用于管理显示)
- 添加 solon-ai-agent AgentRequest.callAsync 异步调用方法
- 添加 solon-ai-agent AgentResponse.getTrace 方法
- 添加 solon-ai-agent SummarizationInterceptor.copyWith 方法(方便复制实例并调整限制)
- 添加 solon-ai-harness HarnessProperties.models 配置属性(替代 chatModel)
- 添加 solon-ai-harness 子代理切换模型的能力
- 添加 solon-ai-harness HarnessProperties.removeModel 方法
- 优化 solon-ai-core RepositoryTool 增加重排支持
- 优化 solon-ai-core OllamaEmbeddingDialect.matched 添加 endsWith 匹配
- 优化 solon-ai-core MethodToolProvider 允许是否使用自身的 ToolProvider 内容(同时优化 AbsSkill,AbsToolProvider)
- 优化 solon-ai-agent ReActAgent 流块输出
- 优化 solon-ai-cli TodoSkill 提示词
- 调整 solon-ai-cli 取消 TerminalSkill.undo 工具(几乎用不到,由 git 控制)
- 调整 solon-ai-harness 取消 SESSION_DEFAULT(由应用侧处理)
- 调整 solon-ai-harness 去除 getVersion 方法(由应用侧定义)
- 调整 solon-ai-harness CLAUDE.md 更名为 CODE.md(内部自动生成)
- 修复 solon-ai-core MethodExecuteHandler 当 llm.args 嵌套非规范 json 时出错的问题(比如,非规范控制符)
- 修复 solon-ai-core ChatResponseDefault.isEmpty 可能识别失败的问题(不同 llm 情况较多)
- 调整 solon-ai-harness HarnessProperties.restApis 更名为 apiServers;取消 chatModel(由 models 替代)
- 修复 solon-ai-agent FileAgentSession.getSessionId 可能为空的问题
- 修复 solon-ai-skill-web CodeSearchTool 失效的问题(mcp.exa.ai 变了地址)
- 修复 solon-ai-harness TaskOp jsonSchema 问题(可能造成 multitask 调度失败)
核心模块体验
- ChatModel(通用大语言模型 LLM 调用接口)
支持同步、流式(Reactive)调用,内置方言适配,工具(Tool),技能(Skill),会话记忆(ChatSession)等能力。
ChatModel chatModel = ChatModel.of("http://127.0.0.1:11434/api/chat")
.provider("ollama") //需要指定供应商,用于识别接口风格(也称为方言)
.model("qwen2.5:1.5b")
.defaultSkillAdd(new ToolGatewaySkill())
.build();
//同步调用,并打印响应消息
AssistantMessage result = ChatchatModel.prompt("今天杭州的天气情况?")
.options(op->op.toolAdd(new WeatherTools())) //添加工具
.call()
.getMessage();
System.out.println(result);
//响应式调用
chatModel.prompt("hello").stream(); //Publisher<ChatResponse>
- Skills(Solon AI Skills 技能)
Skill skill = new SkillDesc("order_expert")
.description("订单助手")
// 动态准入:只有提到“订单”时才激活
.isSupported(prompt -> prompt.getUserMessageContent().contains("订单"))
// 动态指令:根据用户是否是 VIP 注入不同 SOP
.instruction(prompt -> {
if ("VIP".equals(prompt.getMeta("user_level"))) {
return "这是尊贵的 VIP 客户,请优先调用 fast_track_tool。";
}
return "按常规流程处理订单查询。";
})
.toolAdd(new OrderTools());
chatModel.prompt("我昨天的订单到哪了?")
.options(o->o.skillAdd(skill))
.call();
- RAG(知识库)
提供从加载(DocumentLoader)、切分(DocumentSplitter)、向量化(EmbeddingModel)到检索重排(RerankingModel)的全链路支持。
//构建知识库
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());
//检索
List<Document> docs = repository.search(query);
//如果有需要,可以重排一下
docs = rerankingModel.rerank(query, docs);
//提示语增强是
ChatMessage message = ChatMessage.ofUserAugment(query, docs);
//调用大模型
chatModel.prompt(message)
.call();
- MCP (Model Context Protocol)
深度集成 MCP 协议(MCP_2025_06_18),支持跨平台的工具、资源与提示语共享。
//服务端
@McpServerEndpoint(channel = McpChannel.STREAMABLE, mcpEndpoint = "/mcp")
public class MyMcpServer {
@ToolMapping(description = "查询天气")
public String getWeather(@Param(description = "城市") String location) {
return "晴,25度";
}
}
//客户端
McpClientProvider clientProvider = McpClientProvider.builder()
.channel(McpChannel.STREAMABLE)
.url("http://localhost:8080/mcp")
.build();
- Agent (基于计算流图的智能体体验)
Solon AI Agent 将推理逻辑转化为图驱动的协作流,支持 ReAct 自省推理和多智能体 Team 协作。
//自省智能体:
ReActAgent agent = ReActAgent.of(chatModel) // 或者用 SimpleAgent.of(chatModel)
.name("weather_expert")
.description("查询天气并提供建议")
.defaultToolAdd(weatherTool) // 注入 MCP 或本地工具
.build();
agent.prompt("今天北京适合穿什么?").call(); // 自动完成:思考 -> 调用工具 -> 观察 -> 总结
// 组建团队智能体:通过协议(Protocol)自动编排成员角色
TeamAgent team = TeamAgent.of(chatModel)
.name("marketing_team")
.protocol(TeamProtocols.HIERARCHICAL) // 层级式协作(6种预置协议)
.agentAdd(copywriterAgent) // 文案专家
.agentAdd(illustratorAgent) // 视觉专家
.build();
team.prompt("策划一个深海矿泉水的推广方案").call(); // Supervisor 自动拆解任务并分发给对应专家 .defaultToolAdd(weatherTool) // 注入 MCP 或本地工具
- Agent Harness
Solon AI Harness 是一个高性能的智能体“马具(Harness)”框架。作为底层核心,它已在 SolonCode CLI 项目中经过了三个月的深度打磨与实战验证。
HarnessProperties harnessProps = new HarnessProperties(".tmp/");
harnessProps.addTools(ToolPermission.TOOL_PI); //设定工具权限
harnessProps.addModel( null); //设定大模型配置
ChatModel chatModel = ChatModel.of(harnessProps.getChatModel()).build();
AgentSessionProvider sessionProvider = new AgentSessionProvider() {
private Map<String, AgentSession> sessionMap = new ConcurrentHashMap<>();
@Override
public AgentSession getSession(String instanceId) {
return sessionMap.computeIfAbsent(instanceId, k -> InMemoryAgentSession.of(k));
}
};
HarnessEngine engine = HarnessEngine.builder()
.properties(harnessProps)
.chatModel(chatModel)
.sessionProvider(sessionProvider)
.build();
AgentSession session = engine.getSession(HarnessEngine.SESSION_DEFAULT);
//--- 用主代理模式
engine.getMainAgent().prompt(prompt)
.session(session) //没有,则为临时会话
.options(o -> {
//按需,动态指定工作区(没有,则为默认工作区)
o.toolContextPut(HarnessEngine.ATTR_CWD, "xxx");
})
.call();
- Ai Flow(流程编排体验)
模拟 Dify 的低代码流式应用,将 RAG、提示词增强、模型调用等环节 YAML 化编排。
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");
项目仓库地址?
- gitee:gitee.com/opensolon/s…
- gitcode: gitcode.com/opensolon/s…
- github:github.com/opensolon/s…