在之前「學會調用 Calendar API 或查詢數據庫」一文中,將 API 的定義定義在 System Prompt 中範例:
</>Python
SYSTEM_PROMPT = """你是一位專業助理。你可以使用以下工具:
1. query_database(query_str): 查詢數據庫。
2. add_calendar_event(title, start_time): 新增行事曆。
如果需要使用工具,請輸出 JSON 格式:{"tool": "...", "params": {...}}"""
# 訓練數據範例
training_example = {
"instruction": "幫我查一下預算表,並在明天下午三點排個審核會。",
"output": '{"tool": "query_database", "params": {"query": "budget_2026"}}\n'
'{"tool": "add_calendar_event", "params": {"title": "預算審核", "start_time": "2026-03-04T15:00"}}'
}
有如下討論:
有幾個細節值得注意(有些是語法層面、有些是邏輯或風格問題)。我逐點說明。1️⃣ SYSTEM_PROMPT 的語法
第1段:
</>Python
SYSTEM_PROMPT = """你是一位專業助理。你可以使用以下工具:
1. query_database(query_str): 查詢數據庫。
2. add_calendar_event(title, start_time): 新增行事曆。
如果需要使用工具,請輸出 JSON 格式:{"tool": "...", "params": {...}}"""
✅ 語法完全正確
原因:
- 使用
"""三引號字串 → Python 允許多行文字 - 字串中可以包含
{},不會被解析 - 只有在 f-string (f""") 才會解析
{}
2️⃣ training_example 的語法
程式中:
</>Python
training_example = {
"instruction": "幫我查一下預算表,並在明天下午三點排個審核會。",
"output": '{"tool": "query_database", "params": {"query": "budget_2026"}}\n'
'{"tool": "add_calendar_event", "params": {"title": "預算審核", "start_time": "2026-03-04T15:00"}}'
}
在 Python 是合法語法
因為 Python 有一個特性:
相鄰字串會自動拼接
例如:
</>Python
a = "hello" "world"
print(a)
輸出
helloworld所以你的:
'string1''string2'
Python 會變成:
'string1string2'而你的 \n 會保留換行。
最終 output 內容其實是:
{"tool": "query_database", "params": {"query": "budget_2026"}}
{"tool": "add_calendar_event", "params": {"title": "預算審核", "start_time": "2026-03-04T15:00"}}
3️⃣ 但有一個「邏輯問題」
你的 instruction:
幫我查一下預算表,並在明天下午三點排個審核會但 output:
2026-03-04T15:00
這裡 不是「明天」,而是 固定日期。
如果今天是 2026-03-03 才對。
在 LLM 訓練資料裡通常會:
方法1(推薦)
讓模型自己推理
明天下午三點不要寫死日期。
或
方法2
在 prompt 提供 today
例如:
Today: 2026-03-03
4️⃣ JSON格式的建議(更標準)
現在是:
</>JSON
JSON
很多 tool-calling dataset 會用:
方法A
list
</>Python
"output": [
{"tool": "query_database", "params": {"query": "budget_2026"}},
{"tool": "add_calendar_event", "params": {"title": "預算審核", "start_time": "2026-03-04T15:00"}}
]
方法B
一個 JSON
{"tools":[...]}
這樣解析會更容易。
5️⃣ 更乾淨的 Python 寫法(推薦)
</>Python
SYSTEM_PROMPT = """
你是一位專業助理。你可以使用以下工具:
1. query_database(query_str): 查詢數據庫
2. add_calendar_event(title, start_time): 新增行事曆
如果需要使用工具,請輸出 JSON:
{"tool": "...", "params": {...}}
"""
training_example = {
"instruction": "幫我查一下預算表,並在明天下午三點排個審核會。",
"output": (
'{"tool": "query_database", "params": {"query": "budget_2026"}}\n'
'{"tool": "add_calendar_event", "params": {"title": "預算審核", "start_time": "2026-03-04T15:00"}}'
)
}
加 () 只是讓程式更清楚。
✔️ 結論

所以開頭Python範例程式:
語法 ✔️ 正確
設計 ⚠️ 可以優化

















