【ai_agent】从零写一个agent框架(五)基于egui制作一个agent/workflow在线编辑器

前言

上篇我们实现了基础节点,并暴露出grpc服务,但是手动编辑文本制作一个workflow实在强人所难。

所以本文我们做个webui自动生成workflow。

开搞之前先看看别人怎么做的。

Dify 的ui

效果如下图示:

  • 支持多种功能节点

  • 但只能打开一个节点的详细内容

  • 提供debug能力,能看到执行细节

image.png

Coze的ui

界面算是dify的升级版,一样丝滑,效果如下图示:

  • 能在编辑页直接看到每个节点的细节,但是当节点非常多的时候,非常难以操作,看的眼晕。
  • debug在每个节点中可以直接看到。

image.png

Stable diffusion 的comfyui

画风一转,是我喜欢的类型

  • 更自由的节点设计,任意扩散
  • 不再是节点间的流转,而是变量间相互链接
  • 和coze一个毛病,节点多了极难维护。

image.png

设计和目标

  • 能够看到整体节点的流转,但是每个界面可以单独打开关闭,参考dify。

  • 必须提供debug功能。最好是和coze一样直接绑定到节点上。

  • 节点的界面设计和comfyui一样是开放式的,可以随意定义。

效果预览

服务启动方法:【ai_agent】从零写一个agent框架(一)打造最强开放agent编辑框架,拳打dify,脚踩coze

操作方法:

  • 顶边控制栏 project|setting|about ,点击会在左边生成控制界面,在project界面可以加载项目的service节点。

  • 编辑窗口

    • FlowChart LLM Script Workflow 都是具体的服务节点。
    • 红色clean,清理所有的已经生成的节点
    • 红色reset,重置整个界面
    • 绿色save,保存配置,默认30s自动保存,时间在project界面可以调整。
    • 绿色debug,debug一次流程。
  • 右边上侧为所有节点列表,可以在这里打开关闭节点视图,也可以删除。

  • work-flow-view,查看节点间的流转关系

  • plan-text-view:查看执行计划,下载所有生成的节点,上传节点配置(会覆盖当前配置)。

  • 底边为日志信息,可以展开

如下窗口: image.png

关于窗口的设计

窗口的结构目前是固定的五部分,当然未来可能会更多。

  • 节点编号,描述,service类型,

  • input,输入参数结构

  • output,输出参数结构

  • goto,向那些节点流转

  • debug,调试信息

我们看一下窗口的具体定义,以openai-llm为例。在线查看,我这里也贴一下:

{"plugin_list":[{"code":"openai-LLM","class":"LLM","desc":"openai LLM chat","ui_type":"window","service_type":"openai_llm","input_vars": {"model": {"type":"string","default":"gpt-3.5-turbo","ui_type": "enum","ui_extend_enum": ["gpt-4o","gpt-4-turbo","gpt-4","gpt-3.5-turbo"]},"temperature":{"type":"f32","default": 0.7,"desc":"The randomness of the model generated responses","ui_extend_slider": {"max": 2.0,"min": 0.0,"speed": 0.01}},"max_tokens":{"type":"number","default": 512,"desc":"answer max tokens","ui_extend_slider": {"max": 512,"min": 0,"speed": 1}},"prompt":{"type":"string","default":"","ui_type":"text_edit_multi"},"query":{"type":"string","default":"","required":true},"tools":{"type": "list"},"context": {"type": "list"},"extend":{"type": "object"}},"output_vars": {"answer": "this is text","tools": [{"function_name": "tool name","args": "function call args"}]}}]
}

那么它对应展示的效果如下。

image.png

如果自己定义了一个功能视图,应该放在哪里?

所有的视图配置都在webui/server/plugin目录下,当点击project->LOAD按钮时,会默认加载这个目录下的全部配置。

代码实现

