2026年10月20日 星期二

SMTMS 技術分享:從 AI Coding Agent 開發到資料一致性,打造供應商品質與材料追溯系統

 

SMTMS 技術分享:從 AI Coding Agent 開發到資料一致性,打造供應商品質與材料追溯系統

一、為什麼要做 SMTMS?

在製造業的供應商品質管理中,管理供應商、物料與進料檢驗只是基本需求。真正困難的地方,是當物料發生品質異常時,系統能否提供足夠的資料,說明物料從哪裡來、經過哪些檢驗,以及目前處於什麼狀態。

例如,一批物料收到工廠後,會經過收料、內部批次拆分與 IQC(Incoming Quality Control,進料品質檢驗)等流程。如果後續發現品質問題,就必須能夠回頭查明來源,而不是只找到一筆孤立的檢驗紀錄。

因此,我以 SMTMS(Supplier Material Traceability Management System)作為專案,嘗試整合供應商管理、物料管理、進料作業、品質檢驗、異常處理與追溯相關功能。

這個專案的重點不是單純完成 CRUD,而是思考如何讓系統中的資料具有可追溯性、業務規則具有一致性,以及權限控制不會因為 AI 生成程式碼而被忽略。

二、技術架構與選型

SMTMS 採用前後端分離的架構,後端負責業務規則、資料驗證與 API,前端負責操作介面與資料呈現。

技術用途
FastAPI後端 API 與請求處理
SQLAlchemy 2.xORM 與資料存取
Alembic資料庫結構版本管理
MySQL業務資料儲存
RedisJWT Token 撤銷等相關狀態管理
React 19 + TypeScript前端介面
Vite前端開發與建置
Tailwind CSS介面樣式
Docker Compose開發環境服務編排
Nginx前端與服務入口相關配置
JWT + RBAC身分驗證與角色權限控制
uvPython 依賴管理

資料庫使用既有的外部 MySQL,Redis 則透過 Docker Compose 提供開發環境服務。這樣的安排也讓資料庫與應用程式容器的生命週期可以分開管理。

在資料存取層,使用 SQLAlchemy 管理 ORM 與資料庫操作,透過 Alembic 管理 Schema 變更,避免開發過程中只修改程式模型,卻忘記同步資料庫結構。

三、核心設計:資料關聯必須反映真實業務流程

在材料追溯系統中,最重要的不是能查出多少筆資料,而是查詢結果是否有實際紀錄支持。

SMTMS 的核心資料關係包含:

Supplier Lot → Material Receipt → Internal Material Lot → IQC Record

各個環節分別代表供應商批次、實際收料、工廠內部批次,以及進料檢驗紀錄。

這些關係必須透過實際建立的資料與關聯取得,不能只依照物料編號或 BOM(Bill of Materials,物料清單)推測某批物料實際使用在哪裡。

這個設計原則可以歸納為:

  • 資料關聯必須有明確來源。

  • 批次與收料紀錄必須保持一致。

  • 檢驗結果與批次放行狀態必須符合業務規則。

  • 缺少實際紀錄時,系統應明確反映資料不足,而不是自行推論。

這些原則比單純增加查詢畫面更重要,因為它們決定了系統提供的資訊能否被信任。

四、資料一致性:不能只依賴前端驗證

在收料與批次管理中,數量錯誤可能直接影響後續的品質管理與庫存資料。

例如,假設某次收料的數量為 100 件,系統允許建立內部批次時拆分數量,但所有拆分數量的總和不能超過實際可分配的收料數量。

如果只在前端檢查數量,使用者仍可能透過直接呼叫 API、重複送出請求,或同時執行多筆操作,造成資料不一致。

因此,這類規則必須在後端進行驗證,並根據操作的資料依賴關係設計交易與併發控制。

在開發過程中,我特別關注以下問題:

  1. 收料與內部分批之間的數量限制。

  2. 同一物料與供應商批次之間的關聯一致性。

  3. IQC 檢驗結果與放行狀態的同步。

  4. 多筆資料更新失敗時,是否可能留下部分完成的結果。

  5. 重複請求或併發操作是否可能突破既有驗證。

這些問題不能只靠增加欄位驗證解決,還需要檢查資料庫約束、交易邊界及實際的資料更新順序。

