架構解析:從模型預測到生產級決策的工程實踐)
1. 從概念到生產Jev 決策系統(tǒng)的架構全景與設計哲學1.1 為什么需要“決策系統(tǒng)”而不是“又一個模型”過去兩年我參與過三個不同行業(yè)的 AI 決策類項目從電商動態(tài)定價到供應鏈補貨再到內容平臺的推薦策略。一個反復出現的現象是團隊花大力氣訓了一個模型離線指標很漂亮一上線就崩。問題往往不在模型本身而在于整個系統(tǒng)缺少“決策”這一層——模型只負責預測但預測不等于決策。Jev 這個項目標題里最核心的詞其實是“決策系統(tǒng)”而不是“模型”。這兩者的區(qū)別我用一個生活化的類比來解釋模型像是一個經驗豐富的醫(yī)生能根據化驗單判斷你得了什么病而決策系統(tǒng)像是一個完整的診療方案它要綜合考慮醫(yī)生的判斷、你的過敏史、醫(yī)保報銷范圍、藥品庫存、甚至你明天有沒有重要會議不能吃嗜睡的藥。模型只輸出概率決策系統(tǒng)輸出的是“接下來該做什么”。Jev 要解決的核心問題就是讓 AI 從“會預測”進化到“會決策”。它適合誰來參考我認為有三類人最值得往下看一是正在做 AI 應用但卡在“模型上線效果打折”的工程師二是需要向業(yè)務方解釋“為什么 AI 給出的建議不能直接用”的產品經理三是想了解下一代 AI 系統(tǒng)架構長什么樣的技術管理者。1.2 核心設計思路分層解耦與反饋閉環(huán)Jev 的架構設計遵循一個很樸素但極難做好的原則預測與決策分離決策與執(zhí)行分離。我見過太多項目把模型推理和業(yè)務規(guī)則揉在一個服務里結果改一條規(guī)則要重新部署整個模型服務調一個閾值要等半天。Jev 的做法是把系統(tǒng)切成四層每一層只做一件事。第一層是感知層負責把原始數據變成模型能吃的特征。這一層的關鍵不是特征工程有多花哨而是特征一致性——離線訓練用的特征和線上推理用的特征必須來自同一套定義。我踩過的坑是離線用 Python 算的特征線上用 Java 重寫了一遍結果因為浮點數精度和空值處理邏輯不同線上效果直接掉五個點。Jev 在這一層強制使用特征注冊中心所有特征定義只寫一次離線和線上都從注冊中心拉取。第二層是預測層跑模型推理。這一層 Jev 沒有追求“大模型”而是強調多模型集成與不確定性量化。為什么因為決策系統(tǒng)最怕的不是預測不準而是預測“不知道自己不準”。一個模型給出 0.9 的置信度另一個給出 0.6決策層需要知道這個差異才能決定是直接執(zhí)行還是轉人工。Jev 在這一層會同時輸出預測值和置信區(qū)間這是它和普通推理服務的本質區(qū)別。第三層是決策層這是 Jev 最核心的部分。它接收預測結果結合業(yè)務約束庫存、預算、合規(guī)紅線、實時上下文用戶當前狀態(tài)、系統(tǒng)負載、以及長期目標不是最大化單次點擊而是最大化用戶生命周期價值輸出一個或多個可執(zhí)行的動作。這一層的實現方式我后面會詳細拆這里先點明一個關鍵設計決策層不包含任何模型它是純規(guī)則引擎加優(yōu)化求解器。這樣做的好處是決策邏輯可解釋、可審計、可熱更新業(yè)務方也能看懂。第四層是執(zhí)行與反饋層負責把決策變成實際動作并收集動作后的真實反饋。這一層最容易被忽視但它是整個系統(tǒng)能持續(xù)進化的前提。沒有反饋閉環(huán)決策系統(tǒng)就是一個開環(huán)控制器遲早會漂移。1.3 與常見架構的對比為什么不是“模型即服務”市面上很多 AI 系統(tǒng)走的是“模型即服務”路線把模型包成一個 API業(yè)務方調用 API 拿預測結果自己寫 if-else 做決策。這種模式在簡單場景下能用但一旦決策邏輯復雜起來就會變成技術債的重災區(qū)。我整理了一個對比表方便你判斷自己的項目該不該上 Jev 這種架構。維度模型即服務Jev 決策系統(tǒng)架構決策邏輯位置散落在業(yè)務代碼中集中在決策層統(tǒng)一管理規(guī)則更新需要改代碼、重新部署熱更新分鐘級生效可解釋性弱決策鏈路斷裂強每層輸出可追溯多目標權衡難通常只優(yōu)化單一指標內置多目標優(yōu)化求解器反饋閉環(huán)通常沒有強制要求閉環(huán)驅動進化適用場景簡單分類、排序動態(tài)定價、資源調度、風控、推薦策略這個表不是要否定模型即服務而是想說當你的決策涉及多個約束、多個目標、需要快速迭代規(guī)則時Jev 這種分層架構的長期維護成本會低很多。短期看它多寫了幾層代碼長期看它省的是無數次“改一行規(guī)則等一天上線”的痛苦。2. 核心模塊拆解從特征到決策的完整鏈路2.1 特征注冊中心解決離線在線一致性的唯一正解特征不一致是 AI 系統(tǒng)上線效果打折的第一大殺手。我做過一個統(tǒng)計在我經手的項目里超過六成的“離線好線上差”問題根因都是特征計算邏輯不一致。Jev 的解法是引入特征注冊中心所有特征必須注冊后才能使用。具體怎么操作首先定義一個特征描述文件包含特征名、數據類型、計算邏輯、數據來源、更新頻率、負責人。這個文件用 YAML 寫放在 Git 里管理。然后特征注冊中心會根據這個描述自動生成離線和線上兩套計算代碼。離線走 Spark 或 Flink 批處理線上走輕量級流式計算但計算邏輯的“真值”只有一份。這里有個關鍵細節(jié)時間旅行查詢。訓練模型時你需要的是“當時”的特征值而不是“現在”的特征值。比如你要預測用戶會不會買某個商品特征里包含“用戶過去 7 天瀏覽次數”這個“過去 7 天”是相對于樣本時間點的不是相對于今天的。Jev 的特征注冊中心支持按時間戳查詢歷史特征快照這是很多自研特征平臺容易漏掉的功能。注意特征注冊中心不是一上來就要建得很重。我建議先從核心的 20 個特征開始跑通離線在線一致性校驗流程再逐步遷移。一上來就全量遷移很容易因為歷史特征邏輯混亂而卡住。2.2 預測層的不確定性量化讓模型“知道自己不知道”普通推理服務只輸出一個預測值Jev 要求輸出三個東西預測值、置信區(qū)間、以及一個“分布外檢測”標志。為什么這么設計因為決策層需要根據不確定性來決定動作的激進程度。舉個例子在動態(tài)定價場景中如果模型預測“漲價 5% 能提升利潤 3%”但置信區(qū)間很寬比如利潤變化可能在 -2% 到 8% 之間決策層就應該選擇更保守的漲價幅度或者先做小流量實驗。如果置信區(qū)間很窄決策層可以更激進。實現不確定性量化的方法有好幾種Jev 默認用的是分位數回歸 蒙特卡洛 Dropout的組合。分位數回歸直接輸出 P10、P50、P90 三個分位點蒙特卡洛 Dropout 在推理時多次前向傳播得到預測分布的近似。兩者結合既能捕捉數據噪聲帶來的不確定性也能捕捉模型本身的不確定性。我實測下來這套方案在樹模型和深度模型上都能用但深度模型的蒙特卡洛 Dropout 推理成本會高一些。如果延遲敏感可以只用分位數回歸或者用輕量級的貝葉斯最后一層。關鍵是不要為了不確定性而犧牲太多延遲決策系統(tǒng)對延遲的容忍度通常比純預測系統(tǒng)更低。2.3 決策層的規(guī)則引擎與優(yōu)化求解器決策層是 Jev 的靈魂。它由兩部分組成規(guī)則引擎和優(yōu)化求解器。規(guī)則引擎負責硬約束過濾優(yōu)化求解器負責在可行域內找最優(yōu)解。規(guī)則引擎我推薦用 Drools 或 Easy Rules但 Jev 的設計里有一個特殊要求規(guī)則必須帶優(yōu)先級和生效時間窗口。優(yōu)先級解決規(guī)則沖突生效時間窗口解決“大促期間臨時提權”這類需求。規(guī)則用 DSL 寫業(yè)務方也能看懂。我見過一個團隊讓業(yè)務方直接用 Excel 配置規(guī)則然后寫了個轉換器把 Excel 變成 DSL效果出奇地好——業(yè)務方覺得自己掌控了決策技術方也不用天天被追著改規(guī)則。優(yōu)化求解器負責在多個目標之間找平衡。Jev 默認支持線性規(guī)劃、整數規(guī)劃和多目標遺傳算法。選哪個取決于你的問題結構如果目標和約束都是線性的用線性規(guī)劃最快如果有整數變量比如“要么選 A 要么選 B”用整數規(guī)劃如果目標函數很復雜、非凸用遺傳算法或模擬退火。這里有個實操心得不要追求全局最優(yōu)追求“足夠好且穩(wěn)定”。決策系統(tǒng)不是學術競賽業(yè)務方要的是可解釋、可復現、不會今天一個樣明天一個樣的決策。我通常會把求解器的收斂容差設得寬松一些比如 1% 以內就認為收斂這樣求解速度快而且結果更穩(wěn)定。2.4 反饋閉環(huán)從“開環(huán)控制”到“閉環(huán)進化”反饋閉環(huán)是 Jev 區(qū)別于普通 AI 系統(tǒng)的關鍵。沒有閉環(huán)系統(tǒng)就是一個開環(huán)控制器環(huán)境變了它不知道效果掉了它也不知道。Jev 的閉環(huán)設計包含三個環(huán)節(jié)動作記錄、效果歸因、策略更新。動作記錄很簡單每次決策層輸出動作后執(zhí)行層要把動作、上下文、時間戳、以及后續(xù)的真實反饋都記錄下來。這里的關鍵是記錄要足夠細不能只記“最終轉化了沒有”要記中間過程。比如推薦場景要記曝光、點擊、停留時長、滑動深度、甚至用戶表情如果有攝像頭權限的話。效果歸因是難點。一個動作的效果往往被多個因素混雜怎么知道是決策系統(tǒng)起了作用還是大盤自然波動Jev 默認用雙重差分法做歸因把用戶隨機分成實驗組和對照組實驗組走 Jev 決策對照組走舊策略比較兩組的差異。如果沒有條件做隨機實驗可以用傾向得分匹配或合成控制法但因果推斷的強度會弱一些。策略更新不是自動改模型而是自動調整決策層的參數。比如規(guī)則引擎里的閾值、優(yōu)化求解器的權重。Jev 支持基于貝葉斯優(yōu)化的參數自動調優(yōu)但我的建議是初期不要開自動調優(yōu)先手動調幾輪建立對系統(tǒng)的直覺。自動調優(yōu)很容易過擬合到短期指標把長期目標犧牲掉。3. 生產環(huán)境落地從零搭建 Jev 系統(tǒng)的實操步驟3.1 環(huán)境準備與依賴選型搭建 Jev 系統(tǒng)不需要特別高端的硬件但需要合理的組件選型。我按最小可用集群來列一下計算資源3 臺 8 核 16G 的云主機起步。一臺跑特征注冊中心和離線計算一臺跑預測服務一臺跑決策引擎和反饋收集。如果流量大預測服務可以水平擴展。存儲PostgreSQL 存特征元數據和決策日志Redis 存實時特征和緩存對象存儲存模型文件和離線特征快照。消息隊列Kafka 或 Pulsar用于解耦特征計算、預測請求和反饋收集。模型服務可以用 TorchServe、Triton 或自己寫 FastAPI。Jev 不綁定具體框架但要求模型服務支持批量推理和動態(tài)批處理。規(guī)則引擎Drools 或 Easy Rules如果規(guī)則簡單自己寫一個輕量級 DSL 解析器也行。優(yōu)化求解器OR-Tools 或 SciPyPython 生態(tài)里這兩個最成熟。依賴版本我建議鎖定不要用 latest。我踩過的坑是OR-Tools 某個小版本升級后整數規(guī)劃的默認求解器變了導致同樣的輸入輸出結果不一樣排查了兩天才發(fā)現是版本問題。所以生產環(huán)境一定要鎖版本并且把版本號寫進部署文檔。3.2 特征注冊中心的搭建與遷移第一步定義特征描述文件。我拿一個電商場景舉例feature_name: user_7d_view_count data_type: int description: 用戶過去7天瀏覽次數 source: user_behavior_log computation: | SELECT user_id, COUNT(*) as value FROM behavior_log WHERE event_type view AND event_time BETWEEN {start_time} AND {end_time} GROUP BY user_id update_frequency: hourly owner: data_team這個文件放在 Git 里每次修改都要走 PR 流程。特征注冊中心監(jiān)聽 Git 變更自動觸發(fā)離線和線上代碼生成。第二步跑一致性校驗。注冊中心會定期抽樣一批用戶分別用離線和線上邏輯計算特征值比較差異。差異超過閾值的特征會被標記為“不一致”需要負責人排查。我建議這個校驗每天跑一次結果發(fā)到群里讓所有人都能看到。第三步逐步遷移。不要一次性把所有特征都遷進來先遷核心的 20 個跑一周穩(wěn)定后再遷下一批。遷移過程中新舊特征并行計算決策層先用舊特征等新特征穩(wěn)定后再切換。提示特征注冊中心的最大價值不是技術而是組織。它強制要求每個特征有明確的負責人和計算邏輯消滅了“這個特征是誰算的、怎么算的”這類扯皮問題。3.3 預測服務的部署與不確定性輸出預測服務我推薦用 Triton因為它原生支持動態(tài)批處理和多種模型格式。如果團隊規(guī)模小用 FastAPI 加 ONNX Runtime 也夠用。關鍵是要在預測服務里實現不確定性輸出。以分位數回歸為例模型訓練時用分位數損失函數同時輸出 P10、P50、P90。推理時服務返回這三個值決策層根據 P10 和 P90 的差距來判斷不確定性。蒙特卡洛 Dropout 的實現稍微復雜一點在模型里保留 Dropout 層推理時開啟 Dropout前向傳播 N 次通常 N20 到 50得到 N 個預測值然后算均值和標準差。N 越大不確定性估計越準但延遲越高。我實測下來N20 在大多數場景下夠用延遲增加不到 50ms。如果延遲要求極嚴可以用深度集成的簡化版訓練 3 到 5 個不同初始化的模型推理時同時跑用預測值的方差作為不確定性。這種方法延遲是單模型的 3 到 5 倍但不確定性估計更可靠。3.4 決策引擎的規(guī)則編寫與優(yōu)化求解決策引擎的規(guī)則用 DSL 寫我設計了一個簡單的語法rule 庫存不足時禁止促銷 when inventory 10 and action.type promotion then reject(庫存不足禁止促銷) priority 100 end規(guī)則引擎按優(yōu)先級從高到低執(zhí)行高優(yōu)先級規(guī)則可以否決低優(yōu)先級規(guī)則的動作。生效時間窗口用 cron 表達式配置比如大促期間臨時提權。優(yōu)化求解器負責在可行動作集合里找最優(yōu)。我拿動態(tài)定價舉例目標是最大化利潤約束是價格不能低于成本、不能高于競品價格的 120%、庫存不能為負。用線性規(guī)劃求解變量是價格目標函數是 (價格 - 成本) * 預測銷量約束是線性的。如果目標函數非線性比如銷量是價格的指數函數可以用序列二次規(guī)劃或遺傳算法。我通常先用線性規(guī)劃跑一版如果效果不夠好再換非線性求解器。不要一上來就用最復雜的求解器簡單方案往往夠用。3.5 反饋閉環(huán)的埋點與歸因分析反饋埋點要在執(zhí)行層做不要在決策層做。決策層只負責輸出動作執(zhí)行層負責把動作變成實際請求并記錄請求結果。埋點數據要包含決策 ID、動作類型、動作參數、上下文特征、時間戳、以及后續(xù)的反饋事件。歸因分析我推薦用雙重差分法。具體操作把用戶隨機分成實驗組和對照組實驗組走 Jev 決策對照組走舊策略。跑一周后比較兩組的核心指標差異。如果差異顯著說明 Jev 有效如果不顯著需要排查是決策邏輯問題還是實驗設計問題。如果沒有條件做隨機實驗可以用中斷時間序列在某個時間點切換策略比較切換前后的指標變化。但這種方法容易受大盤趨勢影響需要做季節(jié)性調整。4. 常見問題與排查技巧實錄4.1 決策系統(tǒng)上線后效果不如離線評估這是最常見的問題沒有之一。我總結了一個排查清單按優(yōu)先級排序排查項可能原因解決方法特征一致性離線在線特征計算邏輯不同用特征注冊中心統(tǒng)一邏輯跑一致性校驗數據泄漏離線特征包含了未來信息檢查特征計算的時間窗口確保只用歷史數據分布偏移線上數據分布和訓練數據不同監(jiān)控特征分布發(fā)現偏移后重新訓練決策延遲線上決策太慢錯過最佳時機優(yōu)化求解器降低不確定性計算開銷反饋延遲反饋信號來得太晚閉環(huán)失效用短期代理指標替代長期指標我踩過最坑的一次是數據泄漏離線特征里包含了“用戶過去 30 天是否購買”但這個特征在預測時點其實還不知道。修正后離線 AUC 從 0.85 掉到 0.78但線上效果反而提升了。所以離線指標高不一定好關鍵是一致性。4.2 規(guī)則沖突與優(yōu)先級混亂規(guī)則多了之后沖突是必然的。比如一條規(guī)則說“庫存低于 10 禁止促銷”另一條說“大促期間所有商品必須參與促銷”。這兩條規(guī)則同時生效時系統(tǒng)該聽誰的Jev 的解法是優(yōu)先級 互斥組。每條規(guī)則有優(yōu)先級高優(yōu)先級規(guī)則可以否決低優(yōu)先級規(guī)則。同時規(guī)則可以分組同組規(guī)則互斥只能有一條生效。比如“庫存規(guī)則組”和“大促規(guī)則組”互斥大促期間大促規(guī)則組生效庫存規(guī)則組暫時掛起。實操心得規(guī)則不要超過 50 條。超過 50 條后沖突排查會變得極其困難。如果業(yè)務邏輯真的很復雜把規(guī)則拆成多個決策層每層只處理一類約束。比如第一層過濾硬約束第二層做多目標優(yōu)化第三層做個性化微調。4.3 優(yōu)化求解器不收斂或求解時間過長優(yōu)化求解器不收斂通常是因為問題定義有問題。我遇到過幾種情況可行域為空約束太緊沒有滿足所有約束的解。解決方法是放寬約束或者引入軟約束允許違反但加懲罰項。目標函數無界目標函數在某些方向上可以無限優(yōu)化。解決方法是加邊界約束。整數變量太多整數規(guī)劃是 NP 難的變量多了求解時間指數增長。解決方法是減少整數變量或者用啟發(fā)式算法求近似解。求解時間過長的話可以設置時間上限比如 100ms 內必須返回返回當前最優(yōu)解可能不是全局最優(yōu)。決策系統(tǒng)對延遲敏感寧可要一個 100ms 內的“足夠好”解也不要一個 10 秒后的“完美”解。4.4 反饋數據稀疏或延遲反饋數據稀疏是冷啟動階段的常見問題。新用戶沒有歷史行為新商品沒有銷售記錄決策系統(tǒng)缺乏依據。Jev 的解法是分層決策冷啟動階段用群體統(tǒng)計特征等個體數據積累夠了再切換到個性化決策。反饋延遲是另一個問題。比如金融風控場景一個決策的對錯可能要等幾個月才能確認。這時候可以用代理指標用短期可觀測的指標如點擊、停留來近似長期目標如轉化、留存。代理指標和長期目標的相關性需要定期驗證相關性下降時要重新選擇代理指標。注意代理指標不是萬能的。我見過一個團隊用“點擊率”作為“用戶滿意度”的代理結果系統(tǒng)學會了標題黨點擊率上去了但用戶留存掉了。代理指標一定要和長期目標做相關性分析相關性低于 0.5 就要警惕。4.5 系統(tǒng)可解釋性與業(yè)務方信任決策系統(tǒng)最怕業(yè)務方不信任。業(yè)務方問“為什么給這個用戶漲價 5%”你回答“因為模型輸出的”業(yè)務方當場就炸了。Jev 的可解釋性設計從三個層面入手第一決策日志全記錄。每次決策都記錄輸入特征、預測值、置信區(qū)間、觸發(fā)的規(guī)則、求解器輸出。業(yè)務方可以查任意一次決策的完整鏈路。第二反事實解釋。對于關鍵決策系統(tǒng)可以生成“如果某個特征變了決策會怎么變”的解釋。比如“如果庫存多 10 件就不會拒絕促銷”。這種解釋業(yè)務方最容易理解。第三規(guī)則可視化。規(guī)則引擎的規(guī)則用 DSL 寫可以渲染成流程圖業(yè)務方一眼就能看懂決策邏輯。我見過一個團隊把規(guī)則流程圖打印出來貼在會議室業(yè)務方開會時直接指著圖討論效率極高。5. 從生產反饋中沉淀的架構演進方向5.1 決策系統(tǒng)的可觀測性建設Jev 上線后我最大的體會是可觀測性不是錦上添花是生死攸關。決策系統(tǒng)比普通服務復雜得多出問題時排查鏈路很長。我建議從第一天就建好三張看板第一張是決策質量看板監(jiān)控決策的采納率、執(zhí)行率、以及業(yè)務指標。如果采納率突然下降說明決策和業(yè)務預期脫節(jié)了。第二張是系統(tǒng)健康看板監(jiān)控預測延遲、求解器耗時、規(guī)則命中率、特征缺失率。任何一個指標異常都可能導致決策質量下降。第三張是數據漂移看板監(jiān)控輸入特征的分布變化。特征分布漂移是模型失效的前兆早發(fā)現早處理。這三張看板我用 Grafana 搭的數據源是 Prometheus 加 PostgreSQL。搭建成本不高但收益極大。有一次特征缺失率從 0.1% 漲到 5%看板報警后我們十分鐘內定位到是上游數據源變更避免了更大的事故。5.2 多決策系統(tǒng)協同與沖突消解當一個業(yè)務有多個決策系統(tǒng)時比如定價系統(tǒng)、推薦系統(tǒng)、風控系統(tǒng)同時運行沖突是必然的。定價系統(tǒng)想漲價推薦系統(tǒng)想推低價商品吸引點擊風控系統(tǒng)覺得這個用戶有風險要限制。三個系統(tǒng)各說各話執(zhí)行層聽誰的Jev 的解法是引入決策仲裁層。每個決策系統(tǒng)輸出動作時附帶一個“置信度”和“影響范圍”。仲裁層根據全局目標對多個動作做加權融合或優(yōu)先級排序。比如全局目標是最大化長期利潤仲裁層會給定價系統(tǒng)的動作更高權重如果全局目標是提升用戶活躍推薦系統(tǒng)的權重更高。仲裁層的實現可以用簡單的加權投票也可以用多目標優(yōu)化。我建議初期用加權投票簡單可解釋。等業(yè)務復雜了再上多目標優(yōu)化。5.3 從規(guī)則驅動到學習驅動的漸進路徑Jev 的決策層目前是規(guī)則驅動加優(yōu)化求解這是有意為之。規(guī)則驅動可解釋、可審計、可熱更新適合生產環(huán)境。但長期看純規(guī)則驅動會遇到瓶頸規(guī)則越寫越多維護成本越來越高而且規(guī)則之間的交互效應很難人工預測。我的建議是走漸進路徑先用規(guī)則驅動跑通閉環(huán)積累決策日志和反饋數據然后用這些數據訓練一個“決策策略模型”學習規(guī)則引擎的決策模式最后用策略模型輔助規(guī)則引擎比如用模型推薦規(guī)則參數或者用模型處理規(guī)則覆蓋不到的邊緣情況。這條路徑的關鍵是不要一步到位。我見過團隊直接上強化學習做決策結果因為反饋稀疏和模擬環(huán)境不真實學了三個月還不如規(guī)則引擎。規(guī)則驅動雖然笨但它穩(wěn)定、可解釋、業(yè)務方信任。學習驅動是方向但要走得穩(wěn)。5.4 成本控制與資源優(yōu)化決策系統(tǒng)的成本主要在三塊計算、存儲、人力。計算成本來自預測服務和優(yōu)化求解器存儲成本來自決策日志和特征快照人力成本來自規(guī)則維護和模型迭代。計算成本優(yōu)化預測服務用動態(tài)批處理把多個請求合并成一個批次推理GPU 利用率能提升 3 到 5 倍。優(yōu)化求解器設置時間上限避免長時間求解。非核心決策可以降級到輕量級模型。存儲成本優(yōu)化決策日志不要全量存存最近 30 天更早的歸檔到冷存儲。特征快照按需存不要每個時間點都存。人力成本優(yōu)化規(guī)則用 DSL 寫讓業(yè)務方也能參與維護。模型迭代自動化用 CI/CD 流水線跑訓練和評估。我見過一個團隊把模型迭代周期從兩周縮短到兩天靠的就是自動化流水線。5.5 安全與合規(guī)的底線設計決策系統(tǒng)涉及業(yè)務核心邏輯安全合規(guī)是底線。Jev 的設計里包含幾個強制要求第一決策可審計。每次決策的完整鏈路必須記錄保留至少 6 個月。審計時能還原任意一次決策的輸入、邏輯和輸出。第二規(guī)則變更留痕。誰在什么時候改了哪條規(guī)則改前改后是什么全部記錄。規(guī)則變更要走審批流程不能隨便改。第三敏感決策雙人復核。涉及用戶權益的決策如風控拒絕、定價調整要支持雙人復核機制。一個人提交另一個人確認后才能生效。第四降級預案。決策系統(tǒng)故障時要有降級方案。比如切換到默認策略或者轉人工處理。降級預案要定期演練確保真出問題時能快速切換。這些要求看起來繁瑣但真出問題時能救命。我經歷過一次規(guī)則配置錯誤導致大規(guī)模誤判因為有審計日志十分鐘內定位到問題規(guī)則并回滾避免了更大的損失。6. 個人實操體會與后續(xù)擴展思路6.1 踩過的最大的三個坑第一個坑是過早優(yōu)化。項目初期我就想把特征注冊中心建得很完善結果花了兩個月搭平臺業(yè)務需求已經變了。后來學乖了先用最小可用版本跑通閉環(huán)再逐步完善。特征注冊中心從 20 個特征起步半年后才擴展到 200 個。第二個坑是忽視業(yè)務方參與。技術團隊閉門造車規(guī)則寫得再漂亮業(yè)務方不認。后來我強制要求每條規(guī)則必須有業(yè)務方確認規(guī)則 DSL 也設計得盡量像自然語言。業(yè)務方參與后規(guī)則質量明顯提升因為很多業(yè)務約束是技術團隊根本想不到的。第三個坑是反饋閉環(huán)斷掉。有一次上游數據源變更反饋數據沒進來系統(tǒng)跑了三天才發(fā)現。那三天決策質量持續(xù)下降但因為沒監(jiān)控反饋數據沒人發(fā)現。后來加了反饋數據監(jiān)控超過一小時沒數據就報警。6.2 給不同規(guī)模團隊的建議小團隊3 人以下不要上全套 Jev 架構太重了。先用一個 Python 腳本跑通“特征-預測-決策-反饋”的最小閉環(huán)驗證業(yè)務價值。驗證通過后再逐步拆分成服務。中型團隊5 到 10 人可以上 Jev 的核心模塊但不要追求大而全。特征注冊中心、預測服務、決策引擎、反饋收集這四個模塊先跑起來??捎^測性用開源方案不要自研。大型團隊10 人以上可以上全套架構但要警惕過度工程。我見過大團隊把決策系統(tǒng)拆成十幾個微服務結果調用鏈路太長延遲高得沒法用。服務拆分要適度按業(yè)務邊界拆不要按技術分層拆。6.3 后續(xù)可以擴展的方向Jev 目前聚焦在單決策系統(tǒng)的架構和落地。后續(xù)可以往幾個方向擴展一是多決策系統(tǒng)協同前面提到的仲裁層是一個方向。多個決策系統(tǒng)如何共享特征、共享反饋、協同優(yōu)化是一個有意思的問題。二是決策系統(tǒng)的自動化調優(yōu)。目前規(guī)則參數和求解器權重還是手動調后續(xù)可以用貝葉斯優(yōu)化或強化學習自動調。但要注意過擬合風險自動調優(yōu)的目標函數要包含長期指標。三是決策系統(tǒng)的仿真環(huán)境。在真實環(huán)境做實驗成本高、風險大??梢越ㄒ粋€仿真環(huán)境用歷史數據模擬決策效果快速迭代策略。仿真環(huán)境的關鍵是保真度太簡化的仿真會誤導決策。四是決策系統(tǒng)的聯邦學習。多個業(yè)務方各有數據但不想共享原始數據。可以用聯邦學習聯合訓練模型各自保留數據只共享模型參數。這在隱私敏感場景下很有價值。6.4 一個實用小技巧最后分享一個我在多個項目里驗證過的小技巧決策日志里加一個“決策理由”字段。這個字段不是給機器看的是給人看的。每次決策輸出時用自然語言生成一句話解釋比如“因為庫存低于閾值且用戶價格敏感度高選擇不漲價”。這個字段的生成可以用模板也可以用一個小語言模型。成本很低但收益極大。業(yè)務方查日志時一眼就能看懂決策邏輯不用去翻特征和規(guī)則。我見過一個團隊因為這個字段業(yè)務方對決策系統(tǒng)的信任度大幅提升規(guī)則評審會從兩小時縮短到半小時。這個技巧的本質是決策系統(tǒng)不僅要會決策還要會解釋決策。解釋能力是決策系統(tǒng)被業(yè)務方接受的關鍵也是技術團隊和業(yè)務團隊之間的橋梁。