🔥 Java AI(智能体)编排开发就用 Solon Flow
本例参考 dify 的 chatFlow 的效果,模拟实现视频内容:
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; } }

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
YouTube 诞生二十周年,平台视频上传量超过 200 亿
YouTube 成立于 2005 年 2 月 14 日,4 月 24 日 UTC 时间凌晨 3 点 31 分 52 秒,联合创始人 Jawed Karim 上传了该平台的第一个视频《我在动物园(Me at the Zoo)》,虽然只有 19 秒钟,但象征着视频新时代的开始。这个由谷歌拥有的平台已经成长为一个视频内容的超级帝国。 20 年后,YouTube 公布了一系列惊人的数据: 视频上传量超过 200 亿 每天上传的视频超过 2000 万(2025 年 3 月数据) 用户平均每天发表的评论数超过 1 亿(2024 年) 创作者每天平均收到 1000 万观众的“点赞”评论 YouTube 视频每天平均获得超过 35 亿个“点赞” 为了庆祝 20 周年,YouTube 宣布了几项即将推出的新功能。在未来几周内,YouTube TV 订阅用户将能够创建自己的多视图界面,涵盖部分非体育内容,并计划在未来几个月内逐步扩大频道范围。 此外,YouTube 将在今年晚些时候向更多创作者推出“语音回复”评论的功能,此前该功能已于 2024 年在小范围内试用。 除了新功能外,YouTube 还为 20...
- 下一篇
苹果重组管理层,AI 与机器人项目分离
彭博社援引知情人士消息称,苹果计划本月晚些时候将机器人团队从约翰・贾南德雷亚(John Giannandrea)的人工智能部门迁至硬件部门,这将使该团队由负责硬件工程的高级副总裁约翰·特努斯(John Ternus)领导。这是该公司为应对人工智能困境而做出的最新举措。 据了解,贾南德雷亚之前同时管理多个项目,包括苹果的人工智能助手 Siri 和机器人团队。但由于苹果在 Siri 的功能交付上未能按时实现目标,导致公司决定对管理架构进行调整。现在,负责苹果首款空间计算设备 Vision Pro 的迈克・罗克韦尔(Mike Rockwell)将接手 Siri 团队及其未来的发展工作。这一决定旨在让贾南德雷亚能更集中精力开发新的人工智能功能。 与此同时,苹果的机器人项目也将从贾南德雷亚的管理范围中剥离,交由苹果的高级副总裁约翰・特努斯(John Ternus)负责。特努斯是苹果公司的高管之一,参与过多款重要产品的硬件开发工作,包括 iPhone 和 iPad 等。他将领导机器人项目的硬件开发工作,以加快苹果在这一领域的进展。 目前,特努斯还负责一个从事机器人和智能家居技术研发的团队,这意味着...
相关文章
文章评论
共有0条评论来说两句吧...