五章 - 我博览古今诗词歌赋,只为能够为你写诗

发布时间 2023-12-31 00:02:22作者: 全赞工程师

五章。指五言诗。唐·李白《劳劳亭歌》:“昔闻牛渚吟五章,今来何谢袁家郎。” 。五章APP收集了数十万首古诗,唐诗宋词元曲以及明清的小诗等无所不包,它还内置了写诗引擎,能帮您即兴赋诗、命题作诗等等。 开发这款产品,是为了重新唤起大家对诗歌的热爱。下面我来详细讲解一下本产品的制作过程。

技术栈及选型

前端:要求跨平台,支持小程序,跨端框架对比,选择uniapp。为了快速开发,选用了付费的graceui作为界面框架。

后端:后端主要分为两大块,一是诗歌数据的增删改查,这个是通过云函数实现的,数据主要存储在elasticsearch上。

算法:写诗及写对联用到深度神经网络,使用tensorflow做traning和inference,模型推断需要大量资源,不适合serverless(云账单会飙涨),因此购买了腾讯云的打折服务器,架上flask,专门做模型推理。

API网关:模型和搜索API都通过API网关接入,这个API网关也是个很坑的东西,各大云厂商做的产品瑕疵太多:按量付费(巨不划算),只能手动添加API,只支持几百个API,后端接入多个服务器,还要在网关跟服务器之间架设一个负载均衡(负载均衡又要按量付费)。于是我一气之下自己写了个API网关,把所有这些问题都妥妥解决了,还定制了很多新功能,比如自动cache,ip限速,自动log等等,后续有时间详细介绍一下。

设计与实现

系统架构

用户请求会先经过自研的API网关路由,API网关有很多功能,比如对请求缓存,写AccessLog,Bot检查,Auth,访问限速等, SCF负责轻量级的数据库查询, 写诗模型实际上没有用SCF,用的打折云服务器,因为资源消耗实在太大,用SCF不划算。

API设计

诗歌创作模型

使用的是一个组合模型。基础模型是将前面所有的字编码,根据前面n-1个字,寻找概率最大的第n个字。也结合了GPT,BERT等大模型,这样写出来的诗确实会质量高一些。

全文检索

目前搭建的是一个4个节点的集群,内存配置都在8G以上. 安装好smartcn插件后,然后对所有诗歌文档进行索引,query的时候简单的做个分词,然后关键词按照或进行组织。如下是一个query的例子。

curl -v -XPOST '' -d '{"from":0,"query":{"query_string":{"default_operator":"and","query":"李白"}},"size":10}' -H "Content-Type: application/json"

诗歌推荐

目前采用的是通用做法:标签匹配。即给用户按照静态规则打上标签,然后和诗歌本身的标签做匹配,匹配度高的加以推荐。大概实现思路就是将所有静态规则录入数据库中,然后用规则引擎对每条规则针对每个用户进行求值。例如有一条规则:PoemDate.Hour == 6 || PoemDate.Hour == 7 则加一个标签 "日出",当用户请求过来时,只要将PoemDate设置成当前时间,然后求一下这个规则的值就可以了。

APP运营

目前仅上架了微信小程序,搜索《五章》,第一个应该就是我这个,我最近也在看增长黑客这本书,然后学以致用,我坚信从0到1都出来了,从1到100应该就是个方法问题。