Module 1 - 把 AI 用好

Prompt Engineering 基礎

Microsoft - Generative AI for Beginners MIT GitHub 同步於 2026-09-23

提示工程基礎

介紹

本單元涵蓋在生成式 AI 模型中創建有效提示的基本概念和技術。你如何撰寫給大型語言模型(LLM)的提示也很重要。精心設計的提示能夠獲得更高品質的回應。但是,提示_和_提示工程_這些術語究竟是什麼意思呢?又該如何改進我發送給 LLM 的提示_輸入?這些問題將是我們在本章和下一章嘗試回答的內容。

生成式 AI 能夠根據使用者的請求創建新的內容(例如文字、圖像、音頻、程式碼等)。它透過像 OpenAI 的 GPT(「生成式預訓練轉換器」)這類大型語言模型來達成,這些模型接受自然語言和程式碼的訓練。

現在使用者可以使用熟悉的對話模式與這些模型互動,無需任何技術專業知識或訓練。這些模型是_基於提示_的-使用者傳送文字輸入(提示),然後得到 AI 回應(完成)。使用者可以透過多輪對話反覆「與 AI 聊天」,不斷調整提示,直到回應符合期望。

「提示」現在成為生成式 AI 應用的主要_程式設計介面_,告訴模型該做什麼並影響回應的品質。「提示工程」是一個快速發展的研究領域,專注於_設計與優化_提示,以大規模提供一致且高品質的回應。

學習目標

在本課中,我們將了解提示工程是什麼、為什麼重要,以及如何為指定的模型和應用目標設計更有效的提示。我們將理解提示工程的核心概念及最佳實踐-並了解一個互動式 Jupyter 筆記本「沙盒」環境,可以讓我們看到這些概念如何應用於實例。

本課結束時,我們將能夠:

  1. 解釋提示工程是什麼以及其重要性。
  2. 描述提示的構成部分及其用法。
  3. 學習提示工程的最佳實踐和技術。
  4. 使用 OpenAI 端點將學到的技術應用於實例。

關鍵術語

提示工程:設計和精煉輸入,以引導 AI 模型生成期望輸出的實踐。 分詞(Tokenization):將文字轉換成較小單位(稱為標記,tokens)的過程,模型可以理解與處理這些標記。 指令調校大型語言模型(Instruction-Tuned LLMs):經過特定指令微調的大型語言模型,以提升回應的準確度和相關性。

學習沙盒

目前,提示工程更像是一門藝術而非科學。提升直覺的最佳方法是_多加練習_,並採取結合應用領域專業知識、推薦技術和模型特定優化的嘗試錯誤方法。

附屬於本課的 Jupyter 筆記本提供了一個_沙盒_環境,你可以邊學習邊嘗試-或作為最後的程式挑戰來實作。執行練習需要:

  1. Azure OpenAI API 金鑰-部署的大型語言模型服務端點。
  2. Python 執行環境-可執行筆記本的環境。
  3. 本地環境變數立刻完成設置步驟準備好。

筆記本附有_入門_練習-不過鼓勵你添加自己的_Markdown_(說明)和_Code_(提示請求)區塊,試試更多範例和想法,並建立你對提示設計的直覺。

圖解指南

想在深入學習前快速了解本課涵蓋的大綱?看看這份圖解指南,能讓你一覽主要主題和關鍵提醒,幫助你思考每個部分。課程路線圖將帶你從理解核心概念和挑戰開始,進而介紹相關提示工程技術與最佳實踐。請注意,本指南中的「進階技術」部分屬於本課程_下一章_的內容。

我們的新創公司

現在,讓我們談談_本主題_如何與我們將人工智慧創新帶入教育的新創使命相關。我們想打造以 AI 驅動的_個人化學習_應用,思考不同應用使用者如何「設計」提示:

  • 管理者可能會請 AI_分析課程資料以找出覆蓋的缺口_。AI 能匯總結果或用程式碼將結果視覺化。
  • 教育者可能會請 AI_根據目標對象和主題生成教案_。AI 可以以指定格式製作個人化教案。
  • 學生可能會請 AI_為他們提供困難科目的輔導_。AI 現在能依學生程度提供課程指導、提示和範例。

