上一篇我們整理了 MCP Agent 的專案架構,將不同 MCP Server 的連線管理與任務執行紀錄分開處理,讓 Agent 可以透過統一的介面使用各種工具。
不過,之前的執行紀錄主要是顯示當次任務的執行過程。如果程式關閉後再重新啟動,想查詢之前執行過哪些任務、完成了多少步驟,就需要另外保存任務資料。
因此,今天就繼續在原本的專案上加入任務管理與狀態追蹤,讓 Agent 不只可以執行任務,也能保存每次任務的執行狀態與歷程。
這次會保留上一篇已經完成的檔案,另外新增 task_planner.py 與 task_manager.py,分別處理任務規劃與任務資料管理。
day27/
├── config.py
├── mcp_manager.py
├── agent.py
├── main.py
├── task_logger.py
├── task_planner.py # 任務規劃與重新規劃
├── task_manager.py # 任務狀態與執行紀錄
└── tasks.db # 執行後自動建立
其中,task_logger.py 與 task_manager.py 的用途不同:前者負責整理當次任務的執行摘要,後者則使用 SQLite 保存任務資料,讓程式重新啟動後仍然可以查詢。
除了保存任務紀錄,這次也進一步整理 Agent 的任務規劃流程。
在 task_planner.py 中,讓 AI 根據使用者的需求產生執行計畫,再由 agent.py 依序呼叫對應的 Tool,如果某個步驟成功,就繼續執行原本計畫中的下一個步驟;如果執行失敗,則可以重新規劃後續工作。
為了避免 Agent 不斷重試,也保留了最大執行步數與失敗次數限制。另外,成功執行時不需要每一步都重新呼叫 AI 規劃,可以減少不必要的 API 使用。
接著,新增 task_manager.py,使用 SQLite 保存每次任務的資料。
主要記錄以下資訊:
資料會儲存在 tasks.db,程式第一次執行時就會自動建立資料庫及所需的資料表,不需要手動建立。
當 Agent 開始執行任務時,會先建立任務紀錄;每完成一個步驟,就將結果保存到資料庫,並更新執行進度。任務結束後,再更新整體狀態。
這樣即使程式關閉,也不會因為記憶體中的資料消失而失去之前的任務紀錄。
為了查看保存下來的資料,我也在 main.py 加入任務查詢功能。
啟動程式後,可以輸入以下指令:
tasks:查看最近的任務清單。task 1:查看 ID 為 1 的任務詳細資料。exit:離開程式。任務清單會顯示任務 ID、狀態、任務內容、執行進度與建立時間;詳細資料則會列出各個步驟使用的 Tool,以及對應的執行結果。
和上一篇主要顯示當次執行摘要不同,這次可以直接查詢先前保存的任務,方便之後追蹤與除錯。
完成修改後,我輸入以下任務進行測試,請搜尋知識庫中與 MCP Agent 執行限制有關的資料,整理成重點,寫入 report.txt,最後讀取 report.txt 確認內容。


可以看到指令都有順利完成,並且任務完成後輸入 tasks,可以看到這次任務的狀態與進度:

接著輸入 task 1,就能查看完整的執行紀錄,包括每個步驟的工作內容、Tool 名稱、執行狀態與回傳結果。

我也確認了任務紀錄會保存到 tasks.db,因此重新啟動程式後,仍然可以查詢先前的任務。
今天在原本的 MCP Agent 專案上,進一步加入任務規劃、失敗時的動態調整,以及可持續保存的任務管理功能,現在除了能查看單次任務的執行摘要,也能保存任務狀態與各步驟的執行歷程,並在程式重新啟動後查詢過去的任務。
不過保存任務紀錄不等於自動恢復任務。目前即使能查到中斷前的執行進度,程式仍然需要進一步實作,才能從未完成的步驟繼續執行。