戰(zhàn):從零構(gòu)建AI語(yǔ)音助手與播客應(yīng)用)
1. 從“寫(xiě)代碼”到“說(shuō)需求”AI 編程工具鏈到底改變了什么過(guò)去兩年我身邊不少做產(chǎn)品的朋友都經(jīng)歷過(guò)一種很割裂的狀態(tài)腦子里有個(gè)很具體的想法比如“我想做一個(gè)能實(shí)時(shí)對(duì)話的語(yǔ)音助手”或者“我想做一個(gè)自動(dòng)生成播客節(jié)目的工具”但真要落地要么得找開(kāi)發(fā)排期要么自己啃前端后端一堆框架光環(huán)境配置就能耗掉一個(gè)周末。而現(xiàn)在Bolt 和 Cursor 這類(lèi)工具的組合把這件事的門(mén)檻拉到了一個(gè)前所未有的低點(diǎn)——你不需要先成為程序員才能開(kāi)始做軟件。這篇文章想聊的就是怎么用 Bolt Cursor 這套組合把“每個(gè)人都可以擁有自己的專(zhuān)屬軟件”這句話從口號(hào)變成可執(zhí)行的動(dòng)作。我會(huì)圍繞兩個(gè)典型場(chǎng)景展開(kāi)一個(gè)是 AI 實(shí)時(shí)語(yǔ)音助手一個(gè)是 AI 播客應(yīng)用。前者考驗(yàn)的是實(shí)時(shí)交互鏈路和音頻流處理后者考驗(yàn)的是內(nèi)容生成流水線和文件管理。兩個(gè)場(chǎng)景都不算簡(jiǎn)單但用對(duì)工具之后從零到能跑通的 Demo時(shí)間可以壓縮到幾個(gè)小時(shí)以內(nèi)。先明確一下這套組合的分工。Bolt 的核心價(jià)值在于“從一句話生成一個(gè)可運(yùn)行的項(xiàng)目骨架”它更像一個(gè)能理解自然語(yǔ)言的產(chǎn)品經(jīng)理加初級(jí)全棧工程師你描述需求它給你一個(gè)帶界面、帶基礎(chǔ)邏輯、能直接在瀏覽器里預(yù)覽的工程。Cursor 則是“在已有代碼基礎(chǔ)上做精細(xì)手術(shù)”的編輯器它深度集成了 AI 能力能讀整個(gè)項(xiàng)目上下文適合在 Bolt 生成的骨架之上做功能增強(qiáng)、邏輯修正和性能調(diào)優(yōu)。兩者配合的邏輯是Bolt 負(fù)責(zé)從 0 到 0.6Cursor 負(fù)責(zé)從 0.6 到 0.9剩下的 0.1 靠你自己的判斷和調(diào)試。注意Bolt 和 Cursor 都是工具不是魔法。它們能極大加速“從想法到可運(yùn)行原型”的過(guò)程但如果你對(duì)目標(biāo)場(chǎng)景的技術(shù)鏈路完全沒(méi)有概念生成出來(lái)的東西大概率跑不通或者跑通了也不知道怎么改。所以下面每個(gè)場(chǎng)景我都會(huì)先把核心鏈路講清楚再講怎么用工具去實(shí)現(xiàn)。適合讀這篇內(nèi)容的人大概有三類(lèi)一是產(chǎn)品經(jīng)理或創(chuàng)業(yè)者想快速驗(yàn)證一個(gè) AI 應(yīng)用的想法二是剛?cè)腴T(mén)的開(kāi)發(fā)者想通過(guò)實(shí)際項(xiàng)目理解 AI 應(yīng)用的完整鏈路三是有經(jīng)驗(yàn)的工程師想看看這套新工具鏈能不能提升自己的原型開(kāi)發(fā)效率。不管你是哪一類(lèi)接下來(lái)的內(nèi)容都會(huì)盡量把“為什么這么做”和“具體怎么做”都講透。2. 場(chǎng)景一AI 實(shí)時(shí)語(yǔ)音助手的核心鏈路與 Bolt 生成策略2.1 實(shí)時(shí)語(yǔ)音助手到底難在哪里很多人第一次聽(tīng)到“AI 實(shí)時(shí)語(yǔ)音助手”腦子里浮現(xiàn)的是科幻電影里那種無(wú)縫對(duì)話的場(chǎng)景。但真動(dòng)手做的時(shí)候第一個(gè)卡點(diǎn)往往不是 AI 模型本身而是音頻流的處理。實(shí)時(shí)語(yǔ)音助手的核心鏈路可以拆成四段采集音頻 → 實(shí)時(shí)傳輸 → 語(yǔ)音識(shí)別 → 生成回復(fù) → 語(yǔ)音合成 → 播放。這中間任何一段出現(xiàn)延遲用戶體驗(yàn)就會(huì)從“對(duì)話”變成“等待”。我見(jiàn)過(guò)不少新手一上來(lái)就去調(diào)大模型的對(duì)話接口結(jié)果發(fā)現(xiàn)文字回復(fù)很快但語(yǔ)音播放總是慢半拍。問(wèn)題通常出在兩個(gè)地方一是音頻采集的緩沖區(qū)設(shè)置太大導(dǎo)致每次發(fā)送的數(shù)據(jù)包延遲高二是語(yǔ)音識(shí)別和語(yǔ)音合成用了不同的服務(wù)網(wǎng)絡(luò)往返時(shí)間疊加起來(lái)就明顯了。所以在用 Bolt 生成項(xiàng)目之前你得先想清楚你是要做一個(gè)“按住說(shuō)話”的助手還是“隨時(shí)監(jiān)聽(tīng)”的助手前者實(shí)現(xiàn)簡(jiǎn)單后者體驗(yàn)更好但技術(shù)復(fù)雜度高一個(gè)量級(jí)。對(duì)于大多數(shù)想快速驗(yàn)證想法的人來(lái)說(shuō)我建議從“按住說(shuō)話”開(kāi)始。它的鏈路更短調(diào)試起來(lái)也更容易定位問(wèn)題。Bolt 對(duì)這種交互模式的支持很直接你只需要在描述里寫(xiě)清楚“一個(gè)按鈕按住時(shí)開(kāi)始錄音松開(kāi)后發(fā)送音頻并顯示識(shí)別結(jié)果和 AI 回復(fù)”它就能生成一個(gè)基本可用的界面和邏輯框架。2.2 用 Bolt 生成項(xiàng)目骨架時(shí)的描述技巧Bolt 的生成質(zhì)量高度依賴(lài)你的描述質(zhì)量。我試過(guò)用一句話描述需求也試過(guò)用一段結(jié)構(gòu)化的說(shuō)明后者的成功率明顯更高。所謂結(jié)構(gòu)化不是讓你寫(xiě)技術(shù)文檔而是把“用戶看到什么、做什么、系統(tǒng)返回什么”這三件事說(shuō)清楚。比如你可以這樣描述做一個(gè)網(wǎng)頁(yè)應(yīng)用頁(yè)面中央有一個(gè)圓形按鈕。用戶按住按鈕時(shí)按鈕變色并開(kāi)始錄音松開(kāi)后按鈕恢復(fù)原色頁(yè)面下方顯示“識(shí)別中...”的提示。識(shí)別完成后顯示識(shí)別出的文字然后自動(dòng)調(diào)用 AI 生成回復(fù)回復(fù)文字顯示在識(shí)別文字下方。最后自動(dòng)播放回復(fù)的語(yǔ)音。這段描述里包含了界面元素、交互狀態(tài)、數(shù)據(jù)流向和反饋時(shí)機(jī)。Bolt 拿到這樣的輸入生成的代碼結(jié)構(gòu)會(huì)清晰很多后續(xù)你在 Cursor 里改起來(lái)也更容易。相反如果你只說(shuō)“做一個(gè)語(yǔ)音助手”它可能會(huì)生成一個(gè)帶輸入框和發(fā)送按鈕的聊天界面跟你的預(yù)期差很遠(yuǎn)。生成完成后Bolt 會(huì)給你一個(gè)可以直接預(yù)覽的頁(yè)面。這時(shí)候先別急著改代碼而是把整個(gè)交互流程走一遍看看哪些環(huán)節(jié)是通的哪些是斷的。常見(jiàn)的斷點(diǎn)包括瀏覽器沒(méi)有請(qǐng)求麥克風(fēng)權(quán)限、音頻格式不被識(shí)別接口支持、AI 回復(fù)的文本沒(méi)有觸發(fā)語(yǔ)音合成。這些問(wèn)題在 Bolt 的預(yù)覽環(huán)境里不一定全部暴露但至少能讓你對(duì)項(xiàng)目結(jié)構(gòu)有個(gè)直觀感受。2.3 把項(xiàng)目遷移到 Cursor 后的第一輪改造Bolt 生成的項(xiàng)目可以直接導(dǎo)出到本地然后用 Cursor 打開(kāi)。第一次打開(kāi)時(shí)我建議先做三件事通讀目錄結(jié)構(gòu)、找到核心邏輯文件、確認(rèn)環(huán)境變量配置方式。Bolt 生成的項(xiàng)目通常會(huì)把前端和后端邏輯放在一起核心的音頻處理和 API 調(diào)用會(huì)集中在少數(shù)幾個(gè)文件里。找到這些文件你就找到了后續(xù)改造的主戰(zhàn)場(chǎng)。第一輪改造的重點(diǎn)通常是替換掉 Bolt 默認(rèn)使用的服務(wù)。Bolt 為了讓你快速看到效果可能會(huì)用一些免費(fèi)的、有限額的接口。這些接口在演示階段夠用但延遲和穩(wěn)定性往往不理想。在 Cursor 里你可以選中相關(guān)的代碼塊然后用自然語(yǔ)言描述你想替換成什么。比如把這里的語(yǔ)音識(shí)別調(diào)用替換成一個(gè)支持流式識(shí)別的接口要求每 200 毫秒返回一次中間結(jié)果。Cursor 會(huì)基于你選中的代碼和整個(gè)項(xiàng)目的上下文給出修改建議。這里有個(gè)經(jīng)驗(yàn)不要一次性讓 Cursor 改太多東西。一次改一個(gè)模塊改完立刻測(cè)試。實(shí)時(shí)語(yǔ)音助手的鏈路長(zhǎng)一次性改多個(gè)環(huán)節(jié)出了問(wèn)題很難定位是哪個(gè)環(huán)節(jié)導(dǎo)致的。2.4 延遲優(yōu)化的三個(gè)實(shí)操切入點(diǎn)實(shí)時(shí)語(yǔ)音助手的體驗(yàn)好壞延遲是核心指標(biāo)。我在實(shí)際調(diào)試中總結(jié)出三個(gè)最有效的優(yōu)化切入點(diǎn)按優(yōu)先級(jí)排列優(yōu)化點(diǎn)常見(jiàn)問(wèn)題調(diào)整方向音頻采集緩沖區(qū)緩沖區(qū)過(guò)大導(dǎo)致每次發(fā)送的數(shù)據(jù)包間隔長(zhǎng)減小緩沖區(qū)提高發(fā)送頻率語(yǔ)音識(shí)別模式使用整段識(shí)別而非流式識(shí)別切換到流式識(shí)別邊錄邊出文字語(yǔ)音合成觸發(fā)時(shí)機(jī)等 AI 完整回復(fù)后才開(kāi)始合成按句子分段合成邊生成邊播放第一點(diǎn)最容易被忽略。很多默認(rèn)的音頻采集配置會(huì)攢夠一秒甚至更長(zhǎng)的數(shù)據(jù)才發(fā)送一次這在錄音場(chǎng)景沒(méi)問(wèn)題但在實(shí)時(shí)對(duì)話場(chǎng)景就是災(zāi)難。把緩沖區(qū)調(diào)到 100 到 200 毫秒延遲感會(huì)立刻下降一個(gè)檔次。第二點(diǎn)取決于你用的識(shí)別服務(wù)是否支持流式如果不支持可以考慮換一個(gè)。第三點(diǎn)需要在代碼里做分段處理把 AI 返回的長(zhǎng)文本按標(biāo)點(diǎn)切成短句每切出一句就送去合成而不是等全部生成完。在 Cursor 里做這些調(diào)整時(shí)你可以直接把問(wèn)題描述給 AI比如“現(xiàn)在的語(yǔ)音識(shí)別要等錄音結(jié)束后才開(kāi)始我想改成邊說(shuō)邊識(shí)別應(yīng)該改哪里”。Cursor 會(huì)定位到相關(guān)代碼并給出修改方案。但你要自己判斷方案是否合理因?yàn)榱魇阶R(shí)別涉及到音頻分片和結(jié)果拼接邏輯比整段識(shí)別復(fù)雜不少。3. 場(chǎng)景二AI 播客應(yīng)用的生成流水線設(shè)計(jì)3.1 播客應(yīng)用和語(yǔ)音助手的本質(zhì)區(qū)別表面上看AI 播客應(yīng)用和 AI 語(yǔ)音助手都涉及語(yǔ)音但兩者的技術(shù)重心完全不同。語(yǔ)音助手是實(shí)時(shí)交互核心指標(biāo)是延遲播客應(yīng)用是內(nèi)容生產(chǎn)核心指標(biāo)是內(nèi)容質(zhì)量和生產(chǎn)流程的自動(dòng)化程度。換句話說(shuō)語(yǔ)音助手追求“快”播客應(yīng)用追求“穩(wěn)”和“好”。一個(gè)典型的 AI 播客應(yīng)用鏈路大概是輸入主題或素材 → 生成播客腳本 → 文本轉(zhuǎn)語(yǔ)音 → 音頻拼接與后期 → 導(dǎo)出文件。這中間每一步都可以引入 AI 能力但每一步也都有各自的坑。比如腳本生成如果你直接讓大模型寫(xiě)一段播客對(duì)話它可能會(huì)寫(xiě)出很生硬的“主持人 A 說(shuō)...主持人 B 說(shuō)...”這種格式聽(tīng)起來(lái)像在念課文。要讓它自然你得在提示詞里加入風(fēng)格約束和對(duì)話節(jié)奏的示例。用 Bolt 生成播客應(yīng)用時(shí)我建議把重點(diǎn)放在“流程可視化”上。也就是說(shuō)讓用戶在界面上看到每一步的進(jìn)度和結(jié)果而不是點(diǎn)一個(gè)按鈕等半天。Bolt 很擅長(zhǎng)生成這種帶步驟指示器的界面你只需要在描述里強(qiáng)調(diào)“每一步完成后顯示預(yù)覽用戶可以修改后再進(jìn)入下一步”。3.2 腳本生成環(huán)節(jié)的提示詞工程播客腳本的質(zhì)量直接決定了最終音頻的聽(tīng)感。我在這個(gè)環(huán)節(jié)踩過(guò)的坑最多總結(jié)下來(lái)有幾個(gè)關(guān)鍵點(diǎn)角色設(shè)定要具體不要只說(shuō)“兩個(gè)主持人”而是描述他們的性格、說(shuō)話習(xí)慣和互動(dòng)方式。比如“一個(gè)語(yǔ)速快、喜歡打斷對(duì)方的科技愛(ài)好者和一個(gè)語(yǔ)速慢、喜歡總結(jié)的行業(yè)觀察者”。對(duì)話節(jié)奏要控制在提示詞里明確要求“每段對(duì)話不超過(guò)三句交替發(fā)言適當(dāng)加入語(yǔ)氣詞和停頓標(biāo)記”。內(nèi)容結(jié)構(gòu)要清晰把播客分成開(kāi)場(chǎng)、主體、結(jié)尾三部分每部分給出字?jǐn)?shù)范圍避免生成內(nèi)容過(guò)長(zhǎng)或過(guò)短。這些約束在 Bolt 生成的初始代碼里通常是沒(méi)有的需要你在 Cursor 里找到調(diào)用大模型的函數(shù)把提示詞模板改掉。Cursor 的好處是它能理解你改動(dòng)的意圖如果你在提示詞里加了“加入停頓標(biāo)記”它可能會(huì)順便幫你在后續(xù)的語(yǔ)音合成環(huán)節(jié)加上對(duì)停頓標(biāo)記的處理邏輯。3.3 文本轉(zhuǎn)語(yǔ)音的選型與拼接邏輯文本轉(zhuǎn)語(yǔ)音這個(gè)環(huán)節(jié)選型比調(diào)參重要。不同的語(yǔ)音合成服務(wù)在音色自然度、多音字處理、情感表達(dá)上差異很大。我的建議是先用一個(gè)服務(wù)跑通全流程再根據(jù)實(shí)際聽(tīng)感決定是否替換。因?yàn)椴煌?wù)的接口格式和返回的音頻格式可能不同頻繁替換會(huì)浪費(fèi)大量時(shí)間在格式轉(zhuǎn)換上。拼接邏輯是另一個(gè)容易被低估的環(huán)節(jié)。播客通常有多段對(duì)話每段對(duì)話單獨(dú)合成后需要拼成一個(gè)完整文件。這里要注意兩點(diǎn)一是段與段之間的靜音間隔要合理太短顯得急促太長(zhǎng)顯得拖沓一般 300 到 500 毫秒比較自然二是如果不同段用了不同的音色拼接后的音量要統(tǒng)一否則會(huì)出現(xiàn)一段聲音大一段聲音小的情況。在 Cursor 里處理拼接邏輯時(shí)你可以讓 AI 幫你寫(xiě)一個(gè)音頻處理函數(shù)輸入是多個(gè)音頻文件的路徑和間隔時(shí)長(zhǎng)輸出是拼接后的文件。這個(gè)函數(shù)本身不復(fù)雜但涉及到音頻格式的讀取和寫(xiě)入用現(xiàn)成的庫(kù)會(huì)比手寫(xiě)靠譜得多。3.4 導(dǎo)出與文件管理的細(xì)節(jié)播客應(yīng)用的最后一步是導(dǎo)出??雌饋?lái)簡(jiǎn)單但實(shí)際做的時(shí)候有幾個(gè)細(xì)節(jié)值得注意。首先是文件命名如果用戶生成多個(gè)播客文件名最好包含主題和時(shí)間戳方便查找。其次是導(dǎo)出格式常見(jiàn)的音頻格式有 MP3、WAV、AAC 等MP3 兼容性最好但音質(zhì)有損WAV 音質(zhì)好但文件大。如果應(yīng)用面向普通用戶MP3 是更穩(wěn)妥的選擇。還有一個(gè)容易被忽略的點(diǎn)是生成過(guò)程的中間文件管理。腳本文件、分段音頻文件、最終合成文件這些如果都堆在一個(gè)目錄里時(shí)間長(zhǎng)了會(huì)很亂。我通常會(huì)在項(xiàng)目里建一個(gè)output目錄下面按“日期/播客標(biāo)題”的方式組織子目錄每個(gè)播客的中間文件和最終文件都放在自己的目錄里。這個(gè)邏輯在 Bolt 生成的初始代碼里通常沒(méi)有需要你在 Cursor 里補(bǔ)上。4. Bolt 和 Cursor 的配合節(jié)奏什么時(shí)候用哪個(gè)4.1 Bolt 適合“從無(wú)到有”Cursor 適合“從有到好”用了這段時(shí)間我對(duì)這兩個(gè)工具的定位越來(lái)越清晰。Bolt 最擅長(zhǎng)的場(chǎng)景是你有一個(gè)想法但還沒(méi)有任何代碼需要快速看到一個(gè)能跑起來(lái)的東西。它的生成速度很快界面也過(guò)得去適合用來(lái)驗(yàn)證“這個(gè)方向值不值得繼續(xù)做”。但 Bolt 生成的項(xiàng)目在代碼組織、錯(cuò)誤處理、性能優(yōu)化上通常比較粗糙這些正是 Cursor 的強(qiáng)項(xiàng)。一個(gè)比較高效的節(jié)奏是在 Bolt 里把核心流程跑通導(dǎo)出到本地然后用 Cursor 打開(kāi)一個(gè)模塊一個(gè)模塊地打磨。打磨的順序建議按照“數(shù)據(jù)流向”來(lái)先確保輸入環(huán)節(jié)穩(wěn)定再確保處理環(huán)節(jié)正確最后確保輸出環(huán)節(jié)符合預(yù)期。不要一上來(lái)就優(yōu)化界面界面是最不影響核心功能的部分。4.2 什么時(shí)候該放棄 Bolt 生成的結(jié)果不是所有 Bolt 生成的項(xiàng)目都值得繼續(xù)改。我遇到過(guò)幾次這樣的情況生成的項(xiàng)目結(jié)構(gòu)混亂到找不到核心邏輯在哪里或者用的技術(shù)棧跟我后續(xù)想加的功能完全不兼容。這種時(shí)候與其在 Cursor 里一點(diǎn)點(diǎn)重構(gòu)不如回到 Bolt 重新生成一次把描述寫(xiě)得更具體。判斷標(biāo)準(zhǔn)很簡(jiǎn)單如果你在 Cursor 里花了超過(guò)半小時(shí)還沒(méi)找到修改的入口那就重新生成。Bolt 的生成成本很低重新生成一次比在混亂的代碼里掙扎要?jiǎng)澦愕枚?。重新生成時(shí)把之前遇到的問(wèn)題寫(xiě)進(jìn)描述里比如“不要用某個(gè)特定的庫(kù)”或者“把音頻處理邏輯集中在一個(gè)文件里”生成質(zhì)量會(huì)明顯提升。4.3 版本管理和回滾的實(shí)際操作用這套工具鏈開(kāi)發(fā)時(shí)版本管理特別重要。因?yàn)?AI 生成的代碼改動(dòng)往往比較大一旦改錯(cuò)了手動(dòng)回滾很麻煩。我的做法是每次在 Cursor 里做重大改動(dòng)之前先提交一次 Git。這樣即使改崩了也能一鍵回到上一個(gè)可用狀態(tài)。Git 的提交信息也有講究。不要只寫(xiě)“update”或者“fix”而是寫(xiě)清楚這次改了什么比如“替換語(yǔ)音識(shí)別接口為流式模式”或者“增加播客腳本的分段提示詞”。這樣回頭看的時(shí)候能快速定位到某個(gè)功能的改動(dòng)歷史。Cursor 本身對(duì) Git 的支持很好你可以在編輯器里直接看到改動(dòng) diff也可以讓 AI 幫你生成提交信息。5. 兩個(gè)場(chǎng)景共通的坑與應(yīng)對(duì)經(jīng)驗(yàn)5.1 環(huán)境變量和密鑰管理不管是語(yǔ)音助手還是播客應(yīng)用都會(huì)用到第三方的 AI 接口這就涉及到密鑰管理。Bolt 生成的項(xiàng)目有時(shí)候會(huì)把密鑰直接寫(xiě)在代碼里這在本地測(cè)試沒(méi)問(wèn)題但如果你想把項(xiàng)目分享給別人或者部署上線就必須把密鑰抽到環(huán)境變量里。在 Cursor 里做這個(gè)改造時(shí)你可以讓 AI 幫你把所有硬編碼的密鑰替換成環(huán)境變量引用并生成一個(gè).env.example文件說(shuō)明需要配置哪些變量。這里有個(gè)細(xì)節(jié)不要把.env文件提交到 Git在.gitignore里加上它。我見(jiàn)過(guò)有人不小心把密鑰提交上去結(jié)果被濫用導(dǎo)致賬單暴漲的情況。5.2 錯(cuò)誤處理和用戶提示AI 生成的項(xiàng)目在錯(cuò)誤處理上通常很薄弱。接口調(diào)用失敗、網(wǎng)絡(luò)超時(shí)、音頻格式不支持這些情況在演示時(shí)可能不會(huì)遇到但真實(shí)用戶一定會(huì)遇到。如果應(yīng)用在這些情況下直接卡死或者沒(méi)有任何提示體驗(yàn)會(huì)很差。我的做法是在 Cursor 里逐個(gè)檢查關(guān)鍵的網(wǎng)絡(luò)請(qǐng)求和文件操作給每個(gè)可能失敗的地方加上錯(cuò)誤捕獲和用戶提示。提示文案要具體不要只說(shuō)“出錯(cuò)了”而是說(shuō)“語(yǔ)音識(shí)別服務(wù)暫時(shí)不可用請(qǐng)稍后重試”或者“音頻文件格式不支持請(qǐng)上傳 MP3 或 WAV 文件”。這些細(xì)節(jié)看起來(lái)小但決定了用戶覺(jué)得你的應(yīng)用“能用”還是“好用”。5.3 性能監(jiān)控和日志記錄在開(kāi)發(fā)階段日志是你最好的朋友。實(shí)時(shí)語(yǔ)音助手和播客應(yīng)用都涉及多個(gè)環(huán)節(jié)的串聯(lián)一旦某個(gè)環(huán)節(jié)出問(wèn)題沒(méi)有日志就很難定位。我通常會(huì)在每個(gè)關(guān)鍵步驟加上日志輸出記錄時(shí)間戳、輸入?yún)?shù)和輸出結(jié)果。這樣當(dāng)用戶反饋“沒(méi)反應(yīng)”或者“很慢”時(shí)你能快速判斷是哪個(gè)環(huán)節(jié)的問(wèn)題。Cursor 可以幫你快速給現(xiàn)有代碼加上日志。你可以選中一個(gè)函數(shù)然后說(shuō)“給這個(gè)函數(shù)的每個(gè)關(guān)鍵步驟加上日志記錄輸入和輸出”。它會(huì)生成相應(yīng)的日志語(yǔ)句。但要注意不要加太多否則日志文件會(huì)迅速膨脹。一般來(lái)說(shuō)每個(gè)函數(shù)的入口和出口各一條關(guān)鍵的分支判斷各一條就足夠了。5.4 從 Demo 到可用產(chǎn)品的距離最后想聊一個(gè)心態(tài)問(wèn)題。用 Bolt Cursor 做出來(lái)的東西很容易讓人產(chǎn)生“我已經(jīng)做好了”的錯(cuò)覺(jué)。但實(shí)際上Demo 和可用產(chǎn)品之間還有不小的距離。Demo 只需要在理想條件下跑通一次產(chǎn)品需要在各種異常條件下都能穩(wěn)定運(yùn)行。這個(gè)距離具體體現(xiàn)在異常處理是否完備、界面在不同設(shè)備上是否正常、并發(fā)用戶多了會(huì)不會(huì)崩、數(shù)據(jù)存儲(chǔ)是否可靠。這些問(wèn)題在 Demo 階段可以忽略但如果你真的想把這個(gè)軟件給別人用就必須逐個(gè)解決。我的建議是先用這套工具鏈快速做出 Demo驗(yàn)證想法是否成立如果想法成立再?zèng)Q定是繼續(xù)用這套工具鏈打磨還是找更專(zhuān)業(yè)的開(kāi)發(fā)方式重構(gòu)。工具能幫你走得更快但走多遠(yuǎn)取決于你對(duì)目標(biāo)場(chǎng)景的理解深度。