欢迎光临散文网 会员登陆 & 注册

如何写一个AI主播:搭架子

2023-07-30 16:15 作者:bili_83058930516  | 我要投稿

写在前面

纯属心血来潮。最近合作的前端做项目去了,而我在做考核,所以维护的项目得先停一停。至于写这篇文章,算是回顾一下四月以来的种种历程吧。

挺令人感叹的。去年这个时候,我甚至还不会printf("hello world"),现在已经能写一点简单的均衡负责和下载器了。当然这点也离不开AI(雾),某种程度上也算是提高了我的代码效率。

AI主播这个项目我是从四月开始的,其实三月就已经心痒了,但是不敢做,心想着我是纯纯大一新人,这个东西对我来说似乎有点太复杂了。但是四月莫名其妙就突然下了决心,然后就开始按着模块码,没想到雏形也就写了一个多星期就弄完了(当然也得感谢另一位contributor,这个项目是前后端分离的,前端我基本上是不太懂,所以我这里只会讲一些后端的逻辑操作)。所以总的来说,要做这个,其实并不是难事。

我是用go语言完成了后端的核心逻辑架构:评论获取、评论选择、语言模型调用、语音合成调用、语句情感判断和前后端交互模块。用go写这种东西其实有点不合适,在AI产业领域里目前的王者还是python。不过要实现的话,逻辑在先,语言无非表达的工具罢了。

搭架子

那么就从搭架子说起。架子搭得好,以后拓展起来也就方便。架子搭得不好,以后拆起来就非常麻烦。

这是一个逻辑架构的问题。首先,我们肯定要获取消息,因此会有一个消息获取模块。这是一切的起始点。

之后,我们要把获取到的消息传递给LLM进行对话生成,所以这里就有一个LLM的处理模块。

然后,我们会把LLM生成的回应进行进一步的加工,进行语音合成,所以这里会有一个语音合成模块。

最后,我们要驱动皮套,让它说话。所以会有一个模型驱动的模块。

这是最为核心的四个模块。当然还可以拓展。比如生成的消息是不是应该过滤?所以可以加消息过滤的模块。模型有表情,是不是应该用对应情绪去映射对应的表情?所以就有了情绪分析模块。当然这两块不算特别的重点,所以可以不考虑。

此外,我们还应该考虑的是项目的拓展性。比如我兼容了b站,是不是还可以兼容其它平台?比如我使用了gpt作为模型,我是不是还有选择其他模型的余地?所以要考虑拓展性,应该有一个switch的接口去做判断(然而四月我写了一堆if else,令人感叹)。

所以我们就有了一个原型。接下来的事情,就是照着原型一步步填充整个项目了。上面这张图是我项目最开始的时候做的,中间稍微修整了一下,目前项目基本上还是按照这张图的架构铺垫的。当然各个模块还可以继续拆分,做成独立的单元,互相采用http协议或者rpc协议等等进行通信,那样拓展性会更好。实际上我现在有一部分内容就是这样去做的,但是项目的主体依然采用一个紧凑的结构去控制,一来这东西我写好了不好改,二来我是想让主体结构一次部署就完事了。

(这其实也算go的一个优点吧,编译好的go可执行程序并不大,写这种小东西占用的内存量也低)

架子基本上就是这些内容,剩下的就是填充了。


如何写一个AI主播:搭架子的评论 (共 条)

分享到微博请遵守国家法律