iT邦幫忙

2026 iThome 鐵人賽

DAY 8
0

前言

現在的tasks資料表其實已經有很多資料欄位了,所以今天要做的事讓這些欄位有 「明確規則」
例如:

欄位 規則
title 任務名稱
description 任務詳細內容
estimated_minutes 預估需要幾分鐘
importance 1~3,越大越重要
deadline 截止日期與時間
progress 0~100%
status todo / doing / done

因為以後 AI 看到 importance = 3,我們要能告訴它 3 代表高重要性,而不是今天 3 代表重要,明天突然變成「不重要」。

先新增幾種不同的任務

{
    "title": "完成 Python 作業",
    "description": "完成 ZeroJudge 練習題",
    "estimated_minutes": 120,
    "importance": 3,
    "deadline": "2026-09-10 23:59:00",
    "progress": 0,
    "status": "todo"
}
{
    "title": "寫鐵人賽文章",
    "description": "完成 Day 8 文章",
    "estimated_minutes": 90,
    "importance": 2,
    "deadline": "2026-09-09 22:00:00",
    "progress": 20,
    "status": "doing"
}
{
    "title": "準備考試",
    "description": "複習離散數學",
    "estimated_minutes": 180,
    "importance": 3,
    "deadline": "2026-09-12 18:00:00",
    "progress": 0,
    "status": "todo"
}

發現問題

現在我們有:

Python 作業

120 分鐘
重要程度 3
9/10 截止
進度 0%

鐵人賽文章

90 分鐘
重要程度 2
9/9 截止
進度 20%

離散數學

180 分鐘
重要程度 3
9/12 截止
進度 0%

如果現在是:9/9 下午 6:00
你覺得應該先做哪個?

下意識會覺得:
「鐵人賽文章吧,因為今天就要截止。」

但如果今天只剩:30 分鐘

那可能又會變成:「90 分鐘的文章現在做不完,那先做其他事情?」
(只是舉例!)(只是舉例!)(只是舉例!)(鐵人賽文章沒做完根本不敢睡覺)

--
這就是我們的專案真正有趣的地方,任務不是固定排序的,它會受到很多條件影響。

先暫時另外做一個/tasks/ai-data

順便加入任務剩餘時間的功能。
現在的資料:

estimated_minutes = 120
progress = 50

代表:
原本預估 120 分鐘,目前完成 50%。

那我們可以先在 Python 算:
剩餘時間 ≈ 120 × (1 - 50 / 100)
也就是剩餘 60 分鐘

就會得到:

{
    "estimated_minutes": 120,
    "progress": 50,
    "remaining_minutes": 60
}

我們可以把這個資訊也整理給 AI,這是AI 排程系統後面一定會用到的資訊。
因為預估時間 ≠ 剩餘時間

@app.route("/tasks/ai-data")
def get_ai_data():
    conn = get_connection()
    cursor = conn.cursor(dictionary=True)

    cursor.execute("""
        SELECT
            task_id,
            title,
            description,
            estimated_minutes,
            importance,
            deadline,
            progress,
            status
        FROM tasks
    """)

    tasks = cursor.fetchall()

    for task in tasks:
        task["remaining_minutes"] = (
            task["estimated_minutes"]
            * (100 - task["progress"])
            / 100
        )

    cursor.close()
    conn.close()

    return tasks

為什麼要另外做 /tasks/ai-data

原本的GET /tasks是給一般 Todo List 使用的。

以後我們會需要:GET /tasks/ai-data

專門整理成「提供給 AI 分析的任務資料」

未來可能變成:

MySQL
   ↓
Flask
   ↓
整理任務資料
   ↓
LLM
   ↓
分析
   ↓
任務排序

所以現在先把這個中間層準備好。


今日架構:

             MySQL
                ↓
          任務原始資料
                ↓
             Flask
                ↓
       ┌────────┴────────┐
       ↓                 ↓
 GET /tasks       GET /tasks/ai-data
       ↓                 ↓
一般 Todo List       AI 分析資料
                         ↓
                        LLM
                         ↓
                    任務重新排序

下一篇我們可以開始來了解要怎麼呼叫AI。


上一篇
Day 07|Todo List 基礎功能:完成 CRUD
下一篇
Day 09 | AI出廠前先搞懂我要怎麼call它
系列文
如果 AI 幫我安排每日的任務?——讓待辦清單不只是清單:LLM × Flask × MySQL 打造動態任務規劃系統9
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言