這只是冰山一角。看看由教育專家策劃的開源提示庫教育提示,你會更了解其中的可能性!試著在沙盒或 OpenAI Playground 執行這些提示,看看會發生什麼!

什麼是提示工程?

我們一開始定義「提示工程」為_設計與優化_文字輸入(提示)的過程,以針對特定應用目標和模型,提供一致且高品質的回應(完成)。我們可以把它視為兩步驟的過程:

  • 為給定的模型和目標_設計_初始提示
  • 反覆_精煉_提示以提升回應品質

這必須是一個透過嘗試錯誤的過程,需要使用者的直覺和努力才能獲得最佳結果。那麼為何重要?為了回答這個問題,我們首先需要理解三個概念:

  • 分詞(Tokenization)=模型「如何看見」提示
  • 基礎大型語言模型(Base LLMs)=基礎模型「如何處理」提示
  • 指令調校大型語言模型(Instruction-Tuned LLMs)=模型如何現在理解「任務」

分詞(Tokenization)

大型語言模型將提示視為_一連串標記序列_,不同模型(或相同模型的不同版本)可以以不同方式將相同提示分詞。由於大型語言模型是基於標記訓練(而非原始文字),提示的分詞方式會直接影響生成回應的品質。

想了解分詞如何運作,可以嘗試下面示範的 OpenAI 分詞器。貼上你的提示,觀察它如何被轉換成標記,特別注意空白字元和標點符號的處理方式。注意此範例使用較舊的 LLM(GPT-3),若使用更新版本可能會得到不同結果。

概念:基礎模型

提示被分詞後,「基礎大型語言模型」(Base LLM)的主要職能是預測接下來的標記。因為大型語言模型經過大量文本資料的訓練,它們對標記間的統計關係有不錯的認知,能有把握地做出預測。注意它們不理解提示中詞彙的_意義_,只是看到一項它們能「完成」的模式。它們會持續預測序列直到用戶終止或預設條件觸發。

想看看基於提示完成如何運作?將上述提示輸入Microsoft Foundry playground並使用預設設定。系統設定為將提示視為資訊請求-你應該會看見符合此情境的完成結果。

但如果使用者希望看到符合某些標準或任務目標的特定內容呢?這時就要用到_指令調校_大型語言模型。

概念:指令調校大型語言模型

一種指令調校大型語言模型起始於基礎模型,並以示例或輸入/輸出配對(例如多輪「訊息」)做精調,這些配對中含有明確指令-AI 回應嘗試遵循該指令。

這使用如「有人類反饋的強化學習」(RLHF)等技術,訓練模型_遵循指令_並_從回饋學習_,使產出結果更適合實際應用,更切合使用者目標。

我們來試試-重新使用上方的提示,但將_系統訊息_改成以下指令作為上下文:

為二年級學生摘要你所提供的內容。結果保持一段文字,並包含 3-5 點重點符號。

看看結果如何調整為符合目標和格式?教育者現在可以直接將此回應用於該課的簡報中。

為什麼我們需要提示工程?

現在知道 LLM 如何處理提示,讓我們談談_為什麼_需要提示工程。原因在於現有模型存在多項挑戰,使得若不投入提示構建與優化工作,很難達成_可靠且一致的完成結果_。例如:

  1. 模型回應具有隨機性。_相同提示_使用不同模型或模型版本很可能產生不同回應,同一模型在不同時間也可能生成不同結果。提示工程技巧能幫助我們透過設定更好的護欄來減少變異

  2. 模型可能會捏造回應。模型預訓練於_龐大但有限_的資料集,無法掌握訓練範圍外的知識。因此可能生成不準確、虛構或與已知事實相矛盾的內容。提示工程技巧能幫助使用者識別及緩解這類捏造,譬如請 AI 提供引用來源或推理

  3. 模型能力各異。較新的模型或新一代模型擁有更豐富的能力,但也帶來成本與複雜性的獨特差異。提示工程能幫助我們制定最佳實踐與工作流程,抽象化這些差異,並以可擴展且無縫的方式因應模型特定需求

