什麼是 Prompt Engineering?
Prompt Engineering 是 設計最佳提示詞(Prompt),讓 LLM 生成更準確、符合需求的回應。 不同的提示詞設計會影響 LLM 的回答品質,因此需要 策略性地設計 Prompt。
1️⃣ Prompt Engineering 策略
🔹 主要策略

2️⃣ Prompt Engineering 具體範例
🔹 Zero-shot Prompting
直接詢問 LLM:
prompt = "請介紹 LLM(大型語言模型)"適用場景:一般問答,適合快速獲取資訊。
🔹 Few-shot Prompting
提供範例,讓 LLM 參考:
prompt = """
請回答以下問題:
Q1: 什麼是 Transformer?
A1: Transformer 是 NLP 的核心架構,使用自注意力機制。
Q2: 什麼是 LLM?
A2:
"""
適用場景:需要特定格式的回答,例如 FAQ、技術解釋。
🔹 Chain-of-Thought(CoT)
引導 LLM 逐步推理:
prompt = """
請解決以下數學問題:
問題:如果一輛車的速度是 60 公里/小時,行駛 3 小時,總距離是多少?
請逐步推理:
1. 速度是 60 公里/小時。
2. 行駛時間是 3 小時。
3. 總距離 = 速度 × 時間 = 60 × 3 = ?
答案:
"""
適用場景:數學、程式設計、邏輯推理。
🔹 Instruction-based Prompting
明確指示 LLM 回答格式:
prompt = """
請用 JSON 格式回答:
問題:什麼是 LLM?
輸出:
{
"定義": "LLM 是大型語言模型,如 GPT-4。",
"應用": ["聊天機器人", "文本生成", "程式碼輔助"]
}
"""
適用場景:需要結構化輸出,例如 JSON、表格。
🔹 ReAct(Reasoning + Acting)
讓 LLM 先推理再回答:
prompt = """
你是一個 AI 助理,請先分析問題,再提供解決方案:
問題:如何提高 LLM 的推理能力?
請先分析:
1. LLM 依賴 Transformer 架構。
2. 使用 Chain-of-Thought 提升推理能力。
3. 微調(Fine-tuning)可以增強模型效能。
解決方案:
"""
適用場景:需要多步驟推理,例如決策分析、技術建議。
3️⃣ Prompt Engineering 範例程式
Prompt 魔術師 – 可視化 Prompt 工具箱
🧠 專案簡介
開發一個可以輸入不同 Prompt 模式,選擇語氣、角色、任務目的,然後自動生成多組 Prompt 並讓使用者即時比較結果的 Prompt 實驗平台。
🎯 主要功能
- 使用者輸入任務敘述(如:請幫我寫一篇旅遊文案)
- 選擇風格(專業 / 幽默 / 行銷 / 學術)
- 選擇提示策略(Zero-shot / Few-shot / CoT)
- 顯示 token 使用量與生成時間
📁 專案結構
prompt-engineering-lab/
├── app.py # 主程式:Prompt 工具介面 + GPT 回應
├── prompt_templates.py # 預設 Prompt 模板
├── utils.py # Token 計算、格式處理
├── .env # API 金鑰設定
├── requirements.txt # 所需套件
└── README.md # 專案說明文件
📄 README.md
# 🧠 Prompt Engineering Lab
透過實作一個可互動的 Gradio 工具,深入理解不同 Prompt 策略與語氣風格對生成結果的影響。
## 📦 專案結構
```
prompt-engineering-lab/
├── app.py # 主程式,Gradio 介面與 OpenAI API 整合
├── prompt_templates.py # 各種提示策略與語氣模板
├── utils.py # Token 計算工具
├── requirements.txt # 套件清單
└── .env # API 金鑰環境變數檔(需自行建立)
```
## 🚀 使用說明
1. 建立 `.env` 檔,並放入你的 OpenAI API 金鑰:
```
OPENAI_API_KEY=your_openai_key_here
```
2. 安裝所需套件:
```bash
pip install -r requirements.txt
```
3. 執行程式:
```bash
python app.py
```
4. 透過 Gradio 介面操作:
- 輸入任務描述
- 選擇語氣風格(如:專業、幽默)
- 選擇提示策略(如:zero-shot, few-shot, chain-of-thought)
5. 觀看生成的 prompt、回應與 token 使用數量。
## 💡 學習重點
- 如何設計 prompt 模板來影響 LLM 行為
- 比較不同提示策略對結果的改變
- 建立基礎互動介面觀察語言模型效能
- Token 使用成本分析
## 🔍 延伸挑戰
- 加入更多語氣選項(如:詼諧、文藝)
- 增加自訂 few-shot 範例功能
- 接入 GPT-4 模型並比較效能差異
---
設定 API 金鑰
建立 .env
檔案,內容如下:
OPENAI_API_KEY=your_openai_key_here
requirements.txt(所需套件清單)
openai
python-dotenv
gradio
tiktoken
安裝依賴
pip install -r requirements.txt
app.py
import os
import openai
import gradio as gr
from dotenv import load_dotenv
from prompt_templates import get_prompt_templates
from utils import num_tokens_from_string
load_dotenv()
openai.api_key = os.getenv("OPENAI_API_KEY")
def generate_response(task_description, style, strategy):
templates = get_prompt_templates()
prompt = templates[strategy][style].format(task=task_description)
response = openai.chat.completions.create(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": prompt}],
temperature=0.7,
max_tokens=500
)
answer = response.choices[0].message.content.strip()
total_tokens = response.usage.total_tokens
return prompt, answer, f"使用 Token 數:{total_tokens}"
def demo_interface(task, style, strategy):
return generate_response(task, style, strategy)
style_options = ["專業", "幽默", "學術", "簡潔", "詼諧", "文藝"]
strategy_options = ["zero_shot", "few_shot", "chain_of_thought"]
with gr.Blocks() as demo:
gr.Markdown("# 🧠 Prompt Engineering Lab")
gr.Markdown("探索不同提示策略與語氣對結果的影響")
task_input = gr.Textbox(label="請輸入任務描述,例如:請幫我寫一篇行銷文案")
style_input = gr.Radio(choices=style_options, label="選擇語氣風格")
strategy_input = gr.Radio(choices=strategy_options, label="選擇提示策略")
submit_btn = gr.Button("產生回應")
prompt_output = gr.Textbox(label="產生的 Prompt")
result_output = gr.Textbox(label="GPT 回應")
token_output = gr.Textbox(label="Token 使用統計")
submit_btn.click(fn=demo_interface,
inputs=[task_input, style_input, strategy_input],
outputs=[prompt_output, result_output, token_output])
if __name__ == "__main__":
demo.launch()
prompt_templates.py(不同提示策略與語氣的模板)
def get_prompt_templates():
return {
"zero_shot": {#直接詢問
"專業": "請完成以下任務:{task},以專業語氣回答。",
"幽默": "請完成以下任務:{task},語氣帶點幽默風格。",
"學術": "請以學術風格執行以下任務:{task}。請注意邏輯與論證。",
"簡潔": "以下任務請以簡潔方式完成:{task}。請控制在 100 字以內。",
"詼諧": "請用俏皮又機智的語氣來完成這個任務:{task},讓人忍不住笑出來。",
"文藝": "請用詩意與抒情的語氣來表達你的回答:{task},讓人感受到美的力量。",
},
"few_shot": {#提供範例
"專業": (
"範例:\n"
"任務:介紹產品 A\n"
"回應:產品 A 是針對企業設計的解決方案,能提升工作效率。\n\n"
"請完成以下任務:{task},以專業語氣回答。"
),
"幽默": (
"範例:\n"
"任務:介紹拖鞋\n"
"回應:拖鞋是腳的沙發,讓你一踏進家門就想當皇帝。\n\n"
"請完成以下任務:{task},語氣幽默一點。"
),
"學術": (
"範例:\n"
"任務:解釋什麼是 AI\n"
"回應:人工智慧是一種模擬人類認知的技術,涵蓋學習、推理與自我修正。\n\n"
"請以學術風格完成以下任務:{task}。"
),
"簡潔": (
"範例:\n"
"任務:總結《三國演義》\n"
"回應:三國演義描述魏蜀吳三國興衰與英雄故事。\n\n"
"請簡短地完成以下任務:{task}。限制 100 字內。"
),
"詼諧": (
"範例:\n"
"任務:提供旅遊建議 \n"
"回應:如果你喜歡邊吃邊走,台南小吃絕對讓你撐破褲頭!\n\n"
"請完成以下任務:{task},語氣有趣一點"
),
"文藝": (
"範例:\n"
"任務:提供旅遊建議 \n"
"回應:倘若你渴望與古蹟對話,那不妨前往京都,那裡時光靜靜流淌在每一條石板路上。\n\n"
"請完成以下任務:{task},語氣要有文藝氣息。"
),
},
"chain_of_thought": {#引導推理
"專業": "請針對以下任務,以專業語氣分步思考並完成任務:{task}。",
"幽默": "請分段思考如何完成以下任務,並用幽默語氣回答:{task}。",
"學術": "請以學術推理方式一步步思考,完成任務:{task}。",
"簡潔": "請簡短地分段思考並完成以下任務:{task}。請保持內容清楚簡明。",
"詼諧": "這事兒不急,我們邊想邊來,慢慢理出頭緒:{task}",
"文藝": "讓我們隨著思緒的微風,徐徐展開這段探索之旅:{task}",
}
}
utils.py(token 計算工具)
import tiktoken
def num_tokens_from_string(string: str, model: str = "gpt-3.5-turbo") -> int:
"""Returns the number of tokens in a text string for a given model."""
try:
encoding = tiktoken.encoding_for_model(model)
except KeyError:
encoding = tiktoken.get_encoding("cl100k_base")
return len(encoding.encode(string))
執行程式
python app.py
📷 畫面截圖

4️⃣ 學習成果
- 如何設計 prompt 模板來影響 LLM 行為
- 比較不同提示策略對結果的改變
- 建立基礎互動介面觀察語言模型效能
- Token 使用成本分析
此篇可以學習到如何使用Prompt Engineering (提示工程)讓 LLM 生成更準確、符合需求的回應,不至於讓AI出現幻覺(Hallucination),什麼是AI幻覺,這個我們獨立一篇留著後面說明,回到此篇範例之中,我多加了語氣的風格而已,讓整個產生的prompt有更多的變化,但如果要說整個Prompt Engineering,這篇可能會超級長,看到會睡著,所以還是先做初步的認識,因為還有很多東西需要學習,此篇只是先做初步的了解,更深入的部份請參考最後面的網址,有興趣的人可以先行參考學習,我等其他部份都學習好了,再回頭來深入解析Prompt Engineering,謝謝。
有關更詳細的提示工程指南可以參考下面這個網站:
https://www.promptingguide.ai/zh