Google 提示工程白皮書 -- 讀書筆記

要了解 Prompt 如何下得更好,先看這本書!


書的關鍵內容與順序

三種提示用於指導 LLM 生成文本

  • 系統提示:定義 AI 模型該做什麼的「大局」設定。像是跟 AI 說,目前主要任務是「生成 SEO 文案」。
  • 脈絡提示:提供目前對話或任務相關的細節或背景。像是跟 AI 說,目前任務需要了解美股、科技相關領域等。
  • 角色提示:為模型分配一個特定角色或身份,讓模型生成的內容與角色的相關知識、行為一致。比方說,提示角色目前為「美股專業科技寫手」,叫他寫出來的 SEO 文章會更精準。

回退方法 Step-back

先生成一般概念(水平發想),將此生成作為「上下文」提示,進一步生成更深入的內容,會更具有主題性,且更加引人入勝。

  • 傳統 Prompt:請幫我寫出一段具有挑戰性,且引人入勝的第一人稱設計遊戲的挑戰關卡。
  • 回退方法 Prompt:
    1. 請你設計五種虛構的「故事情節設定」,以便後續設計引人入勝的第一人稱設計遊戲的挑戰關卡。
    2. 依照剛剛生成的五個世界觀設計,選擇其中三個,各自寫出 500 ~ 1000 字的「引人入勝的第一人稱設計遊戲的挑戰關卡」。

Chain of Thinking / Chain of Draft 思維鏈

  • Prompt 中特別提示:「讓我們一步步思考」。讓 AI 模型透過生成「中間推理」步驟提高 LLM 推理能力的技術。

    • CoT(Chain of Thinking) 是指要求 AI 使用步驟式的方式生成結果。e.g. …,請依照步驟來推理結果,…。
    • CoD(Chain of Draft) 也是一種 CoT,只是會要求 AI 「更精簡」產出思考步驟之成果。e.g. …,請簡單扼要列出解題草稿,只包含必要步驟,…。
  • 特別適用於「推理邏輯」的需求。

    • 如果用傳統 Prompt 方式來詢問「簡單的數學」,像是孫女與爺爺年齡倍數這種問題,AI 常常會算錯。個人經驗是即便像是清單數字加總,也常常會算錯…。
    • 然而透過 CoT / CoD 方式請 AI 計算,算出來就會很準確了!
  • 應用 CoD 的實務範例

    小明和爺爺的年齡問題

    Exported on 2025/5/24 at 11:52:55 [GMT+8] from Cursor (0.50.5)


    User

    今年小明 3 歲,再過 17 年後,他爺爺的歲數會是小明的 4 倍。請問小明和爺爺今年個別幾歲?


    Cursor

    我們可以用代數來解這個問題。

    設小明今年的年齡為 ( x ),爺爺今年的年齡為 ( y )。

    根據題目,我們知道:

    1. 小明今年 3 歲,所以 ( x = 3 )。
    2. 再過 17 年後,小明的年齡將是 ( x + 17 ),爺爺的年齡將是 ( y + 17 )。
    3. 在那時,爺爺的年齡會是小明的 4 倍,即 ( y + 17 = 4(x + 17) )。

    將 ( x = 3 ) 代入第二個方程式:

    [ y + 17 = 4(3 + 17) ]

    計算右邊:

    [ y + 17 = 4(20) = 80 ]

    接下來,解出 ( y ):

    [ y = 80 - 17 = 63 ]

    所以,小明今年 3 歲,爺爺今年 63 歲。

    總結:

    • 小明今年 3 歲
    • 爺爺今年 63 歲

    User

    今年小明 3 歲,再過 17 年後,他爺爺的歲數會是小明的 4 倍。請問小明和爺爺今年個別幾歲?

    • 請簡單扼要列出解題草稿,只包含必要步驟。

    Cursor

    解題草稿:

    1. 設小明今年的年齡為 ( x ),爺爺今年的年齡為 ( y )。
    2. 根據題目,小明今年 3 歲: ( x = 3 )
    3. 再過 17 年後,小明的年齡為 ( x + 17 ),爺爺的年齡為 ( y + 17 )。
    4. 根據題目,爺爺的年齡會是小明的 4 倍: ( y + 17 = 4(x + 17) )
    5. 將 ( x = 3 ) 代入方程式: ( y + 17 = 4(3 + 17) )
    6. 計算右邊: ( y + 17 = 80 )
    7. 解出 ( y ): ( y = 80 - 17 = 63 )
    8. 結論: 小明今年 3 歲,爺爺今年 63 歲。
  • 備註:可能隨著 AI 模型的發展,以後都不用額外加上如此提示。(像是 Cursor 可以直接設定 Thinking(思維鏈) 模式,就不用額外下 Prompt)

Prompt 最佳實踐

  • 提供樣本:單樣本或少樣本,說白點就是提供 AI 明確優質的好範例。
  • 簡潔設計:有時候講太多反而會讓 AI 混淆,「跟人溝通」也是這麼一般道理。e.g. 你現在是台灣國內旅遊專家。描述在苗栗,適合帶學齡前幼童參觀的好地方,依照熱門度排名列出來。
  • 具體說明輸出「要求」:比方說要輸出排行前五名、市佔率前三大…等,而非空泛地說要生成出「大多數人都喜愛」的…。

Prompt 記錄的「迭代」優化

  • 目標、輸入、配置和輸出
    • 目標:想要嘗試達成的目標。e.g. 可以點擊以計數的功能。
    • 輸入(Prompt):「請幫我完成一個可以點擊來計數的功能,實現於網頁中。」
    • 配置:諸如 AI 模型的選用,採樣控制(Top-K, Top-P, 溫度等)
      • Top-K: 讓生成的「文字接龍」過程,挑選最有可能的前 K 個字詞。e.g. Top-K=2,AI 生成過程只考慮前 2 個機率最高的詞彙做生成接龍。
      • Top-P: 讓生成的「文字接龍」過程,挑選最有可能的共百分之 P 的字詞。e.g. Top-P=0.8,代表 80% 的常用字詞,AI 都會將其考慮進來。
    • 輸出(成果):顧名思義就是下 Prompt 的結果。
  • 紀錄 Prompt 及其結果的模板
    • 方便記錄 Prompt 的輸入輸出等設定,以做迭代優化,以其重現 Prompt 的生成結果,讓 Prompt 生成更為可控與標準化。

    • 模板:

      字段描述
      名称 (Name)[您的提示的名称和版本] ([name and version of your prompt])
      目标 (Goal)[对此尝试目标的一句话解释] ([One sentence explanation of the goal of this attempt])
      模型 (Model)[使用的模型的名称和版本] ([name and version of the used model])
      温度 (Temperature)[0 - 1 之间的值] ([value between 0 - 1])
      令牌限制 (Token Limit)[数字] ([number])
      Top-K[数字] ([number])
      Top-P[数字] ([number])
      提示 (Prompt)[写下完整的提示] ([Write all the full prompt])
      输出 (Output)[写下输出或多个输出] ([Write out the output or multiple outputs])

總結

  • 學習各種「提示」(Prompt)技巧。