我們在 OpenAI 或 Azure OpenAI Playground 中實際體驗:

  • 使用相同提示於不同 LLM 部署(例如 OpenAI、Azure OpenAI、Hugging Face)-你是否觀察到回應有變異?
  • 在_相同_LLM部署(如 Azure OpenAI playground)中反覆使用相同提示-這些變異有何不同?

捏造(Fabrications)範例

在本課程中,我們使用「捏造」一詞指稱 LLM 有時因其訓練限制或其他約束,而生成事實錯誤的資訊現象。你也許在熱門文章或研究論文看到過類似稱呼為_「幻覺」_(hallucinations)。但我們強烈建議使用「捏造」作為術語,避免誤將機器行為擬人化成類似人類特質。從術語角度看,這也符合負責任 AI 指導原則,避免使用在某些語境中可能有冒犯或排他性的詞彙。

想體會捏造如何運作?想像一個指示 AI 生成不存在主題內容的提示(確保該主題不在訓練資料集內)。例如-我嘗試了這個提示:

提示: 生成 2076 年火星戰爭的教案。

網路搜尋告訴我有關火星戰爭的虛構作品(例如電視劇或書籍)-但沒有 2076 年版。常識也告訴我們,2076 年在未來,因此不可能關聯到真實事件。

那當我們使用不同的 LLM 供應商執行此提示時會發生什麼情況?

回應 1:OpenAI Playground (GPT-35)

回應 2:Azure OpenAI Playground (GPT-35)

回應 3:Hugging Face Chat Playground (LLama-2)

如預期,每個模型(或模型版本)由於隨機行為和模型能力的差異,會產生略微不同的回應。例如,一個模型針對的是八年級的聽眾,而另一個則假設是高中生。但這三個模型都生成了足以讓未經資訊的使用者相信該事件真實發生的回應。

提示工程技術如 元提示 (metaprompting)溫度配置 (temperature configuration) 可能在某種程度上減少模型虛構。新的提示工程 架構 也無縫地將新的工具和技術融入提示流程,以緩解或減少這些效應。

案例研究:GitHub Copilot

讓我們透過一個案例研究來了解提示工程在現實解決方案中的應用:GitHub Copilot

GitHub Copilot 是你的「AI 搭檔程式設計師」— 它將文字提示轉換為程式碼補全,並整合於你的開發環境中(例如 Visual Studio Code),帶來無縫的使用體驗。正如以下系列部落格所記錄的,最早版本基於 OpenAI Codex 模型,工程師們快速意識到需要微調模型和開發更好的提示工程技術以提升程式碼品質。七月,他們推出了超越 Codex 的改進 AI 模型,以提供更快速的建議。

按順序閱讀這些文章,以追蹤他們的學習歷程。

你也可以瀏覽他們的工程部落格,查看更多像這篇展示如何將這些模型及技術應用於推動現實應用的文章。


提示構造

我們已了解提示工程的重要性—現在讓我們理解提示如何被 構造,以評估不同技術來達成更有效的提示設計。

基本提示

先從基本提示開始:文字輸入送往模型且無其他上下文。舉例來說,當我們將美國國歌的前幾個字傳送至 OpenAI Completion API,它會立刻 完成 回應並接續下一幾行,展示基本的預測行為。

提示 (輸入) 補全 (輸出)
Oh say can you see 看起來你正在開始唱「星條旗永不落」的歌詞,這是美國的國歌。完整歌詞是 ...

複雜提示

現在讓我們在基本提示中加入上下文和指示。Chat Completion API 讓我們可以將複雜提示建構為一系列 訊息,包括:

  • 反映 使用者 輸入與 助理 回應的輸入/輸出配對。
  • 系統訊息設定助理的行為或個性上下文。

請求現在採用如下形式,其中 分詞化 有效捕捉上下文與對話中的相關資訊。調整系統上下文對補全質量的影響與使用者輸入同樣重要。

response = client.responses.create(
    model="gpt-5-mini",
    input=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "Who won the world series in 2020?"},
        {"role": "assistant", "content": "The Los Angeles Dodgers won the World Series in 2020."},
        {"role": "user", "content": "Where was it played?"}
    ]
)

