由大型語言模型驅動的可擴展網路軟體
簡要重點 – LLM 可在不增加常見臃腫的狀況下,讓網路應用程式具備可擴展性,而 Cloudflare Dynamic Workers 已經提供所需的隔離、可觀察性與資料原語,足以將此概念轉化為可投入生產的平台。
長尾問題與 LLM 的重要性
大多數網路應用程式僅服務於需求曲線的頂端,導致大量小眾使用者的需求未被滿足。 為極小的使用者群組新增功能,會使所有人的使用者介面變得更複雜,而傳統的開發週期也缺乏足夠的資源來填補這段長尾。
LLM 改變了經濟模式:它們能按需產生自訂程式碼,將「為一人而寫的軟體」從愛好者的奇想轉變為可擴展的服務。正如 Jeremy Morrell 所言:「過去一年,你的使用者突然獲得了以自然語言創造程式碼的能力。」
社群洞見
「未被滿足的功能長尾是真實存在的。大多數應用程式都能良好地處理常見情境,而由 LLM 產生的擴充功能,可以在不膨脹核心產品的情況下填補這個缺口。」 – harlan_pdx(HN 評論)
「可擴展的網路軟體」實際上是什麼樣子
可擴展性意味著能接入應用程式的事件(如資料更新、排程工作、UI 行為),並讓 LLM 產生的片段在沙盒中執行。 使用者撰寫自然語言請求,系統將其轉譯為程式碼,並以嚴格的權限集執行該程式碼。
安全擴充引擎的核心需求
| 要求 | 為何重要 |
|---|---|
| 經濟的執行 – 空閒成本近乎零,每次呼叫低於一美分 | 必須讓數千甚至數百萬個片段都負擔得起。 |
| 快速冷啟動 – 請求路徑擴充的延遲為個位數毫秒 | 使用者期望擴充功能感覺像原生功能,而非背景工作。 |
| 細粒度限制 – CPU、記憶體、網路、日誌量、執行時間 | 防止失控迴圈(例如 while true { print })導致平台崩潰。 |
| 強大的隔離 – 沙盒防止一個使用者的程式碼影響其他使用者或資料外洩 | 多租戶 SaaS 必須防範 Spectre 式攻擊與憑證竊取。 |
基於能力的 I/O – 程式碼只能透過明確的參考(例如 fetchApprovedEmail)執行動作 |
消除複雜代理邏輯的需求,使安全推理變得可處理。 |
現有的網路規模擴展性:Salesforce 的先例
Salesforce 已證明多租戶可程式化平台能在規模上蓬勃發展。其 Apex 語言讓開發者能新增自訂端點、排程工作與 UI 鈎子,同時平台會強制執行隔離、限制與交易安全性。
「Salesforce 的 Apex 讓你撰寫可在核心產品內執行的自訂邏輯,平台會處理路由、驗證與租戶隔離。」 – Jeremy Morrell
今日的關鍵差異在於,LLM 可自動產生類似 Apex 的程式碼,大幅降低非工程師的門檻。
執行原語的技術選項
| 選項 | 優點 | 缺點 |
|---|---|---|
| 解譯器(Lua、QuickJS、自訂 DSL) | 占用空間小,容易嵌入 | 性能有限,需自訂沙盒加固 |
| V8 隔離 | 成熟的 JIT、強大的隔離,Cloudflare 已在使用 | 每個隔離的記憶體較高,仍需能力門控 |
| 微型虛擬機(Firecracker、libkrun) | 接近原生作業系統隔離,支援 POSIX | 啟動延遲 > 1 秒,資源消耗較高 |
| WebAssembly + WASI | 語言無關,無內建 I/O(非常適合沙盒) | 需要主機端能力注入,工具鏈複雜 |
HN 討論中的共識是,V8 隔離搭配能力模型 在網路規模 SaaS 上達到最佳平衡:
「沙盒執行絕對是其中一個面向……但如果他們公開外部端點,且存取控制邏輯有缺陷,沙盒的安全性也毫無意義。」 – socketcluster
Cloudflare Dynamic Workers – 一個現成的堆疊
Jeremy Morrell 強調,Cloudflare Dynamic Workers 是 2026 年用來打造可擴展網路應用程式最完整、最適合投入生產的框架。
內建原語符合需求
- 可觀察性 – 運行時內建 OpenTelemetry 追蹤與尾端日誌。
- 多租戶儲存 – Durable Objects 提供每位使用者的 SQLite,R2 儲存桶提供二進位資料儲存。
- 持久執行 – Dynamic Workflows 支援長時間、具重試機制的工作。
- 來源控制 – 內建的資產儲存,用於版本化擴充功能。
- 主機式 LLM – Workers AI 讓擴充功能能呼叫 LLM,並依使用者設定配額。
- 自-hosting 工具 – JavaScript 工具可在同一 worker 進程中執行,簡化測試。
範例:基於能力的擴充
// 主機提供的能力
export const getApprovedEmail = () => fetchEmailById(123, env.EMAIL_API_KEY);
// 使用者產生的片段(由 LLM 產生)
export default async function process({ getApprovedEmail }: { getApprovedEmail: () => Promise<Email> }) {
const email = await getApprovedEmail();
// ...自訂邏輯...
}
此片段只能呼叫 getApprovedEmail;它永遠不會看到原始 API 金鑰,從而消除憑證外洩風險。
文章中強調的實際應用案例
| 領域 | 由 LLM 驅動的擴充範例 |
|---|---|
| AI 代理 | 為 Pi 新增自訂指令,解析特定網站並回傳結構化資料。 |
| 企業內部平台 | 員工撰寫按需執行的分析腳本,對共享資料湖執行,平台強制執行每位使用者的資料範圍。 |
| 支援平台 | 自動填入工單檢視的客戶特定診斷資訊,並提供由 LLM 產生的「重設配額」按鈕。 |
| 可觀察性工具 | 使用者注入自訂日誌轉換器、警報觸發腳本,或針對特定資源的超連結至儀表板。 |
社群反應 – 共識與懷疑
- 共識 – 長尾需求與 LLM 產生程式碼的威力廣受認可。
「未被滿足的功能長尾是真實存在的……LLM 產生的擴充功能可以填補這個缺口。」 – harlan_pdx
- 對分發模式的懷疑 – 有人質疑「為一人而寫的軟體」為何必須基於網路。
「為什麼需要客戶端/伺服器模型?我為什麼要在乎分發?」 – zahlman
- 平台鎖定的擔憂 – 多位評論者指出,Cloudflare 可能不會成為通用主機;Google 或 Microsoft 可能採用類似模式。
「很難想像 Cloudflare 會成為預設選擇;反而更容易看到 Google 或 Microsoft 這麼做。」 – bensyverson
- 安全優先觀點 – 強調基於能力的設計,而非臨時的代理。
「程式碼只能透過它被傳遞的參考來執行動作。」 – ryanrasti
建造者實用建議
- 從你信任的沙盒開始 – V8 隔離或 WASM + WASI 提供強大的安全邊界。
- 只暴露能力,而非原始 API – 傳遞如
fetchApprovedEmail之類的函數給使用者程式碼;永遠不要交出金鑰。 - 善用現有的平台原語 – 使用 Cloudflare Dynamic Workers 的儲存、工作流程與 AI 繫結,避免重複造輪子。
- 實施嚴格的資源配額 – 透過限制每次呼叫的 CPU 時間、記憶體與網路呼叫次數,防範無限迴圈與拒絕服務攻擊。
- 提供簡單的分享模型 – 允許使用者將其擴充功能發布為套件,供同儕匯入,模擬「外掛市場」模式。
結論
LLM 協助編碼將使用者特定功能的長尾從開發噩夢轉變為可擴展的服務。透過結合基於能力的沙盒(V8 隔離或 WASM)與 Cloudflare Dynamic Workers 的內建可觀察性、儲存與 AI 整合,開發者如今即可推出以網路為首的可擴展平台。社群一致認同其潛力,但也警告必須從第一天就解決安全、成本與平台鎖定問題。
Sources
相關
- Dispatch
- Dispatch
- 專案
- Dispatch
- 專案