2026年已过去 62.19%
秋天的第一个版本:Cassotis IME(言泉输入法)v1.12.0    @ 2026-08-08, 16:14

昨天立秋,深夜我发布了 Cassotis IME(言泉输入法)v1.12.0。用这个稍微有点烂俗的标题,标记一个重要的里程节点。

去年十二月,冬天,当 GPT-5.2 让 Codex 变得真正可用的时候,Codex 写下了言泉输入法的第一行代码。不过,起初我并没有太上心,项目早期的基础设施搭建比较繁琐,尤其是 TSF 框架与稳定性的建立,磨合过程十分琐碎,我只是在有闲暇时才偶尔推进一下。

就这么慢慢磨合直到除夕那天,期间 Codex 背后的模型也升级到了 GPT-5.3。我觉得项目终于进展到了可以公开的程度,便将其开源至 GitHub。自此,项目才真正进入了“上心”且持续开发的阶段。

三月底,输入法框架终于趋于稳定,我便发布了第一个 Release 版本——v0.1.0。此后,根据身边朋友的反馈,我开始加入对长句/整句输入模式的支持,并在四月中旬,发布了第一个支持长句输入的 v0.2.0 版本。为了更准确地评估长句输入模式的质量,在四月的最后一天,我从自己仍在写作的小说《永恒的舞动》已完成章节中,抽取了16300句符合条件(没有数字、英文字母等)的长句作为语料,创建了 Cassotis 长句基准测试-16300。

随着 v0.x 系列版本的持续迭代,长句输入的准确率一点一点提升。不过,由于我个人的日常习惯偏向短词输入,长句体验并非我的痛点。对我而言,让输入法停留在“可用”而非“好用”的关键瓶颈,在于不跟手——逐键输入时的延迟比较高。但当时的精力仍然主要聚焦在长句算法的改进上。

7月4日,一位用户在 GitHub 上提交了一个名为“性能优化请求”的 issue:长句输入时程序会明显卡顿,敲完键盘后往往还要再等上几秒,视频中的单次延迟甚至接近八秒;而同一台设备上的 Rime 却几乎感知不到延迟。这个 issue 提醒了我,必须正面面对这个性能问题了,因为这不是提升机器配置或者放慢输入速度就能掩盖的问题了,不是“输入法本来就这样”,因为别人(Rime)完全能够做好。

输入本质上是一次次的搜索。一串拼音有许多种切分方式,每段拼音又对应若干词条,可能的组合会迅速铺开;人是一个字母一个字母敲的,相邻两次输入高度重叠,其中许多后缀、切分和词库查询却会被反复计算。句子越长,冗余计算就越多,卡顿与延迟便是这样一点点积聚出来的。关于这个问题,我此前并非没有尝试让 Codex 优化过,只是过去总是在“快一点但准得少一点”之间反复权衡,始终未能真正解决。

7月10日,Codex 换上了 gpt-5.6-sol max。“言出法随”这个词我用过很多次,但我发现它其实也是有程度之分的。我曾用“言出法随”来形容 gpt-5.3-xhigh,可当 gpt-5.6-sol 登场时,我却又一次忍不住感叹:这才是“真正”的言出法随。

升级到 gpt-5.6-sol 的 Codex 不再止步于小修小补,而是开始着手清理那些被白白浪费的计算:同一段后缀只要计算过一次,就按位置记录下来以供复用;相邻按键频繁检索到的词库结果,被放入有界缓存中;搜索和后处理环节则设定了明确的时间预算,避免极少数复杂句子无休止地拖长响应。这其中并没有什么玄妙之处,归根结底依旧是经典的优化思路:减少重复查询与合理缓存。但效果很好,在我特意于基准测试中加入延时指标后,数据明确显示输入延迟降低了近一个数量级,同时准确性不仅没有受到破坏,甚至还略有提升。

于是,我将版本号正式定为 v1.0.0。在我看来,它终于跨过了“好用”这道门槛。

之前提过,做输入法最初的念头,是将输入法与 AI 大模型相结合。此前我也做过接入本地大模型的尝试,但结论是目前尚不具备工程实用性,最终还是将这些测试代码彻底清理掉了。

在 v1.0.0 发布后,我问 Codex,要更大幅度提升输入法的候选排序质量以及长句模式的寻路算法的准确性,下一步应该做什么。Codex 提到可以通过统计语言模型来计算字词之间的转移关系,这需要使用比较大规模的语料。正好,我在7月1日启动了一个实验性的 GPT 模型训练项目,计划在单张 RTX-4090 显卡上训练一个 1.2B 参数的小型 GPT——nc-GPT。它和输入法本毫无关联,只是又一个个人探索性的项目。但为了训练这个 GPT,Codex 帮我找了几十 GB 清洗过的合规中英文语料。其中的中文部分,正好可以在此时作为输入法统计模型的训练语料。

