养虾一天(下)

0 阅读9分钟

像人类一样解决问题

到了这里,我还是没想到,龙虾到底能帮我干点什么。于是打算先试试经常被用来举例子的功能:每天播报天气预报。当然,这是一个伪需求,因为每天早上当我关掉手机闹钟,屏幕上就会自动跳出天气,何必要AI来做。

我又稍微改动一下,想让他看看我订阅的RSS有多少更新,最好还能简单汇总一下。

我订阅的内容,有一部分不能在 RSS 阅读器里查看全文,必须跳转到浏览器查看,这导致每次查看下一条信息都需要浪费几秒等待网页展现,虽然时间不长,但体验很糟。

我就问龙虾,它能不能帮我访问网页,我想让它提前把网页都看一遍,然后把内容汇总给我。在这个过程中,它先确认了运行环境是否存在Playwright (一个可以通过编程接口操作浏览器的工具)和浏览器,在发现系统中只有 Playwright 但没有浏览器的时候,它开始尝试执行npx playwright install chromium 安装浏览器,我直接打断了它,因为我知道这个方式是无法安装成功的,命令虽然正确,但由于网络原因,没配置代理是无法下载成功的。

我直接把可用的代理发给龙虾。接下来它的表现惊艳到我,让我感慨即便自己去做,也难以有更好的表现,我就在一旁静静地看它表演。

它拿到了代理,就尝试通过代理去下载浏览器,结果还是没成功。我有点惊讶,通过它执行的命令我也没看出问题。

它开始了排查,首先怀疑代理是不是有问题,从操作系统里找出一个下载工具,尝试让这个工具通过我提供的代理下载网页;又试着用代理地址中的端口找出代理程序的进程,并根据进程信息中的软件名称找到了代理软件的配置文件,逐条确认配置文件是否有问题;还尝试了通过 Python 中的请求库,通过编程的方式来使用这个代理,最后定位到是协议出了问题,我给他 socks5:// 开头的代理地址,但实际上需要 socks5h:// 协议才能访问到相应的内容,还告诉我两者的差别是 socks5h 把 dns 解析阶段也代理了。

看到这里,我已经很佩服当前AI解决问题的能力,万万没想到它还要再震惊我一下。

龙虾开始尝试用测试通过的代理去下载,没想到还是失败了,看到此处我一下子没了头绪。但它一点不慌,又试着延长超时时间,依然失败,然后它居然开始测网速,发现速度只有 50K/s,而下载量大约在100M,需要半小时才能下完。最后它竟然是去找镜像地址,跳过安装命令,用下载工具直接把浏览器给下载过来安装了。

这个任务,我是看着它一步步操作下来的,每次报错我都在想,接下来换做我会怎么做。从整体上来看,它解决问题的方式跟人类或者说至少跟我已经很像了:看到问题,根据经验推测一个合理的可能性,然后验证它,通过验证的过程逐步增加掌握的信息,并以此为依据继续推测,直到解决问题。

然而我能感受到,我们之间也存在着差异,我排查问题的时候更注重直觉,靠的是脑子里冒出来的第一反应,第一反应不对再换下一个第一反应,这也是我的大脑被“训练”得到的模型,能够快速想到出错概率最大的原因先行验证,但这种方式有个严重的缺点,就是会出现灯下黑:有时问题出就在一个很简单的点上,甚至你已经看到了这个点,但是没有认真的验证它,粗粗检查过后就把它列入了“免检”,然后开始把问题复杂化,兜兜转转一大圈,才发现问题居然出在这么个地方,最终问题也是解决了,但耗费了大量时间,还完全没有解决难题的成就感,只有“我是一个傻X”的懊恼。

而它更像是在对照着一个检查清单在做事。没有情绪、一丝不苟,该检查就检查,该验证就验证,看上去刻板、没有灵光一闪,但应检尽检、不会遗漏、不会焦躁,正是它的优势。

渠道、记忆与主动工作

