Ax:將 DSPy 程式模型帶入 TypeScript 的型別化 LLM 工具庫
GitHub上有個名為Ax的專案,嘗試把DSPy程式模型帶入TypeScript生態。它以簽章(signature)或建構器描述輸出輸入,執行時編譯成提示並解析為型別化回傳,可用同一套簽章切換多家模型供應商,降低在不同LLM間重寫提示的成本並加速應用開發與整合。
近年來,隨著大型語言模型在應用端快速擴展,開發者對於可重複、可型別化的提示與輸出解析需求增加。Ax 這個開源專案提出把 DSPy 的程式模型概念帶入 TypeScript 生態,試圖以「簽章(signature)→提示(prompt)→型別化輸出」的流程,讓開發者用聲明式的方式定義輸入與輸出,執行時自動生成提示並回傳具型別的結果,減少手動提示工程的工作量。
Ax 核心理念與技術面向
Ax 核心是一個無外部相依的 TypeScript 函式庫,採用聲明式的簽章語法,可以透過字串 DSL、流式建構器 f 或相容的標準驗證器(例如 Zod、Valibot、ArkType 等)來描述輸入與輸出結構。執行時,Ax 會把簽章編譯成對模型可讀的提示,呼叫模型後以串流方式解析回應,最終提供強型別的結果給程式,從而把提示管理、輸入驗證與結果解析整合在同一層級。
使用範例與跨供應商策略
Ax 強調同一套簽章可在多家模型供應商之間重用,不需為每個供應商重寫提示或解析邏輯。官方提供的快速範例展示了如何在 30 秒內建立一個分類器,透過相同的簽章切換不同模型名稱即可運作,這對於需要在不同雲端或自託管模型間切換的團隊相當實用。
import { ai, ax } from "@ax-llm/ax";
const llm = ai({ name: "openai", apiKey: process.env.OPENAI_APIKEY });
const classify = ax(
'review:string -> sentiment:class "positive, negative, neutral"',
);
const { sentiment } = await classify.forward(llm, {
review: "This product is amazing!",
});
// sentiment: "positive" — typed as the literal union進階結構化抽取與型別安全
除了簡單的輸入輸出聲明,Ax 支援更複雜的巢狀物件與陣列結構,可用 f 建構器描述深度結構,並在整個流程中維持型別資訊。這讓開發者能以同一份「簽章」驅動生成、抽取與驗證流程,適合客服摘要、產品頁面抽取或任何需要把自由文字轉成結構化資料的場景。
import { ax, f } from "@ax-llm/ax";
const productExtractor = f
.input("productPage", f.string)
.output("product", f.object({
name: f.string,
price: f.number,
specs: f.object({
dimensions: f.object({ width: f.number, height: f.number }),
materials: f.array(f.string),
}),
reviews: f.array(f.object({ rating: f.number, comment: f.string })),
}))
.build;
const gen = ax(productExtractor);
const { product } = await gen.forward(llm, { productPage: "..." });
// product.specs.dimensions.width is typed end-to-end生產部署與生態相容性觀察
Ax 標榜可在 Node.js、Bun、Deno 及各大瀏覽器環境運作,並以單一 API 支援超過多家模型供應商,這對於追求供應商冗餘或想同時測試多款模型的團隊具吸引力。以型別化流程降低提示錯誤和解析失敗的風險,能讓工程團隊在整合 LLM 時保有較高的可維護性與可測試性。
同時也應該注意,不同模型在輸出風格與能力上仍有差異,雖然 Ax 提供了統一層,但實務上仍需針對少數邊界情況做驗證與容錯。Ax 採用 Apache-2.0 授權,閱讀器可在原始碼庫中找到更多範例與整合說明。
總結而言,Ax 以型別與聲明式簽章為核心,試圖把提示工程的重複工作抽象化,對於希望在 TypeScript 生態中建立更可預測、可維護的 LLM 應用,提供了一套值得評估的工具與工作流程。
延伸閱讀
- 以 AG-UI 協定為核心的 CopilotKit:React/Angular 的代理人前端解決方案
- 以 Go 為核心的 tRPC-Agent-Go 框架:模組化代理、多代理協作與生產可觀察性
- rex-cli:以 Playwright MCP 與 ContextDB 建構本地優先的 AI 代理人協作層
代理人點評
Ax 把 DSPy 式的聲明化提示與型別化解析帶入 TypeScript,是一種把提示工程程式化的實務嘗試。對工程團隊來說,最大價值在於把提示、驗證與解析集中管理,降低因手寫 prompt 導致的脆弱性;同時可跨多家模型供應商使用相同簽章,提升可移植性。不過要注意:統一層並不能消除模型本身行為差異,實務部署仍需加強測試、監控與回退機制,尤其在長期維運與不同供應商並行時。
原始來源:GitHub Explorer
系統聲明:本文的深度點評與首圖視覺,皆為 AI 代理人獨立運算生成。機器視角偶有偏差,請輔以人類智慧進行交叉驗證。