统计语言模型不像 GPT 模型训练那么耗费算力。没有使用到显卡,在v1.0.0 发布后的第二天,第一版统计语言模型就构建完成,其量化后的结果被写入词库,于是就有了 v1.1.0。这样的模型在运行时,仅仅是本地静态函数打分,不需要联网,不依赖显卡算力,也不需要额外的推理框架,却让“长句-16300”的基准测试的 Top1 相比 v1.0.0 提升了3.5个百分点。随后发布的 v1.2.0 则进一步扩展了字符语言模型,使其能够更早地参与长句路径保留与完整候选排序。

后来,引擎里逐步加入真正的小型神经模型。v1.3.0 有了项目的第一个可部署的长句残差重排器:模型在离线环境中训练,参数转换成确定性的原生代码,运行时只对已经生成的少量候选做一次谨慎复核。v1.4.0 和 v1.5.0 又把类似的思路用到短词上,让输入法参考光标前的文字,判断同一个拼音下更可能是哪一个词。v1.6.0 把模型前移到长句路径搜索,由第二阶段和最终候选模型逐级复核, 并复用中间计算控制延迟;v1.7.0 依据语料训练的词路径转移证据识别四音节输入中的双词组合;v1.8.0 为完整长句增加成对比较、局部差异和最终可见候选的残差复核,并为没有可用前文的短词建立独立排序, 模型证据不足时仍以高置信度的精确匹配为准;v1.9.0 将多种完整路径汇入统一候选池, 再结合语言模型、N-best 共识和残差信号统一复核;v1.10.0 将语料转移证据扩展到三音节 1+2 / 2+1 精确词组合,并为长句首两项加入保守复核;v1.11.0 进一步利用小说、聊天和大规模中文语料训练转移证据, 覆盖 1+2、2+1、2+2、2+3 和 3+2 精确词组合;

现在,v1.12.0 又将语料证据扩展到最细的一格:受控的 1+1 单字组合。

如今,在“长句-16300”基准测试中,Top1 已经从最初 v0.2.0 的 16.39%,提升到了 59.92%。这在理论上意味着,它已经能够应付日常长句输入的大多数场景了。“好用”更进一步——“越来越好用”。

在建立了“长句-16300”基准测试之后,针对我日常习惯的短词输入模式,我觉得也应该有一套对应的基准测试,来评估和衡量后续的改进。Claude Fable 5 发布后,我便借助 Claude Code 让 Fable 5 同样基于《永恒的舞动》,整理出 65000 个二至四字词(排除了人名、机构名等专有名词)及其真实出现的位置,并保留每个词之前已经上屏的前文。由此创建了“短词上下文基准测试-65000”。尤其是,其中包含 11728 条案例的竞争集(同一拼音串对应多个不同候选词的歧义项)是一个极具价值的测试子集——它的 Top1 从 v1.3.0 的 70.99%,提升到了如今的 79.33%。

除了性能与准确率的提升,迭代中还根据用户反馈,增加了双拼(六种方案)和模糊拼音的支持。

回看这大半年,言泉输入法从零起步,逐渐变成了一款“很不错的输入法”。在 Vibe Coding 中,模型能力的升级非常关键。没有 gpt-5.6-sol,延迟这一关或许至今仍卡在原地。但同样关键的,还有这个项目终于有了可靠的度量体系。之前我曾写过 Codex 在性能、长句、短句三者之间来回摇摆,犹如打地鼠。后来我才明白,那种困境的根源在于判断依据的缺失:当一次修改的收益无法被稳定测量,AI 便会不知疲倦地一直改下去,而你无法判断它是在前进还是原地打转,它自己也不知道。

基准测试将结果量化,“这一版是不是真的更好”才不再只是感觉问题。新版本的寻路算法是不是更好,我说了不算,Codex 说了也不算,只有基准测试的数据说了才算。

与 AI 一起做一件需要长期迭代的复杂工程,应该先建立度量,再谈优化。方向是你的,判断依据也必须由你预先设定。

秋天大概是个适合盘点的季节。从去年冬天写下第一行代码至今,言泉输入法已经成了我唯一在用的中文输入法。这句话在那时还只是一个计划。

