這個周末,一個開發(fā)者做了一件看起來有點“不務(wù)正業(yè)”的事——他沒有去優(yōu)化生產(chǎn)環(huán)境,沒有去寫自動部署腳本,而是埋頭搗鼓一個能“聽”會“說”、還能乖乖躺進小床里睡覺的桌面AI伙伴,名字叫Catbot。
事情的起點很簡單:他想在本地跑一個真正屬于桌面的語音助手,不是瀏覽器插件,也不是云端API的包裝殼。去年他還在用Notion整理筆記,就在這次搭建過程中,他直接把知識庫搬到了Obsidian。這個決策無意中給Catbot裝上了一顆可以持續(xù)生長的“記憶芯片”——Obsidian成了不同AI代理之間溝通的知識基座,無論調(diào)用的是Claude、Gemini還是本地跑的大模型,Catbot都能把上下文串接起來。
![]()
從零到一的構(gòu)建時間線很短。一個FastAPI服務(wù)就是Catbot的腦干,掛在8800端口上,所有交互都走HTTPS。然后是語音系統(tǒng):他用Vosk做本地離線識別,用Kokoro的ONNX模型合成語音。為了不讓誤喚醒變成災(zāi)難,他下足了功夫——光是“Catbot”這個詞,Vosk就能識別成“cat bought”“that bought”“can't bought”等十幾種奇怪變體。于是他從一開始就設(shè)計了一套容錯極高的正則喚醒詞表:允許模糊匹配,偏向于過度靈敏,“一次假喚醒只是多聽幾秒,一次漏喚醒會讓助手形同虛設(shè)”。
更有意思的是“睡覺”和“醒來”這套交互。只要你說了“go to sleep”“shut down”“be quiet”里任何一個短語,Catbot就會停止收聽,躺進它的小床——是真的畫面里的床,開發(fā)者給它做了個皮膚編輯器,可以改外觀。而喚醒時,他又設(shè)計了寬松的規(guī)則,只要捕捉到“engage”“wake up”或者類似發(fā)音,它就會彈起來。這套邏輯被寫在一個叫catbot_voice.py的代碼里,目前項目還是私有的,但分享出來的初始化片段已經(jīng)能看出工程潔癖:環(huán)境變量靠.env,模型文件放在models文件夾下,線程、隊列、日志一應(yīng)俱全。
最讓我興奮的地方,不是他用了哪些模型,而是他放棄“完美理解”的執(zhí)念,選擇“先跑起來再說”。喚醒詞的模糊匹配、ASR和TTS之間憑空產(chǎn)生的發(fā)音歧義,都沒有被當(dāng)成Bug去死摳,而是用正則花招和寬松策略繞了過去。這種務(wù)實感讓Catbot不像一個精致的演示Demo,更像是某個人真的要天天用的東西。
開發(fā)者沒有透露后續(xù)會不會開源,但從目前放出的結(jié)構(gòu)來看,這個“定制鞍具”(custom harness)的設(shè)計意圖很清楚——它不綁定某個大模型,語音和命令路由是獨立層,想接哪個AI代理就接哪個。也許下一次周末,他會讓Catbot學(xué)會自己整理Obsidian里的筆記。誰知道呢,但一個能在桌面上陪你發(fā)呆、聽你吐槽、喊它就去睡覺的AI小東西,已經(jīng)夠讓人心動了。
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺“網(wǎng)易號”用戶上傳并發(fā)布,本平臺僅提供信息存儲服務(wù)。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.