昨天 的程式碼示範,讓我們成功呼叫 Gemini API 並得到第一個回應。這等同於完成了 Hello World of LLM。
但現實專案裡,我們需要的不只是「AI 可以說話」,而是能讓它根據上下文、角色定位、輸出規格去生產可直接落地使用的結果。這就是 Prompt Engineering + Python Code Structure 結合的關鍵。
今天我們的目標是:
步驟一:程式碼結構優化 — Prompt 抽離
最初版程式碼將字串直接寫在 generate_content()
裡:
response = model.generate_content("用一句話介紹你自己")
這樣雖然能跑,但對專案開發來說不夠彈性。最佳實務:將 Prompt 抽出成變數,甚至未來可存放在 YAML/JSON 檔 或 資料庫 供版本控管。
技巧一:角色 (Role) — 定義專業身份
AI 本質上是條件反應系統。若沒有角色定位,它的回答會偏向通用型,不符合場景需求。
Example 1 : 自動產生 Conventional Commits 格式的 Git 訊息。
role = "你是一位資深軟體工程師,擅長撰寫符合 Conventional Commits 的 Git Commit 訊息。"
task = "我修復了一個使用者登入時,因密碼錯誤導致程式崩潰的 Bug。"
prompt = f"{role} {task}"
response = model.generate_content(prompt)
print(response.text)
輸出範例:
fix(auth): 處理因密碼不正確引發的異常,防止應用程式崩潰
技巧二:口吻 (Tone) — 控制風格
Example : 行銷文案
role = "你是一位社群媒體行銷專家"
tone = "請用活潑、有趣、充滿咖啡香氣的口吻"
task = "幫我為一款耶加雪菲日曬豆寫一篇 80 字左右的 IG 貼文。"
prompt = f"{role},{tone}。{task}"
response = model.generate_content(prompt)
print(response.text)
輸出範例:
☀️ 一口喝下衣索比亞的陽光!☀️ ... #咖啡豆推薦
技巧三:限制條件 (Constraints)
角色 + 口吻決定「風格」,但沒有約束就會失控。限制條件才是把 LLM 從「靈感工具」拉進「生產工具」的關鍵。
Example : 履歷優化
role = "你是一位專業的英文求職教練"
tone = "請用專業、鼓勵的口吻"
task = "針對軟體工程師職位,幫我優化履歷自我介紹"
constraints = """
請遵循以下規則:
1. 必須包含技能:Python, AWS, React。
2. 全文請用英文撰寫。
3. 嚴格限制在 100 字以內。
4. 最後條列 2 個改進建議。
"""
prompt = f"{role}。{tone}。{task}。{constraints}"
response = model.generate_content(prompt)
print(response.text)
輸出範例:
A results-driven Software Engineer...
- Add quantifiable achievements
- Tailor intro to target company
進階思考:將 Prompt 結構化
為了更工程化地管理 Prompt,可以考慮把 Prompt 拆成 多維度物件:
prompt_template = {
"role": "Software Engineer",
"tone": "Formal, concise",
"task": "Generate an API error response",
"constraints": [
"Follow RFC 7807 Problem Details format",
"Output must be valid JSON",
"Message length < 50 words"
]
}
def build_prompt(template: dict) -> str:
return f"""
You are {template['role']} with {template['tone']} style.
Task: {template['task']}
Constraints:
{"; ".join(template['constraints'])}
"""
prompt = build_prompt(prompt_template)
response = model.generate_content(prompt)
這樣的結構有幾個優勢:
今天 的內容本質上是「單純透過使用者 Prompt 讓模型回答得更貼近需求」,還不算進入「系統層級的控制 (System Prompt / Model Configuration)」。下一章會介紹「System Prompt 與模型護欄 (Guardrails) 設計」專題,讓開發者理解如何從「使用者請求字串層級的提示工程」進階到「系統級輸入策略與安全限制」。