我们想要实现一个让ai直接操作本地主机的功能,比如打开文件、运行程序、打开网页等。
目前只有ai的文本输出,直接更改ai功能恐怕有些困难,那只有更改客户端,替换掉用户接收到ai消息之后的操作。
举例,用户要求打开微信,ai显然不能做到,但ai可以返回打开微信需要的shell命令。接下来用户可能复制此命令到shell然后运行,打开微信,那么我们省下的就是这个过程。
另一种情况,ai做出抉择,用户问下一步最好要做什么,也许会给一些选项,那么ai就要在这其中做出选择。
思路如下:
ai这边,规范ai的回复,比如要求ai只回复脚本,如果是判断抉择可以仅回复0与1之类的数字。如果回复不规范可能需要重复向ai提问,并且对提问方式稍作变化,那么这个过程也不能让用户手工完成。
而用户这边,是写个程序,检测ai的返回,比如返回shell脚本,就创建一个shell,复制内容并运行。
(虽然这样听起来风险有点大,也许应该添加脚本检测、安全检测)
思路既然很清晰了,我们就做一个试试吧。
基本逻辑:每次用户输入,将用户的输入写入请求,特定前缀下ai返回脚本,程序判断ai是否返回了纯脚本格式;如果是,判断代码语言来新建不同后缀的脚本,取出中间的脚本内容,写入新建的脚本并执行。
为了方便运行和对系统操作,我利用electron将其打包为了桌面应用。
一些添加与调整。
提示词数组:
通过获取用户首个词组,判断用户的意图,执行不同系统提示词的fetch操作,这样可以减轻提示词负担,使输出更准确,也能避免ai误判。
代码输入模式:
添加用户直接输入代码时,ai返回代码形式的完全相同的文本,然后交由程序直接执行,可以模仿命令行,也可以执行如python、javaScript等代码。目前支持python、javaScript、bash、batch四种语言。
维持终端:
程序给四种不同语言分别添加了四种维持终端不被关闭的方法,避免弹窗一闪而过。
调出历史命令:
模拟命令行,在输出框输入状态时按上下箭头可以展示不同历史信息
对话历史本地保存:
顾名思义。
错误返回:
错误返回有两种判断模式,一种输出错误的纯文本,另一种更改错误重新输出,分别应用于不同模式下,多用于自反,也可以由用户自己选择。
命令和请求中断
12月25日追加,ctrl+D中断会话和命令执行,另外圣诞节快乐。
当下效果:
系统默认的shell命令执行较好
不稳定,对ai性能有依赖
依旧不能将非默认shell命令执行结果拿到前端
12月26日追加:
改powershell为默认shell,无需打开终端即可获取执行结果,
允许ai调整代码,配合自反时可选择调整shell为bash,出错的概率大大降低
添加命令行前缀跳过ai,可这样为什么不直接用命令行呢?——如果程序能把所有shell输出都返回到或者重定向到前端,效果就会好些。现在也不算太没用,起码比ai返回命令再执行要快。
整合了历史记录和历史命令,添加了从历史记录中搜索历史命令,然后将数组倒序,这样上箭头会拿到最后一次命令。
因为这个程序不绑定某个ai,因而我认为想要这个应用强大有两点:
1、接入更多更强的api,包括ai的api,这是当然的,没什么可说。
2、建立完善的工作流 ,这才是应用的关键—— ai没有办法一次搞清楚命令的所有流程,不然就会因为ai的‘臆想’出错,需要让ai不断自反,而这个自反的流程应当适用于所有命令。
比如说,我想要ai查看文件的某个日期的记录,ai首先要找到此文件的路径(find),然后再通过此路径找到文件,再打开文件获取文件信息,再判断哪些标志了日期,再提取出日期之后的内容返回给用户。
这些过程单个交给ai都不是难事,但一次性交给ai目前是一定会出错的,我想这就是方向。
此方悬停