Show HN:Concord,一些開源內容
Concord 認知引擎的 PR 修復了裸機部署、連接斷開、LLM 管道穩定性和運維耐久性問題,包括靜態資源持久化、狀態保存優化、安全漏洞修復和 GPU 內存管理。
近日,Concord 認知引擎項目發佈了一個重要的 PR,解決了其從 Docker 遷移到裸機部署時遇到的一系列問題。該 PR 涵蓋了基礎設施、性能、安全性和可靠性等多個方面的改進,分為多個波次逐步實施。
第一波主要解決了裸機部署的阻塞問題。首先修復了靜態資源無法加載的 bug,確保 Next.js 前端在啓動時正確複製靜態文件到獨立 bundle 中,避免了頁面無樣式渲染。其次,Cloudflare 隧道配置得到修正,此前由於環境變量命名錯誤(CF_TUNNEL_TOKEN 未讀取)導致隧道靜默未啓動,現改為 CLOUDFLARE_TUNNEL_TOKEN 並重寫了入口規則,使 /socket.io、/godot-ws 和 /api 直接路由到後端 :5050,其餘流量指向前端 :3000。同時,系統服務配置進行了優化,以支持重啓後持久化:pm2 resurrect 無法恢復五個 Ollama 大腦,因此添加了 startup.sh 在重啓時重新運行。還新增了 bootstrap.sh 用於新機器的一鍵部署。此外,嵌入模型被移到了專門的實用實例上,不再佔用推理用的顯存,避免了之前每次嵌入調用都會卸載約 9GB 的 14B 模型、導致聊天時頻繁冷加載的問題。
第二波和第三波着重解決了連接頻繁斷開的問題和安全性改進。後端方面,移除了每 2 分鐘無條件執行的全狀態保存器(每次約 28MB 序列化+SQLite 重寫+WAL 檢查點,導致每天約 40GB 磁盤寫入和事件循環阻塞),改為基於變化序列的 5 秒前窗合併機制,將穩態序列化次數降低約 20 倍。關鍵狀態保存增加了速率限制(2 秒窗口+尾部追趕同步),避免市場購買爆發時多次全量序列化。強制垃圾回收也被移除,因為它會加長事件循環阻塞。Godot 網關的 ping 檢測調整為允許丟失 2 次 pong(約 50 秒),匹配 socket.io 的 60 秒預算,解決了之前因事件循環延遲導致誤殺所有 Godot 客户端的問題。前端連接狀態檢測不再依賴可能被代理繞過的 /health 輪詢,而是使用 socket 的 onConnectionLost/onReconnected 生命週期。安全方面修復了一個關鍵漏洞:用户通過作業隊列提交的任務原本會獲得內部上下文特權,可繞過權限檢查(如跳過議會門控),現在用户作業只使用其自身權限。此外,生產環境禁用了速率限制繞過開關,為 /metrics 接口添加了令牌保護,並將 Stripe Webhook 路徑豁免於速率限制,以避免支付回調失敗。
第四波聚焦於 LLM 管道的穩定性。嵌入模型不再逐出 14B 意識大腦(已由第一波解決)。關鍵改進是現在在所有 Ollama 調用路徑上顯式發送 num_ctx 參數,之前每個調用都靜默使用 Ollama 的 2k/4k 小默認值,導致提示被截斷。VRAM 預算經過重新計算,KV 緩存現在按配置的上下文大小合理擴展,之前由於錯誤假設而過度配置的顯存(設為 16384 MB)已被修正為 8192 MB。路由方面,ctx.llm.chat 現在在本地路由中尊重請求的 slot,避免工具或潛意識工作消耗 14B 意識模型。流式聊天(默認聊天 UX)現在通過 BYOK 和 _llmQueue 以 CRITICAL 優先級進行,而不是之前未受保護的原生 fetch。LLM 隊列為 CRITICAL 預留了一個併發槽,防止後台任務佔滿所有槽導致實時聊天請求無槽可用。
第五波增強了運維耐久性。健康檢查增加了對掛起但在線進程的強制重啓機制,並帶有 10 分鐘寬限期(避免遷移中途被殺)和 5 分鐘冷卻期(避免反覆重啓)。遷移編號解析修復:原正則只匹配三位數,當遷移號達到四位數(如 1000)時被錯誤解析為 100 並靜默跳過,現已改為可變寬度捕獲和數值排序。SQLite 頁面大小設置的錯誤被糾正:之前設置 page_size 在 WAL 模式之後執行(實際無效),現移除該設置並重新計算 wal_autocheckpoint。還修復了兩個硬編碼 busy_timeout 的數據庫句柄。告警 Webhook 配置統一為單一變量 ALERT_WEBHOOK_URL。
這些修復顯著提升了 Concord 在裸機環境中的穩定性和安全性,為後續開發奠定了堅實基礎。