在生成式 AI 課程中,您瞭解到生成式 AI 模型的輸入空間幾乎不受限制。如要生成符合使用者期望的輸出內容,請建構提示。提示是應用程式與模型之間的結構化合約。
撰寫得當的提示:
- 說明 LLM 應如何生成回覆。
- 包含多個可隨時間進行版本控管、測試及改良的元件。
- 可做為共用構件,供跨團隊協作。
本單元將說明如何撰寫有效提示。我們會說明提示的結構,以及提示元件在系統和使用者之間的分配方式。您也會學到基本的提示技巧,以及各種技巧的適用情境。
在本單元中,我們將使用一個共用範例:BlogBuddy,這是一款 AI 輔助寫作工具,靈感來自 CyberAgent 使用 Prompt API 的方式。
返回生成式 AI 模組的 BlogBuddy 系統藍圖。
提示元件
每個提示元件在引導模型行為方面都扮演特定角色。
- 脈絡:建立模型的角色和網域,讓模型瞭解該如何運作。
- 指令:指派特定工作給模型。
- 輸入變數:應用程式即時提供的特定情境內容。
- 輸出格式:定義預期的輸出結構。舉例來說,您可能需要 JSON 輸出內容。
- 範例:示範如何針對一或多個其他輸入內容執行工作。
- 限制:設定明確限制,確保輸出內容一致、安全且符合品牌形象。
提示可以包含部分或所有這些元件。以下範例說明 BlogBuddy 寫作助理功能中的這些元件。
### Context
You are a writing assistant for blog authors.
Your job is to generate helpful, concise, and engaging content.
### Instruction
Generate 3 alternative titles for the user's blog post with a given style.
### Input variables
Here is the content of the blog post:
${blogPostContent}
Here is the desired style:
${titleStyle}
### Output format
Return valid JSON ONLY, in the following exact structure:
{
"titles": ["Title option 1", "Title option 2", "Title option 3"]
}
### Examples
Example input:
{
"blogPostContent": "I finally visited the small neighborhood café I've been eyeing for months...",
"titleStyle": "friendly"
}
Example output:
{
"titles": [
"A First Visit to the Neighborhood Café",
"Trying the Café I've Wanted to Visit for Months",
"My Experience at a Long-Awaited Local Spot"
]
}
### Constraints
- Each title must be under 128 characters.
- Titles must be original, not copied verbatim from the draft.
- Keep the tone natural and human. Avoid emojis unless explicitly requested.
- Avoid sensationalism or clickbait.
- If the draft includes multiple topics, choose the most prominent topic.
第一次使用提示時,請先從基本要素開始:指令和輸出格式。接著,在分析結果並判斷成功需要哪些更精細的控制項時,反覆新增更多元件。
系統提示與使用者提示
部分提示元件是硬式編碼,其他元件則可由使用者提供:
系統提示由應用程式開發人員提供,用於定義模型的整體行為。您可以設定模型的角色、預期語氣、輸出格式 (例如嚴格的 JSON 結構定義) 和任何全域限制。您也可以在系統提示中編碼安全和責任要求。這項設定在所有要求中都保持一致,為模型的行為提供穩定的基礎。
使用者提示包含直接要求,可產生輸出內容。 使用者要求執行特定工作,其中可能包含特定變數。 例如:「為這篇文章提供三個標題」、「繼續撰寫這段文字」或「讓這段文字聽起來更正式」。
大多數生成式 AI API 都允許您將提示詞建構為訊息陣列,每則訊息都有角色 (系統或使用者) 和內容。這樣一來,您就能更輕鬆地將穩定且全域的指令,與動態的每個要求輸入內容分開。
如何決定系統提示中應包含哪些元件,以及應由使用者指定哪些元件?答案取決於使用者體驗的彈性程度,以及模型的效能。
受限用途
如果是高度特定的用途,大部分的提示詞都可以在系統提示中預先定義。舉例來說,在 BlogBuddy 中,使用者可以點選「顯示標題」,查看系統為草稿生成的標題建議清單。

