Sanvi

5 分钟

独立开发周记21:泰语课程上线了

刚好这两天Codex和Claude Code的周限额都满了,歇一歇,把欠的几篇文章好好补上。

上一篇文章潇潇洒洒写了7千多字,还让AI帮我把思路梳理了一下,发现还是没人看,哈哈哈,不折腾那些了,还是随随便便写一写吧。

这个月休息,所以时间比较多,打算把之前想做的一些项目都折腾起来,还有就是之前开的坑也要重新迭代一下。

StudyThai.ai

v7转写引擎

最近的时间都花在这个项目上,先说说比较花时间的事情,就转写的问题。其实就是泰语转写成罗马音,之前说第四版准确率可能达到80%左右是我高估了,而且之前说过他的NLP语义分析很慢,特别是上了AI老师后,大段的长句子表现非常差。

然后之前我做了一个投票算法,就是通过评分看选择哪一个分词,结果发现对的分词评分低,错的分词评分高。所以新的分词算法不搞那么复杂,就是词典最大正向匹配,错了就回退去匹配,然后通过目前AI阅读生成的1万个句子做测试覆盖,然后对比原来的引擎,直接提高准确率。

单词的转写也从原来的规则算法通过if-else改成表驱动,通过管道优先级一步步转写,比如先去除空值,重复符号,特殊词查找等等,像一个漏斗从上到下。然后通过一个大的词典库(其他转写规则,泰语里的转写有非常多种,市面上教学基本上paiboon规则),通过脚本替换成paiboon规则。然后把2边一致的列为测试用例里测试(避免后续改动规则导致这些又错了),然后不同的逐项校对,通过notebookllm进行辅助,然后让AI自己去轮训修复,一点点提高准确率。

经过这一轮,我们把转写的外部依赖全部去除,大大提高了转写效率。

性能优化

排查了一些比较慢的地方,比如有用in的地方导致查询缓慢的地方改成子查询。还有把原来转写等实时要求改成预处理,提高效率。包括优化了一些算法,之前为了图方便,一些训练直接查询500条在随机抽题目这样,这些优化了一部分,还有一些作为遗留,等有时间专门做一版性能优化

课程上线

很多用户来是希望零基础学泰语,之前我都是从我自己出发来做这个工具,但是后面很多用户来找我反馈,所以我最近就花了很多时间在收集,设计和制作课程模块。如何制作课程后续可以单独开一篇文章说明,主要用notebookllm 和 Claude Code Skills 完成整个课程的设计,然后人工排查和调整。

设置了7个等级,全部学完应该能达到中等水平。但是课程的制作会花大量的时间,需要校对调整和测试,第一次制作没想道这么累,本来想着level0和level1一起上线的,但是无奈课程设计中还有很多不满意的地方。我不希望像多邻国或者ling那样,上来教了你一堆男人女人你好的单词,这些对想入门有点难,就好像你学英文一直在看how are you一样。

所以花了很多时间思考这个事情,如何让零基础的同学感知到泰语呢?

所以设计了一个破冰的层级,level0,level0层级的课程主要是帮领基础感知到泰语。

比如说辅音传统教学会跟单词放在一起记忆,ก就会跟🐔一起记忆,所以我把常用的20个辅音的单词放在一起让大家熟悉,并且配上了图片,但是一上来就学字大家有压力,所以第一节课是学动物物品的发音,让大家熟悉听。

第二节课主要是帮大家熟悉元音的位置,刚学习泰语的时候我也一脸懵,为什么元音能出现在上下左右,所以设计了这个环节帮大家理解。

第三节课主要就是帮大家熟悉泰语的五个声调,这个也是最难的,即便我已经学了这么久泰语了,但是这一课我很难完全做对,感觉听起来都差不多。

第四节课是让大家了解熟悉泰语,因为泰语是没有任何标点符号的,零基础一脸懵啊!所以我们设计了这个环节培养语感,让你知道什么是单词和单词,什么是音节

