AI News HubLIVE
站內改寫2 分鐘閱讀

Show HN:Concord,一些開源內容

Concord 認知引擎的 PR 修復了裸機部署、連線斷開、LLM 管道穩定性和運維耐久性問題,包括靜態資源持久化、狀態儲存最佳化、安全漏洞修復和 GPU 記憶體管理。

來源Hacker News AI作者: dutchtropez

近日,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 在裸機環境中的穩定性和安全性,為後續開發奠定了堅實基礎。