AI写作外挂开发随笔

参加西北工业大学第二届未来AI大师国际夏令营,做出的软件 —— AI 写作外挂,获第一名,已开源。

只想看最终的软件不想听流水账的可以跳转软件介绍

契机

参加过第一届,是线下的,第二届是线上了,感觉会不一样,就想着报名。不过不知道参加过一次会不会不让重复参加,不过还是报名了。

报名的时候分为两个组,启蒙探索和竞赛创新。启蒙探索主要是听专家讲座,这个我在第一届也听过很多,而且变成线上的夏令营,都是讲座感觉效果不会很好。于是选择竞赛创新组。但是竞赛这个词很是令人害怕,怕自己根本完不成任务,最后咬咬牙还是选择了这个。

竞赛创新组里面又分为两个组别,A 组是基础组,做出一个 PPT 产品,主要考察创意,不用实现。B 组为进阶组,不仅要有创意,还要做出一个完整的产品,相当于一个完整的项目流程。

那必然秒选 B 呀,不然我这一身的代码功夫无处施展,可以借此机会完整体验一把项目开发过程。

分组是需要自己组队,

——————分割线——————

上面的内容是 8 月 1 号写的,写了一丢丢,我才不说是因为我懒加上有拖延症所以没写完呢,肯定是因为证书和奖品没有发下来,写了文章也不会发出来所以推到了现在。没错,今天拿了证书和纪念奖品,如下:

我怀疑他是不知道我名字怎么打出来,所以空着,等打印出来证书手写上去的。

一个长但不是很长的鼠标垫,舍友建议配个键盘放上去,就是为了这点醋才包的饺子对吧。

时隔一个多月,捡回逝去的记忆,9 月 13 号继续写。

——————分割线——————

分组是需要自己组队的,然而我是肯定不会主动去找别人组队的,也没有认识的人找我组队。经过上个学期小组作孽的摧残,对组队的期望不大,自己干自己的,没问题!

创意

众里寻它千百度

首先试玩了一下这个大模型,功能全部体验了一番。也就三种,一种是通过提供的文字描述生成图片,一种是类似语音助手的问答对话,一种是自然语言处理(术语NLP)。

通过文字描述生成图片,生成的风景还看的过去,有抽象派艺术画风,但是生成的人像完全是掉入恐怖谷了。同时生成的过程太漫长,以分钟来计时。这个功能可以不用。

人工智能的对话,首先想到的应用场景是在客服里面,或者直接开一个 AI 对话服务,但是不足以支撑整个产品,所以这个暂时不考虑。

只有最后一个自然语言处理可以用啦,简单来说就是,(凭我自己的理解),它已经看过千万级别的文字了,知识储备很充分,我们需要做的,就是设定特定的引导词,开发出它的功能。

一种做软件的思路是,利用模型开发出来的某个功能,整合到软件里面,作为一部分,算是模型落地的应用,只是一个软件的一环。这种思路我想了好久没有想到比较好的创意。

暮然回首

换了一种思路,既然这个模型只能做自然语言处理,那我不如直接围绕自然语言处理来开发一个软件,软件的全部功能都由这个模型来提供。只能处理文字,那就把文字处理到极致。所以第一天就有了这个创意—— AI 写作外挂。

“AI”是产品的亮点,必须写在名称里面,“写作”是软件的主要功能,“外挂”二字则有标题党那味了,属于点睛之笔。

对这个名字我很满意,填写完之后,注意到别的组有一个叫 “AI文章辅助工具”,感觉和我的软件撞车了,不过我感觉自己在名字上已经赢过它了! but 当我跟妈妈炫耀的时候,她说外挂是啥意思,你这个名字看不懂。喔~ 还好看不懂外挂意思的大概率也不是这个软件的受众群体,外挂就是指这个东西很厉害,厉害到你用了这个东西相当于作弊一样的,对别人有碾压效果。

实现

这个软件的核心技术部分是调用 api(应用接口,你传入数据,它返回结果),这部分有现成的调用实例,而且之前我也玩过 api,技术上难题不大。

真正遇到的问题是在界面设计上,由于之前没有写过图形化的界面,如何写出一个像样的GUI(图形用户界面)成为了我遇到的第一个难题。