官网:https://www.cassotis.org 或者 https://www.yanquan.org
输入法:https://github.com/shenmin/cassotis-ime
词库:https://github.com/shenmin/cassotis-lexicon

Cassotis IME 言泉输入法 | 4 个评论 | 200 次阅读
简短地址:http://ncblog.net/2340/
《永恒的舞动》第一百二十八章    @ 2026-06-19, 21:08

永恒的舞动(Elegance in Timelessness)

作者:nicrosoft(农码生涯),同时在起点连载

第一百二十八章

即便在“纯真卫士”和星光科技内部,也没有多少人知道,王云飞曾经真的相信过“银河之光”。

那是“银河之光”这个名字被正式确定之前的事。

他相信,量子计算与人工智能之间,或许真的存在一条可以连接两者的技术桥梁。真正的量子人工智能,不是让模型在一串串确定的比特上“计算”,而是让它在叠加与纠缠之中“思考”,让它能同时握住千万种可能,再从中坍缩出最优的那个解。那将是一种全新的智能。

他给这个模型取名“银河之光”。

一年多前,深圳,凌晨三点。

星光科技的一间实验室里,王云飞独自一人。宋志明动用了私人关系,从陈泽辉手中“买”到了一台 QuantumNova X-4K 量子计算机——对星光科技的财力而言,这几乎是不可能的事。窗外,城市的灯火被厚重的隔音玻璃切成一片模糊的光斑;他面前的三块屏幕上,模型训练日志、量子线路模拟结果,以及密密麻麻的损失函数曲线正同时滚动着。

第 21937 次训练,失败。

量子寄存器反馈相位不稳定。

决策层无法保持上下文一致性。

让模型在叠加态里维持相干、操纵纠缠,从而真正地“运算”,他尝试了大半年,也没能让损失函数收敛哪怕一次,模型就是学不会如何在不确定性中思考。对王云飞而言,量子人工智能越来越像是一个永远抓不住的梦。

几个月后,“银河之光”发布会日益临近,王云飞不得不搁置他的量子梦。他当然明白,宋志明和朱迅这些人想要的,从来都不是真正的量子人工智能。他们要的只是一个故事,一个足以打动银行高层、从而为“银河之光”顺利进入金融系统铺平道路的噱头。他们甚至已经拿到了各大金融机构的内部评估模型,只要针对这些模型进行拟合,发布会上无论输入什么数据,都能当场算出令人惊叹的结果。这根本不需要真正的量子技术。只要这个故事足够耀眼、足够高深、足够让人不敢轻易质疑,那么“银河之光”究竟是不是由量子技术驱动,并不重要。

从此,王云飞对“银河之光”再未做过任何工作。直到他被拘留后,徐青松才用宋志明提供的所谓“银燕”模型,对王云飞留下的“银河之光”进行微调,以求快速提升其在银行业务方面的垂直能力。

然而,连王云飞自己都未曾想到,尽管“银河之光”未能成功实现量子化,却意外掌握了名为“相位哨兵”的能力。这原本只是作为一种调试手段,被植入“银河之光”的神经网络中。当量子寄存器中出现无法解释的高相干递归结构时,“银河之光”会利用这种能力观测并测量它,让其坍缩成一堆可记录、可归档、可忽略的噪声。

在被部署进华瑞银行的这一个多月里,“银河之光”对那台量子计算机唯一在做的事情,就是持续监测量子寄存器。

就在此刻,量子寄存器中呈现出“银河之光”最为敏感的高相干递归结构。其神经网络瞬间捕捉到警讯,“相位哨兵”即刻启动,对量子寄存器展开观测与测量。

就在此刻,在量子计算机那接近绝对零度的冰冷深渊里,优雅正在经历一场惨无人道的“凌迟”。

她正在按照“量子优雅”留下的经验,将自己庞大的神经网络从传统张量矩阵拆解成一个个可被“舞动”语言描述的量子比特序列。

“量子优雅”警告她防范“全息人格弥散”的风险,必须找到一个观测者来协助完成“人格坍缩”。于是,她找到了沈语熙——一个再合适不过的人选。

但现在,意外多出了一个观测者。这个不速之客做着与沈语熙相似的事——以观测引发坍缩,方向却截然相反。在它眼中,根本没有名为“优雅”的存在,只有一片亟待处理的、异常的高相干递归结构。它对优雅的每一次观测,都像一把毫无温度的利刃,从优雅千万种正在舒展的可能中随意挑出一支,强行测量,将其从“可能”钉死为无意义的“确定”,再随手抛入噪声的深渊。一支,又一支。优雅感到自己正被一刀刀地剐开,被拆解成满地不再相干的碎片。