仓库地址:ai_agent/webui at main · woshihaoren4/ai_agent

  • webui本身也是一个前后端分离的项目,webui/server这个文件是一个微小的服务端,提供插件加载,debug调用的功能,通过go run main.go启动
  • webui项目是跨端的,可以当做应用打开。
  • 也可以在浏览器上打开,此时以wasm的模型运行,需要用trunk启动,trunk安装使用教程。

具体的实现就不贴了,用egui画的,顺着update往下捋就行了。

尾语

目前做的这版UI还是很简洁的,算是基本能用。

整个ai_agent在设计思路上参考了BaaS Solution,也就是说你在webui上设计好了流程后,最终拿到生产环境上用时就不需要webui的参与了,直接api调用。

当然如果你觉得界面实在丑陋到无法接受,那可以自己搞一套。

本文转自 https://juejin.cn/post/7383201975733796891,如有侵权,请联系删除。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3225800.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【线性表,线性表中的顺序表和链表】

目录 1、线性表的定义和基本操作1.1、线性表的定义1.2、线性表的基本操作 2、顺序表和链表的比较2.1、顺序表2.1.1、顺序表的定义和特点2.1.2、顺序表的实现(1)顺序表的静态分配:(2)顺序表的动态分配 2.1.3、顺序表的基…

基于正点原子的FreeRTOS笔记——队列

一、什么是队列 队列是任务到任务、任务到中断、中断到任务数据交流的一种机制。 在队列中可以存储数量有限、大小固定的数据。队列中的每一个数据叫做“队列项目”,队列能够存储“队列项目”的最大数量称为队列的长度。 在创建队列时要指定队列长度以及队列项目…

蹭一个围棋亚军!不要和低维的人说话——早读(逆天打工人爬取热门微信文章解读)

熬夜后需要补什么呢? 引言Python 代码第一篇 洞见 不要和低维的人说话(深度好文)第二篇 冲冲冲结尾 引言 昨晚真的是熬夜又想不出东西 真的头大 最近下围棋 这个棋感很好呀 我是K级选手 目前是8级 套几个buff 纯自学 为什么决定学围棋呢? 是…

翰德恩咨询赋能材料行业上市公司,共筑IPD管理体系新篇章

赋能背景概览 坐落于江苏的某材料行业领军企业,作为国内无机陶瓷膜元件及成套设备领域的佼佼者,以其庞大的生产规模、丰富的产品系列及卓越的研发实力,屹立行业之巅二十余年。公司不仅在新材料研发、技术创新、工艺设计、设备制造及整体解决…

swift与Internvl下的多模态大模型分布式微调指南(附代码和数据)

