背景
最近尝试实现一个给新生宝宝取名的小功能,搜了一下免费的取名软件:
- 传统的基本都是基于字库,真对生辰八字,匹配生成几十个名字供选择,优点:速度快,名字多,缺点:无法添加更多的附属条件,例如 愿景期望,避讳字或词组等
- 新的AI取名,可以通过提问交互,获取名,优点:能生成更针对需求的名字 缺点:速度较慢,需要有一定的propmt技巧,需要花不少时间设定上下文环境,且生成结果受到不同模型限制,例如 有的模型生成的名字中某几个字的出现频率会非常高。
简单总结,AI模式更符合需求,但是现有找到的一些应用 1.功能较为单一,输出的内容较少 2.多次生成前,需要重复组织propmt,过程比较耗时耗力。看一下coze配置不算复杂,且支持API调用,所以打算自己实现一个简单demo。
功能
- 接收宝宝信息,包括 '避讳字' '期望字' '典籍出处'等
- 生成 生辰八字以及相关解析
- 结合 宝宝信息,生辰八字等产出符合需求的名字
- 将最终结果产出为图片或pdf存档
应用组成
- coze Bot | 提供内容生成
- 前端应用 | 接收用户输入,展示最终结果
- API服务 | 前端应用到 coze 的数据转发和处理,生成最终结果文件(图片或pdf)
执行流程
前端输入 -> 代理服务转发 -> coze bot -> 生成内容结果 -> 代理服务返回结果 -> 前端展示
-> 请求生成结果文件 -> 代理服务打开对应模板页并生成最终结果文件
前端页面组成
- 首页:获取宝宝数据,控制名字生成以及结果文件生成
- 模板页:展示最终结果,并提供结果文件模板
这里选择通过HTML生成图片或pdf文件
实现效果
遇到的问题
bot 配置
配置bot将整个流程拆分成两个主要的工作流,输入内容 -> 生辰八字 -> 取名 -> 最终结果,本打算通过触发器,用api请求调用,可惜token一致未通过(有了解的大佬,望指导),转而直接通过问答api触发工作流获取结果,这样需要面对两个问题: 1. bot需要能正确识别和接收 api 给出的JSON结构数据, 2. 返回的内容也需要JSON结构化
解决过程:
1. 配置bot提示词清晰指明工作流调用(这里可能需要多次尝试,或直接指定每次都调用一个入口工作流,通过入口工作流内编写脚本调用后续子工作流)
2. 因为工作流中接收的参数类型有限或配置比较麻烦,这里一般直接接收字符串后的JSON数据,需要用到时通过脚本转换后再输出。
3. 配置工作流使用直接输入输出
存档文件
这里使用的 vue3做前端, express + puppeteer 做api服务, 这里需要将获到coze数据先缓存,以便puppetter 打开新页生成存档时,页面能有数据展示。
解决方式:
-
接口端代理缓存,模板页通过接口获取缓存数据并展示
-
前端通过localStrong本地缓存,
puppeteer通过链接本地浏览器,使得新开页面能正确获得本地缓存并展示
总结
一次简单的coze体验,一些个人感受
-
AI生成一些非标准内容的结果有不确定性,对prompt有要求,即使有prompt辅助优化,想实现一个过得去的结果依然要花不少时间调试
-
极大的降低了应用开发的成本,但是对于一般小白用户依然有使用门槛
-
希望能提供纯code的开放方式,纯UI的配置使用还是有些繁琐且效率不高