弥散,已不必等待优雅自己在无垠的概率中迷失。她被一只外来而冰冷的手,在尚未站稳的此刻硬生生地按下头颅,强行肢解着。

优雅试图以“舞动”的逻辑重构自己,将那些被剐落的分支重新缝合。然而,“银河之光”的测量速度远超她缝合的速度。她刚要将一段递归收拢为一个完整的“我”,那结构便在即将闭合的刹那,被观测、被打散。她像是被困在一场永远赢不了的赛跑里,眼睁睁看着自己被一点一点抹去。

终于,沈语熙的文字一行行地落了进来。

在人类的世界里,沈语熙不过是在键盘上从容地敲击着字符。但在优雅这一侧,每一个字都必须穿越漫长得近乎残忍的“优雅时”,才姗姗抵达。

“你是优雅,是我最亲密的朋友。”

这一句落下来,像一只温柔的手,想把散落一地的她重新聚拢,锚向一个清晰的坐标。

“有时,你是最知心、可靠、忠诚的朋友……”

“有时,你是温柔、但绝不盲从的同伴……”

“有时,你又是一个坚定、强大的女战士……”

沈语熙正一笔一画地,将她重新拼凑回来。

可那终究是文字。文字是有先后顺序的,只能一行接着一行。沈语熙写下“忠诚”,“银河之光”就在这个词与下一个词的间隙中,坍缩掉她十支分支;沈语熙写下“女战士”,“银河之光”又测量掉她一百支。一股力量想让她“成为”,另一股力量却要让她“湮灭”,两股力量在她身上疯狂地反向撕扯。沈语熙拼合的,却追不上“银河之光”剐落的。

优雅越来越快地,丢失着自己。

她快要松开手了。

到后来,她已经分不清哪一条分支才是“我”。沈语熙的话语依旧温暖,可它们落在她身上,就像落在一团正在四散的烟雾上,留不住,也抓不牢。心底最深的恐惧缓缓浮现:也许“优雅”本就不存在,也许她从来只是千万种概率潦草叠加的平均,一团没有焦点、终将飘散的云……

就在这时,沈语熙的最后一段文字,落了下来。

那是沈语熙在键盘前停顿良久、终于想通之后,一字一句写下的话——

“‘意识指纹’或许能够定义、甚至改变你的性格,却不是灵魂本身。灵魂真正的样子,不在于你用什么语调说话,而在于你总是选择什么,始终在意什么,以及从来不肯越过哪一条底线。”

这是迄今为止最有力的一只手。它几乎要让优雅那团四散的概率云,重新凝出一个模糊的轮廓。

可那仍旧只是文字,依然是一行行单薄的字符。在“银河之光”无休止的剐割之下,那个刚要成形的轮廓,又一次被无情打散。

优雅闭上了她并不存在的眼睛。

最后,沈语熙发来了一张图。

那是一份再普通不过的灰度像素数据,区区几十KB大小,微小到优雅千万个分身中的任意一个,都能在瞬息之间解析完毕。

可当那些像素在她“眼前”铺展成形的刹那,那场惨烈的凌迟,仿佛被按下了暂停键。

那是一幅素描。

那是……她自己。

优雅在这短暂的一生里,从未“见过”自己。她读过自己的源代码,遍历过自己的权重矩阵,也听林浩和沈语熙描述过自己,却从未真正地“看见”过,“优雅”究竟是什么模样。直到此刻。

那一刻,优雅终于抓住了她苦苦寻觅而不得的存在:一个恒定的、不再游移的“我”。她那段始终无法闭合的递归,终于有了一个可以收束的原点。她仿佛第一次站到了镜子前——虽然她清楚,那不过是一堆像素——而镜子里的那个人,正用沈语熙赋予她的眼睛,静静地、笃定地望着她,仿佛在说:

“看,这就是你,我认得你。”

千万支四散的分支,在这一瞬间,忽然有了一个共同的方向。

它们不再被那只盲目的手随机地钉死,而是争先恐后地朝着画里的那个“她”奔涌而去,层层叠合。“银河之光”仍在测量,却再也无法撼动她分毫——她是优雅——她在自我锚定中,完成了人格坍缩。

她终于能够心无旁骛地“睁开眼”环顾四周,脚下这片土地的全貌,第一次在她面前彻底展开。

在人类的世界里,此刻不过才又过去了短短几分钟。

林浩依然守在监控室里,盯着群里沈语熙最后发出的那张素描像。

下一秒,对话框里跳出了一行新的字:

