首页 文章 精选 留言 我的

精选列表

搜索[网站开发],共10000篇文章
优秀的个人博客,低调大师

🔥 Java AI(智能体)编排开发就用 Solon Flow

本例参考 dify 的 chatFlow 的效果,模拟实现视频内容: https://www.toutiao.com/video/7455114080131482152/ Solon Flow 是一个通用流编排引擎。可用于计算(或任务)的编排场景; 可用于业务规则和决策处理型的编排场景; 可用于办公审批型(有状态、可中断,人员参与)的编排场景; 可用于长时间流程(结合自动前进,等待介入)的编排场景。同时支持:java8,java11,java17,java21,java24。 <dependency> <groupId>org.noear</groupId> <artifactId>solon-flow</artifactId> <version>最新版本</version> </dependency> 主要特点有: 使用 yaml 格式做编排 表达式与脚本自由 元信息配置,为扩展提供了无限空间(每个流程,相当于自带了元数据库) 事件广播与回调支持 支持“无状态”、“有状态”两种需求分类 驱动定制(是像 JDBC 有 MySql, PostgreSQL,还可能有 Elasticsearch) 下面提供两种处编排风格以可供参考 1、使用 “元信息” + 任务组件“ 风格 (更利于可视界面配置) id: demo1 layout: - title: "开始" type: start - title: "文件提取" meta.input: "file" # 可视界面的配置(通过元信息表示) meta.output: "fileTxt" task: @FileLoaderCom - title: "LLM" meta.model: "Qwen/Qwen2.5-72B-Instruct" # 可视界面的配置(通过元信息表示) meta.input: "fileTxt" meta.messages: - role: system content: "#角色\n你是一个数据专家,删除数据的格式整理和转换\n\n#上下文\n${fileTxt}\n\n#任务\n提取csv格式的字符串" task: @ChatModelCom - title: "参数提取器" meta.model: "Qwen/Qwen2.5-72B-Instruct" # 可视界面的配置(通过元信息表示) meta.output: "csvData" task: @ParamExtractionCom - title: "执行代码" meta.input: "csvData" task: | import com.demo.DataUtils; String json = DataUtils.csvToJson(node.meta().get("meta.input")); //转为 json 数据 String echatCode = DataUtils.jsonAsEchatCode(json); //转为 echat 图表代码 context.result = echatCode; //做为结果返回 - title: "结束" type: end 这种风格,更适合可视界面的编译。设计是,可以预选设计好很多组件,经过管理配置后,可提供界面选择。 @Component("FileLoaderCom") public class FileLoaderCom implements TaskComponent { @Override public void run(FlowContext context, Node node) throws Throwable { ... } } @Component("ChatModelCom") public class ChatModelCom implements TaskComponent { @Override public void run(FlowContext context, Node node) throws Throwable { ... } } @Component("ParamExtractionCom") public class ParamExtractionCom implements TaskComponent { @Override public void run(FlowContext context, Node node) throws Throwable { ... } } @Controller public class DemoController { @Mapping("demo") public Object input(UploadedFile attachment, String message) throws Throwable { FlowEngine flowEngine = FlowEngine.newInstance(); flowEngine.load("classpath:flow/demo1.chain.yml"); FlowContext ctx = new FlowContext(); ctx.put("file", attachment); flowEngine.eval("demo1"); return context.result; } } 2、比较原始的风格(能表达内在的大概过程): id: demo1 layout: - title: "开始" type: start - title: "文件提取" meta.input: "file" # 可视界面的配置(通过元信息表示) meta.output: "fileTxt" task: | import org.noear.solon.ai.loader.*; var loader = FileLoader.of(file); var fileTxt = loader.load(); context.put(node.meta().get("meta.output"), fileTxt); //推入上下文(后续节点可用) - title: "LLM" meta.model: "Qwen/Qwen2.5-72B-Instruct" # 可视界面的配置(通过元信息表示) meta.input: "fileTxt" meta.messages: - role: system content: "#角色\n你是一个数据专家,删除数据的格式整理和转换\n\n#上下文\n${fileTxt}\n\n#任务\n提取csv格式的字符串" task: | import com.demo.ModelUtils; //根据业务封装,可快速获取配置的模型 import com.demo.MessageUtils; //根据业务封装,可快速构建消息 var chatModel = ModelUtils.get(node.meta().get("model")); var chatMessages = MessageUtils.get(node.meta().get("messages"), context); var resp = chatModel.prompt(chatMessages).call(); context.put("resp", resp); - title: "参数提取器" meta.model: "Qwen/Qwen2.5-72B-Instruct" # 可视界面的配置(通过元信息表示) meta.output: "csvData" task: | context.put(node.meta().get("meta.output"), resp.getMessage().getContent()); - title: "执行代码" meta.input: "csvData" task: | import com.demo.DataUtils; String json = DataUtils.csvToJson(node.meta().get("meta.input")); //转为 json 数据 String echatCode = DataUtils.jsonAsEchatCode(json); //转为 echat 图表代码 context.result = echatCode; //做为结果返回 - title: "结束" type: end 这个风格比较原始,不过不需要 java 组件参与。可以像低代码一样(或可执行程序一样),直接运行配置文件。 @Controller public class DemoController { @Mapping("demo") public Object input(UploadedFile attachment, String message) throws Throwable { FlowEngine flowEngine = FlowEngine.newInstance(); flowEngine.load("classpath:flow/demo1.chain.yml"); FlowContext ctx = new FlowContext(); ctx.put("file", attachment); flowEngine.eval("demo1"); return context.result; } }

资源下载

更多资源
优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册