🔥 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条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Red5直播服务器,属于Java语言的直播服务器
- SpringBoot2全家桶,快速入门学习开发网站教程
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS8编译安装MySQL8.0.19
- MySQL数据库在高并发下的优化方案
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池