尤其在併發情境下,單元測試通過不代表真實 MySQL 多連線操作一定安全。涉及資料競爭的功能,仍需要適當的整合測試與併發測試,才能進一步確認其正確性。

五、權限設計:驗證身分不等於授權成功

SMTMS 使用 JWT 進行身分驗證,並透過 RBAC(Role-Based Access Control)管理角色與權限。

除了確認使用者是否登入,還必須判斷使用者能否執行特定操作,以及是否有權存取指定供應商的資料。

例如,供應商使用者不應只因為知道其他供應商的資料 ID,就能讀取或修改對方的品質紀錄。

因此,權限檢查不能只存在於前端選單或按鈕。即使前端隱藏了某個功能,後端 API 仍然必須獨立驗證權限與資料範圍。

在這個架構中,需要分別考慮:

  • Authentication: 確認使用者身分。

  • Authorization: 確認使用者是否具有所需權限。

  • Data Isolation: 確認使用者只能存取被授權的資料範圍。

  • Token Revocation: 在登出等情境下,透過 Redis 等機制管理已撤銷的 Token。

這些概念彼此相關,但不能互相取代。通過登入驗證,不代表自動擁有所有 API 的存取權限。

六、品質異常管理:讓異常處理成為可追蹤流程

品質異常管理不只是建立一筆異常紀錄,還涉及調查、處置、確認與結案等不同階段。

如果系統只保留異常描述與目前狀態,卻沒有記錄處置內容或操作歷程,就很難理解異常是如何被處理的。

因此,品質異常相關設計需要考慮:

  • 異常紀錄及其關聯資料。

  • 調查與處置內容。

  • 狀態變更及歷程。

  • 附件上傳、下載與刪除。

  • 使用者的操作權限與供應商資料隔離。

附件也不只是檔案上傳問題。系統必須確認檔案與業務紀錄的關聯、存取權限,以及刪除操作的授權範圍。

不過,品質異常管理與完整 CAPA(Corrective and Preventive Action,矯正與預防措施)並不是同一件事。若尚未具備根因分析、矯正措施、預防措施及有效性驗證等完整流程,就不應把一般異常處理功能描述成已完成的 CAPA 系統。

七、AI Coding Agent:開發速度之外,更重要的是限制錯誤

這個專案的另一個重點,是使用 AI Coding Agent 協助開發。

AI 可以協助建立 API、整理 ORM、撰寫前端頁面、補充測試與處理錯誤,但產出程式碼並不代表業務邏輯一定正確。

尤其當需求涉及資料一致性、批次關聯或權限隔離時,AI 可能產生語法正確、卻違反業務規則的實作。

因此,我採取的開發思路不是讓 Agent 自由擴大功能,而是盡可能明確定義修改範圍與驗證條件。

1. 先理解現有實作,再修改程式

面對既有程式或錯誤訊息,先確認實際執行流程、資料表結構、API 路由與相關測試,再判斷問題出在哪裡。

不應只根據錯誤訊息就直接新增欄位、服務類別或抽象層。

2. 明確定義不可違反的業務規則

例如:

  • 收料數量不可超過允許範圍。

  • 內部分批總數不可超過可分配數量。

  • 供應商資料不可跨租戶或授權範圍存取。

  • IQC 檢驗結果與放行狀態必須一致。

  • 追溯結果必須由實際資料關聯取得。

這些規則應該成為 Agent 修改程式時的明確限制,而不是依賴模型自行猜測。

3. 控制修改範圍

採取 KISS 與最小修改原則,優先重用既有的程式模式,避免為了單一需求就引入不必要的 DTO、Service、Helper 或新的抽象層。

修改範圍越大,回歸測試與理解成本通常也越高。

4. 讓驗證結果有明確依據

透過自動化測試、型別檢查、Lint、Migration 檢查與前端建置,確認修改至少符合已定義的技術條件。

但也必須區分測試通過與功能完整:測試只能證明已覆蓋的情境,不能自動證明所有業務規則都正確。

八、為什麼要拆分規格文件?

隨著專案功能增加,單一 spec.md 容易同時包含需求、目前實作、已知缺陷、資料表結構、測試結果與未來規劃。