工作已修正、輸出格式已知,且使用者無須提供額外背景資訊即可取得預期結果。在這種情況下,您會將所有穩定規則、語氣指南、輸出結構定義和範例放在系統提示中。
如要使用 Prompt API 建構這項功能,我們會使用 initialPrompts 為整個工作階段定義系統層級的行為:
// Defines stable behavior for the entire session
const session = await LanguageModel.create({
initialPrompts: [
{
role: "system",
content: `You are a blog-writing assistant.
Your task is to generate high-quality titles for blog posts.
Always respond in concise, friendly language.
Return exactly 3 alternative titles.
Produce valid JSON with a "titles" array of strings.`
}
]
});
使用者點選「顯示標題」時,系統會針對目前內容叫用提示:
// The only variable input is the blog content
const result = await session.prompt(blogContent);
隨著時間推移,使用者可能會要求更多彈性和控制權。在這種情況下,您可以將特定元件移至使用者提示,並搭配介面控制項。例如風格或語氣規格的下拉式選單。
不過,結構化動作過多可能會造成使用者體驗混亂。發生這種情況時,您可能需要改用更開放式的設計,讓使用者自行指定大部分的提示。 如要進一步瞭解如何最佳化這項設計,請參閱 UX 模式單元。
彈性工作需要詳細的使用者提示
這項開放式互動體驗可協助使用者從頭撰寫網誌文章,提供更多彈性。他們可能會要求提供點子、大綱、重寫內容、改變語氣或發想點子,或是具體說明如何執行工作。這類應用程式可能需要更強大的伺服器端模型。

由於彈性工作可用的選項範圍更廣,使用者需要指定更多資訊。系統提示仍會控管整體行為。
最佳做法如下:
- 將穩定的規則、結構和範例放入系統提示。在使用者提示中加入動態內容和特定工作要求。
- 使用者體驗越開放,使用者提示就越需要彈性,才能因應無法預測的輸入內容。
- 使用者提示需要執行的工作越多,模型就越需要具備能力,因為模型必須處理更多變化,但內建結構較少。
您可以運用這些規則,逐步調整產品情境中控制權與使用者彈性之間的取捨。密切觀察使用者偏好和行為。更靈活的設定不一定能帶來實際價值。使用者也需要有時間、技能和認知頻寬,才能製作更詳盡的提示。
常見的提示詞撰寫技巧
開發人員通常會嘗試多種提示詞撰寫技巧,找出最適合自己用途和模型的技巧。
零樣本提示
您為模型說明工作,並祈禱能獲得最佳結果。例如:
"What is the capital of France?"
零樣本提示是許多 AI 工作的高效率基準。如果是查詢百科全書知識等不複雜的要求,您可能最好還是使用這項技術。不過,在大多數實際應用程式中,您需要使用額外的條件和邏輯擴充提示。
少量樣本提示
少量樣本提示會提供範例,示範正確的行為、風格、結構和其他重要變數。以下是情緒分類的提示範例:
You classify user messages into one of the following categories:
- "positive"
- "negative"
- "neutral"
Here are examples to guide your classifications:
Input: "I love this product! It works perfectly."
Output: { "label": "positive" }
Input: "This is terrible. I want a refund."
Output: { "label": "negative" }
少量樣本提示適用於這類偽預測工作。 這項技術也適用於遵循可辨識結構的任務,例如圖 1 中的標題生成。
如果輸出空間非常寬廣 (例如開放式或長篇內容),少樣本提示可能不是最佳技術。難以或甚至無法提供有意義的空間涵蓋範圍範例。
思維鏈提示
您會鼓勵模型先逐步推論,再產生答案。 您可以明確說明步驟,也可以交由模型定義。例如:
"Think step-by-step to identify the main idea of this paragraph. Then produce a
short heading under 60 characters."
連鎖思考法非常適合需要多步驟推論和執行的工作,例如擬定網誌文章大綱或輔助複雜決策。這項技術是所謂推論模型背後的主要技術。
這項作業可能所費不貲。生成逐步推理追蹤記錄會增加運算量、費用和延遲時間。只有在您的使用案例需要複雜的推理和規劃時,才使用這項功能。
自我反思提示
在初始生成後,要求模型自行評論並修訂輸出內容。例如:
"Review your previous output.
Identify unclear phrasing and rewrite it more concisely."
自我反思特別適合用於需要反覆修正的作業,例如編輯或重寫工具。這項功能實作快速,且能大幅提升品質。如果提示成效良好,建議採用自我反思迴圈。首先,請修正輸出內容,讓結果更清楚或更符合使用者需求。
重點摘要
在本單元中,您已瞭解如何從結構化元件建構提示。實務上,提示工程是高度實驗性的工作。經過多輪修正後,才能獲得清楚且可靠的結果。
下一個單元將探討以評估結果為依據的提示開發作業。這項做法有助於系統性地改善提示,並找出最適合產品和使用者的提示。
資源
這些技術各有不同的變體和最佳做法。有許多詳細的外部資源可供參考,例如:
- Google Cloud 的提示工程師指南
- DAIR 的提示工程指南
- 提示詞撰寫簡介 (Janna Lipenkova 撰寫)
- 請參閱「The Art of AI Product Development」第 6 章。
請查看所選模型的說明文件,因為當中可能提供具體建議,協助您獲得最佳結果。
隨堂測驗
系統提示中可以指定哪些類型的規則?
如要讓模型先逐步推論,再產生答案,應使用哪種技術?
少量樣本提示最適合用於哪些情況?
什麼是自我反思提示技巧?