“美术狮 AI 绘画”(以下简称“美术狮”),是咱们小团队的一次测验,定位是人人都可以上手的,充溢创意的,了解中文和中国文化的图片生成东西。
在完善图画模型和论证中心问题之后,咱们开始构建 MVP(最小化可行产品)。MVP 的构建需求:
- 完结快,开发周期较短
- 形式轻,产品要点杰出
- 成本低,只投入较少的人力、物力
这些方针,关于咱们而言都是不小的应战。得益于 Laf 的运用,从开发到第一个版别上线,只用了一周时刻;小程序功用精简、方针明晰;主体服务成本(杭州+新加坡)在 100 元 / 月以内(含有优化空间)。
下面会结合“美术狮”MVP 构建的全进程,和咱们交流运用 Laf 这个渠道(技能)的考虑。
原文链接:forum.laf.run/d/984
技能选型进程
函数即服务,是现在咱们对 Laf范式的考虑和了解。也是“美术狮”挑选 Laf 作为服务端的主要因素。
我在 2015 年就接触了“类似”的 BaaS 渠道 LeanCloud,并做过两次实践。第一次是对爬取的小红书内容做保护,第二次是给一个中科院的朋友做化学试剂编号的办理。
LeanCloud,偏向于数据库即服务这种范式,对数据增修正查,供给基于数据的丰厚的查询、聚合运算办法是这个范式的中心。
范式无优劣之分,取决于需求处理的问题场景、复杂度和规划。关于以数据库为中心的,包括简略鉴权的系统比方 CRM、乃至是 ERP,LeanCloud 都可以很好地适应和匹配。
咱们还测验和了解过主打实时性的野狗云(已下线),以及后来上线一段时刻又被字节跳动下线的轻服务(已下线)。也测验过跟着教程运用 Firebase。
“美术狮”或许其他的 AI 运用的实际运用场景中,数据库的操作仅仅一个部分,复杂的内容生成逻辑、多渠道资源调度、相对密布的核算是这类场景中的重心。
小程序本身,虽然运行在客户端内具有必定的核算能力,可是把它看作一个增强的 BS 结构通用性会更好,咱们需求把许多地生成逻辑和核算处理流程剥离出来放在服务端由多渠道协同完结;一起为了减小分发包的大小,当需求包括其他 SDK 文件时,咱们也会格外慎重。
因此,数据库即服务,并不能很好地处理咱们所面临的问题,或许并不是 AICG 运用优先会挑选的范式。
腾讯云函数(Serverless)
接下来测验了运用腾讯云函数,能满意了咱们的一部分需求。
可是关于单次核算相对密布,调用资源繁复,访问量不安稳的运用而言。冷启动是可怕的,服务被冷却后,再一次被拉起来需求较长地等待时刻。在并发和访问量不大时,云函数被频繁地冷却,对用户体会伤害较大,较为丧命。这个关于每一个从 0 到 1 的独立开发者或许都是个头疼的问题。
对存储桶、数据库,腾讯云函数并没有做深度地整合,单独装备云数据库、存储桶,会在 MVP 阶段增加不必要的时刻和费用的开销。
微信云开发
微信云开发可以经过微信开发者东西一键注册。在“美术狮”搬迁的 Laf 之前,咱们在微信云开发中做了许多的测验。
抛弃运用微信云开发,主要是下面一些原因:
- 根底库 Node 版别过低,对第三方包支撑欠好;
- IDE 开发体会欠好,写代码像是看 PPT,本地调试不够方便直观;
- 计费系统诡异,虽然咱们是腾讯云的老用户,小程序无法在原有账户中注册服务,有必要以小程序的维度新注册账户,付费和办理保护不方便;
- 对跨区域、跨服务支撑不佳;
- 冷启动延迟依然显着。
经过内置的鉴权机制快速获取 openid,是微信云开发宣称的优势。
在“美术狮”产品搬迁后到 Laf 后,结合社区教程,也可以在“3 分钟”内,完结完结这些功用。
从 0 写一个微信小程序对接 Laf 云开发获取用户 openid – Sealos 开发者社区
Supabase、Vercel、Cloudflare
Verce、Cloudflare 是我特别喜爱的两个渠道,这儿一笔带过。主要原因是无法整合到国内的网络环境中。
终究咱们挑选了 Laf。在运用 Laf 的进程中,咱们获得简直等同于 Woker、EdgeFunction 的运用体会和开发功率。
为什么挑选 Laf?
函数即服务
Laf 最招引咱们的,是经过云函数的构建运用的办法。
函数即服务在必定程度上,是可以容纳(包括)数据库即服务这个范式的。
传统的 Server 端开发,经过 Router
和 Controller
去组织代码,利于办理和保护。可是,从另一个层面看,会在必定程度上,降低了 MVP 产品的开发功率,阻止了立异的落地。
“美术狮”在第一个版别上线前半个小时,决议添加一个每日签到的功用。
经过云函数,咱们更聚焦新特性、新功用,而不是困在这个签到功用应该放在哪个 Router 下,哪个 Controller 下这些工程办理的考虑中。经过界说一个 task_user_daily_check_in
,咱们很快地完结了这个功用。
云函数调用云函数,是另外一个我喜爱的特性,咱们界说了若干个“内部”云函数(一起封闭了一切 HTTP 办法),来为其他云函数服务。比方获取第三方服务的 access token
并在本地耐久化。一方面,代码可以解耦和复用,另一方,安全性也大大提高。
例如这段代码,获取百度云服务的 access token
,封闭请求办法后,仅能被内部调用。
import cloud from '@lafjs/cloud'
export default async function (ctx: FunctionContext) {
const ret = await cloud.fetch({
url: "https://aip.baidubce.com//oauth/2.0/token?",
method: "get",
params: {
'grant_type': 'client_credentials',
'client_id': process.env.BAE_CLIENT_ID,
'client_secret': process.env.BAE_CLIENT_SECRET
},
});
cloud.shared.set('bae_access_tooen', ret.data.access_token)
}
当然,云函数过多后,仅能经过修正函数名去人为地调整云函数的排序,目录结构会显得凌乱,假如能依照 Tag(虚拟文件夹)去聚合、办理云函数,对我而言,会更明晰和直观。
技能栈友好
Laf 运用 Typescript
( Javascript
)进行开发,与 web 端、小程序开发归于同一技能栈。大大降低了全栈开发的难度,一起绝大多数代码可以在两端进行复用。
在避免评论“谁是世界上最好的编程言语”的前提下,仅从团队、成本、开发功率几个方面评论,共同的技能栈是 MVP 开发的一个好挑选。
杰出地第三方支撑
Laf 对 第三方 NPM
包的支撑很好。我测验过引用 moment
等这些第三方库处理时刻数据,七牛等第三方服务处理图片资源,一起内置了许多常用的第三方库。
如同乐高拼图,云函数可以不断地、从不同维度地整合和丰厚。存在许多第三方依赖的项目,搬迁时成本较低。
实测,秒下各类第三方 NPM 包,精准版别控制,不需求“魔法”。
开箱即用的数据库
Laf 内置了对 Mongodb
的杰出支撑,供给了一个开箱即用的数据库。够用,好用。
Laf 除了供给许多封装后的查询、聚合办法外,也供给了与原生 Mongo
交互的接口。
例如:经过与原生数据库交互创立索引。
import cloud from "@lafjs/cloud";
const db = cloud.database()
export async function main(ctx: FunctionContext) {
let res = await cloud.mongo.db.collection('users').createIndex({ "openid": 1})
const resIndexs = await cloud.mongo.db.collection("users").indexes()
return resIndexs
};
便利、直观的在线调试
在 Laf 中经过控制台、日志,可以完结绝大部分的调试作业。复杂一点的操作可以经过内置的极简的 Postman(接口调试)去完结。
这种极简、干练的风格贯穿 Laf 的功用(也包括上面说到的数据库规划)、UI,是咱们 fancy Laf 的另一个重要原因。
实际的运用进程中,除了“存储”这个功用,其他一切的功用区,面板都能被咱们高频地运用到。聚焦方针,专心功率,冗余度低。
杭州、新加坡两地布置
在“美术狮”的开发进程中,咱们在 laf.run(杭州)、laf.dev(新加坡)别离购买和布置了 Laf。多服务融合、跨区域的开发是一种奇妙的体会。
“美术狮”在图片的生成进程中,利用了腾讯云在新加坡的 GPU,图片的存储、优化又在国内完结,终究由七牛供给耐久化和 CDN 服务。
Laf 在杭州与新加坡之间通信晓畅,可用性高,与其他第三方渠道可以完美地整合。
一键弹性弹性
得益于同门的 Sealos
等项目和 Laf
在云核算方面的深耕,Laf 可以一键装备运用规格和弹性弹性。
虽然,许多的产品默默地消失了,除非被 DDOS,许多产品很难触发弹性弹性的条件(比方“美术狮”),可是愿望总是要有的。
短时刻的高平发需求专业的运维,极快地做出水平拓宽,关于小团队而言,在技能、资金方面都很难做到。Laf 很好地处理了这个后顾之虑,给咱们供给了莫大的安全感,这个方面,我会在后面的部分持续弥补。
开源、开放
Laf 与我运用过的其他 BaaS 不同,是一个开源项目。
之前有幸和 @ 马斯洛 有过一次对话,马老板是一个深邃、有远见的 Leader。
假如一个项目只隶归于一个公司,那么这个项目的命运大致会绑缚在这个公司的命运上。而一个项目归于社群,哪怕公司没有了,项目依然能开展、完善。
开源的决议让 Laf 具有了更长的生命周期和牢靠性。用户再也不必忧虑像“轻服务”突然下线这种工作的发生,可以更放心肠实践和运用渠道和技能。
另外,不到万不得已,我不会去测验布置 Laf 的服务。我有一堆自己的理由:
- 牢靠和安稳可以节省更多的成本,自布置相当于自己承当服务的牢靠性,许多人的专业性和运维能力并不足以完结这个作业;
- 项目的保护者们更了解项目,也能更好、更快地处理突发问题;
- Laf 的部分特性,是靠集群发挥的,购买和保护集群的成本会更高;
- 向开源项目付费、贡献代码,是对开发者很好地鼓励和支撑。
杰出用户运营和收费
在运用了 Laf 的进程中,曾遇到一个无法为文档创立索引的毛病。@ 白夜 帮助联系了 @ 马斯洛 后,很快处理了我的问题。绝大多数问题可以在文档和社区找到解答和代码片段。
咱们反应过期望有一个“回收站”的功用。Laf 迭代更新后,回收站按期而至,作为用户,主意被倾听、尊重并完结真是一件开心的工作。
之前对 Laf 的装备缺少了解,在后台调整了过高的装备。马老板 会把实际资源耗费情况和主张调整值告诉我,每一次沟通都能让咱们感受到技能大牛的魅力和一颗为用户着想的心。
合计下来,价廉物美,比一台中等装备的云服务器性价比高许多,一起,我也不必忧虑或许会到来的流量高峰,我相信 Laf 专业的运维必定会处理“美术狮”未来会遇到的问题。
番外篇
咱们是 Midjourney 和 SD 的忠实粉丝。“美术狮”这个名称是 GPT-4 出谋划策的,小程序 Logo 和部分图片资源也是由“美术狮”生成的。
在运用 Mid 和 SD 的进程中,咱们发现两个问题:
- 精确的 Prompts 需求运用英文书写,特定的英文词汇需求回忆、堆集(比方风格、镜头、视角等);
- Prompts 需求经过结构化摆放,关键词的次序也会影响出图质量,一起创作者需求具备必定的美术、摄影方面的专业素质。
身边能把 Mid 或许 SD 用好的人少之又少;一个是言语问题,一个是专业问题。
咱们以 Dalle2 模型,作为训练起点,没错,就是画面不忍目睹的 Dalle2,虽然如此,Dalle 是现在绘画模型中最懂自然言语的。
Prompts 是文字,由图片 describe
出的 Tag
也是文字,言语文字是信息沟通最重要的媒介,大言语模型更是这次 AI 浪潮的基石。
咱们经过 3 个多月,提高了“美术狮”对自然言语特别是中文的了解,让它更灵动、更懂你,虽然还有许多不完美,进程中依然带给咱们许多惊喜。
咱们团队在以后的实践中,会持续运用 Laf,运用 Laf 是快乐的工作。期望越来越多的人可以感受到 Laf 的魅力。也期望 Laf 明天会更好。