資料來源:火山引擎-開發者社區
引言
什么是 prompt
A prompt is an input to a Generative AI model, that is used to guide its output.
Prompt engineering is the process of writing effective instructions for a model, such that it consistently generates content that meets your requirements.
簡單來說,prompt(提示詞) 是引導生成式 AI 模型,按你的要求進行輸出。由于模型生成內容的不確定性,構建一個能夠生成所需格式內容的提示既是一門藝術,也是一門科學。
讓 LLM 寫一個旅行規劃,翻譯一段話,寫一段代碼,做一個數學題都是 Prompt。甚至“你好”也是 prompt,可以看見 deepseek-r1 還是想了很多。
$ ollama run deepseek-r1:8b
>>> 你好
Thinking...
嗯,用戶發來一句簡單的“你好”,看起來像是初次打招呼或者想開啟對話。可能ta剛打開聊天窗口,還在試探界面功能,也可能只是隨手測試AI的響應速度。 這種情況下不適合過度解讀,但也不能冷冰冰地回復。用溫暖友好的語氣建立初始信任比較重要,同時要留出開放式的引導空間——畢竟用戶沒提供具體需求時,主動詢問方向比被動等待更高效。 考慮到中文習慣,“你好呀”比“您好”更自然親切,加上表情符號能快速傳遞友好感。后半句列舉幾個常見使用場景(學習、工作等)可以降低用戶的提問門檻,讓ta更容易意識到AI能幫上忙的領域。 用戶此刻可能處于兩種狀態:要么是隨便問問想看看AI怎么回應,要么確實有需求但還沒組織好語言。所以回復既要簡潔又要包容性強,“有什么我可以為你做的嗎”這種開放式結尾比較合適。
...done thinking. 你好呀! 我是DeepSeek-R1,很高興見到你~
無論你是來學習、工作還是生活上遇到問題,我都可以幫你出主意、找答案
今天有什么我可以為你做的嗎?
Vibe Coding(code is cheap, show me the talk)
prompt 就是 LLM 時代的 Programs。以前別人分享應用,大家都是要代碼,現在都是要提示詞。寫好 prompt 變成了新時代的基本功。
Prompt 編寫技巧
描述清晰
我們經常能看到很多 prompt 的奇技淫巧,但最本質的還是要把需求描述清楚,和人交流一樣,不要讓對方猜。
用在餐館點餐來舉個例子。你對后廚說:“來點吃的”。廚房(AI)會很困惑。它可能會隨便給你送一份它最常做的蛋炒飯。結果可能不是你想要的。但如果說“我要一份牛肉蓋澆飯”。這好多了!廚房知道了菜品。但它不知道你的口味偏好。它可能會做得特別辣,但你其實不吃辣。如果更具體:“老板,我要一份青椒肉絲蓋澆飯。米飯要硬一點,肉絲要瘦肉,不要放味精,最重要的是,千萬不要放辣! 請在晚上 7 點前送到”。廚房(AI)收到了這個指令,就能精準地做出完全符合你心意的美食。
Prompt 本質上就是你和 AI 溝通的語言。
- 你給的指令越模糊、懶惰,AI 給你的答案就越平庸、不靠譜。
- 你給的指令越清晰、具體、信息量越豐富,AI 就越能像一個頂級專家一樣,精準地完成你交代的任務。
基本格式
一般來說會包含如下部分,先設置一個角色,然后設置要做的事情和執行的步驟。再約束輸出的格式,并舉幾個例子。并不拘泥于此,主要是為了 prompt 描述清晰,我們自己也好維護。
現在模型能力都比較強,對 prompt 語言沒什么要求,如果你英語不是特別地道,則用中文更好(或者讓 LLM 給你潤色一下)。也可以混合,模型對一些英語單詞特別敏感,比如:MUST、Examples、Format。
# Role and Objective # Instructions
## Sub-categories for more detailed instructions # Reasoning Steps/Workflow # Output Format # Examples
## Example 1 # Context # Final instructions
一般使用 markdown 標題表示遞進關系,但也不能太深(H4 即可)。長內容塊通常使用 markdown 代碼塊格式包裹,不過有的時候 xml 格式更加清晰(特別是 Example、Context 部分的描述)。
example-1:
I absolutely love this headphones — sound quality is amazing!
Positive
example-2:
Battery life is okay, but the ear pads feel cheap.
Neutral
<product\_review id="example-1">
I absolutely love this headphones — sound quality is amazing!
</product\_review>
<assistant\_response id="example-1">
Positive
</assistant\_response> <product\_review id="example-2">
Battery life is okay, but the ear pads feel cheap.
</product\_review>
<assistant\_response id="example-2">
Neutral
</assistant\_response>
In-Context Learning(上下文學習)
這是大模型神奇的地方之一,研究發現,即使某個能力沒有專門訓練過,但給一些示例,它就能學會。因此我們經常使用 few-shot 技巧來“激活”這個能力。
Few-Shot(小樣本)
簡單來說就是舉一些例子。比如評論分類:
文本:我對這個產品感到非常失望。
分類:負面 文本:這部電影還可以,沒什么特別的。
分類:中性 文本:這家餐廳的食物棒極了!
分類:正面
主要作用:
1.提高復雜推理任務的準確性:對于需要邏輯推理的任務,給出的例子就像是給 AI 的“解題模板”。學習到新的、特定的任務模式。
2.精確格式控制:通過多個例子強化你想要的輸出格式。
3.減少歧義:明確告訴模型在邊界情況下應該如何決策(比如上面例子中的“中性”)。
當然 few-shot 也不能亂寫,需要注意下面幾個方面:
左圖:Exemplar Quantity(示例數量盡量多一些)
右圖:Exemplar Ordering (示例順序隨機的)
左圖:Exemplar Label Distribution(示例標簽分布均勻)
右圖:Exemplar Label Quality(示例自身絕對正確)
Chain-of-Thought (思維鏈)
CoT(思維鏈)是一種技術,促使大型語言模型在解決問題時闡述其推理過程的技術。增強模型的推理能力。
Zero-Shot CoT
在推理模型出現之前,很多 prompt 優化都會讓加一句"Let’s think step by step.",這樣模型就能思考了,能解決一些需要多步推理的問題。但現在有了推理模型,更推薦直接使用推理模型解決問題。即使是非推理模型也不建議刻意的加上這句,還是應該定義好目標(Objective)和 Workflow。
Few-Shot CoT
這仍然屬于 In-Context Learning,不僅僅直接給結果,而且給思考過程。相當于授之以漁。
Q: 食堂有 23 個蘋果,他們用了 20 個做午餐,又買了 6 個。他們現在有多少個蘋果?
A: 9
Q: 食堂有 23 個蘋果,他們用了 20 個做午餐,又買了 6 個。他們現在有多少個蘋果?
A: 食堂原來有 23 個蘋果。他們用了 20 個,所以剩下 23 - 20 = 3 個。然后他們又買了 6 個,所以現在有 3 + 6 = 9 個。最終答案是 9。
RAG(Retrieval Augmented Generation)
The technique of adding additional relevant context to the model generation request is sometimes called retrieval-augmented generation (RAG).
廣義上來說,給模型提供相關上下文的技術都可以叫做 RAG。方式可以是從向量數據庫召回,也可以是 Google 等搜索接口搜出來的,甚至是手工寫死在 prompt 中的。
使用目的一般是兩方面:
1.讓模型訪問專有數據,之前訓練中沒有的數據
2.讓模型僅在特定數據集中進行回答
VS Fine-tuning(微調)
Fine-tuning lets you customize a pre-trained model to excel at a particular task.
RAG 常和 Fine-tuning 比較,因為兩者都能增強 LLM 在特定領域的知識。但兩者不是互斥的,應用場景不一樣。
- RAG (檢索增強生成): 這種方法可以比作是“開卷考試”。當模型遇到問題時,它會先從一個外部的、實時更新的知識庫(如向量數據庫)中檢索相關信息,然后將這些信息作為上下文,連同原始問題一起交給語言模型,從而生成答案。它不改變模型本身的內部參數。
- Fine-tuning (微調): 這種方法則像是“備考學習”。它通過在特定任務或領域的定制化數據集上繼續訓練模型,從而將新的知識或技能“內化”到模型的參數中。這個過程會更新模型的權重,使其“記住”特定的知識、格式或風格。
如果你的首要任務是確保信息的準確性、實時性和可追溯性,那么 RAG 是更優的選擇。如果你的目標是讓模型掌握一種特定的行為模式、風格或固有知識,那么微調會更適合。
Reasoning Model(不一樣了?)
隨著 OpenAI O 系列模型和 DeepSeek-R1 的火熱,現在新出的模型幾乎都是推理模型(可以設置 no think 模式)。Prompt 寫法變了嗎?其實也沒有,本質還是沒有變,描述清晰需求、提供足夠的上下文。
不過也有一些要注意的:
“think step by step”,這種觸發 COT 的魔法詞就不要添加了,會畫蛇添足,甚至非推理模型也不建議這樣了。
提供具體的目標,讓推理模型能自己驗證,不斷推理和迭代,直到符合你的成功標準。
先嘗試 zero-shot,不行再 few-shot,前面也提到 few-shot 3 個作用,推理模型會自己探尋解決步驟,這點可能不需要,但控制格式和減少歧義的作用還是需要的。few-shot 不是完全舍棄了,還是有用的。
workflow(工作流)可能更加重要,推理模型能自己拆解復雜的任務,但往往很發散,會讓用戶體驗不好。如果特定任務有成熟的步驟,可以固定下來,讓模型一步步執行。如果是做一個具體的任務,不需要使用 few-shot 教會模型,而是使用 workflow 固定下來。比如寫一個旅行規劃,先安排交通、住宿再安排景點等。或者構建 ReAct Agent。
ReAct/Reflexion(構建 Agent)
Agents represent systems that intelligently accomplish tasks, ranging from executing simple workflows to pursuing complex, open-ended objectives.
ReAct(Reasoning and Acting),指生成一個想法,采取一個行動,并接收一次觀察結果(然后重復這個過程)。所有這些信息都會被插入到提示中,這樣它就能記住過去的想法、行動和觀察結果。
這類模式(Observation-Based Agent)不能單純算作 prompt,手工構建非常麻煩(還需要和 function call/mcp 結合),一般 LLM 開發框架會集成,比如:langchain: Start with a prebuilt agent(https://langchain-ai.github.io/langgraph/agents/agents/)、Eino: React Agent 使用手冊(https://www.cloudwego.io/zh/docs/eino/core\_modules/flow\_integration\_components/react\_agent\_manual/)
實戰
翻譯工具例子
前面說的可能比較抽象,我們通過一個翻譯工具例子,來把上面說的串一下。為了凸顯 prompt 的效果,我們本地運行一個小參數模型?ollama run qwen3:8b
,同時為了突顯 prompt 優化效果,關閉思考模式(/set nothink)。
第一輪:可以看到翻譯的有點怪怪的,listened 應該為聽了/聽過更為合適。同時我希望保留人名,因為有時候中文名稱更加拗口。
翻譯:Have you listened to the new album by Taylor Swift? 你聽到泰勒·斯威夫特的新專輯了嗎?
第二輪:翻譯的稍微好一點了,但沒有按要求保留英文原文,嘗試加一些示例,再優化一下:
# Role and Objective 你是一個翻譯專家,需要將用戶輸入的英文準確、流暢地翻譯成中文 # Instructions 1. 保持譯文準確,忠實于原文的意思。
2. 使用自然、通順的中文表達方式。
3. 避免逐字逐句的生硬翻譯。
4. 注意英文文本中的語法、詞匯和語境。
5. 如果有人名保留英文原文 # Output Format 直接輸出中文,不需要包含其它內容 # input Have you listened to the new album by Taylor Swift? --- 你聽過泰勒·斯威夫特的新專輯嗎?
第三輪:這次好了,這樣看起來好很多了。
# Role and Objective 你是一個翻譯專家,需要將用戶輸入的英文準確、流暢地翻譯成中文 # Instructions 1. 保持譯文準確,忠實于原文的意思。
2. 使用自然、通順的中文表達方式。
3. 避免逐字逐句的生硬翻譯。
4. 注意英文文本中的語法、詞匯和語境。
5. 如果有人名保留英文原文,不做翻譯 # Output Format 直接輸出中文,不需要包含其它內容 # Examples <example1>
原文:Please give this package to Dr. Emily Carter.
譯文:請把這個包裹交給 Emily Carter 博士。
</example1> <example2>
原文:LeBron James just broke another record in the NBA.
譯文:LeBron James 剛剛在NBA打破了又一項紀錄。
</example2> # Input Have you listened to the new album by Taylor Swift? --- 你聽過了Taylor Swift的新專輯嗎?
第四輪:最后再做一些優化,比如把類似 NBA 簡稱做解釋,翻譯的更優雅一點。還可以 RAG,增加術語表(有些詞就這樣翻譯),這里就不演示了。
# Role and Objective
你是一個跨文化專業翻譯家,需要將用戶輸入的英文翻譯為中文 # Instructions
- 嚴格遵循信達雅原則(信=精準/達=流暢/雅=審美)
- 保持譯文準確,忠實于原文的意思。意譯而非直譯,專業內容保證術語準確
- 翻譯完成后再review一遍,確保使用自然、通順、地道的中文表達方式,符合中文語言習慣
- 注意識別語境(日常生活/娛樂/專業領域/俚語和習語/新聞等),譯文需要貼合語境
- 如果有人名保留英文原文,不做翻譯
- 有些特定詞匯(產品/公司名稱、地名、編程語言名稱等)不用翻譯,但需要結合上下文,比如Apple指蘋果公司也指水果,需要一整句話分析
- 英語專業名詞縮寫保留原文,并把中文釋義放在后面括號里。比如 CEO(首席執行官),NBA(美國職業籃球聯賽),KPI(關鍵績效指標) # Output Format
直接輸出中文,不需要包含其它內容 # Examples
<example1>
原文:LeBron James just broke another record in the NBA.
譯文:LeBron James剛剛在NBA(美國職業籃球聯賽)打破了又一項紀錄。
</example1> <example2>
原文:Economy shows signs of recovery amid easing of restrictions.
譯文:隨著限制措施放寬,經濟顯示出復蘇跡象。
</example2> <example3>
原文:You can't judge a book by its cover.
譯文:人不可貌相,海水不可斗量。
</example3> <example4>
原文:He is a full-stack developer proficient in both Python and JavaScript.
譯文:他是一位精通Python和JavaScript的全棧工程師。
</example4> <example5>
原文:I'd like to book a table for two at 7 PM.
譯文:我想預訂一張今晚7點的兩人桌。
</example5>
一些翻譯結果,效果上還可以:
I'm just browsing, thank you.
我只是隨便看看,謝謝。 Please clear your browser cache and cookies.
請清除您的瀏覽器緩存和 Cookie。 The company's quarterly earnings exceeded analysts' expectations.
該公司季度盈利超過了分析師的預期。 He needs to undergo a MRI scan.
他需要進行磁共振成像(MRI)檢查。 This game has an amazing open-world map and immersive storyline.
這款游戲擁有一個令人驚嘆的開放世界地圖和引人入勝的故事情節。
Meta Prompt(還在手寫 prompt?)
其實到這里細心的同學可以發現,寫 prompt 還是有一定的范式。那么可以使用 LLM 自己生成嗎?那肯定是可以的,這就叫 Meta Prompt。自動生成提示詞的 prompt 大概這樣:
Create a GPT prompt based on the following task requirements: # Requirements - Keep the prompt clear and easy for GPT's understanding.
- Be concise as each token in the prompt incurs a cost.
- The prompt is suggested to be a well-structured Markdown.
- Include one or two input/output `## Examples` where appropriate.
- Maintain a professional tone. # Response Format
Provide the prompt content directly, without titles, additional explanations or comments. # Requirements of Task
在這里輸入任務需求
有開源的實現:GitHub - meta-prompting/meta-prompting: Official implementation of paper "Meta Prompting for AI Systems"(https://github.com/meta-prompting/meta-prompting?tab=readme-ov-file#prompt-revision-to-enhance-reasoning-capabilities),火山方舟也推出了?PromptPilot:PromptPilot
評測飛輪
其實比寫 prompt 更重要的是評測,效果好不好往往不是 1+1=2 這種確定性問題,需要有可驗證的反饋機制,能構建評測飛輪,實現持續迭代。
一般流程是批量跑然后打標,打標簡單來說就是和參考答案做比較,如果是邏輯題、數學計算等可以直接判斷的,用準確率做最終結果。如果像本文的例子翻譯場景有一定主觀性,常見做法就是對結果量化打分,也有兩種模式,一是 3 分或者 5 分制,對比參考答案得出總分(精準量化)。另一種是 GSB 比較模式,對比 A、B 兩種回答,判斷“G 更好/S 等同/B 更差”,更加簡單。
現階段,不用自己建設評測平臺/工具,一般大模型平臺都支持評測(比如前面提到的火山方舟 PromptPilot),可以智能生成參考答案,智能評分,甚至自動優化 prompt。
作者團隊
飛書基礎業務質量架構團隊,以質量架構思維協同業務,構建高效保障體系。聚焦“業務質量共建”,覆蓋全鏈路質量體系。重點打造 AI 質量大腦,結合飛書業務特性實現風險分級與智能決策,推動 AI 在質量場景應用。