有三个选项,电脑端软件,手机端软件,网页,三种呈现形式。我都没写过。。。但是我敢想呀,我一开始设想的是,我全都要,做出一个全平台的软件。什么?你问我没写过怎么办?我可以学呀!

然而现实很残酷,准备从电脑端软件下手,使用的是百度那边活动负责人自己封装的 python 库 qgui ,一上手就遇到了问题,去问助教,助教发过来 github 链接,说有开源代码实例,让我自己学习一下,那就开始学吧。

一天时间做好了第一版,将示例功能中和写作有关的部分放到了自己的软件上,属于是站在巨人的肩膀上,有现成的就要直接用。从早到晚写了一整天,软件的基本骨架已经搭好,就在我觉得十拿九稳的时候, 意外到来了……

至暗时刻

晚上九点,我写好了第一版本的代码,需要把代码打包成软件,这样用户就可以直接使用。

然而打包完成后运行一直出错,就相当于什么呢,相当于你洗菜切菜炒菜盛菜,都做的没有问题。但是你把菜端到用户桌子上的时候,突然发现里面有一只苍蝇,不能吃了。那你说再做一份不就好了,现实世界进苍蝇是偶然事件,代码世界出的 bug 是必然事件,排查不出来问题,运行一万遍也是不行。

于是整个晚上我就在不断的打包,运行,报错。据不完全统计,几十次肯定是有的,每次需要十来分钟。次数说明不了什么,我从九点弄到十一点,往常这个点我要睡了,但是还是弄了一会儿,十二点了,必须睡了。躺在床上,脑子里面控制不住的想这件事,感觉自己肝的这两天,到临门一脚的时候功亏一篑了,怎么着也睡不着。于是在床上抱着电脑继续肝。

一晚上也不是完全没有进步的,至少一开始报的错被我上网查到了解决方案,打包的时候加了一条命令。解决了这个错误,又蹦出来一个新的错误,关键我也不知道这个改变是正向的还是负向的。想到新的解决办法,只好在加命令和不加命令两种情况下都试一下,每试一下都要十来分钟,因为有两种情况,枚举的集合扩大为两倍。

最后我想,至少得拿出来一个可以运行的东西出来吧。于是注释掉一部分代码,删去一些功能和界面,再打包试试,看看到底是哪里的问题。再类比做菜的话,可以理解为,你知道菜里面有的东西会招苍蝇,那你就少放几种菜,虽然没那么好吃了,至少不会有苍蝇,用户可以先吃着,试试哪种菜出了问题。

不幸中的万幸,删去了一些非功能性界面,软件可以成功运行了,软件的功能没有受影响,只是丑了一些,少了一些提示语,终于可以睡着了,时间凌晨一点。

曙光升起

早上五点,太阳即将升起,随之起来的,是被早上五点的核酸检测大喇叭吵醒的人们,还有我胜利的曙光。

迷迷糊糊起床,做核酸,回家,坐到电脑前。打开代码,精神抖擞,全神贯注,继续进行打包,运行,报错的无限循环。

早饭没吃,继续去看代码。你问我为什么不吃饭?bug 管饱。(其实后面还是吃了的)

上回书说到,已经删去一点非功能部分,软件可以成功运行,那么问题就出现在被删去的部分。有了这个突破口,再结合报错的一些信息,最终确定,问题没有出在我的代码上,而在于那个封装的库上,由于某些我也不太清楚的原因,最终结果是打包出来的软件没有办法运行。

于是我把库的代码有关的部分理解了一下,根据自己的理解,做了一点改动,最终可以说几乎没有影响软件的功能从而可以正常打包软件,正常运行。类比一下就是一个厨子,发现菜里进苍蝇是因为厨房漏了个缝,于是这个厨子自学了一下装修把缝补上了。

劫后余生

大难不死,必须抒发一下感想。

有时候我也会很奇怪呀,很多事情,差一步,就是天壤之别。或者说,我做的那些操作,但凡有一步没想到的,最终都不会是这样的结果。无法解释,为什么偏偏历经多次磨难,每次的困难都几乎把我绊倒,可每次都可以说近乎奇迹般的活了过来。无法解释我当时为什么会那么想,为什么会那么做,可我就是想到了,可我就是做成了。

