iT邦幫忙

2026 iThome 鐵人賽

DAY 10
0

前言

上一篇已經做到Flask連接LLM。

但是現在有一個很大的問題:
AI 回來的東西是「人看得懂」,但不一定是「程式看得懂」。

所以今天我們要做的事情只有一個:

讓 Gemini 不要自由發揮,而是固定按照我們規定的 JSON 格式回答。

先測試最簡單的 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
    }

Postman 測試

螢幕擷取畫面 2026-09-15 172757
會發現這個回傳結果是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

螢幕擷取畫面 2026-09-15 173303
就可以有正常的結果


今天學到的不只是「叫 AI 回 JSON 就好了。」
而是LLM 的輸出需要被限制、驗證,程式也要考慮 AI 不按照規則回答的情況。
從 Day 10 的

Flask → Gemini
       ↓
    AI 回覆

變成 Day 11:

Flask → Gemini
       ↓
  固定 JSON 格式
       ↓
Flask 可以解析

上一篇
Day 09 | AI出場前先搞懂我要怎麼call它
下一篇
Day 11|AI 登場:第一次讓 LLM 幫我回答問題
系列文
如果 AI 幫我安排每日的任務?——讓待辦清單不只是清單:LLM × Flask × MySQL 打造動態任務規劃系統 共 11 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言