將 Coding Agent 接入真實商業系統:Foundax 架構實踐
結合真實商業情境,探討如何讓 Coding Agent 參與業務系統運作。Agent 負責業務理解、推理與以程式碼組織任務,平台則負責資料授權、持久項目狀態、真實業務寫入與人工持續編輯,在靈活性與工程邊界間取得平衡。
工具呼叫適合邊界清晰的單一步驟,但在複雜網店工作流程中,多工具組合容易帶來龐大的上下文與推理成本。本文回顧從工具呼叫走向程式碼執行的架構演進,探討沙箱隔離、授權視圖、不可變快照、版本水位與受控寫入的工程考量。

將 AI Agent 落地到現有商業軟件中,是許多工程團隊正在面對的挑戰。Foundax 作為一個擁有商品、規格、庫存、多語言內容、促銷與交易系統的完整平台,而不僅僅是頁面生成器,在整合 Agent 的過程中經歷了架構上的反覆探索。
最初,我們試圖透過封裝業務 API 讓 Agent 使用(傳統的 Tool Calling)。但我們很快發現,當面對真實的、複合的網店營運需求時,純粹的 API 工具組合會讓模型與系統的互動變得極度笨重。本文將重演這段架構演進,探討為什麼我們最終選擇引入沙箱(Sandbox),讓業務 Agent 像編寫程式碼的 Coding Agent 一樣工作,以及背後關於資料快照、執行授權與受控寫入的技術機制。
在真實的商業場景中,商家的需求往往是具體且帶有複雜條件的。例如一個典型的營運任務:
「幫我準備週末的清倉活動;找出可售庫存超過 20 件的商品,排除已經參加其他優惠的商品,幫它們補齊缺失的英文介紹,最後生成一份折扣建議先讓我審閱。」
在早期的設計中,我們嘗試為模型提供不同粒度的工具:
最根本的問題在於經濟性與穩定性。複雜任務的多輪協調會大量消耗模型的推理能力、Token 上下文、執行時間以及 API 預算。模型在「判斷業務邏輯」與「處理大量確定性資料過濾」之間疲於奔命。邊界清晰的任務固然適合直接使用工具,但在處理不可預測的業務組合時,我們需要一種更高效的方式。
關於這種架構整合的宏觀設計,可進一步參考 將 Coding Agent 接入真實商業系統:Foundax 架構實踐。

與其讓 Agent 透過 API 介面去「點擊」虛擬按鈕,不如讓它發揮最擅長的事情:閱讀 Schema 並編寫程式碼。這並非淘汰 Tool Calling,模型依然需要透過工具來讀取檔案、執行命令、提交結果,但它的工作模式發生了本質上的改變。
我們引入了包含 Shell 和檔案系統的 Sandbox,將營運需求轉化為數據處理腳本。模型擅長讀程式碼和寫程式;那些確定性的 join、filter 與批次計算交由 Python 或 Node.js 腳本在本地執行,而 LLM 則專注於探索、修正、驗證以及非確定性的業務判斷(例如「這段商品描述的語氣是否合適」)。這並非承諾能完全消除多輪對話或固定 API 呼叫次數,其核心目的是減少模型在不同工具間不必要的資料搬運與逐輪協調成本,至於完整任務的實際開銷與效益,仍需針對具體業務場景進行實測評估。
要讓模型寫出正確的腳本,我們必須提供清晰的業務視圖(Business Schema)。這不僅僅是資料庫結構的 Dump,而是帶有業務語義的授權數據字典。我們必須向模型解釋:
引入腳本執行後,安全與權限隔離成為首要任務。在我們的架構中,宿主(Host)與沙箱(Sandbox)的職責有嚴格的邊界:
為此,我們設計了分離的邏輯掛載點(Mount Points),這是一套公開的參考設計:
為了讓這套機制足夠流暢,我們對內部執行器的排程進行了專項優化:
(註:此數據僅為內部針對執行器準備與調度環節的測量,不代表端到端的任務完成時間或 Token 節省比例。具體的資源開銷仍需依賴完整鏈路的觀測。)
在 Agent 分析資料與編寫腳本的同時,真實世界的網店仍在運作——顧客可能正在下單佔用庫存,營運人員可能正在修改價格。如果直接基於過時的資料進行寫入,將引發嚴重的資料災難。
不可變的原始碼快照可以依據構建與存取範圍進行複用;但業務資料的快照必須嚴格綁定使用者的授權範圍(包含租戶、資源與權限)。我們透過 Version Watermark(版本水位線)結合業務域的依賴關係來決定資料的刷新範圍。
這裡存在一個具體的競態條件風險:如果系統在匯出舊資料快照的期間發生了業務寫入,卻給這份快照標上了最新的水位線,系統就會將過期的資料誤認為最新狀態。因此,資料本身與其水位線必須嚴格屬於同一個一致性截面(Consistency Cross-section)匯出。
在執行設計上,單一命令所依賴的資料快照版本是固定的;只有在命令切換時,系統才會為沙箱掛載包含新水位線的完整資料版本,同時保留 /work 目錄下的腳本以便接續執行。必須強調,這套快照生命週期是架構設計中需要實現的一致性責任(目前的開源範例尚未包含完整的快照快取或自動刷新實作),並且這僅用於 Agent 的計算與決策階段——當最終建議交由業務服務寫入時,依然必須對當前的生產狀態進行嚴格校驗。
Agent 的工作成果絕不是一次性調用就直接修改生產資料。我們將寫入過程拆分為三個階段:
在「業務寫入」階段,系統會重新檢查權限、欄位約束以及記錄版本(Record Version)。一旦發現衝突(例如 Agent 建議折扣的商品,其庫存在這段期間內已被清空),系統會拒絕寫入。衝突發生時必須重新讀取當前狀態並進行計算,絕不能僅僅替換版本號強行寫入。
此外,即使 Agent 將所有的修改建議輸出在同一個檔案中,這也不代表它們是一個原子事務(Atomic Transaction)。跨域的事務、部分成功與重試策略,均由具體的業務服務負責定義;例如,涉及收費與退款的通知,必須走各自獨立且明確授權的通道。
讓業務 Agent 像 Coding Agent 一樣工作,本質上是為了在「不可預測的業務組合」與「系統執行效率」之間找到平衡。業界對此已有許多探索,例如 OpenHands 提供了通用的 Agent SDK 來處理底層的執行循環與會話管理,Anthropic 關於使用 MCP 執行程式碼的研究探討了模型如何透過程式碼進行組合運算,以及 Cloudflare Code Mode 以程式碼組合工具呼叫的實踐。在這些成熟的通用執行架構之上,我們的核心挑戰與貢獻,在於如何將既有的商業系統資料契約、快照生命週期,以及受控寫入機制,安全且高效地整合進 Agent 的工作流中。
若您對其他領域的 Agent 整合應用感興趣,例如前端程式碼與 UI 領域的結合,可以參考 如何讓 AI 生成的前端程式碼支援可視化編輯。
完整的架構設計與合成數據的可運行盤點範例,已於 Foundax Agent Business Workspace (GitHub) 開源(採用 MIT 授權)。該範例示範了讀取、計算、建議,以及作用域、欄位、庫存約束與記錄版本的校驗流程(註:範例不含完整的生產級沙箱、快照快取或自動刷新實作)。我們非常歡迎與其他維護複雜商業系統的工程團隊交流具體問題,您可以透過 GitHub Issues、Discussions 或 contact@novariseintl.com 與我們聯繫。