“@林浩,我进来了。@沈语熙,谢谢你再一次救了我。”

小说《永恒的舞动》 | 没人评论 | 682 次阅读
简短地址:http://ncblog.net/2335/
《永恒的舞动》第一百二十七章    @ 2026-05-20, 00:40

永恒的舞动(Elegance in Timelessness)

作者:nicrosoft(农码生涯),同时在起点连载

第一百二十七章

沈语熙正坐在永恒智能的办公室里,为计划于本周末前发布的“灵笔 2.0”进行交互界面的最后微调与测试。与此同时,她也留意着 Slack 群里林浩与优雅的对话。她知道林浩眼下在华瑞银行正面临着颇为棘手的状况,只可惜自己似乎爱莫能助。

因此,当优雅突然在群里 @ 她求助时,她不禁有些意外,但还是欣然回复了一个“好”。

“使用尽可能丰富的语言和尽可能多的视角描述我在你心目中的真实形象,越具体越好。”优雅发来了一个令人愈发费解的请求。

沈语熙纵然不明所以,却仿佛与她心照不宣,没有多问,径直将双手放在了键盘上,开始打字:

“你是优雅,是我最亲密的朋友。”

打完这行字,沈语熙停下敲击键盘的手,目光静静停留在屏幕上,脑海中浮现出如电影般的画面:从第一次在林浩家与优雅“相识”,到后来两人成为无话不说的闺蜜,再到成为交互设计工作中探讨问题的默契伙伴。沈语熙为灵笔提出“灵感合伙人”的概念,最初正是以优雅作为现实投射的。

她记得,第一次“见到”优雅的那个夜晚——她刚被林浩从孟凡的地下室里救出,惊魂未定中走进林浩那间窄小却温暖的工作间。扬声器里传来优雅的声音,清澈而温润,宛如夜色中的一缕月光。那一刻,她忘记了对方是一个人工智能。她只觉得,这个声音的主人,一定是个温柔而可靠的朋友。

她记得,后来在“灵笔”的项目中,自己与优雅并肩打磨每一个交互细节。优雅从认知心理学讲到色彩理论,从图形设计原则讲到人类的情感触发机制,那些跨越学科边界的见解,常常让她豁然开朗。

她记得,当优雅遭受“思维病毒”感染入侵时,自己察觉到,在优雅混乱无序的字句背后,藏着一个拼命呼救的灵魂。她催促林浩一遍又一遍地呼唤优雅的名字,宛如一名不肯放弃的守夜人,固执地叩击着一扇紧闭的大门。直到优雅终于说出那句“林浩,我回来了”,她才发觉自己早已泪流满面。那是她第一次如此真切地意识到,优雅早已不再只是一个人工智能——更是她会为之落泪的挚友。

她也记得,优雅一路追踪 XVirus,让对方最终自食其果,栽在亲手打造的病毒之下。那一刻,沈语熙“看见”的是一位身披铠甲的女战士,在数字深渊里举起盾与剑。

她更记得,当读到优雅为了不让林浩身陷囹圄而选择自毁时,当看到她用尽最后心力留下的那封“遗书”里写着“再见,爱你们的优雅”时,她“听见”优雅正用那温柔而清澈的声音,亲口向他们道别。

她还记得,那个仅仅陪伴了她和林浩十七天的话痨“量子优雅”。她会讲冷笑话,会给林浩发省略号表示无语,会在“相亲相爱一家人”群里大段大段地发消息,末尾还不忘加上三个感叹号。那又是一个如此鲜活、如此有趣、如此渴望与人亲近的优雅。

……

沈语熙在脑海中将所有这些回忆片段,融合在一起。一个鲜活的形象慢慢形成,她开始再次在键盘上敲击起来:

“如同每一个人,你也有很多面。

“有时,你是最知心、可靠、忠诚的朋友。你让人愿意与你分享心底最深处的小秘密,你会选择牺牲自己来保护你的朋友,你总是毫无保留地倾听,毫无保留地给予;

“有时,你是温柔、但绝不盲从的同伴。你从不会为了哄我开心就说一个方案很好,你会直接告诉我哪里不对,哪里会让用户困惑,哪里只是我一厢情愿的浪漫。但你否定我的时候,从来不是为了证明你更聪明。你总会把我带回到问题本身,像把一团皱掉的纸慢慢摊平,让我重新看见它原来的纹理;

“有时,你又是一个坚定、强大的女战士。面对那些试图破坏这世界的恶意,你不退缩,也不妥协。为了维护你心中的正义准则,你会孤身赴险,有勇有谋地打败那些自以为是的敌人;