为了这个课程已经熬了好几个通宵,主要是一直不满意反复改,level1的课程其实大部分都设计完了,但是还在调整,整体方向还是熟悉元音和辅音还有声调系统和音调标识,但是如何更好的学习这点我还在调整。

然后单词图片通过Nano banana生成,没用Nano banana 2的原因主要是贵。然后一次给9个单词,生成一张九宫格,通过程序去切割后去除白边,目前有些地方还会有点白(所以还是嫌贵),但是基本上也能用,以后有金主爸爸了再考虑每个单词专门一张高清的

自动化测试

主要现在随着功能复杂,不能像以前那样vibe coding了,要考虑引入一些工程级别的东西。不要只去网上看那些十分钟造出来的玩具,我们是实际上做的是一款可持续迭代的产品。

首先是测试的覆盖,这块主要分单元测试和集成测试,目前集成测试这边主要是通过使用playwright运行无头浏览器测试界面上的一些东西,之前做课程的时候内容一直在调整,包括不同的题型等,每次修改自己就要把题目全部做一遍,所以研究了一下有无办法测试道这块,但是目前主要只是覆盖一些人工测试比较麻烦的流程。

然后就是单元测试,这块没啥好说的,就是写了啥测啥。

接着就是ci的接入,我在我另外一台mac mini上跑了一个runner,每次提交代码他都会自己去跑测试,并把结果同步到github actions里。

还有就是多部署了一个dev的线上环境,之前的问题在于有时候需要测试兼容性,比如电脑能用的功能,手机上兼容的问题(举个例子:播放音频),会碰到域名的问题,所以这次专门多部署了一个环境,但是这个环境我们又不希望被其他人访问到。所以可以借助cloudflare access进行白名单认证,你配置好后输入邮箱,然后拿验证码后才能进入。

量化机器人

上一版把100刀亏完后我就没迭代了,随着对AI Agent了解更加深入,觉得上一版的问题在于我们只是提示词+输出,压根没用对。最近看到一个Claude 做了一个AI售货机管理员的例子,里面的AI会思考会决策,而不是傻傻的拿数据,然后给输出。

后来我就参考了skills的多agent模型,我觉得可以用在这上面。写好各种tool,然后提供给AI。AI做深度思考后自己选择调用哪些tools进行信息的收集以便更好的进行决策。整个体验跟我们使用Claude Code 差不多,当然目前只是一个设想,做了一版的需求文档,还有很多细节要调研清楚才能实现。

obsidian kanban

随着现在每个项目的需求池越来越多,然后我每个项目的需求池文档都是一样标准的格式,我就在想能不能做一个kanban来更好的看到当前的任务,后来我通过AI做了一个插件,就能看到目前所有项目的需求池是咋样。

首先我创建一个空的文件夹,然后在下面把每个项目都单独创建一个文件夹。接着把各自项目通过引用的方式引用进来,接着插件进行分析,最后转成kanban。

现在功能还不多,但是也比直接在一堆markdown里找清晰多了。

OwlUploader

因为做课程的时候要经常上传图片,就把之前开源的R2存储的应用使用起来,但是发现有很多不方便的地方,比如只支持单张图片上传,不支持拖拽上传等等。

所以就花了些时间迭代了一个新版本。现在能像finder那样操作去操作R2,文件夹、多文件上传下载,分块上传下载,多存储桶和账户链接等功能。

花了那么多时间精力,还续了一年开发者账户,所以索性上架mac appstore,也不搞那么麻烦,直接设置了一个买断价格。不想花钱就直接去下载源码编译就行了。

其他

懒得写了,我每年底都会写份总结,2025年的还要抽时间写一下。还有打算把课程的制作也分享一下,还有就是打算把这一年使用AI做项目的心得做成一系列的文章,现在的打算是当AI周限额满的时候就不开发了,写点东西