這會讓 AI Coding Agent 難以判斷哪些是必須遵守的規則、哪些只是目前的程式行為,以及哪些功能尚未實作。

因此,SMTMS 的文件整理方向是將不同責任分開:

  • 01_SRS.md:系統應該提供什麼功能。

  • 02_DOMAIN_RULES.md:業務上不能違反的規則。

  • 03_ADR.md:架構與技術決策。

  • 04_API_CONTRACT.md:API 契約。

  • 05_DATABASE_SCHEMA.md:資料庫結構。

  • 06_CURRENT_STATE.md:目前的實作狀態與已知限制。

  • 07_ACCEPTANCE.md:如何驗證功能是否符合需求。

  • 08_ROADMAP.md:未來的開發順序與優先級。

這樣的拆分不只是文件管理,而是把原本依賴開發者記憶的知識,轉換成 Agent 可以明確引用的工程約束。

九、目前仍需持續驗證的部分

SMTMS 的開發不能只以功能頁面是否存在作為完成標準。

後續仍需要針對以下項目持續確認:

  • 真實 MySQL 多連線下的併發正確性。

  • 所有關鍵業務規則是否都有負向測試。

  • 追溯查詢是否能完整呈現實際存在的關聯鏈。

  • 品質異常是否具備完整的稽核歷程與 CAPA 流程。

  • 報表與匯出是否符合完整資料集的需求。

  • 部署、安全性與效能是否經過實際環境驗證。

這些項目必須依照實際完成的實作與測試逐步確認,不應因為規格已經列出,就認定功能已經完成。

十、結語

SMTMS 對我而言,不只是練習 FastAPI、React 或資料庫操作的專案,更是一個思考 AI 輔助工程開發方式的實例。

AI Coding Agent 可以加速程式碼產出,但工程上的責任並沒有因此消失。資料是否正確、交易是否一致、權限是否完整,以及系統是否真正符合業務規則,仍然需要透過明確的設計、可驗證的測試與持續的人工判斷來確保。

我認為 AI 輔助開發最有價值的地方,不是讓 AI 一次寫出大量程式碼,而是讓它在明確的規則與邊界下完成工作,並讓每一次修改都能被理解、被驗證,也能在出問題時被追查。

這也是 SMTMS 希望呈現的工程方向:以 AI 提升開發效率,以領域規則控制風險,以測試與證據確保系統的可信度。

2026年10月18日 星期日

【技術分享】解構 DeepSeek Harness EAC:打造解放 AI Agent 生態的 IDE & 桌面終端全戰力


在 AI Agent 落地於軟體開發流程(Agentic Coding Workflows)的浪潮中,DeepSeek Harness (DSH) 憑藉強大的 Cordis 微模組架構與長文本重構能力,成為不少工程師的桌面端首選。然而,原生環境在多專案切換、環境依賴污染、以及跨 IDE 整合上,往往存在一定的配置門檻。

由 Ebony-Vinyl 團隊維護與推廣的 DeepSeek Harness EAC (Embracing All Creation) 生態系,正是為了了解決這些實踐痛點而生。本文將從系統架構、環境隔離機制到 IDE 側邊欄整合,深入剖析 EAC 版本的技術亮點與實戰配置。

💡 什麼是 DeepSeek Harness EAC?

EAC 代表 Embracing All Creation(攬盡万象)。Ebony-Vinyl 團隊將 DeepSeek Harness 的原生 Agent 編排引擎與桌面殼層(Tauri 2 + Rust)深度融合,並搭配專屬的 EAC-Pack 套件 與 dsh-our-free-model 機制:

  1. 開箱即用的跨平台環境:內建 Node.js / DSH 專屬 Runtime,免去開發者手動配置環境變數或修復 pnpm lockfile 衝突的麻煩。

  2. 多通道免 Key 整合(Our Free Model):整合了前沿模型(如 DeepSeek V4.1 Flash、Kimi K3)以及多帳號管道轉發,支援本地 OpenAI 相容網域與局域網轉發,大幅降低 AI 輔助開發的代價。

  3. 極致的沙盒與安全隔離:提供唯讀沙盒(Read-only Sandbox)、項目寫入鎖定(Workspace-write)與完整權限模式,並具備自愈面板(Self-healing Panel)與 ACL 授權機制。

