模型 / 資料集
prism-php/prism avatar
prism-php/prism

Prism:Laravel 專案裡把多家 LLM 收進同一個 Facade

A unified interface for working with LLMs in Laravel

2,423 個 Star309 個 ForkPHPMIT

秒懂

它是什麼?
Prism 是 MIT 授權的 Laravel 套件,替 OpenAI、Anthropic、Ollama 等供應商提供一組共用的 fluent 介面。判斷重點不在它能呼叫幾家模型,而在你的專案是否願意把 prompt 與工具定義綁進 Laravel 的服務容器與套件升級週期。
適合誰用?
已經在用 Laravel、而且需要在同一份程式碼裡切換多家供應商的團隊,Prism 的 fluent 介面能省下自己寫 provider adapter 的工。若你的 LLM 呼叫集中在單一供應商,或服務主體不是 Laravel,這個套件帶來的抽象層只是多一層要跟著升版的相依。
可以商用嗎?
可以。MIT 是寬鬆授權:你可以使用、修改並販售以它為基礎的軟體,只需保留著作權與授權聲明。
還在維護嗎?
有在維護。儲存庫最近一次提交在 179 天前。
用什麼語言寫的?
主要是 PHP(依據 GitHub 的語言統計)。

以上回答依據專案的 GitHub 資料(最近同步於 2026年9月15日)與我們的分析,不構成法律意見。

開源專案深度解析

它解決的是 Laravel 專案裡的多供應商切換問題

把 LLM 接進 Laravel 應用,第一個撞到的不是模型品質,而是各家 SDK 的呼叫形狀不同。OpenAI、Anthropic、Ollama 各有自己的請求結構、回應封裝與串流處理方式,於是專案裡很容易長出一層自己寫的 if-else 分派,或是散落在多個 service class 裡的重複程式碼。Prism 的定位就是把這層收斂成套件:README 開頭寫的是它提供 fluent interface,用來生成文字、處理多步驟對話,以及搭配工具使用,並支援多個 AI 供應商。

目標讀者寫得很明確。README 說這個套件讓開發者專注在開發 AI 應用,而不用陷在技術細節裡。換句話說,它假設你已經選定 Laravel 作為應用框架,並且接受把模型呼叫當成框架內的一等公民來處理。它並沒有打算服務 Symfony、Slim 或純 PHP 的專案,這點從套件名稱與整份說明都看得出來。

值得注意的是 README 裡的一句聲明:作者表示他們與 Laravel 官方沒有關聯,但遵循 Laravel 的 Code of Conduct。這對採用判斷有實際意義。這個套件不是 Laravel 官方維護的元件,生命週期與品質責任落在作者 TJ Miller 與社群身上,而不是 Laravel 核心團隊。

fluent 介面背後是供應商抽象層,不是模型本身

README 對機制的描述相當節制,只提到 fluent interface、文字生成、多步驟對話與工具使用這幾個關鍵詞。從這些線索可以推斷的架構是:呼叫端寫一組與供應商無關的鏈式方法,套件再把這組意圖轉譯成各家 API 的請求格式,並把回應正規化回統一的物件。

這個設計的價值集中在兩件事。第一是切換成本:當你把供應商從一家換到另一家時,理想狀況下只需要改設定,而不是重寫呼叫端。第二是對話狀態:多步驟對話需要把歷史訊息依序帶進下一次請求,這在每家 API 裡的欄位命名與角色標記都不一樣,抽象層把它統一掉。

工具使用(tool use)是另一個被明確列出的能力。README 把它與文字生成、對話並列,說明這是套件的一級功能,而不是事後補上的外掛。工具定義通常牽涉 JSON schema 與函式簽章,這部分各家供應商的實作差異不小,抽象層要處理的正是這些差異。

需要說清楚的是:README 沒有描述內部類別結構、沒有說明抽象層如何處理串流、也沒有交代不同供應商之間的能力落差要怎麼填補。這些要靠官方網站的文件,而不是 repo 首頁。

安裝與設定的可見範圍只到套件名稱與版本

README 提供的具體資訊有限。可以確認的是套件名稱 prism-php/prism,發佈在 Packagist 上,並且有 stable 版本標章。因此安裝指令的形式是 composer require prism-php/prism,實際的版本約束要由你的 composer.json 決定。

設定層面,README 沒有列出任何 config 檔名、環境變數名稱或 API key 的鍵值。文件中提到的官方網站 prismphp.com 才是設定細節的所在。這一點必須誠實標示:如果你要評估的是「裝起來要改幾個檔案」,這份 repo 首頁給不出答案。