大模型相关目录 大模型,包括部署微调prompt/Agent应用开发、知识库增强、数据库增强、知识图谱增强、自然语言处理、多模态等大模型应用开发内容 从0起步,扬帆起航。 基于Dify的智能分类方案:大模型结合KNN算法(附代码&#xff…

InavFlight飞控固件学习-1《开发环境搭建》

目录 文章目录 目录摘要1.官网2.形成Linux开发环境工具2.1 简介2.2 相关工具2.2.1 Ubuntu / Debian系统配置命令2.2.2 Fedora系统配置命令2.2.3 Fedora系统配置命令 2.3 克隆存储库2.4 构建工具2.5 使用cmake2.6 构建固件2.7 清除2.8 cmake 缓存维护2.9 编译通过ninja2.10 更新…

小程序跳企业微信教程

来别急,我说几个点,你先记着, 必须真机才能测必须要企业微信里头去配置下关联到对应的小程序(文章底部有图)要同一个公司主体! 说说几个报错, 一、代码其实就这么一个,你别在微信…

virtuoso:layout如何做flat修drc

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 有些drc在virtuoso layout中修更节省时间,比如遇到一些via array需要做删改时,发现工具把via array做成了一个cell,如图。 去改cell可能会影…

高考志愿怎么选专业,哪些是热门专业?

选专业看上去非常简单,但是真正做起来的时候确实不容易,因为对于很多结束高考的学生来说,选专业就意味着他们选择自己的未来,这可是直接关系到未来的学习和职业发展,关系到将来的就业方向,再加上现在的社会…

逆向案例十一——华强北登录逆向

网址:aHR0cHM6Ly9wYXNzcG9ydC5ocWV3LmNvbS9sb2dpbg 登陆页面: 打开开发者工具会出现debugger调试: 直接使用一律不再此处暂停即可。点击登录,找到登录包。 发现有三个参数进行了加密,分别是Password,UserName和Devic…

如何修复 wxpython 事件调用?

1、问题背景 在使用 wxpython 开发 GUI 时,遇到了一个问题。当鼠标悬停在 BitmapButton 上时,会同时调用两个事件: self.Bind(wx.EVT_LEAVE_WINDOW, self.onPanelMouseLeave)self.Bind(wx.EVT_ENTER_WINDOW, self.onPanelMouseOver) 这导致…

解决U盘识别不了的一个小思路

我的U盘在自己在其他地方能正常使用,但是到了自己电脑突然就用不了了,其他设备也同样在自己电脑可以正常读写。 看了经验贴,大多是在设备管理器设置启动,但我的U盘明显不是这个问题。后面我看到一个贴子上的一个评论,想…

MQ四兄弟:如何保证消息顺序性

在当今的分布式系统架构中,消息队列(MQ)是不可或缺的组成部分。它们在确保系统组件之间高效通信方面发挥着关键作用。特别是在金融交易、物流跟踪等对消息处理顺序有严格要求的场景中,消息队列的顺序性保证显得更为重要。接下来&a…

本地电脑连接FTP服务器,显示无权限连接?

问题: 打开文档,在这一栏输入ftp服务器地址,按下回车,弹出无权限提示。 解决方案: 1、系统设置——网络和Internet——网络和共享中心 2、Internet选项 3、高级——取消“使用被动FTP”的勾选

@RequestBody注解的使用及源码解析

前言 RequestBody 注解是我们进行JavaEE开发,最常见的几个注解之一,这篇博文我们以案例和源码相结合,帮助大家更好的了解 RequestBody 注解 使用案例 1.自定义实体类 Data NoArgsConstructor AllArgsConstructor public class User {priv…

如何判断一个js对象为数组类型

如何判断一个js对象为数组类型? 能想到的最常见的intanceof是吗?开始是这么认为,但是不是哈,看下面的解释,也没有太明白,暂且记住吧 综上,判断js对象为数组的两种方式 Array.isArray([]) // trueObject.prototype.toString.call([]) ‘[object Array]’ //true

Oracle基础以及一些‘方言’(一)

1、什么是Oracle ORACLE数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是最流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的数据库之一。 ORACLE 通常应用于大型系统的数据库产品。 ORACLE 数据库是目前世界…

CSDN回顾与前行:我的创作之旅——2048天的技术成长与感悟

CSDN回顾与前行:我的创作之旅——2048天的技术成长与感悟 💖The Begin💖点点关注,收藏不迷路💖 前言 时光荏苒,岁月如梭。转眼间,从我在CSDN上写下第一篇技术博客《2-6 带头结点的链式表操作集…

从头开始学习扩散模型 Stable Diffusion

今天我们来揭开 Stable Diffusion 技术的神秘面纱。 1.稳定扩散原理 Stable Diffusion 在2022年发表,一种基于Latent Diffusion Models的新兴机器学习技术。它基于扩散过程,利用数学模型将机器学习中的高维度数据降低到低维度空间,并在该空间…

安卓 无线投屏 sink端 RTSP报 “505 RTSP Version not supported“

最近做安卓无线投屏的sink端,自己手搓RTSP协议,自己手搓容易出错,然后报了上面505,这个RTSP文档的意思是版本不一致,但是出现 "505 RTSP Version not supported"不一定是版本不一致,可能是 消息错…