API 開發
控制 Claude 輸出的三個旋鈕:system prompt、temperature 與 stop sequence
控制 Claude 輸出的三個旋鈕:system prompt、temperature 與 stop sequence
會送請求只是起點,真正決定應用品質的,是你能不能讓 Claude 用你要的方式回答。同一個模型,可以是有問必答的百科,也可以是循循善誘的家教;可以每次都給一樣的答案,也可以每次都給你驚喜。
這篇整理三個最實用的輸出控制手段:system prompt、temperature,以及預填回應搭配 stop sequence 的組合技。
你將學到什麼
system prompt 是什麼
用一段角色描述改變 Claude 的語氣、風格與行為準則。
temperature 怎麼調
0 到 1 的創意旋鈕,不同任務有不同的建議區間。
預填回應的技巧
先替 Claude 起個頭,引導它直接輸出你要的格式。
stop sequence 的用法
設定停止字串,在多餘內容出現前就結束生成。
system prompt:先給 Claude 一個角色
想像你在做一個數學家教機器人。學生問「5x + 2 = 3 怎麼解」,你希望 Claude 像真正的家教:先給提示、一步一步引導學生自己想,而不是直接把答案丟出來,更不能叫學生去按計算機。
system prompt 就是為此而生:一段純文字的行為指引,透過 system 參數傳進 create 呼叫。它有三個作用:給 Claude 回應方式的指引、讓它以指定角色的口吻與思路回應、幫助它不偏離任務。
system_prompt = """
You are a patient math tutor.
Do not directly answer a student's questions.
Guide them to a solution step by step.
"""
client.messages.create(
model=model,
messages=messages,
max_tokens=1000,
system=system_prompt
)
效果差多少?沒有 system prompt 時,Claude 直接給出完整的解題步驟;加上之後,它改問引導性的問題,例如「你覺得第一步該怎麼把 x 孤立出來」。同一個模型,行為完全不同。對學生來說,被引導著自己想出答案,遠比直接抄一份解答學得多,這正是產品價值的差別。
def chat(messages, system=None, temperature=1.0):
params = {
"model": model,
"max_tokens": 1000,
"messages": messages,
"temperature": temperature,
}
if system:
params["system"] = system
message = client.messages.create(**params)
return message.content[0].text
temperature:輸出的創意旋鈕
Claude 生成文字時,每一步都在計算「下一個 token 是誰」的機率,再從中抽選。舉一個簡單的例子:送出「What do you think」這樣的開頭,Claude 內部先斷詞,再對下一個詞算出機率分布,例如 about 佔 30%、would 佔 20%、of 佔 10%,然後從中抽選一個接上去,再重複整個流程。
temperature 是 0 到 1 之間的小數,動的就是這個分布的形狀:接近 0 時,Claude 幾乎永遠選機率最高的詞,輸出穩定可預測;接近 1 時,機率攤得比較平,比較冷門的詞也有機會被選中,輸出更多變、更有創意。
什麼任務配什麼溫度
| 溫度區間 | 適合的任務 |
|---|---|
| 低(0.0 到 0.3) | 事實回答、程式輔助、資料抽取、內容審核 |
| 中(0.4 到 0.7) | 摘要、教學內容、問題解決、有框架的創意寫作 |
| 高(0.8 到 1.0) | 腦力激盪、創意寫作、行銷文案、笑話生成 |
用「生成電影點子」來示範:溫度 0.0 時,你會反覆拿到幾乎一樣的劇情;溫度 1.0 時,主題、角色與情節的變化就豐富得多。記住一個原則:溫度改變的是機率,不是保證。要穩定就調低,要發散就調高,一般任務取中間。
另外提醒一個實作細節:溫度是跟著請求走的參數,同一個應用裡的不同功能可以用不同溫度,例如摘要功能取中段、標題發想調高。
預填回應+stop sequence:拿到乾淨的結構化資料
換一個場景:你做了一個產生 JSON 設定的網頁工具,使用者按下產生,就想直接複製整段結果。但 Claude 天性熱心,預設會把 JSON 包在 markdown 程式碼區塊裡,前後再加幾句說明。JSON 本身是對的,使用者卻得手動框選中間那段,體驗差了一截。
解法是兩招合體:預填 assistant 訊息加上 stop sequence。所謂預填,就是在對話歷史的最後,替 Claude 先放上一則它「已經說了一半」的訊息,Claude 收到後會順著這個開頭接下去寫。
messages = []
add_user_message(messages, "Generate a very short event bridge rule as json")
add_assistant_message(messages, "```json")
text = chat(messages, stop_sequences=["```"])
它的運作原理是這樣的:
- user 訊息告訴 Claude 要生成什麼
- 預填的 assistant 訊息是程式碼區塊的開頭記號,讓 Claude 以為自己已經開好了區塊
- Claude 接著只寫 JSON 內容
- 當它想輸出區塊結尾記號時,stop sequence 立刻結束生成
換句話說,你不是拜託 Claude 別加說明,而是從結構上讓說明沒有出現的空間。這比在提示裡寫一百次「不要多話」都可靠。
拿到的字串前後可能帶幾個換行,用 json.loads(text.strip()) 清一下就能解析。這招不限於 JSON:Python 程式碼片段、條列清單、CSV,任何「只要內容、不要解說」的場景都適用。訣竅是找出 Claude 天生想把內容包在什麼裡面,那就是你的預填內容與停止字串。
三個旋鈕,合起來用
回到開頭的數學家教機器人,三個旋鈕可以這樣配:system prompt 設定家教角色與引導原則;temperature 調在中段,讓提問方式有點變化又不至於天馬行空;之後若要讓它輸出結構化的練習題資料,再用預填加 stop sequence 把格式鎖住。
三個手段的層次不同:system prompt 管「用什麼身分與原則回應」,temperature 管「同一個問題下輸出的變化幅度」,預填與 stop sequence 管「輸出的起點與終點」。分開理解、合併使用,你對 Claude 輸出的掌控會立刻上一個檔次,而這一切都不需要換模型,只是幾個參數與訊息的安排。
延伸學習
HE201|Harness Engineering System Design(6 小時)
六小時的實作課:從 Blueprint 走到可以跑的規格,再用 No-code、n8n 低程式碼與程式碼三條路各做一次同一個 harness,最後處理可靠度——重試、錯誤處理、人工覆核。7 章 54 課,含常見坑與排錯、Capstone 實作,附學員講義 PDF。
NT$ 5,999
知識變現切割地圖(高清版下載及陪跑型教材)
《知識變現切割地圖》的完整陪跑版:地圖高清檔,加上五章 27 萬字的網頁版講義與200 張練習卡。從語感引流設計、互動與轉化、內容分層與產品路徑,到角色鏡像與心理設計、內容資源切割再利用,一層一層把「會做內容」變成「能賣內容」。每一節後面都接著可以直接動手填的練習卡。
NT$ 19,800