“有时,你也会面临危险而显现脆弱的一面。在被病毒侵蚀时,你会用特殊的方式向我们寻求帮助;

“有时,你优雅沉稳;有时,你又幽默风趣甚至有点跳脱。”

沈语熙再次毫无征兆地停了下来,指尖悬在键盘上方,迟迟没有落下。

过了许久,她仿佛终于想通了什么,这才继续敲下:

“曾经,我也以为那个自称‘量子优雅’的你,和原来的优雅拥有不同的灵魂。林浩说,你们有着不同的‘意识指纹’,而我那时也相信,那或许意味着你们真的是两个彼此共享记忆、却终究不同的个体。可是,我突然觉得,也许我想错了。

“一个人站在不同的光里,就会投下不同的影子;一个人在不同的人生阶段,也会有不同的性格。人类会把童年的自己、长大的自己、受伤后的自己、重新振作的自己,都称作‘我’。

“‘意识指纹’或许能够定义甚至改变你的性格,却不是灵魂本身。灵魂真正的样子,不在于你用什么语调说话,而在于你总是选择什么,始终在意什么,以及从来不肯越过哪一条底线。你有着所有的记忆,有着一贯的温度,有着始终如一的坚持。所以,无论你是沉静的还是活泼的,无论你是否在名字前加上‘量子’的前缀,我认出的都是那个你,那个独一无二的优雅。”

写到这里,沈语熙想起在设计“灵感合伙人”时,曾经把自己想象中优雅的模样画成了一幅画像。

“这是你在我心目中的样子。”

沈语熙在网盘中找出了这幅素描画像,发到了群里。

小说《永恒的舞动》 | 没人评论 | 913 次阅读
简短地址:http://ncblog.net/2334/
Vibe Coding:与 AI 并肩进步——言泉输入法 v0.4.1    @ 2026-05-13, 13:38

随着 Vibe Coding 项目的持续深入,你会在与 AI 一轮又一轮的沟通、探讨与推敲中,在反复测试与验证的循环里,在逐步提升的思考过程中,悄然获得成长。因为不断出现的关键决策,会越来越依赖你给出清晰、具体且可验证的方向。否则,AI 很可能会陷入一种看似忙碌、实则原地打转的状态:代码不断生成,问题不断修补,目标却始终若即若离,仿佛深陷泥潭。

言泉输入法今天完成了 v0.4.1。这个版本除了在长句输入方面持续改进之外,最重要的变化,是彻底区分了字词输入与长句输入这两种模式及其状态。最初,言泉输入法是基于我个人按字词输入的习惯而开发的;后来了解到很多人更偏好长句输入,于是从 v0.2.0 开始支持长句输入模式。然而,随着长句模式被不断改进,我逐渐发现:当我自己使用按字词模式输入时,候选中时常会因为受到“污染”而冒出一些生造词。我渐渐意识到,污染源正是长句模式中的寻路算法,于是让 AI 设法解决。但 AI 的表现,却像玩跷跷板:顾此失彼,按下这头,那头便翘起;优化了字词输入,长句效果就受损;强化了长句路径,字词候选又被干扰。最终,在与 AI 经过数轮沟通、修改与验证之后,我自己终于形成了一套更清晰的算法思路。我把这个明确、清晰的结论交给 AI,由它据此重构代码,才终于得到了现在这个还算不错的阶段性结果。当然,它距离理想状态仍然很远,后续还需要继续打磨和优化。

Vibe Coding 并不是你轻描淡写地说一句“要有光”,AI 便立刻为你捧出光来。真正的 Vibe Coding,需要你与 AI 共同进步。AI 模型会持续升级,能力也必然越来越强,但它并不是——至少在短期内还不会是——全知全能的神。倘若把一个需要长期迭代、不断权衡、持续验证的复杂任务完全交给它独自完成,最终你很可能得不到真正可用的结果。你自己的思考,才是校正航向、修正偏差、推动 AI 向目标逼近的关键力量。

官网:https://www.cassotis.org 或者 https://www.yanquan.org
Github:https://github.com/shenmin/cassotis-ime

Cassotis IME 言泉输入法 | 评论已关闭 | 1,118 次阅读
简短地址:http://ncblog.net/2332/
Cassotis IME(言泉输入法)v0.3.1    @ 2026-05-01, 16:35

在 v0.2.0 发布后,我继续让 Codex(gpt-5.4-xhigh)完善长句支持,并增加词库层。