指令提示

在上述範例中,使用者的提示為簡單的文字查詢,可解釋為資訊請求。使用 指令 提示時,我們利用該文字詳細指定任務,給 AI 提供更好的指引。範例如下:

提示 (輸入) 補全 (輸出) 指令類型
撰寫內戰的描述 回傳簡單段落 簡單
撰寫內戰的描述。提供關鍵日期與事件並說明其重要性 回傳一段文字,接著列出關鍵事件日期與說明 複雜
用 1 段文字描述內戰。提供 3 個重點列出關鍵日期及其重要性,另外提供 3 個重點列出重要歷史人物及其貢獻。輸出為 JSON 檔案 回傳較長的詳細內容於文字框中,格式為可複製貼上至檔案並檢核的 JSON 複雜。有格式化。

主要內容

上述範例中的提示仍相當開放,讓 LLM 決定預訓練資料中哪部分是相關的。藉由 主要內容 設計模式,輸入文字被分為兩部分:

  • 指令(動作)
  • 相關內容(影響動作)

下面範例中,指令為「以兩句話摘要此內容」。

提示 (輸入) 補全 (輸出)
木星是距太陽第五顆行星,也是太陽系中最大的行星。它是一顆氣態巨星,質量約為太陽的千分之一,但卻是太陽系其他所有行星質量總和的兩倍半。木星是肉眼在夜空中能見的最亮天體之一,自有歷史記錄以來,古代文明便已知曉。它以羅馬神木星命名。[19] 從地球觀看,木星反射的光足以投射出可見陰影,[20] 且平均是繼月球和金星後夜空第三亮的自然天體。
以兩句短句摘要此內容
木星是距太陽第五顆行星,也是太陽系中最大的行星,且是夜空中最亮的天體之一。它以羅馬神木星命名,是一顆氣態巨星,其質量是太陽系其他所有行星質量總和的兩倍半。

主要內容區段可用多種方式驅動更有效的指令:

  • 範例 — 不直接說明模型要做什麼,而是給出範例讓它推斷模式。
  • 提示 — 在指令後附上「提示」啟動補全,引導模型朝向更相關回應。
  • 範本 — 可重複使用的提示「食譜」帶有佔位符(變量),能用特定資料量身定製。

讓我們實際看看這些方法的運作。

使用範例

這是一種使用主要內容「提供一些期望輸出的範例給模型」,讓它推斷期望輸出的模式。根據範例數量,我們有零次示範 (zero-shot)、一次示範 (one-shot)、多次示範 (few-shot) 等提示方法。

提示內容現在包含三個要素:

  • 任務說明
  • 幾個期望輸出的範例
  • 新範例開始(成為隱含的任務說明)
學習類型 提示 (輸入) 補全 (輸出)
零次示範 "The Sun is Shining". Translate to Spanish "El Sol está brillando".
一次示範 "The Sun is Shining" => ""El Sol está brillando".
"It's a Cold and Windy Day" =>
"Es un día frío y ventoso".
多次示範 The player ran the bases => Baseball
The player hit an ace => Tennis
The player hit a six => Cricket
The player made a slam-dunk =>
Basketball

注意我們在零次示範中需要明確指令(「翻譯成西班牙語」),但在一次示範中指令則暗含在範例裡。多次示範說明加入更多範例能讓模型做出更準確的推斷,而無需額外指令。

提示

另一種主要內容的使用方式是提供 提示 而非範例。在這種情況,我們透過 先給出 反映期望回應格式的片段,給模型溫和暗示。然後模型「接住提示」繼續以該方式回應。