版本節奏倒是可以從 release 清單看出來。v0.100.1 與 v0.100.0 相隔不到六小時,前一版 v0.99.22 則在一週多之前。這種密度說明專案仍在快速推進,也意味著 patch 與 minor 之間的界線可能不像成熟套件那樣涇渭分明。對照之下,README 對版本相容性、Laravel 版本支援範圍、PHP 版本需求都沒有著墨。

授權是 MIT,這是採用上相對單純的一項。README 明確指向 LICENSE 檔案,並未附帶額外條款。

抽象層會蓋掉供應商之間的差異,這是它的代價

統一介面的本質是取交集。當某家供應商推出獨有的參數、獨有的回應欄位或獨有的推理控制方式時,抽象層只有三種選擇:忽略它、用一個通用名稱包裝它、或讓呼叫端繞過抽象層直接打原始 API。前兩種會讓你先進功能用不到,第三種則讓你付了抽象層的成本卻沒有得到對應的好處。

Prism 的 README 把工具使用列為支援項目,但沒有說明各家供應商的工具呼叫在語意上的落差要怎麼處理。有的供應商把工具呼叫當成回應的一部分回傳,有的則需要多一輪往返。這類差異如果被抹平,行為就會以最保守的那一家為準。

另一個實際風險來自版本節奏。v0.100.x 的版號代表專案尚未進入 1.0,介面穩定的承諾相對弱。如果你的應用把 Prism 的 fluent 鏈散佈在數十個地方,一次 minor 升級的改動就可能變成大範圍的修改。這不是套件品質的問題,而是採用時機的問題。

最後是適用範圍。這個套件是為 Laravel 寫的,README 也把它定位成 Laravel package。若你的服務是獨立的 PHP 微服務、或是用其他框架,Prism 帶來的整合價值會大幅下降,因為它省下的正是 Laravel 生態內的重複工作。

替代路線是自己寫一層薄 adapter 或直接用官方 SDK

最直接的替代方案是不引入抽象層,直接使用各家供應商的官方 PHP SDK,並在應用裡寫一層薄的 adapter。差別在控制權:你自己決定哪些參數要透傳、哪些要統一、遇到新功能時要不要跟進。代價是這層 adapter 由你維護,供應商換一家就要改一次。

另一條路是走框架無關的 LLM 抽象層,把呼叫邏輯放在 Laravel 之外。這樣做的好處是同一份程式碼可以用在非 Laravel 的服務上,缺點是你放棄了 Laravel 的服務容器、Facade 與設定管理的整合便利,而這正是 Prism 的主要賣點。

選擇的關鍵在於你的供應商數量與變動頻率。如果專案只打一家、短期內也不打算換,抽象層的收益接近零,直接用官方 SDK 反而少一層相依。如果你需要在開發環境用 Ollama、正式環境用雲端供應商,或者需要針對不同任務挑不同模型,統一介面的價值才會顯現。Prism 的 topics 同時列出 openai、anthropic、claude 與 ollama,說明這種多供應商並存正是它預設的使用情境。

升級與維護成本落在版號節奏與文件分散上

維護成本有兩個來源。第一是套件本身的演進速度。從 v0.99.22 到 v0.100.0 再到 v0.100.1,一週多的時間裡跨了一個 minor 並補了一個 patch。這表示你如果採用,需要把 Prism 的升版排進例行工作,而不是裝好之後放著。

第二是文件分散。README 明確把官方文件指向 prismphp.com,repo 首頁只保留定位說明、作者、行為準則與授權。這種安排在成熟專案裡很常見,但對評估者來說意味著你必須離開 repo 才能確認設定方式與 API 細節。

授權方面,MIT 允許商用、修改與再散布,條件是保留著作權與授權聲明。這裡不提供法律意見,實際條文以 LICENSE 檔案為準。需要注意的是套件本身是 MIT,但你透過它呼叫的模型服務各有自己的商業條款與計費方式,兩者無關。

還有一項無法從現有材料確認的事:README 沒有提到測試覆蓋率、CI 狀態或支援的 Laravel 版本區間。這些在決定是否放進正式環境之前,需要另外查證。

編輯結論

已經在用 Laravel、而且需要在同一份程式碼裡切換多家供應商的團隊,Prism 的 fluent 介面能省下自己寫 provider adapter 的工。若你的 LLM 呼叫集中在單一供應商,或服務主體不是 Laravel,這個套件帶來的抽象層只是多一層要跟著升版的相依。決定採用前先確認兩件事:文件上列出的 provider 是否涵蓋你實際要打的那一家,以及你的 composer.json 能否接受 v0.100.x 這種仍在快速推進的版號節奏。

官方來源

  1. License: MIT
  2. prism-php/prism on GitHub
  3. Project website
  4. README
  5. Releases
社群筆記

社群筆記