ShellAgent v3.0升级方法
经过长时间更新,v0.3.0终于更新啦!在0.2.23-beta的基础上,此次更新包括
丰富Widget
支持Runninghub Widget
支持Custom Widget开发与部署
支持Web3相关Widgets
支持MyShell主站许多生产力型Widgets
丰富App模式
支持创建Twitter bot(X Agent)
丰富ShellAgent基础功能
拓展变量类型,变量支持Number, Integer, Boolean, Object和Array类型
新增Timer Transition,支持主动推送消息给用户
新增Form, Condition节点类型
Chat/IM输入支持文件上传
优化ShellAgent安装与更新
本地版改为安装包一键安装模式
支持数据的备份与恢复
支持版本更新数据一键迁移
还有
采用新版视觉风格
大量问题的修复
因为包含了非常多的功能,所以即便是我们修复了大量问题也依然还需要持续优化。同时还有不少功能仍在持续开发中。
另外有些功能的改动(尤其是Form, Condition, Chat的改动),可能会影响到您的操作习惯,我们下面会仔细介绍。
一、安装和数据迁移
安装地址:https://huggingface.co/cherway/ShellAgent/tree/main/v0.3.0
Windows用户
退出旧版ShellAgent。双击exe启动新版ShellAgent。
如果不需要旧数据,启动过程就结束了。否则请执行下面数据导入的操作
打开原ShellAgent目录,找到data文件夹,稍后复制该文件夹
新打开一个Windows窗口,地址栏输入 %APPDATA%/shellagent
复制原data文件夹,在新窗口粘贴data
刷新ShellAgent网页
Mac用户
退出旧版ShellAgent。双击dmg,拖拽到Application中,启动新版ShellAgent。
系统会阻止你打开,此时进入系统设置,点击“仍要打开”允许ShellAgent运行。
稍等十几秒。如果弹出一个包含 ShellAgent_macos_portable.dmg
文件的Finder窗口请无视它。
完成。
如果不需要旧数据,启动过程就结束了。否则请执行下面数据导入的操作
打开原ShellAgent目录,找到data文件夹,稍后复制该文件夹
新打开一个Finder窗口,command+shift+G,输入 ~/Library/Application Support/shellagent
复制原data文件夹,在新窗口粘贴data
刷新ShellAgent网页
二、新增功能使用简介
Runninghub Widget使用
Runninghub Widget非常简单
1.Settings里设置 RUNNINGHUB_API_KEY
为你在Runninghub上的API key。
2.正常添加Widget,并用输入Runninghub workflow id替代导入ComfyUI Workflow的步骤即可。
使用Runninghub Widget之后,会使用MyShell的电量,不再消耗Runninghub API调用的额度。
使用Runninghub Widget不再需要保存Bot时部署ComfyUI环境,能大大简化您的部署流程。
2. Custom Widget的开发与部署
参考ShellAgent Custom Widgets 开发
PS:仍在内测中
3. Web3功能使用介绍
4. Twitter Bot
5. 拓展变量类型
定义数组
Type选择Array后需要在Items.Type中定义数组元素的类型。
在赋值时则会显示成类似效果
定义对象
Type选择Object后需要在Properties中定义对象各成员属性的类型。
在赋值时则会展示成类似效果
6. 支持主动推送
参考主动推送消息
7. 数据的备份与恢复
备份会将工作区所有文件包含它的所有版本保存下来,其中每个App的latest会保存为一份单独的version。
在恢复时,如果是相同的App,恢复的备份也会以版本的形式出现,可以选择指定版本restore。
三、使用方式变化
所有的设计变化来源于一个原则:状态机在ShellAgent画布上的样子,应该和开发者用纸笔画的样子一致。
虽然有些功能基于人力限制我们还没法立刻实现,但我们一定会持续努力优化。
假设你希望开发一个根据用户输入不断生成图片形成一个绘本的chatbot,可能会画出下面的chatbot状态机
那么在现在的ShellAgent下它就会长这样
除了连线不太清楚,整体结构是一模一样的。
1. Form节点
为什么
我们现在把填入表单变成了一个独立的Form节点。为什么要这么做呢?或者说,为什么要删除原来的 User Input
选项呢?
有好几个原因让我们决定把它从State的 User Input: true, Source: "form"
中挪出来
非常多的新开发者不能直观地了解
User Input
和Source
两个选项的含义,它们的限制也很让人困惑,并且藏得比较深Regenerate等需求需要复制State才能实现,一个State需要打开
User Input
接受表单输入,一个State需要关掉User Input
引用变量大部分State的输入不需要考虑UI展示、校验项,而表单需要。未来也可以为Form节点做针对性的优化,包括更多表单UI的选项、表单预览等等功能。
因此我们决定让Form成为一个单独的节点,State在概念上就是一个单纯接受输入、返回输出、输出大概率会渲染一条bot消息的实体。
把 User Input
选项从 State 中删除之后,我们就可以方便的做到:
1.Regenerate
2.同时接受Form和IM输入
3.多种表单输入使用同一个State
Form的使用方式和优化
但是使用单独的Form节点也会带来一些代价,核心代价就是需要在Form节点和State节点重复创建同一个变量,并且让它们关联起来。
1.State创建变量
2.Form创建变量
3.Transition传递变量
如果不需要Regenerate,这一切在原先的方案上只需要给每个Input选择 Source: "form"
就行了,现在繁琐多了。
为了解决这个问题,我们开发了几个功能:
批量复制变量。可以变量定义直接从一个节点复制到另一个节点,这样变量新建两遍的问题就得到了缓解
使用方法:按住command/ctrl+点击Inputs/Outputs即可选择待复制的变量,command/ctrl+c复制。 再command/ctrl+点击粘贴的目的地,command/ctrl+v粘贴。
自动引用变量。在Transition里点击自动引用变量,会寻找变量名称相同的两个变量自动建立关联,减少手动赋值成本。
使用方法:在Target Inputs,为需要引用的变量切换成ref模式,右上角选择Auto ref。
[正在排期]自动创建表单变量。在Form里点击自动创建,将自动实现上述第1、第2步。
2. Chat Transition
为什么
Chat和Form有一样的问题,它让State变得更复杂也更难复用了。而且Chat输入框和Chat变量是定义在两个State中,后一个State的变量可以修改前一个State消息的样式,这非常奇怪。
但是Chat不像Form一样存在自定义Form表单,输入框只能支持:文本、音频、文件上传有限的三种操作。所以我们没有设置一个单独的IM输入State,而是设计成Transition里可以直接使用Chat的值。
使用
和Form节点一样,它也有类似的代价,但是它的代价更小,就是在Chat Transition的连线中根据需要通过Target Inputs传递相应参数即可。
1.State创建变量
2.在所有相关Chat Transition为它赋值
除了文本,你还可以通过
Payload.audio:获得用户的语音输入
Payload.files:获取用户上传的文件
Payload.file:获取用户上传的第一个文件
没有使用的Payload,其相应的选项在聊天输入框内会被禁用。
3. Condition节点
为什么
我们把原先Conditional Transition的功能也迁移成一个单独的Condition节点了。因为大部分开发者都用不到Transition的Condition条件判断,但是它使得传递Target Inputs藏在齿轮里,几乎没人愿意使用。
使用
新建Condition节点后,通过节点连接各种其他节点即可。
但是条件判断需要的变量依然需要传递给Condition节点
这里也建议使用批量复制+自动引用的方式来传递变量