
文章目錄一、為什么“幫我寫代碼”通常不夠清楚二、描述需求的第一個要素背景背景通常包含什么為什么背景很重要背景不要寫得過多三、描述需求的第二個要素目標(biāo)不夠具體的目標(biāo)更清楚的目標(biāo)目標(biāo)最好包含“做什么”和“不做什么”四、描述需求的第三個要素限制常見的限制類型1. 技術(shù)限制2. 修改范圍限制3. 功能范圍限制4. 輸出限制5. 安全和數(shù)據(jù)限制不確定的內(nèi)容不要讓 AI 自行猜五、描述需求的第四個要素輸出格式只要求“給我代碼”明確輸出步驟不同任務(wù)可以要求不同輸出學(xué)習(xí)代碼生成小功能排查報錯修改已有代碼六、把 4 個要素組合起來原始需求補(bǔ)充背景補(bǔ)充目標(biāo)補(bǔ)充限制補(bǔ)充輸出格式組合后的完整需求七、不同場景下的需求描述模板模板一讓 AI 解釋代碼模板二讓 AI 生成一個函數(shù)模板三讓 AI 修改已有代碼模板四讓 AI 排查報錯八、描述需求時最容易犯的 4 個錯誤錯誤一目標(biāo)太抽象錯誤二把多個大任務(wù)混在一起錯誤三只說技術(shù)不說結(jié)果錯誤四只說結(jié)果不說明學(xué)習(xí)階段九、提交需求前的快速檢查十、總結(jié)?創(chuàng)作者全棧弄潮兒 個人主頁全棧弄潮兒的個人主頁? 個人社區(qū)歡迎你的加入全棧開發(fā)社區(qū) 專欄地址歡迎訂閱AI 編程提效實戰(zhàn)前面幾篇文章中我們反復(fù)提到一個觀點AI 輸出得好不好和我們描述問題的方式有很大關(guān)系。很多人第一次向 AI 提問時通常只會說幫我寫一個待辦事項功能。AI 確實可以生成代碼。但這段代碼很可能和你的實際需求不一致因為 AI 不知道你使用什么技術(shù)棧。你想實現(xiàn)哪些具體功能。數(shù)據(jù)應(yīng)該保存在哪里。哪些功能暫時不需要。你希望 AI 輸出代碼還是先解釋思路。這不是 AI 故意回答得不好而是問題本身留下了太多需要猜測的地方。今天我們就來學(xué)習(xí)一個非常實用的能力如何向 AI 清楚描述一個編程需求讓它少猜一點、少返工一點。本文不會要求你學(xué)習(xí)復(fù)雜的 Prompt 術(shù)語。只要記住 4 個要素背景 ↓ 目標(biāo) ↓ 限制 ↓ 輸出格式一、為什么“幫我寫代碼”通常不夠清楚我們先看一個很短的需求幫我寫一個用戶登錄頁面。這句話看起來很明確但真正開始實現(xiàn)時還有很多問題沒有答案使用 Vue、React還是原生 HTML頁面需要哪些輸入框登錄使用賬號密碼還是手機(jī)號驗證碼用戶名和密碼是否必填密碼是否需要顯示和隱藏切換登錄成功后跳轉(zhuǎn)到哪里登錄失敗后如何提示是否需要顯示加載狀態(tài)是否需要調(diào)用真實接口是否需要保存登錄狀態(tài)如果你不補(bǔ)充這些信息AI 就必須自行選擇。它可能生成一個簡單的靜態(tài)頁面也可能生成一個帶路由、接口、狀態(tài)管理和第三方組件庫的復(fù)雜實現(xiàn)。兩種結(jié)果都可能“看起來合理”但未必符合你的目標(biāo)。所以問題不一定是AI 為什么沒有按照我的想法寫也可能是我有沒有把自己的想法說完整二、描述需求的第一個要素背景背景是告訴 AI你現(xiàn)在處于什么環(huán)境要解決什么類型的問題。背景不需要寫成一篇項目介紹只需要提供和當(dāng)前任務(wù)有關(guān)的信息。背景通常包含什么根據(jù)任務(wù)不同可以提供使用的編程語言。使用的框架或運(yùn)行環(huán)境。當(dāng)前項目的大致類型。相關(guān)文件或模塊。你目前的學(xué)習(xí)階段。已經(jīng)完成了哪些內(nèi)容。例如我正在學(xué)習(xí) JavaScript使用 Node.js 運(yùn)行代碼。 目前只會使用變量、函數(shù)、數(shù)組和條件判斷。 我想通過一個小練習(xí)理解如何讀取和處理文件。如果是一個已有項目可以這樣描述這是一個 Vue 3 JavaScript 的待辦事項項目。 頁面代碼位于 src/components/TodoList.vue。 當(dāng)前已經(jīng)可以展示待辦列表本次只想增加刪除功能。 項目使用 npm 管理依賴不希望新增第三方庫。為什么背景很重要同一個需求在不同環(huán)境中的實現(xiàn)方式可能不同。例如“讀取文件”瀏覽器中需要考慮文件選擇器和用戶權(quán)限。Node.js 中可以使用文件系統(tǒng)模塊。Python 中有自己的文件操作方式。移動端還需要考慮平臺權(quán)限。如果不說明背景AI 只能給出一個通用答案。通用答案適合學(xué)習(xí)概念但不一定能直接放進(jìn)你的項目。背景不要寫得過多提供背景不等于把整個項目全部復(fù)制給 AI。如果你只是想學(xué)習(xí)一個數(shù)組方法不需要把整個項目目錄、所有配置和無關(guān)代碼都發(fā)過去??梢宰裱粋€簡單原則只提供完成當(dāng)前任務(wù)必須知道的背景。例如我使用 JavaScript。 下面有一個用戶數(shù)組。 我想篩選出年齡大于 18 歲的用戶。這些信息已經(jīng)足夠 AI 解釋filter的用法。三、描述需求的第二個要素目標(biāo)目標(biāo)是告訴 AI這一次具體要完成什么。目標(biāo)越具體AI 越容易判斷工作范圍。不夠具體的目標(biāo)幫我優(yōu)化一下頁面。“優(yōu)化”可能代表很多事情讓頁面加載更快。讓樣式更好看。讓手機(jī)端適配更好。減少重復(fù)代碼。提高代碼可讀性。修復(fù)一個具體的交互問題。如果沒有進(jìn)一步說明AI 可能按照自己的理解進(jìn)行大范圍修改。更清楚的目標(biāo)請優(yōu)化待辦事項列表的移動端顯示效果。 本次只調(diào)整 CSS不修改 JavaScript 邏輯。 要求 1. 屏幕寬度小于 600px 時列表不要出現(xiàn)橫向滾動。 2. 每條待辦事項的文字過長時可以換行。 3. 刪除按鈕保持在每條記錄的右側(cè)。這個目標(biāo)就比較清楚了優(yōu)化對象是待辦事項列表。使用場景是移動端。修改范圍是 CSS。不允許修改 JavaScript。有明確的驗收條件。目標(biāo)最好包含“做什么”和“不做什么”很多返工都來自范圍不清。所以描述目標(biāo)時可以同時寫本次要做 - 增加待辦事項刪除功能。 本次不做 - 不增加編輯功能。 - 不修改數(shù)據(jù)存儲方式。 - 不重構(gòu)現(xiàn)有列表組件。明確不做什么同樣重要。四、描述需求的第三個要素限制限制是告訴 AI哪些事情必須遵守哪些事情不能自行決定。沒有限制時AI 往往會選擇它認(rèn)為方便的實現(xiàn)方式。常見的限制類型1. 技術(shù)限制- 只使用原生 JavaScript。 - 不使用第三方庫。 - 使用項目現(xiàn)有的 axios 封裝。 - 兼容 Node.js 18。2. 修改范圍限制- 只修改 LoginForm.vue。 - 不修改路由配置。 - 不修改數(shù)據(jù)庫結(jié)構(gòu)。 - 不重命名現(xiàn)有接口。3. 功能范圍限制- 本次只實現(xiàn)新增不實現(xiàn)編輯和刪除。 - 只處理未完成的待辦事項。 - 暫時不接入真實登錄接口。4. 輸出限制- 先解釋思路再給代碼。 - 代碼拆分成三個文件。 - 每段代碼后說明如何運(yùn)行。 - 只輸出需要修改的部分不要重復(fù)整個項目。5. 安全和數(shù)據(jù)限制- 不要在日志中打印密碼和令牌。 - 不要使用真實用戶數(shù)據(jù)。 - 不要把密鑰寫死在前端代碼中。 - 用戶輸入必須經(jīng)過基本校驗。不確定的內(nèi)容不要讓 AI 自行猜如果你不知道某條規(guī)則也可以直接告訴 AI下面這條業(yè)務(wù)規(guī)則我還沒有確認(rèn)。 請先把它列為待確認(rèn)問題不要自行選擇一種實現(xiàn)。例如訂單支付成功后是否允許取消目前還沒有確定。 請在方案中單獨(dú)列出這個問題。這樣可以避免 AI 把一個猜測寫進(jìn)代碼之后又被當(dāng)成了正式規(guī)則。五、描述需求的第四個要素輸出格式輸出格式是告訴 AI你希望它用什么方式回答。同一個需求輸出格式不同結(jié)果的可用性也會不同。只要求“給我代碼”幫我寫一個讀取 CSV 文件的程序。AI 可能只返回一段代碼。如果你是初學(xué)者可能還不知道代碼應(yīng)該保存成什么文件。需要安裝什么環(huán)境。如何運(yùn)行。輸入文件放在哪里。輸出結(jié)果是什么。明確輸出步驟請按以下順序回答 1. 先用簡單語言解釋實現(xiàn)思路。 2. 說明需要準(zhǔn)備的文件和目錄。 3. 給出完整代碼。 4. 說明如何運(yùn)行。 5. 給出一份示例輸入和預(yù)期輸出。 6. 列出 3 個常見錯誤及排查方法。這種格式特別適合初學(xué)者。不同任務(wù)可以要求不同輸出學(xué)習(xí)代碼請先解釋概念再給一個最小示例。 逐行說明關(guān)鍵代碼并給出可以修改的練習(xí)。生成小功能請先復(fù)述需求再給出實現(xiàn)思路和代碼。 最后列出運(yùn)行步驟和測試場景。排查報錯請先解釋報錯含義。 再按可能性從高到低列出原因和排查步驟。 不要直接猜一個結(jié)論。修改已有代碼請先說明準(zhǔn)備修改哪些地方。 只修改與當(dāng)前需求相關(guān)的代碼。 不要重寫無關(guān)部分。 修改后說明可能影響的功能。輸出格式越明確你越容易閱讀、檢查和使用 AI 的回答。六、把 4 個要素組合起來下面用一個具體需求把背景、目標(biāo)、限制和輸出格式組合起來。原始需求幫我做一個待辦事項功能。這句話太寬泛AI 需要自行猜測很多內(nèi)容。補(bǔ)充背景我正在學(xué)習(xí)原生 HTML、CSS 和 JavaScript。 目前已經(jīng)可以創(chuàng)建一個網(wǎng)頁并使用 JavaScript 操作按鈕點擊事件。 我想通過一個小項目練習(xí)數(shù)組和 DOM 操作。補(bǔ)充目標(biāo)請實現(xiàn)一個簡單的待辦事項列表。 用戶可以輸入待辦內(nèi)容點擊按鈕后把它添加到列表中。 每條待辦事項旁邊顯示一個刪除按鈕。補(bǔ)充限制要求 1. 只使用原生 HTML、CSS 和 JavaScript。 2. 不使用第三方庫。 3. 本次不接入數(shù)據(jù)庫。 4. 待辦內(nèi)容為空時不能添加。 5. 只修改新增和刪除不實現(xiàn)編輯功能。補(bǔ)充輸出格式請按以下格式輸出 1. 先解釋實現(xiàn)思路。 2. 分別給出 index.html、style.css 和 app.js。 3. 說明每個文件的作用。 4. 說明如何在瀏覽器中運(yùn)行。 5. 列出正常輸入、空輸入和連續(xù)刪除的測試方法。 6. 代碼要適合初學(xué)者閱讀避免不必要的復(fù)雜寫法。組合后的完整需求我正在學(xué)習(xí)原生 HTML、CSS 和 JavaScript。 目前已經(jīng)可以創(chuàng)建一個網(wǎng)頁并使用 JavaScript 操作按鈕點擊事件。 我想通過一個小項目練習(xí)數(shù)組和 DOM 操作。 請實現(xiàn)一個簡單的待辦事項列表。 用戶可以輸入待辦內(nèi)容點擊按鈕后把它添加到列表中。 每條待辦事項旁邊顯示一個刪除按鈕。 要求 1. 只使用原生 HTML、CSS 和 JavaScript。 2. 不使用第三方庫。 3. 本次不接入數(shù)據(jù)庫。 4. 待辦內(nèi)容為空時不能添加。 5. 只修改新增和刪除不實現(xiàn)編輯功能。 請按以下格式輸出 1. 先解釋實現(xiàn)思路。 2. 分別給出 index.html、style.css 和 app.js。 3. 說明每個文件的作用。 4. 說明如何在瀏覽器中運(yùn)行。 5. 列出正常輸入、空輸入和連續(xù)刪除的測試方法。 6. 代碼要適合初學(xué)者閱讀避免不必要的復(fù)雜寫法。相比最開始的一句話這個版本已經(jīng)明確了學(xué)習(xí)背景。技術(shù)環(huán)境。具體功能。本次范圍。不做的內(nèi)容。代碼組織方式。運(yùn)行和測試要求。AI 得到的信息越完整越容易給出符合預(yù)期的回答。七、不同場景下的需求描述模板模板一讓 AI 解釋代碼我正在學(xué)習(xí) [編程語言或框架]。 下面是一段代碼 [粘貼代碼] 請完成以下任務(wù) 1. 用初學(xué)者能理解的語言說明整體作用。 2. 逐段解釋關(guān)鍵代碼。 3. 說明每個輸入和輸出。 4. 指出可能出現(xiàn)的錯誤。 5. 給我一個可以自己修改的練習(xí)。模板二讓 AI 生成一個函數(shù)我使用 [語言和版本]。 請實現(xiàn)一個 [函數(shù)功能]。 背景 [說明函數(shù)會被用在哪里] 要求 - 輸入是 [參數(shù)和類型] - 輸出是 [返回值和類型] - [業(yè)務(wù)規(guī)則或限制] - [異常輸入如何處理] 請先解釋思路再給代碼。 最后提供正常、邊界和異常測試示例。模板三讓 AI 修改已有代碼這是當(dāng)前代碼 [粘貼相關(guān)代碼] 我想解決的問題 [說明當(dāng)前問題] 項目背景 [技術(shù)棧、文件位置和相關(guān)規(guī)則] 限制 1. 只修改與當(dāng)前問題相關(guān)的部分。 2. 不新增第三方依賴。 3. 不改變已有功能的輸入和輸出。 請先說明問題原因和修改計劃。 確認(rèn)后再給出修改后的代碼。模板四讓 AI 排查報錯我在 [操作步驟] 時遇到了下面的報錯 [粘貼完整報錯] 相關(guān)代碼 [粘貼報錯位置附近的代碼] 環(huán)境信息 - 操作系統(tǒng) - 運(yùn)行環(huán)境版本 - 框架或庫版本 我已經(jīng)嘗試過 [列出已經(jīng)嘗試的處理方式] 請 1. 解釋報錯含義。 2. 列出最可能的原因。 3. 按順序給出排查步驟。 4. 說明還需要哪些信息。八、描述需求時最容易犯的 4 個錯誤錯誤一目標(biāo)太抽象幫我優(yōu)化一下。 幫我完善一下。 幫我做得更好看。改成請優(yōu)化登錄表單的移動端布局。 只修改 CSS不修改交互邏輯。 當(dāng)屏幕寬度小于 600px 時表單內(nèi)容不能出現(xiàn)橫向滾動。錯誤二把多個大任務(wù)混在一起幫我把這個項目的登錄、支付、訂單和后臺管理全部做完。改成本次只實現(xiàn)登錄頁面的表單校驗。 登錄接口和登錄成功后的跳轉(zhuǎn)放到下一步。任務(wù)越小越容易理解和驗證。錯誤三只說技術(shù)不說結(jié)果用 React 寫一個組件。還需要說明這個組件用于展示待辦事項。 需要接收 items 和 onDelete 兩個參數(shù)。 每條記錄顯示標(biāo)題、完成狀態(tài)和刪除按鈕。技術(shù)棧只能說明“用什么寫”不能說明“要寫出什么”。錯誤四只說結(jié)果不說明學(xué)習(xí)階段如果你是初學(xué)者可以直接告訴 AI我剛開始學(xué)習(xí) JavaScript。 請避免使用我還沒有學(xué)過的高級語法。 如果必須使用請先解釋它的作用。AI 知道你的學(xué)習(xí)階段后可以調(diào)整解釋深度和代碼復(fù)雜度。九、提交需求前的快速檢查向 AI 發(fā)送需求前可以快速看一遍[ ] 我說明了使用的語言、框架或運(yùn)行環(huán)境嗎 [ ] 我明確說明了這次要完成什么嗎 [ ] 我說明了哪些內(nèi)容暫時不做嗎 [ ] 我寫清楚了輸入、輸出和關(guān)鍵規(guī)則嗎 [ ] 我告訴 AI 希望它如何回答嗎 [ ] 我要求它提供運(yùn)行或測試方法了嗎 [ ] 我是否刪除了密鑰、密碼和真實用戶數(shù)據(jù)如果暫時沒有足夠信息也可以這樣問在開始實現(xiàn)之前請先列出完成這個需求還需要我補(bǔ)充的關(guān)鍵信息。讓 AI 先提問通常比讓它基于猜測直接寫代碼更穩(wěn)妥。十、總結(jié)向 AI 描述編程需求不是把 Prompt 寫得越長越好而是把真正重要的信息說清楚。今天重點學(xué)習(xí)了 4 個要素背景說明技術(shù)棧、項目環(huán)境和當(dāng)前基礎(chǔ)。目標(biāo)明確這次要實現(xiàn)什么以及做到什么程度。限制說明不能做什么、必須遵守哪些規(guī)則。輸出格式告訴 AI 希望它用什么方式回答、如何運(yùn)行和驗證。可以把它們記成一張簡單的卡片我現(xiàn)在在哪里 我想完成什么 有哪些事情不能做 我希望你怎樣交付請記住描述需求的過程本身也是梳理需求的過程。當(dāng)你能夠把一個問題說清楚通常也會更容易理解自己到底想解決什么。下一篇文章我們繼續(xù)練習(xí) 4 個新手可以直接套用的 AI 編程提示詞模板解釋代碼、生成函數(shù)、排查報錯和優(yōu)化代碼。?堅持原創(chuàng)求關(guān)注點贊收藏