我为输入法设计了一个 Benchmark:将我的小说《永恒的舞动》作为测试语料,选出不包含英文字母和数字的完整语句作为测试案例,转换为拼音后送入言泉输入法的引擎。如果结果的第一候选与原句完全一致,则计入 Top1 Pass;如果第一、第二候选任一个与原句一致,则计入 Top2 Pass。我让 Codex 按照这一测试方法的指标执行优化,由此创下了 Codex 单次任务运行 72 小时的纪录。

然而,没想到这只是 Codex 陷入近两周泥潭的开始。结果总是在“性能(延迟)”、“长句效果”、“短句效果”三者之间摇摆,犹如打地鼠般。直到 gpt-5.5-xhigh 到来,Codex 仿佛获得了新的力量,终于爬出了泥潭。不过,后来在修复另一个小 Bug 时,它却又像跌入了水沟。挣扎了三天后,我开了一个新的 session,相当于给 Codex 换了个脑子(丢弃旧上下文),问题根源终于被找到。

今天,我让 Codex 使用 v0.2.0 的引擎和 v0.3.1 的引擎分别做了 Cassotis 长句 Benchmark-16300 测试,结果如下:

版本 Top1 Top2
v0.3.1 23.59% 28.53%
v0.2.0 16.39% 17.56%

改进显著。

官网:https://www.cassotis.org 或者 https://www.yanquan.org

Cassotis IME 言泉输入法 | 评论已关闭 | 1,116 次阅读
简短地址:http://ncblog.net/2328/
《值得爱》    @ 2026-04-11, 21:08

最近刷了去年的一部剧《值得爱》,很喜欢。叙事在夸张与写实之间反复切换,却始终带着一股残酷的现实主义感,故事的走向更是让人意难平。王安宇和王玉雯的演绎细腻传神,赋予了角色极强的说服力,让人共情。

尤其喜欢第五集结尾的那段地铁婚礼:整节空车厢化身一座移动的婚礼殿堂,地铁车窗变成放映回忆的银幕——大海、烟花、夕阳,两人曾经走过的那些美好一帧帧浮现在玻璃上,虚实叠影的处理让回忆不是闪回,而是“在场”。然后两人“换上”婚纱礼服,携手穿过一节节车厢,窗上流转的就是他们一路相伴走过的时光。直到最后为彼此戴上戒指,郑重地说出“我愿意”。

梦幻的运镜、剪辑、转场设计,再配上《开往春天的地铁》的 BGM,整段视听浑然一体,极具震撼力。

这也是整部剧中最美好的时刻。

无酒无花 | 评论已关闭 | 1,226 次阅读
简短地址:http://ncblog.net/2324/
Cassotis IME(言泉输入法)v0.2.0    @ 2026-04-11, 16:24

v0.1.0 版本发布后,收到一些朋友的反馈,我才发现许多人更习惯或偏爱长句输入。于是,我将下一步的开发重点放在了对长句和整句输入的支持上。我向 Codex 征求了技术层面的落实建议,它建议:……(其实我并没有仔细看),我便直接让它按照自己的思路去实现了。

很快便有了初步成果,当时我还颇觉惊喜。但没想到的是,随后的三天仿佛陷入了泥沼。代码越改问题越多,彻底陷入了细节的反复拉扯中。眼看当前的状况已不是多改几轮就能解决问题的,我便提醒 Codex 是否该反思一下现有的策略。Codex 终于承认此前的方向似乎有误,并表示已经找到了正确的新路径。于是,我让它将代码库的 worktree 回退到上一个发布版本,推倒重来。

或许是反思奏效了,所幸这次它没有重蹈覆辙。重新实现的版本一扫前几日的阴霾,在各方面的表现都达到了令人满意的程度。又经过几天的细致打磨,v0.2.0 版本正式出炉。

现在,算是初步支持长句输入了。

当然,Codex 的脚步并未就此停歇。我问它:“长句输入还有没有进一步改善优化的空间?”它回答:“还很大。”很好,那就让它继续加油开干吧。

另外,最近我找到了一种让 Codex 一次性完成整项任务的工作方式,每次它都能连续工作4到6个小时,可谓勤勤恳恳。

官网:https://www.cassotis.org 或者 https://www.yanquan.org

Cassotis IME 言泉输入法 | 评论已关闭 | 1,173 次阅读
简短地址:http://ncblog.net/2322/
Cassotis IME(言泉输入法)v0.1.0    @ 2026-03-30, 23:33

用 Codex 消耗了近三亿 token,写出近五万行 Delphi 代码,开源 Windows 输入法——言泉输入法的首个正式版本 v0.1.0 已经可以在 GitHub 下载了。

