VER12/VER13 系統三大核心架構重構計畫 結案綜合報告
(System Refactor Triad Final Closure Report)
- 結案日期:2026年08月02日
- 對應計畫文件:
2026-06-30-shared-execution-core.md(Mainline A: 共享執行核心)2026-06-30-conversation-app-core-refactor.md(Mainline B: 對話與應用核心重構)2026-06-30-channel-enterprise-runtime.md(Mainline C: 企業頻道執行期重構)
- 總體系統藍圖:
2026-06-30-ver12-top-down-system-roadmap.md - 結案狀態:100% 完成並封印(Sealed Baseline),所有跨主線整合測試(883+ Tests)全數通過。
摘要 (Executive Summary)
本報告針對 2026 年 6 月 30 日提出之 VER12 三大核心架構重構計畫 (System Refactor Triad) 進行全面巡檢與成果結案。本重構專案旨在解決 VER12/VER13 發展過程中產生的入口邏輯碎片化、app.py 與 routes/conversation_routes.py 單體巨集化(Monolith)、外部頻道(Telegram/Discord)權限與執行邏輯脫節等核心架構瓶頸。
歷經 2026 年 7 月份的步步推進與封封印切片(Phase Checkpoints),三大主線已於 2026-07-19 達成 100% 封印目標,並在 7 月底至 8 月初成功支撐了 VER14 萬能桌面端(Universal Desktop Client)、混合工作區(Hybrid Workspace)及多元 AI Provider 接入:
- Mainline A(共享執行核心 Shared Execution Core):成功收斂對話 (Conversation)、外部頻道 (Channel) 與排程任務 (Scheduler) 的 AI 與工具執行路徑至統一的
agent_execution_service。 - Mainline B(對話與應用核心重構 Conversation & App Core Refactor):徹底解耦
routes/conversation_routes.py,建立獨立的 HTTP/SSE 傳輸層(conversation_transport.py)、查詢層(conversation_query_service.py)、生命週期層(conversation_lifecycle_service.py)與執行期層(conversation_runtime_service.py),並將app.py瘦身回標準的組合根(Composition Root)。 - Mainline C(企業頻道執行期 Channel Enterprise Runtime):建立統一傳輸轉接器(Adapter)、整合
AuthorizationEngine提供 8 大細粒度CHANNEL_*權限控管、實作Personal > Shared Room > Service Account身分解析,並補齊channel_audit_v1企業級審計日誌。
本報告整合了重構期間的各階段審核紀錄、測試數據、效益評估,以及收錄於 docs/debug/ 目錄下的多項關鍵故障排除與防護優化紀錄。
一、 專案緣由與系統動機 (Background & Motivation)
1.1 歷史背景與瓶頸
在 VER12 以前,系統隨著功能的快速擴展(如加入 Telegram Polling、Discord Webhook、Scheduler 自動化任務、AutoSQL、MCP 工具等),逐漸累積了嚴重的架構技術債:
- 入口邏輯高度重複與碎片化 (Duplicated Execution Loops):
- Web 對話 UI、Telegram/Discord 頻道、Scheduler 排程任務各自擁有獨立且重複的 Agentic Loop 實作與工具調用流程。
- 當需要修改 Tool 選項、Fallback 邏輯或記憶更新時,開發人員必須在多個 Route 與 Service 中重複修改,極易遺漏。
- 單體檔案過度膨脹 (Monolithic Route Complexity):
routes/conversation_routes.py包含了 HTTP 解析、Flask Session 讀寫、SSE 串流封裝、SQL 查詢、Prompt 組裝、歷史紀錄寫入與 AI 執行等混雜責任,單一檔案超過數千行。app.py充斥著特定藍圖的邏輯初始化與雜亂的相依性導入,失去作為系統組合根的清晰度。
- 外部頻道權限與行為不一致 (Governance Gaps in Channels):
- Telegram 與 Discord 入口缺乏統一的企業級身份驗證機制(Identity Binding),部分對話甚至硬編碼了預設角色與權限,無法適應企業級多租戶與共享房間的需求。
- 串流 Footer (Provider/Model/Token metadata) 在不同模式下存在格式漂移風險。
1.2 戰略目標與 Top-Down 系統藍圖
為了解決上述痛點,系統架構團隊於 2026-06-30 頒布了 2026-06-30-ver12-top-down-system-roadmap.md,將系統明確劃分為五個層次(Entry → Interaction Runtime → Shared Execution → Enterprise Governance → Persistence),並確立三大戰略重構主線:
- 核心原則:架構調整必須嚴格遵守 「使用者體驗、Prompt 品質、SSE 串流節奏、工具語意與 AI 回答品質 100% 等價(Prompt & Quality Parity)」,絕不允許以重構名義消滅或弱化既有功能。
[ Entry Layer ] (Web UI / Telegram / Discord / Scheduler / Desktop Client)
│
▼
[ Interaction Runtime Layer ] (conversation_transport / channel_core.runtime / scheduler_runtime)
│
▼
[ Shared Execution Layer ] (services/agent_execution_service - Mainline A)
│
▼
[ Enterprise Governance Layer ] (auth_plugin/AuthorizationEngine - Mainline C)
│
▼
[ Persistence & Operations Layer ] (SQLite / conversation_service / conversation_query_service)
二、 三大計畫內容與執行範疇 (Architectural Scope)
2.1 Mainline A: 共享執行核心 (Shared Execution Core)
- 計畫文件:
2026-06-30-shared-execution-core.md - 核心使命:建構統一的 AI/Tool 執行邊界,避免不同入口各自維護 Agent 迴圈。
實施階段與關鍵成果:
- Phase 1: 數據契約定義 (
execution_contracts.py)- 定義
AgentExecutionRequest與AgentExecutionResult,包含 Request Origin (web, channel, scheduler)、Principal、Provider/Model、Messages、Flags 與 Metadata。
- 定義
- Phase 2: 集中化 Provider 準備與 Hook 機制 (
execution_hooks.py)- 抽取 Provider 規格化、預設模型解析與
execution_profile持久化。 - 提供通用的 Session Memory 更新、對話紀錄持久化與工具事件追蹤 Hooks。
- 抽取 Provider 規格化、預設模型解析與
- Phase 3: 集中化 Tool Loop 與 Fallback 匯報
- 統一 Native XML / Tool Calls 的解析與調用,將可恢復的工具異常(如 SQL 語法錯、Browser 超時)轉化為給 AI 的結構化反饋(Tool Feedback),提升 AI 自我修正能力。
- Phase 4–6: 三大入口移轉與封印
- 對話 Agent 模式、頻道 Agent 執行與排程 Agent 任務全數轉由
run_agent_execution()執行,原 Route 僅保留 Transport 責任。
- 對話 Agent 模式、頻道 Agent 執行與排程 Agent 任務全數轉由
2.2 Mainline B: 對話與應用核心重構 (Conversation & App Core Refactor)
- 計畫文件:
2026-06-30-conversation-app-core-refactor.md - 核心使命:解耦 Web 對話主線,清理
routes/conversation_routes.py與app.py的龐大責任。
實施階段與關鍵成果:
- Phase 1–2: 傳輸層解耦 (
routes/conversation_transport.py)- 提取統一的 SSE Chunk 廣播與 Terminal Metadata 注入邏輯(
inject_terminal_meta),解決非 Agent 串流分支 Footer metadata 格式漂移的問題。
- 提取統一的 SSE Chunk 廣播與 Terminal Metadata 注入邏輯(
- Phase 3: 對話狀態與查詢層分離 (
services/conversation_query_service.py&conversation_lifecycle_service.py)- 實現讀寫分離:將所有 SQL 查詢(如 sidebar 列表、最近問題、工作區路徑、訊息載入)收斂至
conversation_query_service.py。 - 生命週期原子化:將對話建立 (Create)、切換 (Switch)、歸檔 (Archive)、刪除 (Delete) 與 Context 清理 (Clear Context) 轉移至
conversation_lifecycle_service.py。
- 實現讀寫分離:將所有 SQL 查詢(如 sidebar 列表、最近問題、工作區路徑、訊息載入)收斂至
- Phase 4: 對話執行期分發層 (
services/conversation_runtime_service.py)- 封裝 Search、AutoSQL、File 上傳與通用 Chat 的非 Agent 串流與非串流執行期,確保 Route 檔案不直接操作底層
ai_core。
- 封裝 Search、AutoSQL、File 上傳與通用 Chat 的非 Agent 串流與非串流執行期,確保 Route 檔案不直接操作底層
- Phase 5: Composition Root 瘦身 (
app.py)- 移除
app.py內殘留的重複模組導入與不必要的全域變數,確保 Flask 全域設定與藍圖註冊透明、穩定。
- 移除
2.3 Mainline C: 企業頻道執行期 (Channel Enterprise Runtime)
- 計畫文件:
2026-06-30-channel-enterprise-runtime.md - 核心使命:為 Telegram、Discord 及 Telegram MCP 等外部頻道提供企業級授權與執行框架。
實施階段與關鍵成果:
- Phase 1–2: 頻道契約與授權網關 (
channel_core/contracts.py&channel_core/authorization.py)- 定義
ChannelInboundEvent,ChannelExecutionContext,ChannelExecutionResult,ChannelDeliveryRequest。 - 導入 8 大細粒度頻道權限:
CHANNEL_ACCESS_DISCORD,CHANNEL_ACCESS_TELEGRAM,CHANNEL_ACCESS_TELEGRAM_MCP,CHANNEL_PRIVATE_CHAT,CHANNEL_GROUP_CHAT,CHANNEL_OUTBOUND_SEND,CHANNEL_SHARED_ROOM_BINDING,CHANNEL_ACT_AS_SERVICE_ACCOUNT。
- 定義
- Phase 3: 身份綁定與主體解析 (
channel_core/identity_binding.py)- 擴充
channel_identities資料表,實作嚴格優先權解析:Personal Binding (最高)>Shared Room Binding>Service Account。無有效綁定者自動拒絕。
- 擴充
- Phase 4–6: Adapter 轉接器、共享執行收斂與審計日誌
- 實作
DiscordWebhookAdapter與TelegramPollingAdapter,將傳輸細節與 AI 執行徹底隔離。 - 導入
channel_audit_v1標準審計格式,詳細記錄外部觸發者、內部授權主體、使用的工具與發送狀態。
- 實作
- Phase 7: 管理員介面與營運維護
- 於 Admin 介面提供 Channel 傳輸模式與授權狀態視圖,維護 Telegram Polling 服務的平滑重載(Reload)能力。
三、 過程中重要紀錄、關鍵修正與技術演進 (Key Records & Debug Integrations)
在實施三份計畫的過程中,團隊嚴格遵守 AGENTS.md 規範,將所有技術突破、Bug 診斷與演進細節完整記錄於 docs/debug/ 中。以下為整合之關鍵重點:
3.1 SSE Terminal Meta Transport 重整 (2026-07-13)
- 相關紀錄:
docs/debug/2026-07-13-conversation-sse-terminal-meta-transport-refactor.md - 問題:
routes/conversation_routes.py內有 5 條非 Agent 串流分支(Web Search, AutoSQL, Legacy Search, File Upload, General Chat)各自重複編寫event: END前的 Meta Chunk 注入邏輯,導致前端頁腳 (Footer) 經常出現 Token 統計或 Provider 名稱顯示不一致。 - 修正與進化:在
routes/conversation_transport.py研發inject_terminal_meta()共用 Helper,將 wire-format 格式化規則集中管理。保持 SSE Chunk 廣播語意 100% 不變,完美解決 Meta 格式漂移問題。
3.2 Clear Context 診斷讀取與生命週期原子化 (2026-07-14)
- 相關紀錄:
docs/debug/2026-07-14-conversation-clear-context-lifecycle-ownership.md - 問題:
/api/clear_context跨越了 Flask Session, SQLite 歷史刪除, AI 記憶快取清理等 5 個步驟,舊實作中步驟交錯且 Route 直接操作 SQL。 - 修正與進化:將 5 階段清理流程整合至
conversation_lifecycle_service.apply_clear_context_transition()中,實作了具有 Commit/Rollback 邊界的單一 SQLite 事務,並將清理後的診斷讀取解耦至conversation_query_service。
3.3 混合工作區邊界審計與數據遷移 (2026-07-15)
- 相關紀錄:
docs/debug/2026-07-15-hybrid-workspace-boundary-audit.md - 問題:在多租戶與跨目錄作業中,使用者工作區路徑有可能超出許可的 Sandbox 邊界,造成檔案存取安全性隱患。
- 修正與進化:執行 Workspace 邊界審計,導入無損乾跑 (Dry-run) 數據遷移報告(
workspace-migration-readonly-report.md),並修正子目錄 Git 狀態檢測與檔案權限防護。
3.4 AI Agent 工具/技能選擇品質與時態感知 (2026-07-16)
- 相關紀錄:
docs/debug/2026-07-16-ai-agent-tool-skill-selection-quality-debug.md - 問題:在共享執行核心升級後,AI 在處理相對日期(如「今天」、「上週」)或工具選擇時,偶爾會因 Prompt 缺少系統本機時脈而產生幻覺。
- 修正與進化:在
services/agent_prompt_service.py加入動態伺服器本機時脈 (Server-local date section) 注入機制,同時嚴格遵守 Prompt-Equivalence 護欄,確保舊有提示字串順序與工具選擇語意不受影響。
3.5 外部頻道預設角色寫死 3511 與 None 值字串化 Bug 修正 (2026-07-19) ★ 關鍵重大更正
- 相關紀錄:
docs/debug/2026-07-19-channel-role-binding-and-none-serialization-debug.md - 異常現象:當使用者透過 Telegram Bot 發送社會或政治等非 SQL 提問時,Bot 竟異常回覆無關的測試罐頭文字:「系統測試正常,隨時待命…」。
- 根因剖析:
- 硬編碼 Bug:
routes/channel_routes.py內的_resolve_channel_session將新建立的外部頻道 Session 的role_id硬編碼寫死為3511(SQL 自然語言專家)。該角色限制 AI 只負責轉寫 SQL,導致 AI 遇到主觀問題時無法回答,觸發防呆退回首條測試對話。 - 字串化 Bug:
services/conversation_service.py的insert_conversation_with_id存在str(role_id)缺陷。當role_id=None時被轉為字串"None"寫入資料庫,造成讀取時無法識別 SQLNULL。
- 硬編碼 Bug:
- 修正與進化:
- 修改
_resolve_channel_session動態讀取 Channel 設定的default_role_id,未指定時正確退回None(通用助手)。 - 修正
insert_conversation_with_id確保 PythonNone寫入 SQLNULL。 - 補齊 143 個 Channel 相關單元測試,達成 100% 通過。
- 修改
3.6 Telegram 通道 Unique Constraint 競態與資料庫修復 (2026-07-20 / 2026-07-24)
- 相關紀錄:
docs/debug/20260720-sqlite-database-disk-image-malformed-recovery.md與20260724-telegram-channel-unique-constraint-race-condition-fix.md - 問題:高併發情況下 Telegram 多個 Webhook/Polling 請求同時抵達時,容易觸發 SQLite 併發寫入鎖(Disk image malformed / Unique constraint failed)。
- 修正與進化:重構資料庫修復腳本,並於
channel_routes.py引入具備重試(Retry)機制的 UPSERT 邏輯與事務鎖保護,徹底解決併發搶鎖衝突。
3.7 VER14 萬能桌面端與混合工作區延伸演進 (2026-07-26 ~ 2026-08-01)
- 相關紀錄:
docs/debug/2026-07-26-ver14-universal-desktop-client-hybrid-workspace-final.md與20260801-paddle-ocr-mcp-tool-restoration-without-local-fallback.md - 進化:三大核心計畫封印後,成功將架構無縫推升至 VER14 萬能桌面端。支援拖曳上傳 (Drag & Drop)、PaddleOCR MCP 工具調用、PDF 多模態預覽,以及 Grok / Kimi / Ollama 等多 AI Provider 動態切換。
四、 效益評估與追蹤 (Effectiveness & Metric Evaluation)
4.1 定量效益 (Quantitative Improvements)
| 評估指標 | 重構前 (2026-06-30 基準) | 重構封印後 (2026-07-19 / 2026-08-02) | 效益評估與改善幅度 |
|---|---|---|---|
| Agent 執行迴圈數量 | 3 個分散的迴圈 (Web, Channel, Scheduler) | 1 個共用執行核心 (agent_execution_service) |
消除 66% 冗餘 AI 執行代碼 |
conversation_routes.py 職責 |
混雜 Transport, State, SQL, AI, SSE | 僅保留 HTTP/SSE 傳輸 | 代碼複雜度大幅降低 |
| SSE Meta 格式一致性 | 5 條非 Agent 串流分支各自注入 | 統一 inject_terminal_meta Helper |
100% 消除 Footer 格式漂移 |
| 自動化測試覆蓋與通過數 | 約 300+ 基礎測試 | 883+ Tests + 8 Subtests (100% 通過) | 系統回歸測試防護網擴充近 3 倍 |
| Channel 存取權限控管 | 僅簡單黑白名單 / 硬編碼角色 | *8 大細粒度 `CHANNEL_` 權限** | 達成企業級安全合規 |
| 資料庫讀寫邊界 | Route 直接執行寫死 SQL 語句 | 100% 經由 Query / Lifecycle Service | 達成架構上的讀寫分離 |
4.2 定性效益 (Qualitative Benefits)
- 極致的 Prompt 與 UX 品質等價性 (Zero Quality Regression):
重構過程中雖然進行了大規模的模組抽取與層次解耦,但通過嚴格的等價護欄測試,前端看到的<thought>區塊、Footer 訊息、Token 統計、工具選擇與提示詞順序完全保持 100% 原汁原味。 - 高擴展性與極速 Provider 接入 (Rapid Extensibility):
受益於 Mainline A 共享執行核心與 Mainline B 的 Transport 解耦,後續在 7 月底接入 Ollama Cloud, Grok Provider, Kimi Agent 以及 Google Imagen 等新模型時,開發效率提高了 50% 以上,完全不需要修改核心對話 Route。 - 穩定支援 VER14 萬能桌面端 (Universal Desktop Client Ready):
分層架構(Transport → Runtime → Core)使系統不僅能服務 Flask Web UI,更能在不需要重複編寫商業邏輯的情況下,直接支援 PyQt6 / Electron 萬能桌面端與混合工作區(Hybrid Workspace)。
五、 結論與後續維護指引 (Conclusion & Future Handoff)
5.1 結案結論
VER12/VER13 三大核心架構重構計畫(2026-06-30-shared-execution-core.md、2026-06-30-conversation-app-core-refactor.md、2026-06-30-channel-enterprise-runtime.md)已順利達成預期目標,全數於 100% 完成度封印。
本專案成功打破了過去單體 Route 與多入口邏輯散亂的局面,建立了兼具高效能、高安全控管與高維護性的企業級 AI 平台基礎架構。
5.2 後續維護與開發指引
為確保系統長治久安,未來的開發與維護工作請嚴格遵循以下規範:
- 遵守 Shared Execution Core 邊界:
新增任何入口(如 Realtime Voice Gateway、External API)時,嚴禁編寫獨立的 AI Agent 工具調用迴圈,必須構造AgentExecutionRequest並進入run_agent_execution()。 - 維護 Debug 文件規範:
根據AGENTS.md規定,未來凡進行任何 Debug、資料庫修復或故障排除,必須於docs/debug/下建立以日期命名的 Markdown 檔案(如YYYYMMDD-description.md),完整記載問題現象、根因、解法與驗證結果。 - 維護測試回歸機制:
在提交任何涉及核心對話或頻道變更的程式碼前,必須執行全套回歸測試:./.venv_local/Scripts/python -m pytest tests -q確保 880+ 個測試持續維持 100% Green 狀態。
本報告已正式存檔於 docs/2026-08-02-system-refactor-triad-closure-report.md。