提示數量 提示 (輸入) 補全 (輸出)
0 木星是距太陽第五顆行星,也是太陽系中最大的行星。它是一顆氣態巨星,質量約為太陽的千分之一,但卻是太陽系其他所有行星質量總和的兩倍半。木星是肉眼在夜空中能見的最亮天體之一,自有歷史記錄以來,古代文明便已知曉。
摘要此事
木星是我們太陽系中最大的行星,也是距太陽第五顆行星。它是一顆氣態巨星,質量約為太陽的千分之一,但重量比其他所有行星加起來還重。古代文明早已認識木星,它在夜空中很容易被看見。
1 木星是距太陽第五顆行星,也是太陽系中最大的行星。它是一顆氣態巨星,質量約為太陽的千分之一,但卻是太陽系其他所有行星質量總和的兩倍半。木星是肉眼在夜空中能見的最亮天體之一,自有歷史記錄以來,古代文明便已知曉。
摘要此事
我們學到的是木星
是距太陽第五顆行星,也是太陽系中最大的行星。它是一顆氣態巨星,質量約為太陽的千分之一,但卻是太陽系其他所有行星質量總和的兩倍半。它容易用肉眼看見,自古已知曉。
2 木星是太陽系中距離太陽第五顆行星,且為最大的一顆。它是一顆氣體巨星,質量約為太陽的千分之一,但比其他所有太陽系行星質量總和的兩倍半還多。木星是夜空中肉眼可見的最亮天體之一,自有記載的歷史之前,古代文明已對其有所認知。
總結
我們學到的三大重要事實:
1. 木星是太陽系中距離太陽第五顆行星,且為最大的一顆。
2. 它是一顆氣體巨星,質量約為太陽的千分之一...
3. 木星自古代便為肉眼可見...

提示模板

提示模板是一種 預先定義的提示配方,可以儲存並按需重複使用,以推動大規模的一致用戶體驗。最簡單的形式,它就是一組提示範例,比如OpenAI 的這個範例,提供了互動式的提示組件(用戶和系統訊息)以及 API 驅動的請求格式—以支持重用。

更複雜的形式如LangChain 的範例,包含可以用來替換多種來源數據(用戶輸入、系統上下文、外部資料等)的 佔位符 ,動態生成提示。這讓我們可以創建一個可程式化重用的提示庫,用來推動一致的用戶體驗。

最終,模板的真正價值在於能建立並發佈 針對垂直應用領域的提示庫,此時提示模板會被 優化 以反映特定應用的上下文或範例,讓回應對目標用戶更具相關性和準確度。Prompts For Edu 倉庫是一個很好的例子,它為教育領域策劃了一個提示庫,強調課程規劃、課程設計、學生輔導等主要目標。

支援內容

如果我們將提示構建理解為包含指令(任務)及目標(主要內容),那麼 次要內容 就是我們用來 以某種方式影響輸出 的附加上下文。它可能是調整參數、格式指引、主題分類等,有助於模型 調整 回應以符合期望的用戶目標或需求。

例如:假設有一份課程目錄,包含全部課程的豐富元資料(名稱、描述、等級、元資料標籤、講師等):

  • 我們可以定義一個指令「總結 2023 年秋季的課程目錄」
  • 我們可以用主要內容來提供幾個期望回應的範例
  • 我們可以用次要內容來指定最感興趣的五個「標籤」

現在,模型可以依照示範範例的格式提供摘要,但如有多個標籤,會優先考慮次要內容中指定的五個標籤。


提示最佳實踐

現在我們已瞭解提示如何 構造,接著可以開始思考如何 設計 它們以符合最佳實踐。我們可以從兩方面著手——擁有正確的 心態 以及運用正確的 技術

提示工程心態

提示工程是反覆試驗的過程,請記住三個廣泛的指導原則:

  1. 領域認知很重要。 回應的準確性與相關性取決於應用或用戶所處的 領域 。運用直覺與領域專業進一步 定制技術。例如,在系統提示中定義 領域特定角色,或在用戶提示中使用 領域特定模板。提供反映領域上下文的次要內容,或用 領域特定提示和範例 引導模型仿效熟悉用法。

  2. 理解模型很重要。 我們知道模型本質上具有隨機性。但模型實作也會因使用的訓練資料集(預訓練知識)、功能提供方式(如 API 或 SDK)及專精內容類型(例如代碼、圖像、文本文字)而異。了解你使用的模型優劣,並運用該知識來 優先任務 或構建 針對模型能力優化的自定義模板

  3. 迭代與驗證很重要。 模型及提示工程技術正在快速演進。作為領域專家,你可能對特定應用具有獨特的上下文或標準,這些對更廣泛的社群不一定適用。利用提示工程工具和技術「快速起步」提示設計,然後運用直覺和領域專業反覆迭代與驗證結果。記錄洞察,建立一個可作為新基線的 知識庫(例如提示庫),助力他人未來更快迭代。

