學習LLM大語言模型之路(三) - Prompt Engineering 策略和實作

更新於 發佈於 閱讀時間約 18 分鐘

什麼是 Prompt Engineering?

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

1️⃣ Prompt Engineering 策略

🔹 主要策略

raw-image

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

📷 畫面截圖

raw-image

4️⃣ 學習成果

  • 如何設計 prompt 模板來影響 LLM 行為
  • 比較不同提示策略對結果的改變
  • 建立基礎互動介面觀察語言模型效能
  • Token 使用成本分析

此篇可以學習到如何使用Prompt Engineering (提示工程)讓 LLM 生成更準確、符合需求的回應,不至於讓AI出現幻覺(Hallucination),什麼是AI幻覺,這個我們獨立一篇留著後面說明,回到此篇範例之中,我多加了語氣的風格而已,讓整個產生的prompt有更多的變化,但如果要說整個Prompt Engineering,這篇可能會超級長,看到會睡著,所以還是先做初步的認識,因為還有很多東西需要學習,此篇只是先做初步的了解,更深入的部份請參考最後面的網址,有興趣的人可以先行參考學習,我等其他部份都學習好了,再回頭來深入解析Prompt Engineering,謝謝。

有關更詳細的提示工程指南可以參考下面這個網站:
https://www.promptingguide.ai/zh


留言
avatar-img
留言分享你的想法!
avatar-img
宅D嘉的開發人生
20會員
44內容數
加密貨幣很有趣,遊戲開發也很有趣,AI也有點意思,身為一個跨多領域的軟體工程師,喜歡研究新鮮的事物,歡迎來到我的世界,一起坐上這艘開往未來探索新奇的列車。
你可能也想看
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
介紹朋友新開的蝦皮選物店『10樓2選物店』,並分享方格子與蝦皮合作的分潤計畫,註冊流程簡單,0成本、無綁約,推薦給想增加收入的讀者。
Thumbnail
介紹朋友新開的蝦皮選物店『10樓2選物店』,並分享方格子與蝦皮合作的分潤計畫,註冊流程簡單,0成本、無綁約,推薦給想增加收入的讀者。
Thumbnail
我們人類和ChatGPT的對話技巧也是需要學習的,有鑑於此,我想要一天分享一點「和ChatGPT對話的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 我們在 AI說書 - Prompt Engineering - 67 | 多角色 Prompt 中闡述了
Thumbnail
我們人類和ChatGPT的對話技巧也是需要學習的,有鑑於此,我想要一天分享一點「和ChatGPT對話的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 我們在 AI說書 - Prompt Engineering - 67 | 多角色 Prompt 中闡述了
Thumbnail
我們人類和ChatGPT的對話技巧也是需要學習的,有鑑於此,我想要一天分享一點「和ChatGPT對話的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 我們把 AI說書 - Prompt Engineering - 55 和 AI說書 - Prompt E
Thumbnail
我們人類和ChatGPT的對話技巧也是需要學習的,有鑑於此,我想要一天分享一點「和ChatGPT對話的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 我們把 AI說書 - Prompt Engineering - 55 和 AI說書 - Prompt E
Thumbnail
我們人類和ChatGPT的對話技巧也是需要學習的,有鑑於此,我想要一天分享一點「和ChatGPT對話的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 Prompt Engineering 作為一門新興學科,與已建立的軟體工程領域有著驚人的相似之處,這種並
Thumbnail
我們人類和ChatGPT的對話技巧也是需要學習的,有鑑於此,我想要一天分享一點「和ChatGPT對話的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 Prompt Engineering 作為一門新興學科,與已建立的軟體工程領域有著驚人的相似之處,這種並
Thumbnail
我們人類和ChatGPT的對話技巧也是需要學習的,有鑑於此,我想要一天分享一點「和ChatGPT對話的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 回顧我們在AI說書 - Prompt Engineering - 13中,提及Prompt Engine
Thumbnail
我們人類和ChatGPT的對話技巧也是需要學習的,有鑑於此,我想要一天分享一點「和ChatGPT對話的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 回顧我們在AI說書 - Prompt Engineering - 13中,提及Prompt Engine
Thumbnail
我們人類和ChatGPT的對話技巧也是需要學習的,有鑑於此,我想要一天分享一點「和ChatGPT對話的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 Prompt Engineering 跨越了一個範圍:它涉及人工智慧科學家和工程師掌握的複雜技術;另一方
Thumbnail
我們人類和ChatGPT的對話技巧也是需要學習的,有鑑於此,我想要一天分享一點「和ChatGPT對話的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 Prompt Engineering 跨越了一個範圍:它涉及人工智慧科學家和工程師掌握的複雜技術;另一方
Thumbnail
我們人類和ChatGPT的對話技巧也是需要學習的,有鑑於此,我想要一天分享一點「和ChatGPT對話的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 針對Generative AI、Foundation Model、Large Language Mode
Thumbnail
我們人類和ChatGPT的對話技巧也是需要學習的,有鑑於此,我想要一天分享一點「和ChatGPT對話的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 針對Generative AI、Foundation Model、Large Language Mode
Thumbnail
我們人類和ChatGPT的對話技巧也是需要學習的,有鑑於此,我想要一天分享一點「和ChatGPT對話的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 在AI說書 - Prompt Engineering - 2中,我們已經以文字敘述各種AI的範疇與其思想
Thumbnail
我們人類和ChatGPT的對話技巧也是需要學習的,有鑑於此,我想要一天分享一點「和ChatGPT對話的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 在AI說書 - Prompt Engineering - 2中,我們已經以文字敘述各種AI的範疇與其思想
Thumbnail
本文介紹了大型語言模型(LLM)中Prompt的原理及實踐,並提供了撰寫Prompt的基本框架邏輯PREP,以及加強Prompt撰寫的幾個方向:加強說明背景、角色描述和呈現風格,加強背景說明,角色描述,呈現風格以及目標受眾(TA)。同時推薦了幾個Prompt相關的參考網站。最後解答了一些快問快答。
Thumbnail
本文介紹了大型語言模型(LLM)中Prompt的原理及實踐,並提供了撰寫Prompt的基本框架邏輯PREP,以及加強Prompt撰寫的幾個方向:加強說明背景、角色描述和呈現風格,加強背景說明,角色描述,呈現風格以及目標受眾(TA)。同時推薦了幾個Prompt相關的參考網站。最後解答了一些快問快答。
Thumbnail
在閱讀研究文獻時,我們需要整理研究先進們在類似主題中的發展方式與流程。本文介紹了使用ChatGPT協助快速理解文章的方法,特別強調了Prompt的使用。希望與讀者分享Prompt的創意並歡迎各領域研究者合作交流討論。
Thumbnail
在閱讀研究文獻時,我們需要整理研究先進們在類似主題中的發展方式與流程。本文介紹了使用ChatGPT協助快速理解文章的方法,特別強調了Prompt的使用。希望與讀者分享Prompt的創意並歡迎各領域研究者合作交流討論。
Thumbnail
給出好的指令也是一門學問! 我們在業界稱為「指令工程」(Prompt Engineering),OpenAI 官方也有公布指令工程的操作資訊,但是今天我們只要學會這樣的操作方式,你可以贏過現在多數的AI使用者。
Thumbnail
給出好的指令也是一門學問! 我們在業界稱為「指令工程」(Prompt Engineering),OpenAI 官方也有公布指令工程的操作資訊,但是今天我們只要學會這樣的操作方式,你可以贏過現在多數的AI使用者。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News