找回密码
 立即注册
首页 业界区 业界 Solon AI 正试发布(支持 java8+,RAG,MCP)

Solon AI 正试发布(支持 java8+,RAG,MCP)

柄利 4 天前
Solon AI 正试发布了(版号,随 Solon v3.3.1)。历时小半年。
1、简介

Solon AI  是一个 Java AI(智能体) 全场景应用开发框架,提供有丰富的接口能力。主要支持的的智能体开发场景有:Chat;RAG;MCP;AiFlow。
其中 ChatModel 是 Solon AI 的核心模型接口(其它暂略),通过方言的方式(ChatDialect)可适配各种环境(或平台)提供的大语言模型。
2、历时回顾

时间回顾备注2025-01 中Solon Flow 项目启动将为 Solon AI 编排提供支持2025-01 底Solon AI 项目启动2025-02 中设计 Solon AI 开放接口,和适配机制2025-03 中Solon Expression 项目启动为 Solon AI RAG 知识库,提供统一的过滤表达式支持2025-04 初Solon AI MCP 项目启动2025-05 初Solon Flow Designer 项目启动(由 广东越洋科技有限公司 供献代码)2025-05 中Solon AI Flow 项目启动使用 Solon Flow 编排 Solon AI 定制的任务组件3、体验展示


  • ChatModel
  1. public void call(ChatModel chatModel) throws IOException {
  2.     chatModel.prompt("hello").call();
  3. }
  4. public void stream(ChatModel chatModel) throws IOException {
  5.     chatModel.prompt("hello").stream();
  6. }
  7. public void toolCall(ChatModel chatModel) throws IOException {
  8.     chatModel.prompt("今天杭州的天气情况?")
  9.         .options(o -> o.toolsAdd(new WeatherTools())
  10.         .call();
  11. }
  12. public void session(ChatModel chatModel) throws IOException {
  13.     ChatSession chatSession = new ChatSessionDefault("session-1");
  14.    
  15.     chatSession.addMessage(ChatMessage.ofUser("今天杭州的天气情况?"));
  16.    
  17.     chatModel.prompt(chatSession)
  18.         .options(o -> o.toolsAdd(new WeatherTools())
  19.         .stream();
  20. }
复制代码

  • RAG
  1. public void init(ChatModel chatModel, RepositoryStorable repository) throws IOException {
  2.     PdfLoader loader = new PdfLoader(new File("lzsite.pdf")).additionalMetadata("file", "lzsite.pdf");
  3.     List<Document> documents = new SplitterPipeline()
  4.                     .next(new RegexTextSplitter("\n\n"))
  5.                     .next(new TokenSizeTextSplitter(500))
  6.                     .split(loader.load());
  7.     repository.insert(documents);
  8. }
  9. public void search(ChatModel chatModel, RepositoryStorable repository) throws IOException {
  10.     String query = "良渚遗址公司有哪些景点?"
  11.    
  12.     //知识库检索
  13.     List<Document> context = repository.search(message);
  14.    
  15.     //消息增强
  16.     ChatMessage message = ChatMessage.augment(query, context)
  17.    
  18.     chatModel.prompt(message).call();
  19. }
复制代码

  • MCP-server
  1. @McpServerEndpoint(sseEndpoint = "/mcp/sse")
  2. public class McpServerTool {
  3.     @ToolMapping(description = "查询天气预报")
  4.     public String getWeather(@Param(description = "城市位置") String location) {
  5.         return "晴,14度";
  6.     }
  7.     @ResourceMapping(uri = "config://app-version", description = "获取应用版本号", mimeType = "text/config")
  8.     public String getAppVersion() {
  9.         return "v3.2.0";
  10.     }
  11.    
  12.     @ResourceMapping(uri = "db://users/{user_id}/email", description = "根据用户ID查询邮箱")
  13.     public String getEmail(@Param(description = "用户Id") String user_id) {
  14.         return user_id + "@example.com";
  15.     }
  16.     @PromptMapping(description = "生成关于某个主题的提问")
  17.     public Collection<ChatMessage> askQuestion(@Param(description = "主题") String topic) {
  18.         return Arrays.asList(ChatMessage.ofUser("请解释一下'" + topic + "'的概念?"));
  19.     }
  20. }
复制代码

  • MCP-client
  1. public void client(ChatModel chatModel){
  2.     McpClientProvider clientProvider = McpClientProvider.builder()
  3.                 .apiUrl("http://localhost:8080/mcp/sse")
  4.                 .build();
  5.                
  6.     String rst = clientProvider.callToolAsText("getWeather", Map.of("location", "杭州"))
  7.                                .getContent();
  8.                               
  9.                               
  10.     chatModel.prompt("杭州今天的天气怎么样?")
  11.                 .options(options -> { options.toolsAdd(clientProvider))
  12.                 .call();
  13. }
复制代码

  • AiFlow
  1. id: helloworld
  2. layout:
  3.   - task: "@VarInput"
  4.     meta:
  5.       message: "你好"
  6.   - task: "@ChatModel"
  7.     meta:
  8.       chatConfig: # "@type": "org.noear.solon.ai.chat.ChatConfig"
  9.         provider: "ollama"
  10.         model: "qwen2.5:1.5b"
  11.         apiUrl: "http://127.0.0.1:11434/api/chat"
  12.   - task: "@ConsoleOutput"
  13. # flowEngine.eval("helloworld");
复制代码
4、最近更新日志


  • 新增 solon-ai-flow 插件
  • 新增 solon-ai-load-ddl 插件
  • 添加 solon-ai-core ChatMessagefUser(media) 方法
  • 添加 solon-ai-core ChatSession:addMessage(ChatPrompt) 方法
  • 添加 solon-ai-core ChatSession:addMessage(Collection) 方法
  • 添加 solon-ai-core RerankingConfig,RerankingModel toString 方法
  • 添加 solon-ai-core 模型的网络代理支持(支持简单配置,和复杂构建)
  • 添加 solon-ai-mcp 客户端的网络代理简单配置支持
  • 添加 solon-ai-mcp messageEndpoint 端点配置支持(应对特殊需求,一般自动更好)
  • 添加 solon-ai-mcp ToolMapping,ResourceMapping 注解方法对 Produces 注解的支持(用它可指定结果转换处理)
  • 添加 solon-ai-mcp ToolCallResultConverter:matched 方法
  • 添加 solon-ai-mcp 资源模板的响应适配
  • 添加 solon-ai-mcp McpClientProvider:getResourceTemplates 方法
  • 添加 solon-ai-mcp 检查原语是否存在的方法(hasTool, hasPrompt, hasResource)
  • 添加 solon-ai-mcp 提示语支持 UserMessage 拆解成多条 mcp 内容(如果,同时有媒体和文本的话)
  • 优化 solon-ai-core tool 空参数时的不同大模型兼容性
  • 优化 solon-ai-core ChatSession 的作用,为限数提供支持
  • 优化 solon-ai-core MethodFunctionTool 移除对 Mapping 注解的支持(语意更清楚,之前 MethodToolProvider 已经移除,这个落了)
  • 优化 solon-ai-core EmbeddingRequest,ImageRequest,RerankingRequest 当 resp.getError() 非 null 时,直接出抛异常
  • 优化 solon-ai-mcp 取消 MethodFunctionResource 对反回类型的限制(增加了 resultConverter 转换处理)
  • 优化 solon-ai-mcp McpServerEndpointProvider 支持零添加原语,postStart 后,可添加原语
  • 修复 solon-ai ChatRequestDefault:stream 请求 r1 时,可能会产生两次 tink 消息发射

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册