上一篇已經做到Flask連接LLM。
但是現在有一個很大的問題:
AI 回來的東西是「人看得懂」,但不一定是「程式看得懂」。
所以今天我們要做的事情只有一個:
讓 Gemini 不要自由發揮,而是固定按照我們規定的 JSON 格式回答。
在app.py加入prompt,告訴 AI 工作規則,且告訴 AI 「只能回 JSON」 ,如果沒有這個限制,AI可能會一頭霧水。
@app.route("/ai/json-test", methods=["POST"])
def ai_json_test():
data = request.json
prompt = f"""
你是一個待辦事項管理助手。
請分析以下任務:
任務名稱:{data["title"]}
重要程度:{data["importance"]}
預估時間:{data["estimated_minutes"]} 分鐘
請只回傳 JSON,不要加入其他文字。
格式如下:
{{
"task_id": {data["task_id"]},
"priority": 1,
"reason": "這個任務比較重要,所以建議優先處理"
}}
"""
response = client.models.generate_content(
model="gemini-3.5-flash-lite",
contents=prompt
)
return {
"answer": response.text
}

會發現這個回傳結果是AI的JSON,AI 的 JSON 其實還是一段字串。所以要先把 AI 回傳的 JSON 字串轉成 Python 資料
Python 有一個很常用的工具:
import json
然後:
result = json.loads(response.text)
json.loads() 的意思可以先簡單理解成:
把 JSON 格式的文字,轉成 Python 可以處理的資料。
例如:
text = '{"task_id": 1, "priority": 1}'
經過:
result = json.loads(text)
就會變成 Python 的 dictionary:
{
"task_id": 1,
"priority": 1
}
所以可以把API改成
import json
@app.route("/ai/json-test", methods=["POST"])
def ai_json_test():
data = request.json
prompt = f"""
你是一個待辦事項管理助手。
請分析以下任務:
任務名稱:{data["title"]}
重要程度:{data["importance"]}
預估時間:{data["estimated_minutes"]} 分鐘
請只回傳 JSON,不要加入其他文字。
格式如下:
{{
"task_id": {data["task_id"]},
"priority": 1,
"reason": "這個任務比較重要,所以建議優先處理"
}}
"""
response = client.models.generate_content(
model="gemini-3.5-flash-lite",
contents=prompt
)
result = json.loads(response.text)
return result

就可以有正常的結果
今天學到的不只是「叫 AI 回 JSON 就好了。」
而是LLM 的輸出需要被限制、驗證,程式也要考慮 AI 不按照規則回答的情況。
從 Day 10 的
Flask → Gemini
↓
AI 回覆
變成 Day 11:
Flask → Gemini
↓
固定 JSON 格式
↓
Flask 可以解析