🛠 EAC 版本的四大核心技術亮點

1. 雙層架構設計:最小殼化與皮膚外遷 (M1-M5 Refactoring)

EAC 在 v6 架構演進中採用了「最小 Core-Shell 隔離」設計。桌面端 Rust 殼體僅專注於 window management、系統托盤、通知與 ACL 存取 control;而 UI 界面、主題皮膚與外掛模組則各自解耦,確保在進行大規模 Code Diffusion 與 Diff 渲染時,UI 線程不會卡死。

2. 專案級別的配置與憑據單向隔離

在團隊開發情境下,最忌諱不同專案的 Agent 上下文相互污染。EAC-IDE 外掛實現了 按專案(Workspace)隔離數據目錄 的能力。每個 IDE 視窗開啟時,會獨立綁定當前專案的 Root Path,並單向繼承宿主的基礎憑據,實現真正的多專案並行開發。

3. Native IDE VCS Base Line Diff 整合

傳統 Web UI 的 AI 修改程式碼往往需要手動複製貼上。EAC IDE 插件將文件變更直接接軌 IDE 原生的 VCS Diff 機制, Agent 的修改會以 Git / IDE Native Diff 的形式呈現在編輯器內,工程師可以逐行 Review 審閱後一鍵 Accept 或 Revert。

4. 離線裝配與 Managed Distribution 依賴守護

針對企業內網或離線開發環境,EAC-Pack 提供了 managed 升級分配機制與離線 tarball 裝配。當插件設定為受管狀態時,系統會自動切斷可能引發 EINTEGRITY 或 EPERM 的網路下載鏈,確保系統運作的確定性與冪等性。

🚀 實戰配置:在 IDE / VS Code 中掛載 EAC 免費模型通道

若您已下載或部署 Ebony-Vinyl EAC 套件,可以透過以下兩種方式輕鬆對接:

方案 A:手動配置 settings.json

在 VS Code 或 IDE 外掛的設定檔中,貼入 EAC 的專屬通道配置:

JSON
{
  // 對接 Ebony-Vinyl 本地網域或轉發端點
  "deepseekHarness.connection.apiBase": "http://127.0.1.1:18900/v1",
  "deepseekHarness.connection.model": "dsh-our-free-model",
  
  // EAC 隔離與沙盒安全性預設
  "deepseekHarness.sandbox.mode": "read-only",
  "deepseekHarness.workspace.isolation": true,
  
  // 最佳化多步代碼重構排程
  "deepseekHarness.agent.timeout": 120,
  "deepseekHarness.agent.maxSteps": 20
}

方案 B:使用 .vsix 或 IDE Marketplace 原生載入

  1. 在 IDE 擴充功能選單中選擇 Install from VSIX...。

  2. 啟動後點擊側邊欄 EAC 圖示,進入 Connection Settings。

  3. 勾選 Our Free Model 啟用,系統即會自動同步帳號池與免費車道,實現免 API Key 直接呼叫!

🎯 總結

Ebony-Vinyl 團隊維護的 DeepSeek Harness EAC 為開發者社群提供了一個兼具高效能、高安全性與無限擴充性的 Agent 開發環境。不論是全鍵盤操作的 TUI 流派,還是結合 IDE 原生 Diff 的可視化重構,EAC 都讓 AI 真正從「聊天機器人」演進為「離線可控的自動化架構夥伴」。

歡迎前往 Ebony-Vinyl/Deepseek-Harness-EAC GitHub 倉庫提交 Issue 或參與社群插件貢獻!

這支影片詳細示範了 DeepSeek Harness 的安裝與基本配置流程,有助於理解 Harness 核心的運作邏輯與插件機制。

SMTMS 技術分享:從 AI Coding Agent 開發到資料一致性,打造供應商品質與材料追溯系統

  SMTMS 技術分享:從 AI Coding Agent 開發到資料一致性,打造供應商品質與材料追溯系統 一、為什麼要做 SMTMS? 在製造業的供應商品質管理中,管理供應商、物料與進料檢驗只是基本需求。真正困難的地方,是當物料發生品質異常時,系統能否提供足夠的資料,說明物料...