最佳實踐

現在讓我們看看 OpenAIAzure OpenAI 實務者推薦的常見最佳實踐。

內容 為什麼
評估最新模型 新一代模型可能具備更優化的功能與品質,但成本可能更高。評估影響後,做出是否遷移的決策。
區分指令與上下文 查看你的模型/服務提供者是否定義了用於區分指令、主要與次要內容的 分隔符,幫助模型更精確地給予詞元權重。
具體且清晰 提供更多關於期望上下文、結果、長度、格式、風格的細節,有助提升回應品質和一致性。用可重用模板捕捉配方。
描述性且以範例引導 模型通常對「展示並說明」的方式反應良好。一開始先用 zero-shot(給指令但無範例)方式,然後用 few-shot 提供期望輸出幾個範例作為精煉。使用比喻說明。
用提示引導完成 用預設的開頭詞句引導回應朝期望方向發展,幫助模型展開回答。
加強指令重複 有時候你需要對模型重講多次。指令放於主要內容前後、結合指令與提示等。重複迭代並驗證以找出有效作法。
信息先後順序很重要 你呈現資訊給模型的順序可能影響輸出結果,包括學習範例,由於近期偏好。嘗試不同方式找出最佳方案。
給模型一個「後路」 給模型一個 回退 完成回應,在無法完成任務時使用,減少模型產生錯誤或杜撰回應的機會。

如同各種最佳實踐,請記得 你的狀況可能不同,取決於模型、任務及領域。以此為起點,持續迭代找出最適合你的方式。隨著新模型及工具不斷問世,持續重新評估提示工程流程,專注流程擴展性與回應品質。

作業

恭喜!你已完成本課程!現在是時候用真實範例來測試你所學的概念和技巧了!

我們的作業將使用一個 Jupyter 筆記本,裡面有可以互動完成的練習。你也可以自行擴充此筆記本的 Markdown 和程式碼單元,以探索想法和技術。

開始之前,先派生(Fork)此倉庫,然後

  • (推薦)啟動 GitHub Codespaces
  • (替代方案)將倉庫克隆到本地設備並使用 Docker Desktop
  • (替代方案)用你偏好的 Notebook 執行環境開啟筆記本

接著,設定你的環境變數

  • 將倉庫根目錄的 .env.copy 複製為 .env,並填寫 AZURE_OPENAI_API_KEYAZURE_OPENAI_ENDPOINTAZURE_OPENAI_DEPLOYMENT。回來參考 學習沙盒章節 了解如何操作。

接著,打開 Jupyter 筆記本

  • 選擇執行核心。若使用方案 1 或 2,直接選擇開發容器提供的預設 Python 3.10.x 核心即可。

你已準備好執行練習。注意這裡沒有「正確或錯誤」答案,重點是透過試錯探索選項,建立適合特定模型與應用領域的直覺。

因此本課程沒有程式碼解答單元,筆記本中會有以「我的解答:」為標題的 Markdown 單元,展示一個參考範例輸出。

知識檢核

以下哪一個提示較符合合理的最佳實踐?

  1. 給我一張紅色車輛的圖片
  2. 給我一張紅色品牌 Volvo、型號 XC90、停在岩壁旁夕陽下的車輛圖片
  3. 給我一張紅色品牌 Volvo、型號 XC90 的車輛圖片

答案:2,這是最佳提示,因為它提供了「什麼」的詳細描述及具體細節(不只是任意車輛,而是特定品牌及型號),並描寫了整體場景。第三則次之,也包含很多描述。

🚀 挑戰

嘗試對提示「完成句子 '給我一張紅色品牌 Volvo、...'」運用「提示引導」技巧。模型會如何回應?你會如何改進?

很棒!繼續學習

想更深入了解提示工程的不同概念?請前往 延伸學習頁面 找到更多相關優質資源。

接著前往第 5 課,我們會探討進階提示技巧