歪一下,程序员掉头发的原因找到了,一个项目做不完,或者说只出了一个 bug,就算再小,这个软件还是不能用,相当于什么用都没有。有时候只是一个小小的错误,需要花费大量的精力去排查。一步错,则功亏一篑,这也太有魅力了吧。

不断迭代

第一代产品做出来之后,首先找了我的小伙伴做内测,在此衷心感谢小伙伴的大力支持。前面说第一代的功能几乎都是抄的示例功能,只有轻微的改动,第一轮内测之后是产品的脱胎换骨。

首先是软件的提示语上,一个好的软件,是用户一看就要会用的。可是我的测试发现都需要来问我,这肯定不能怪用户对吧,肯定是我的界面设计的不够明显。虽然我也很烦软件打开是一个弹窗,但是为了用户能自主使用软件,思考再三,还是加一个烦人的弹窗,轻喷。

重点还是软件功能的增加,一轮内测后,我的重心可以不在软件界面的设计上了,大的框架已经很完整了,有足够的时间去试模型的引导语,开发新的功能。加上小伙伴也有很多好的点子,在此再次衷心感谢。最后项目评审的时候,老师说,感觉这个软件的作者像是很熟悉大模型的人,重度使用者,开发出各种各样的功能。我想这么高度的评价是靠 很 nice 的小伙伴提供的很 nice 的点子 和 我一整天的试验 取得的。

后面第二轮内测就没有较大的改动了,加了一个功能,整个软件下来是比较满意的,三天做出来自己想要的成果了。最后一天录了一下演示视频,写了一下文档,就没有什么值得提的事情了,提交后就是一天漫长的等待。

成果

评审

在评审的前一天,我首先在系统里面看到了自己的分数,93 分,听着应该是很高了吧,不过不知道别人的分数,上面还有很大的提升空间,这个分数看来并没有让我很安心。

第二天评审,评委的 PPT 划过,看到了获奖队伍那一页,找我的名字,中间没有,下面没有,在第一个!

只看到了这么多信息,PPT 被切到了封面页,好消息是我获奖了,剩下的悬念是,这个排名有没有按照名次,紧张焦急的等待后,尘埃落定,第一名!!!

感想

这个故事告诉我们一个道理,当你觉得自己很菜的时候,没准别人比你还菜,不妨试试,结果怎么样要试了才知道。

好吧我是真的没想到会这么完美的结果,明明五天前还一直在纠结犹豫要不要报竞赛组,心里打了很多次退堂鼓,最终还是鼓起勇气参加了。明明四天前压根没有听说过什么叫大模型,最终评审的时候却得到了“作者像是非常熟悉这个文心大模型的人”的高度评价。明明三天前对软件的图像化设计可以说是一无所知,最终历经千辛万苦成功做出软件甚至还是在自己修改了库的情况下。

所以以后遇到什么不敢去尝试的事情,如果尝试的代价不是很大,那就去试试吧,万一成了呢?

这世间,有那么多个美好的万一啊

软件介绍

使用需知

  • 只可以在 windows 电脑端运行

所以在手机上是运行不了这个软件的。

  • 生成字数多(如作文)会很慢,耐心等待
  • 偶尔会出现人工智障的情况,自行甄别
  • 一个账号每日使用次数上限 200 次,总使用次数上限 2000 次

事实上我只是把接口封装成了一个软件,上面是所调用的大模型的限制,所以即使我知道会出现这些问题也无能为力。现阶段这个软件只能说是体验 AI 的写作。

  • 软件免费,欢迎赞赏

演示视频

软件下载

github开源:guohuan78/AI_writing_helper (github.com)

考虑到国内访问 github 困难,上面的链接打不开很正常,可以通过下面的链接下载软件。

蓝奏云盘:AI写作外挂 V1.3.2.zip - 蓝奏云 (lanzoum.com)

软件使用

打开会是一个弹窗,虽然很烦,还是建议认真看一下,毕竟是我斟酌很久写出来的。

关闭弹窗会自动打开一个网站,虽然这个行为也很流氓,但是是为了节省用户的力气,直接帮你们打开这个网站,按照弹窗的提示登录百度账号,申请 key,复制 key,填写到软件里面。

建议填写后点击右边的 “保存key”,这样以后软件就不会弹窗,也不会打开网页,即开即用。

填写完 key,选择上面标签页的功能,填写文字,点击 “开始执行”,下面控制台会输出结果。