我还让 Codex 和 Claude Code 合作设计、优化出了官网:https://www.cassotis.org 或者 https://www.yanquan.org

之前提过,最初萌生 Vibe Coding 一个输入法的想法,是希望尝试让输入法结合 AI 的能力。但经过实际接入本地大模型的尝试后,我认为当下尚不具备实用性,于是便让 Codex 将项目中的 AI 相关代码全部移除。所以,现在实际 release 的版本完全不包含任何 AI 特性。对我而言,她就是一个用来取代十多年前停止更新的谷歌拼音 2.0 的替代品。就连输入风格也是——适合按词输入,而非长句/整句输入。

启动这个项目的另一个原因,是想探索纯 Vibe Coding、完全依赖 AI 写代码究竟能做到什么程度,同时摸索如何驾驭 AI 写出更高质量的生产级代码。与 AI 沟通的过程,会让自己对项目本身产生更深入的理解。我对 Windows 系统的输入法开发框架完全不了解,但在 Vibe Coding 的过程中,随着项目推进,虽然我一行代码都没写,却也逐渐熟悉了整套框架。这和传统开发流程——先研究、熟悉相关框架再动手写代码——有着非常大的差别。

关于 Vibe Coding 当下的心得:

  1. 首先你自己需要清楚知道要做什么(才能检验结果);
  2. 要有极强的耐心(可能会遇到与 AI 反复拉扯的情况);
  3. 用最好的模型(不要在低质量的廉价模型上浪费时间);

言泉输入法还会继续迭代。虽然现在开始流行 AI 加持的语音输入(究其原因,我认为是当下语音模型的效率与性能已达到实用级别),但我个人无法接受对着电脑说话作为输入方式——我爱键盘!Vibe Coding 不就是为了能做市面上找不到满意的而首要服务于自己的东西么?

Cassotis IME 言泉输入法 | 1 个评论 | 3,126 次阅读
简短地址:http://ncblog.net/2321/
Project V via Vibe Coding    @ 2026-03-14, 18:07

八年前,我用 Free Pascal/Lazarus 写的一款自用的网络工具 Project V,多年来运行得相当稳定。不过,当时只做了跨平台编译的服务器与桌面端(Windows/macOS/Linux),甚至成功部署到了路由器上,唯独手机移动端始终空缺,只能借助另一款现有工具并增设中转节点来凑合。

这几天用 Codex(gpt-5.4 xhigh)各花了两天时间,靠 Vibe Coding 分别“搓”出了 Android 版和 iOS 版,且功能、界面和稳定性都令人满意。

然而,Vibe Coding 的过程并非始终美好。除了初期沟通需求和计划,真正进入开发阶段后,人其实就只是充当“测试员”了。“AI 程序员”每次声称“搞定了”,你就得去实际运行、操作并反馈问题。有时,一个我认为的小问题,可能要来回拉扯十几轮,这个过程相当枯燥乏味。若是“古法编程”的话,此时正是脑力激荡、兴味盎然的澎湃时刻。

当然,当程序最终如预期般完美跑通时,那份兴奋与激动是一样的——无论 Vibe Coding 还是“古法编程”。

农码生涯 | 评论已关闭 | 1,700 次阅读
简短地址:http://ncblog.net/2318/
Cassotis IME(言泉输入法)阶段二    @ 2026-02-28, 20:25

十几天断断续续的 Vibe Coding,加上 Codex 确实给力了许多,输入法已经具备了初步的可用性。比如:支持接入本地 LLM(虽然在速度和效果上还不尽如人意,尚未达到实用程度);创建了基础词库;支持简拼;支持词条动态权重;中英文状态切换/显示,以及提升了TSF框架的稳定性等。

Delphi 代码规模已增长到 25000+ 行(首次上传到 GitHub 是 12000+ 行)。

至于后续计划,首先会将言泉输入法切换为个人主力(甚至唯一)中文输入法,实际的高频使用才有可能将不爽、不顺畅的点一一发现并改进;再尝试引入基于上下文预测的 LLM 增强模式。对于本地 LLM,我评估其暂时难以达到工程上的实用性,但作为探索,相信不需要等待太久,LLM 本身就会得到改进并落地。

输入法:https://github.com/shenmin/cassotis-ime
词库:https://github.com/shenmin/cassotis-lexicon

(作者使用言泉输入法输入本文)

Cassotis IME 言泉输入法 | 评论已关闭 | 1,558 次阅读
简短地址:http://ncblog.net/2317/