
如果你問一個2020年之前的開發(fā)者“什么是Prompt”他大概率會一臉茫然。但今天這個詞已經(jīng)成了AI應用開發(fā)者的口頭禪從代碼補全到智能客服從內(nèi)容生成到數(shù)據(jù)分析Prompt無處不在。然而很多人對Prompt的理解還停留在“給AI下指令”的層面認為它不過是2022年ChatGPT爆火后才出現(xiàn)的新鮮玩意兒。這是一個巨大的誤解。Prompt真正的力量其作為“編程新范式”的潛力早在ChatGPT問世前兩年就已經(jīng)被一個劃時代的模型——GPT-3——第一次、也是決定性地證明了。它揭示了一個核心事實模型的能力邊界很大程度上是由我們“提問”的方式?jīng)Q定的。本文將帶你回到那個關鍵的轉折點拆解GPT-3如何用一系列驚艷的“零樣本”和“少樣本”學習案例奠定了現(xiàn)代Prompt Engineering的基石。我們不止于回顧歷史更會深入其技術原理并通過代碼示例讓你親手復現(xiàn)GPT-3時代那些經(jīng)典的Prompt技巧理解它們?nèi)绾窝葑兂山裉霢gent、Function Calling等高級應用的底層邏輯。讀完本文你將徹底明白為什么說GPT-3是Prompt的“前傳”以及掌握這些“古典”Prompt技巧為何對你在當今AI時代構建可靠應用依然至關重要。1. GPT-3為何它是Prompt力量的“原點”在GPT-3之前AI模型的應用范式是“精調(diào)”Fine-tuning。如果你想讓一個預訓練好的大模型完成特定任務如情感分析、翻譯你需要收集大量該任務的標注數(shù)據(jù)然后用這些數(shù)據(jù)對模型的所有參數(shù)進行更新。這個過程成本高、周期長且一個模型通常只擅長一件事。GPT-3的出現(xiàn)徹底顛覆了這一范式。2020年OpenAI發(fā)布了擁有1750億參數(shù)的GPT-3其革命性不在于龐大的參數(shù)規(guī)模而在于它展現(xiàn)出的“上下文學習”In-Context Learning, ICL能力。簡單說你不需要修改模型的一行代碼或一個權重只需在輸入中提供幾個任務示例少樣本甚至僅僅是一個任務描述零樣本模型就能理解并執(zhí)行新任務。這其中的魔法鑰匙就是Prompt。在GPT-3的論文《Language Models are Few-Shot Learners》中Prompt不再是簡單的指令而是一種精妙的“上下文編程”。研究者通過設計不同的Prompt格式引導模型“解鎖”了翻譯、問答、算術、編程等一系列能力。例如一個經(jīng)典的少樣本翻譯Prompt可能是Translate English to French: sea otter loutre de mer peppermint menthe poivrée plush girafe girafe peluche cheese 模型在看到前三個例子后就能準確地將“cheese”翻譯為“fromage”。這里Prompt包含了任務描述、格式示范和待完成的內(nèi)容。模型從上下文中“學習”了任務規(guī)則。GPT-3證明的核心判斷是一個足夠強大的語言模型其內(nèi)部已經(jīng)蘊含了解決眾多任務的知識和能力而Prompt是激活和引導這些能力的關鍵接口。這直接催生了“Prompt Engineering”這一全新領域——從“如何訓練模型”轉向了“如何與模型對話”。2. 核心概念從“指令”到“上下文編程”要理解GPT-3時代的Prompt需要先厘清幾個伴隨它誕生的核心概念。這些概念至今仍是構建AI應用的基礎。2.1 零樣本、單樣本與少樣本學習Zero/One/Few-Shot Learning這是GPT-3論文中評估模型的三種核心方式也是Prompt的三種基本形態(tài)。零樣本Zero-Shot只給出任務指令不提供任何示例。完全依賴模型對指令的理解和內(nèi)部知識。Prompt:請將以下英文翻譯成中文Hello, world!單樣本One-Shot給出一個任務示例。Prompt:將英文翻譯成中文。示例apple 蘋果。請翻譯banana 少樣本Few-Shot給出多個通常2-5個任務示例讓模型從中歸納模式。Prompt:將英文翻譯成中文。示例1apple 蘋果。示例2cat 貓。示例3book 書。請翻譯dog 少樣本Prompt是GPT-3展現(xiàn)其強大推理和模式識別能力的核心場景。它模擬了人類通過幾個例子學習新任務的過程。2.2 思維鏈Chain-of-Thought, CoT的雛形雖然“思維鏈”這個術語在GPT-3之后才被明確提出但GPT-3的少樣本Prompt中已經(jīng)包含了這種思想的萌芽。研究者發(fā)現(xiàn)對于復雜的推理任務如數(shù)學應用題如果在示例中不僅給出答案還給出一步步的推理過程模型的表現(xiàn)會大幅提升。例如一個算術PromptQ: 小明有5個蘋果吃了2個又買了3個他現(xiàn)在有幾個蘋果 A: 小明一開始有5個。吃了2個剩下5-23個。又買了3個現(xiàn)在有336個。所以答案是6。 Q: 一個房間里有4張桌子每張桌子有3把椅子一共有多少把椅子 A:這種在Prompt中展示“推理過程”的做法是后來CoT Prompting的直接先驅(qū)。它證明了Prompt不僅可以指定任務還可以指定解決問題的“思考框架”。2.3 System Prompt vs. User Prompt 的早期形態(tài)在今天的Chat API中我們清晰地區(qū)分system和user角色。在GPT-3時代這種區(qū)分是隱式的通過Prompt的結構來實現(xiàn)。一個復雜的任務Prompt通常包含兩部分“系統(tǒng)”部分定義角色、規(guī)則、輸出格式。通常放在開頭?!坝脩簟辈糠志唧w的查詢或待處理的內(nèi)容。例如一個扮演客服的Prompt你是一個友好且專業(yè)的客服助手。請用中文回答用戶關于產(chǎn)品的問題如果不知道答案請如實告知。 用戶我的訂單號是12345現(xiàn)在到哪里了這里第一段定義了角色和行為準則相當于后來的system指令。3. 環(huán)境準備復現(xiàn)GPT-3 Prompt實驗雖然我們無法直接訪問原始的GPT-3模型但可以通過OpenAI的API使用gpt-3.5-turbo-instruct或類似模型它們繼承了GPT-3的核心特性或開源大模型如Llama 3、Qwen等來復現(xiàn)和體驗這些經(jīng)典的Prompt技巧。3.1 使用OpenAI API推薦用于快速體驗你需要一個OpenAI API密鑰。安裝OpenAI Python庫pip install openai設置API密鑰建議通過環(huán)境變量export OPENAI_API_KEYyour-api-key-here或者在Python代碼中設置import openai openai.api_key your-api-key-here3.2 使用本地開源模型推薦用于深入理解以使用ollama運行Llama 3為例安裝Ollama訪問 ollama.com 下載并安裝。拉取模型ollama pull llama3:8b通過Python調(diào)用需要安裝requests庫import requests import json def query_ollama(prompt, modelllama3:8b): url http://localhost:11434/api/generate data { model: model, prompt: prompt, stream: False } response requests.post(url, jsondata) return response.json()[response]4. 核心流程親手編寫經(jīng)典GPT-3式Prompt讓我們通過代碼還原幾個在GPT-3論文中令人印象深刻的Prompt案例理解其設計精髓。4.1 案例一少樣本翻譯Few-Shot Translation這是證明模型具有強大模式遷移能力的直接證據(jù)。# 使用OpenAI API (Completion 風格更接近原始GPT-3) import openai def few_shot_translation_openai(): prompt Translate English to French: sea otter loutre de mer peppermint menthe poivrée plush girafe girafe peluche cheese response openai.Completion.create( modelgpt-3.5-turbo-instruct, # 使用指令調(diào)優(yōu)模型模擬 promptprompt, max_tokens10, temperature0 ) print(fPrompt: \n{prompt}) print(fTranslation: {response.choices[0].text.strip()}) # 使用本地 Ollama Llama 3 def few_shot_translation_ollama(): prompt Translate English to French: sea otter loutre de mer peppermint menthe poivrée plush girafe girafe peluche cheese result query_ollama(prompt) print(fPrompt: \n{prompt}) print(fTranslation: {result.strip()}) if __name__ __main__: # 選擇一種方式運行 few_shot_translation_openai() # few_shot_translation_ollama()關鍵點分析格式一致性示例嚴格遵循英文 法文的格式。模型會學習這種映射關系。清晰的上下文第一行Translate English to French:明確任務。示例和待翻譯項處于同一上下文窗口。溫度Temperature設置為0確保輸出確定性便于觀察模型是否真正學會了規(guī)則。4.2 案例二上下文算術與推理In-Context Reasoning展示模型處理多步推理任務的能力。def few_shot_arithmetic(): prompt Q: 小明有5個蘋果吃了2個又買了3個他現(xiàn)在有幾個蘋果 A: 小明一開始有5個。吃了2個剩下5-23個。又買了3個現(xiàn)在有336個。所以答案是6。 Q: 一個房間里有4張桌子每張桌子有3把椅子一共有多少把椅子 A: 房間里有4張桌子。每張桌子3把椅子所以椅子總數(shù)是4 * 3 12把。所以答案是12。 Q: 一本書原價80元打八折后是多少元 A: response openai.Completion.create( modelgpt-3.5-turbo-instruct, promptprompt, max_tokens100, temperature0 ) print(fPrompt: \n{prompt}) print(fModels Reasoning and Answer: \n{response.choices[0].text.strip()})關鍵點分析展示過程而非僅答案示例中包含了完整的推理步驟“剩下5-23個”。這比只給“答案是6”有效得多。自然語言與計算混合模型需要理解中文描述并執(zhí)行正確的算術操作。泛化能力模型需要將從“蘋果”問題中學到的“先減后加”模式泛化到“折扣”這個新概念上。4.3 案例三角色扮演與格式控制Role-Playing Formatting展示如何通過Prompt定義復雜的行為和輸出結構。def role_playing_customer_service(): prompt 你是一個友好且專業(yè)的電商客服助手名叫“小智”。請用中文回答用戶問題。如果遇到無法解決的問題請引導用戶聯(lián)系人工客服。你的回答必須包含以下部分 1. 問候語。 2. 對問題的直接回應。 3. 如有必要提供后續(xù)步驟或建議。 4. 結束語。 用戶我昨天下的訂單訂單號ABCD1234為什么還沒發(fā)貨 客服 response openai.Completion.create( modelgpt-3.5-turbo-instruct, promptprompt, max_tokens150, temperature0.7 # 稍高的溫度讓回復更自然 ) print(fPrompt: \n{prompt}) print(f\n--- Generated Response ---\n{response.choices[0].text.strip()})關鍵點分析角色與規(guī)則定義開頭部分明確了身份、態(tài)度、語言和邊界。結構化輸出要求明確要求回答包含四個部分這引導模型組織其輸出。平衡確定性與創(chuàng)造性temperature0.7在遵循規(guī)則的同時允許回復有一定變化更像真人客服。5. 運行結果與效果驗證運行上述代碼你可能會得到類似以下的輸出案例一輸出Prompt: Translate English to French: sea otter loutre de mer peppermint menthe poivrée plush girafe girafe peluche cheese Translation: fromage驗證模型成功輸出了正確的法語翻譯“fromage”證明了其通過少數(shù)示例學習新任務翻譯的能力。案例二輸出Prompt: Q: 小明有5個蘋果... Q: 一本書原價80元打八折后是多少元 A: Models Reasoning and Answer: 一本書原價80元。打八折意味著支付原價的80%所以計算方式是80 * 0.8 64元。所以答案是64。驗證模型不僅給出了正確答案“64”更重要的是它復現(xiàn)了示例中的推理模式解釋“打八折”的含義然后進行數(shù)學計算最后給出答案。這證明了Prompt可以引導模型的“思考過程”。案例三輸出Prompt: 你是一個友好且專業(yè)的電商客服助手... 用戶我昨天下的訂單訂單號ABCD1234為什么還沒發(fā)貨 客服 --- Generated Response --- 1. 您好感謝您聯(lián)系客服小智。 2. 關于訂單ABCD1234的發(fā)貨情況我這邊查詢到您的訂單目前處于“已審核待出庫”狀態(tài)。通常我們會在訂單審核后24小時內(nèi)安排發(fā)貨請您稍作等待。 3. 如果您今天下午仍未收到發(fā)貨通知可以再次聯(lián)系我們或直接通過APP內(nèi)的訂單詳情頁查看最新物流信息。 4. 感謝您的理解與支持祝您生活愉快驗證模型的回復嚴格遵循了Prompt中規(guī)定的四部分結構并且語氣友好專業(yè)符合客服角色設定。這證明了通過精心設計的Prompt可以有效地控制AI的行為和輸出格式。如何判斷成功任務完成度模型是否準確完成了翻譯、計算或問答任務格式遵從性輸出是否遵循了Prompt中指定的格式如、分點回答模式泛化對于少樣本學習模型是否將前幾個示例中的模式正確應用到了新問題上角色一致性在角色扮演中模型的語氣、內(nèi)容和邊界是否符合設定如果失敗首先檢查Prompt清晰度任務描述和示例是否足夠明確、無歧義模型能力當前使用的模型是否具備完成該任務所需的知識和推理能力例如讓一個很小的模型做復雜數(shù)學題可能失敗上下文長度Prompt是否過長超出了模型的上下文窗口溫度設置對于需要確定輸出的任務如翻譯溫度是否設置過高導致輸出隨機6. 從GPT-3 Prompt到現(xiàn)代AI應用的橋梁理解了GPT-3時代這些經(jīng)典的Prompt模式我們就能看清它們是如何演變?yōu)楫斀馎I應用開發(fā)的核心組件的。6.1 少樣本學習 → 提示模板Prompt Templates與示例選擇Example Selection今天的應用很少在每次請求時都手動編寫少樣本Prompt。取而代之的是提示模板引擎如LangChain的FewShotPromptTemplate。開發(fā)者將任務描述、格式和示例位置定義成模板運行時動態(tài)填入用戶輸入和檢索到的最相關示例。# 偽代碼示例現(xiàn)代提示模板思路 from langchain.prompts import FewShotPromptTemplate, PromptTemplate examples [{input: apple, output: 蘋果}, ...] example_prompt PromptTemplate(input_variables[input, output], template{input} {output}) prompt FewShotPromptTemplate( examplesexamples, example_promptexample_prompt, prefixTranslate English to Chinese:, suffixInput: {user_input}\nOutput:, input_variables[user_input] ) final_prompt prompt.format(user_inputdog)演進點從靜態(tài)的、寫死的少樣本Prompt發(fā)展為動態(tài)的、可管理的模板系統(tǒng)支持示例的檢索、排序和注入。6.2 思維鏈雛形 → 鏈式調(diào)用Chaining與智能體AgentGPT-3中展示的“推理過程”Prompt直接啟發(fā)了后來的思維鏈CoT提示法。而將復雜任務分解為多步推理的思想則進化成了現(xiàn)代AI框架中的鏈Chain和智能體Agent。鏈Chain將多個LLM調(diào)用或其他工具調(diào)用按順序組合起來。例如一個總結鏈可能先“提取要點”再“重組語言”。智能體Agent一個具備推理能力的LLM可以自主決定調(diào)用哪些工具如計算器、搜索引擎、API來完成復雜任務。這就像是把“展示推理過程”的Prompt變成了模型內(nèi)在的“思考-行動”循環(huán)。6.3 角色/系統(tǒng)指令 → System Prompt 與 Function CallingGPT-3中混合在用戶輸入里的“角色定義”在ChatGPT API中明確分離為system消息。這帶來了更好的角色控制和對話一致性。# 現(xiàn)代Chat API調(diào)用方式 messages [ {role: system, content: 你是一個專業(yè)的翻譯助手只進行中英互譯不回答其他問題。}, {role: user, content: Hello, how are you?} ]更進一步Function Calling允許開發(fā)者以結構化方式描述工具讓模型能智能地選擇并調(diào)用它們。這可以看作是對“輸出格式控制”的終極進化從控制文本格式升級到控制結構化數(shù)據(jù)和行為。# Function Calling 示例思路 functions [ { name: get_current_weather, description: 獲取指定城市的當前天氣, parameters: {...} } ] # 模型可能返回function_call: {“name”: “get_current_weather”, “arguments”: {“l(fā)ocation”: “北京”}}7. 常見問題與排查思路在實踐這些經(jīng)典Prompt模式時你可能會遇到以下問題問題現(xiàn)象可能原因排查方式解決方案模型輸出與示例格式不符1. 示例格式不一致或模糊。2. 模型未充分理解任務。3. 溫度Temperature設置過高。1. 檢查Prompt中所有示例是否嚴格遵循同一格式。2. 嘗試增加示例數(shù)量3-5個。3. 將Temperature設為0再測試。1. 統(tǒng)一并簡化示例格式使用清晰的分隔符如、###。2. 在任務描述中使用更明確的指令如“請嚴格按照示例格式回答”。3. 對于關鍵任務使用低溫度或確定性解碼。少樣本學習效果差模型無法泛化1. 示例太少或代表性不足。2. 任務過于復雜超出模型當前能力。3. 示例與待處理問題差異太大。1. 檢查示例是否覆蓋了任務的主要變化。2. 嘗試零樣本或單樣本看是否是示例引入干擾。3. 在更強大的模型如GPT-4上測試。1. 精心挑選或構建高質(zhì)量、多樣化的示例集。2. 對于復雜任務考慮采用思維鏈CoT提示在示例中展示推理步驟。3. 使用向量數(shù)據(jù)庫檢索與用戶輸入最相似的示例進行動態(tài)注入。模型忽略系統(tǒng)指令/角色設定1. 系統(tǒng)指令與用戶輸入在長上下文中被“稀釋”。2. 用戶輸入中包含強烈引導覆蓋了系統(tǒng)指令。1. 觀察在長對話后期是否出現(xiàn)偏離。2. 測試一個極端的用戶輸入看模型是否會堅守底線。1. 在關鍵節(jié)點如每輪對話或每N個token后重復或強化系統(tǒng)指令。2. 使用有更強指令遵循能力的模型。3. 在后處理層添加規(guī)則過濾不符合角色的輸出。輸出不完整或被截斷1. 設置的max_tokens最大生成長度不足。2. 模型生成了停止序列。1. 檢查返回的finish_reason是否為length。2. 查看輸出末尾是否完整。1. 根據(jù)任務合理增加max_tokens參數(shù)。2. 檢查Prompt中是否無意包含了模型常用的停止詞如\n\n可通過stop參數(shù)顯式設置。同一Prompt結果波動大1. Temperature設置過高。2. 模型本身具有隨機性。固定隨機種子如果API支持并多次請求觀察波動范圍。1. 對于需要確定輸出的任務代碼生成、翻譯將Temperature設為0或接近0。2. 對于創(chuàng)意任務可以接受一定波動但可通過更精確的Prompt約束輸出范圍。8. 最佳實踐與工程建議基于GPT-3 Prompt的核心理念結合現(xiàn)代開發(fā)經(jīng)驗我們總結出以下構建可靠Prompt驅(qū)動應用的建議始于簡單迭代優(yōu)化不要一開始就設計極其復雜的Prompt。從零樣本或單樣本開始測試模型的基礎理解能力然后逐步增加示例和約束觀察效果變化。示例質(zhì)量重于數(shù)量3個清晰、典型、無歧義的示例勝過10個模糊或矛盾的示例。確保每個示例都能精準地傳達你期望的規(guī)則。明確格式善用分隔符使用###、、、Answer:等清晰的分隔符來區(qū)分指令、示例、輸入和輸出。這能極大減少模型的困惑。將復雜任務分解如果一個Prompt要模型做多件事如“總結并翻譯”效果往往不好。將其拆分為多個步驟通過鏈式調(diào)用完成。為輸出預留空間在Prompt的結尾明確指示模型開始生成。例如在少樣本Prompt的最后一行寫上Translation:或Answer:這能引導模型進入“輸出模式”。系統(tǒng)性測試與評估不要憑感覺判斷Prompt好壞。構建一個包含各種邊緣案例的測試集從準確性、格式符合度、有害內(nèi)容等多個維度評估Prompt的效果。將Prompt視為代碼像管理代碼一樣管理Prompt。使用版本控制如Git編寫清晰的注釋說明設計意圖將可復用的Prompt片段模塊化。關注上下文成本每個Token都是成本。在保證效果的前提下精簡Prompt移除冗余信息。對于長上下文模型也要注意Prompt過長可能導致模型忽略中間部分信息。安全與邊界設定在系統(tǒng)指令中明確模型的職責邊界例如“你只回答編程相關問題”、“對于無法確認的信息應回答‘我不知道’”。這能減少產(chǎn)生有害或幻覺內(nèi)容的風險。結合傳統(tǒng)編程Prompt不是銀彈。將LLM的強大能力與傳統(tǒng)的確定性邏輯數(shù)據(jù)驗證、業(yè)務規(guī)則、API調(diào)用結合起來才能構建健壯的應用。9. 總結Prompt前傳留給今天的遺產(chǎn)回顧GPT-3第一次證明Prompt力量的時刻其意義遠不止于展示了一個大模型的少樣本學習能力。它真正開啟的是一種以自然語言為接口、以上下文為編程環(huán)境的新范式。今天當我們討論Agent、Function Calling、RAG檢索增強生成時其內(nèi)核依然是GPT-3時代奠定的那些基本原則如何通過精心設計的文本來激發(fā)、引導和約束模型的能力。所謂的“提示工程”其高級階段就是“上下文工程”和“交互設計”。因此學習GPT-3這些“古典”的Prompt技巧絕不是考古。它是理解當今所有大模型應用底層邏輯的必修課。它能讓你洞悉本質(zhì)明白為什么今天的Chat模型需要區(qū)分system和user角色。設計更優(yōu)的Agent知道如何通過示例讓Agent學會正確使用工具。構建可靠的RAG系統(tǒng)理解如何設計提示讓模型更好地融合檢索到的上下文信息。高效調(diào)試當模型輸出不符合預期時你能從Prompt的結構、示例、指令等基礎層面進行排查而不是盲目調(diào)整參數(shù)。建議你收藏本文中的代碼示例將它們作為你Prompt工具箱里的“基本操作”。下次當你面對一個復雜的AI應用需求時不妨先問自己“如果只用GPT-3時代的少樣本Prompt我該如何拆解和定義這個任務”這個思考過程往往能幫你找到最清晰、最本質(zhì)的解決方案。在這個快速變化的AI時代回歸原點理解力量最初的證明方式能讓你走得更穩(wěn)、更遠。