其实到此为止,还没有体现出龙虾的特别,因为以上工作,换成任何一个主流AI编程工具,也都能做到,只是平时我们更多是拿他们来写代码,而不是处理这些问题,我们只是被它们编程工具的身份迷惑了,限制了自己的使用范围。不信的话,你回想一下,这些编程工具是不是也能根据提示词分解你提出的要求,能够创建和读取文件,执行一些命令行工具。

目前我看下来,龙虾类工具与AI编程工具最大的差异,体现在渠道(网关)、记忆和主动工作几方面。

渠道(网关)

前面已经提到过,我将龙虾配置成了钉钉机器人,这样,我就能通过钉钉直接与它对话,如果我想让其他人也能与我的龙虾对话,只要建一个群,再把人和龙虾都拉到那个群里。

虽然还没有试过,但是把一群不同的龙虾拉进同一个群,让他们开会协调工作应该不成问题。

不同的龙虾工具,默认支持的渠道有所差异,但可以相信,不久之后,主流的聊天工具都会被接入。

我甚至可以想象,以后用什么即时聊天工具将变得不再重要,因为借助龙虾的传话,钉钉用户将能和微信用户进行对话。

记忆

龙虾会在上下文中带上一些特定的文件,这些文件里,记忆无疑是特别重要的,但它的实现原理却并不复杂,像 CoPaw 里的 MEMORY.md,本质上就是把一些它认为重要,或者你告诉它要记住的内容,存到了这个文件里。以后与它对话的时候,它会把这个文件放到对话的上下文中,这样你就不需要反复告诉他“访问某某网站需要通过代理,代理地址是巴拉巴拉”。当然在具体实现上,各种虾又各有不同实现策略,比如有些会通过向量匹配的方式,从记忆文件里找出与当前对话关联的部分,只把这些加入对话上下文。

主动工作

看到主动工作,一开始觉得真强,居然可以自主工作了。一看实现,哈哈,原来就是定时器,谁没写过几个 crontab 啊。

就是这么朴实无华。当然配合上AI的智能和记忆,感受上,比配置 crontab 好多了。比如前面我通过对话,引导它实现了网页内容的访问,只要再加上一句“以后每天早上8:00都访问一下这个网站,并把内容总结后发到我的钉钉上”,龙虾就会自行创建一个定时器。你不需要学习 crontab 语法,只要口语化表述,什么“平日里要怎么样,周末又要怎么样”也完全不在话下。

落地场景

为了让家里人也能直观感受一下龙虾的作用,我最终把第一个落地场景放在管理小孩的作业上。

我先把家庭成员的基本情况放到了记忆中,这样我就不用反复告诉他小孩子是几年级。

然后打通了图片的识别功能,这样可以把老师发在钉钉群里的作业照片,直接发给龙虾,让它能识别清单,知道有哪些作业。

再让龙虾像管理待办一样把这些作业管起来,记录每一项是否完成。周末补习班的作业让它分配到平日里,每项作业给一个计划完成的时间。

做完这些,作业的基础数据就建立起来了。接下来就能通过定时器,让它催作业,每天特定时间往家庭群里发今天还有什么作业没完成,然后通过电脑的音响,播放语音喊孩子做作业。😂 我是魔鬼吗?

最后还解决了一个小孩子写作文的附带问题。现阶段写作文文,要球用好词好句,所以每次打完草稿都是给豆包润色,然后让孩子抄下来,这个过程中,原来有一道工序是我的工作,就是把AI生成的文章打印到纸上,再让孩子抄。于是我试着让龙虾找找局域网里的打印机,它还真找到了,还识别了型号,于是我就让它装了驱动,对接了打印功能。现在,妈妈只要把文字发给它,它就能打印出来,我就巧妙的隐身了。

打印还有个小插曲,AI可以知道打印成功,但实际打印成啥样,它是不清楚的,一开始是横着打印、然后中文显示成方块、没加边距、转换成PDF后忘记换行、字体太小等等,反正也是一路小毛病,需要用户不停告诉它问题,它自己就会试着纠正,全部纠正好,让它记住,那以后基本就能遵照执行。

我想就是因为存在这样的过程,才会叫做“养”龙虾吧。