游牧周记第16期
标签
FSD
vibe coding
关注
代码之外Beyond code
几个专访非常有冲击力,嘉宾尤雨溪、郭宇等,让我们看到年纪轻轻事业有成(大成)的人生哲学和真正财务自由(富豪)生活样态。 链接
技术
硅基流动的Api和模型
我在Deepseek还没火的时候就注册了api,并用于学易
app中,现在感觉Deepseek官方的api超级慢,比kimi和通义千问等慢10倍不止,今天决定换用siliconflow的api。
仍然使用openAi nodejs sdk的封装包,react native sse支持stream效果。
然而使用过程中发现一些问题:
- 首先是模型,默认的
Qwen/QwQ-32B
是一个推理模型,其message输出格式和chat型的不同,内容在reasoning_content中而不是content中,所以有格式报错,修改后正常,但对于学易这种简单app来说不适合。 - 改用
deepseek-ai/DeepSeek-V3
(硅基流动的好处就是各种模型随便选),一切和之前一样,除了速度快10倍外。 - 价格方面,不适合根据每M token来做选择决策,因为推理型的本来字数就多,同样的问题,token数比chat型的多了10倍。 总的来说调用还是方便,就我的app用户和数据流量而言,价格不是很重要,没有细看。
App快速增加多语言版本
今天突然想到我的app“学易”还没有西班牙文版本,计划增加一个。 按照之前韩文版的做法,应该很快。 需要说明:之前本软件已有英文版、繁简中文版和日文版,这些都是本人比较熟悉的语言(日文只学过一段时间,还算有点基础),韩文版和现在要做的西语版,都是完全不懂的(其实西语还好,拉丁字母能猜一下)。 之所以有信心开发,完全是基于现在AI的翻译水平已经匪夷所思的基础上。 之前我好像提过,这个过程只需1小时,其实如果只是UI界面的话,10分钟就够了。我把过程大体总结一下:
- i18n文件 新建一个es.json,copy所有en.json内容给AI,提示翻译多语言文件内容成西语,并保持json格式输出。之所以选en,是考虑到英文翻译西语,可能对AI更容易且准确。 这个app在不同语言情况下,名称也不一样,对于Expo项目的iOS目标来说,需要修改一些meta文件,同样的,我新建一个es.json并命名:
{
"CFBundleDisplayName": "iChingLife",
"NSContactsUsageDescription": "English version"
}
对于android目标,则没有这么优雅的方法,需要在prebuild后生成的android原生目录下,找到app/src/main/res
,新建一个values-es目录,在其下建立一个strings.xml文件:
<resources>
<string name="app_name">Vida I Ching</string>
</resources>
同时要使其生效,配置app.json:
"locales": {
...
"es": "./locale/meta/es.json"
}
- 相应的语言管理文件 我会用一个index.ts文件来引入所有语言文件,这里加一句es的部分即可。
import es from "./es.json"
...
const c: { [key: string]: Hexagram[] } = {Ï
'hans': hans,
'hant': hant,
'en': en,
'ja': ja,
'ko': ko,
'es': es
}
同时为了react-i18n的配置文件生效,修改locale/resources.ts:
'es': {
common: Common.es,
yi: Yi.es
}
- 多余语言常数和设置界面 在全局常数和类型设置中,改写相应常量,以便代码引用:
LanguageTags: ['hant', 'hans', 'en', 'ja', 'ko', 'es'] as const,
DefaultLanguageTag: 'hant',
然后配置设置页面,需要一个西语的显示选项:
const Locales = [
{
label: '简体中文',
value: 'hans',
},
{
label: '繁體中文',
value: 'hant',
},
{
label: 'English',
value: 'en',
}, {
label: '日本語',
value: 'ja',
}, {
label: '한국어',
value: 'ko',
}, {
label: 'Español',
value: 'es',
}
]
dayjs日期文件相关:
require('dayjs/locale/es')
...
dayjs.locale('es')
这些代码均基于我自己开发Expo/ReactNative项目的习惯,在我的B站教程中有体现,感兴趣可以移步观看。
以上步骤似乎不超过10分钟。 对于大多数普通App,这样似乎也就ok了。 可惜我的App是关于易经的,比较特殊,有大量本地文本需要翻译。 比如易经本身,我采用的是比较流行的英文译本(原文德文卫礼贤版),相对中文直译,可能更适 合西语。 这里只能做大文本量翻译了,免费的AI工具中,ChatGPT直接拒绝了这么长的文字量,于是我找Grok,人家有钞能力,把这个文本吃下去了。 Grok非常聪明地完成翻译的同时,保留了原文件的中文引用部分。 整个过程约10分钟(13万字符量)。 至于翻译质量,我只能选择信任现在的AI了,这里有一段“未济”卦的,请懂西语的朋友看看:
"c": "䷿",
"cn": "未濟",
"origin": "Éxito. Pero si el pequeño zorro, tras casi completar el cruce, se moja la cola en el agua, no hay nada que favorezca.",
"tuan": "En 'Cerca de la Conclusión', es próspero pues lo flexible obtiene la posición media. El pequeño zorro casi cruza pero aún no ha emergido del medio. Mojarse la cola significa que no hay beneficio y no puede continuar hasta el final. Aunque no están en posiciones adecuadas, lo firme y lo flexible se corresponden mutuamente."
效果:
当然,市场发布时还需要写西语的说明啥的,在AI面前都是小菜一碟。