模型 / 資料集
pezzolabs/pezzo avatar
pezzolabs/pezzo

Pezzo:把提示詞當成部署產物來管,代價是四個基礎服務

🕹️ Open-source, developer-first LLMOps platform designed to streamline prompt design, version management, instant delivery, collaboration, troubleshooting, observability and more.

3,273 個 Star279 個 ForkTypeScriptApache-2.0

秒懂

它是什麼?
Pezzo 是 Apache-2.0 的 LLMOps 平台,用 GraphQL 後端加上 Node.js 與 Python 客戶端,把提示詞版本、快取與可觀測性收在同一個介面。它的架構選擇很明確:不引入專有儲存層,而是靠 PostgreSQL、ClickHouse、Redis 與 Supertokens 撐起整個平台。
適合誰用?
如果你已經在用 PostgreSQL 與 Redis,而且團隊需要一個能讓非工程角色直接改提示詞、又不想把推論流量交給第三方 SaaS 的介面,Pezzo 的 Docker Compose 路徑值得先在本機跑一遍。反過來說,只想接一個 SDK 做追蹤、不想維運 ClickHouse 與 Supertokens 的團隊,Pezzo 的部署面積會大於你實際需要的功能。
可以商用嗎?
可以。Apache-2.0 是寬鬆授權:你可以使用、修改並販售以它為基礎的軟體,只需保留著作權與授權聲明。
還在維護嗎?
有在維護。儲存庫最近一次提交在 25 天前。
用什麼語言寫的?
主要是 TypeScript(依據 GitHub 的語言統計)。

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

開源專案深度解析

提示詞改一行就要重新部署,Pezzo 想拆掉這個綁定

多數團隊的提示詞活在原始碼裡。改一個形容詞、換一版 system message,走的是同一個流程:開分支、跑 CI、部署、等 rollout。這個流程對程式碼是合理的,對一句話不是。Pezzo 針對的就是這個落差,把提示詞從程式碼倉庫抽出來,放進一個有版本、有環境、可以即時交付的地方,並讓客戶端在執行期抓取。README 的敘述是讓使用者「collaborate and manage your prompts in one place, and instantly deliver AI changes」,重點在 instantly 這個字:交付提示詞不需要重新部署應用程式。

它的第二個目標族群是負責排查的人。當模型輸出變差,問題可能來自提示詞版本、模型參數、上游供應商,或使用者輸入本身。Pezzo 把可觀測性與提示詞管理放在同一個平台,讓「這條請求用了哪一版提示詞」和「這版提示詞的延遲與成本是多少」可以在同一個介面裡對照。這個組合決定了它的定位:它不是單純的提示詞編輯器,也不是單純的追蹤工具。

誰不適合,這裡就該說清楚。如果你的提示詞只有兩三條、由同一個人維護、三個月改一次,那版本管理帶來的收益接近零,而你要付出的是一個 PostgreSQL、一個 ClickHouse、一個 Redis 和一個 Supertokens。這個交換不划算。Pezzo 的價值隨提示詞數量、修改頻率與參與人數上升,反過來也隨這三個數字下降而消失。

GraphQL 後端加 Prisma,資料分落 PostgreSQL 與 ClickHouse

從倉庫結構看,apps/server 是 NestJS 寫的 GraphQL 服務,apps/console 是前端控制台,兩者用 Nx 管理。資料層由 Prisma 負責,README 給的遷移指令是 npx dotenv-cli -e apps/server/.env -- npx prisma migrate deploy --schema apps/server/prisma/schema.prisma,schema 檔案位於 apps/server/prisma/schema.prisma。這表示提示詞、版本、專案與使用者這類需要交易一致性的資料走 PostgreSQL 與 Prisma。

ClickHouse 的角色不同。README 把 PostgreSQL、ClickHouse、Redis 與 Supertokens 並列為平台唯一依賴的開源技術,但沒有逐一說明各自負責什麼。從元件性質可以合理推斷:需要高寫入吞吐、以時間序列查詢為主的追蹤資料(每次 LLM 呼叫的延遲、token 用量、成本)適合放 ClickHouse,而 Redis 用於快取,Supertokens 處理身分驗證。這裡必須標明:README 沒有明講這條分界,上述對應是根據元件特性推出來的,不是文件裡的明文。實際落地前應該打開 docker-compose.infra.yaml 與 Prisma schema 確認。

快取是 Pezzo 三項核心能力之一。README 的支援矩陣把 Prompt Management、Observability、Caching 三列在 Node.js、Python 與 LangChain 三個客戶端都打了勾,代表快取由客戶端與伺服器協同完成,而不是只在伺服器端。這對延遲有直接影響,因為一次提示詞抓取如果命中快取,就不必回到伺服器。README 沒有給出快取鍵的設計、失效策略或命中率數字,這部分在文件裡是空的。

GraphQL 這個選擇讓 schema 成為前後端的契約。README 建議在開發時另開一個終端跑 npm run graphql:codegen:watch,讓 codegen 連上伺服器,schema 一改型別就重新產生。這個工作流對同時改前後端的人很方便,代價是 codegen 必須連得到執行中的伺服器,離線或 CI 環境需要另外處理。

本機啟動:四行指令與兩個 .env 檔

Pezzo 提供兩條路。只想跑完整堆疊的人,README 指向文件裡的 Running With Docker Compose。要進開發模式的人,README 給了完整步驟,前置條件是 Node.js 18+ 與 Docker,並建議安裝 GraphQL Language Feature Support 的 VSCode 擴充。

第一步是 npm install。第二步是環境檔:README 說明 Pezzo 用 .env 存環境變數,使用 Docker 時另外建立 .env.docker,並指向 .env.example 作為參考。這裡有個容易踩的細節:指令 npx dotenv-cli -e apps/server/.env 明確指定了 apps/server/.env,也就是說伺服器的環境檔不在倉庫根目錄,而是在 apps/server 底下。只複製根目錄的 .env.example 會讓遷移指令找不到檔案。

第三步拉起基礎服務:docker-compose -f docker-compose.infra.yaml up。這個 compose 檔只含基礎設施,不含應用本身,所以伺服器與控制台要另外跑。第四步套用 Prisma 遷移,指令如上。第五步啟動伺服器 npx nx serve server,README 說可以開 http://localhost:3000/api/healthz 驗證。

接下來是開發模式的關鍵一步。README 要求在另一個終端視窗執行 npm run graphql:codegen:watch,並強調是 separate terminal Window,因為它會直接連上伺服器並持續更新 GraphQL schema。最後跑 npx nx serve console,控制台在 http://localhost:4200。

把這些串起來看,開發模式下你同時要維持四個東西:infra compose、server、codegen watch、console。任何一個斷掉,症狀都不會直接指向原因。例如 codegen 沒跑,型別不會更新,錯誤會出現在前端而不是 codegen。這是 Nx 多應用倉庫的常見代價,不是 Pezzo 獨有的問題,但第一次上手的人應該知道要開幾個終端。

客戶端矩陣的空白處,比打勾的地方更值得看

README 的支援矩陣只有三列:Node.js(npm 套件 @pezzo/client)、Python(PyPI),以及 LangChain。三列在 Prompt Management、Observability、Caching 三項功能上都打了勾。矩陣下方寫著,如果需要的客戶端不在列表上,開 issue 告訴他們。

這張表有兩個值得注意的地方。第一,LangChain 那一欄連的是 GitHub issue 編號 180,不是套件頁面或文件頁。這暗示 LangChain 的整合狀態與前兩者不同,至少在 README 撰寫時是以 issue 追蹤的方式呈現。要採用的人應該先去看那個 issue 的實際狀態,而不是只看表格裡的勾。第二,矩陣涵蓋的是三項功能,但 README 開頭列出的能力還包括 troubleshooting 與 collaboration。這些沒有出現在客戶端矩陣裡,因為它們屬於控制台的功能,不是 SDK 的。分清楚哪些能力在 SDK、哪些在 Console,對評估工作量有幫助:如果團隊只想從程式碼呼叫,那能用的就是這三項。

Python 客戶端的存在值得單獨提。許多 LLM 應用是 Python 寫的,但 Pezzo 本體是 TypeScript。這意味著 Python 團隊採用時,是引入一個 Python SDK 去連一個 TypeScript 服務,而不是把整個平台跑在 Python 生態裡。這不是問題,但會影響誰來維運:服務端的升級與除錯需要懂 Node.js 與 Nx 的人。

自架四個基礎服務,換來的是資料留在自己手上

Pezzo 的架構選擇是明確的取捨。它不自己發明儲存層,而是把 PostgreSQL、ClickHouse、Redis、Supertokens 當成外部依賴。好處是每個元件都是成熟的開源專案,有既有的備份、監控與維運做法;資料留在自己的網路裡,提示詞與追蹤紀錄不經過第三方。代價是部署面積。四個服務加上 Pezzo 自己的伺服器與控制台,最小可用的自架環境是六個元件。

這個代價在幾種情況下會變成錯誤的選擇。第一,團隊沒有人碰過 ClickHouse。它的查詢語言與運維習慣和 PostgreSQL 不同,備份與擴容策略也不同,出事時能求助的對象比 PostgreSQL 少。第二,需求只是「把每次 LLM 呼叫的延遲與 token 記下來」。這件事用一個 SDK 加一個既有的資料庫就能做,不需要引入完整的提示詞管理平台。第三,提示詞由工程師維護且變動極少,前面已經說過。

另一個限制是版本節奏。README 列出的最近版本是 v0.9.2,時間在 2024 年 5 月,其後 v0.9.1 與 v0.9.0 分別在 5 月 14 日與 4 月 28 日。三個版本集中在一個月內,而 0.9.x 這個號段本身說明專案還在 1.0 之前。0.x 階段的專案,API 與 schema 有變動的可能,Prisma 遷移與 GraphQL schema 的相容性需要每次升級都確認。

授權是 Apache-2.0,README 在 License 一節明確標示倉庫原始碼依 Apache 2.0 提供。這是寬鬆授權,允許商業使用與修改,但這裡不提供法律意見。需要注意的是,README 介紹的 Pezzo Cloud 是託管服務,與倉庫的 Apache-2.0 授權是兩件事,採用前應該分清楚你要用的是哪一個。

Langfuse 走的是另一條路:先追蹤,再談管理

同類工具裡值得對照的是 Langfuse。兩者都開源、都做 LLM 可觀測性,差別在起點。Pezzo 的 README 把提示詞管理放在第一位,可觀測性與快取並列其後,客戶端矩陣也是三項功能同時呈現。Langfuse 的定位更集中在追蹤與評估:先把每次呼叫的輸入輸出、延遲、成本記錄下來,再從這些紀錄回頭做提示詞的版本與比較。

這個差別會反映在導入順序上。用 Pezzo,你通常先建立提示詞、發布版本,然後客戶端在執行期抓取,追蹤是伴隨而來的產物。用 Langfuse,你通常先接上追蹤,看到實際流量長什麼樣,再決定要不要把提示詞搬進去管理。前者要求你在導入初期就改變提示詞的存放位置,後者可以先觀察再決定。

兩者的資料模型也不同。Pezzo 用 Prisma 管 PostgreSQL 裡的提示詞與版本,用 ClickHouse 處理追蹤。Langfuse 的儲存選擇與部署形態不一樣,這也是為什麼兩者的自架門檻不能直接比較。要選哪一條,取決於你現在缺的是「提示詞交付流程」還是「看見實際發生什麼」。缺前者,Pezzo 的形狀更貼合;缺後者,先做追蹤再談管理通常阻力較小。

這裡不做效能或規模的比較,因為手上只有 Pezzo 的 README,沒有兩者的實測資料。任何關於誰更快、誰能撐更大流量的說法,在這個材料基礎上都無法成立。

升級前該先確認的三個檔案

Pezzo 的維護成本主要不在程式碼,而在資料層的版本協調。伺服器升級時,Prisma 遷移會改動 PostgreSQL schema,GraphQL schema 可能跟著變,前端型別由 codegen 產生。這條鏈上任何一環沒對齊,症狀會出現在離原因很遠的地方。

具體要確認的第一個檔案是 apps/server/prisma/schema.prisma。升級前先看遷移是否包含破壞性變更,例如欄位重新命名或刪除。第二個是 docker-compose.infra.yaml,它決定 ClickHouse、PostgreSQL、Redis 與 Supertokens 的版本。基礎服務的版本與應用預期的版本不一致時,問題通常不會在啟動階段就浮現。第三個是 apps/server/.env 與 .env.example 的差異,因為遷移與啟動指令都依賴前者的路徑與內容。

開發流程本身也有成本。npm run graphql:codegen:watch 需要連上執行中的伺服器,這在多人協作或 CI 環境要另外安排。README 把它放在開發模式的說明裡,並要求另開終端,說明這是設計上的預期用法,不是可以省略的步驟。

最後是版本號的現實。0.9.x 代表介面還在動,README 的客戶端矩陣與功能列表也可能隨版本調整。採用時把 Pezzo 的版本號寫進你的部署紀錄,並在每次升級前對照 release notes,會比事後追查為什麼提示詞抓不到要省事。這不是泛泛的建議,而是因為 Pezzo 的提示詞是執行期抓取的:伺服器與客戶端的版本落差,會直接反映在應用行為上,而不是在編譯階段被擋下來。

編輯結論

如果你已經在用 PostgreSQL 與 Redis,而且團隊需要一個能讓非工程角色直接改提示詞、又不想把推論流量交給第三方 SaaS 的介面,Pezzo 的 Docker Compose 路徑值得先在本機跑一遍。反過來說,只想接一個 SDK 做追蹤、不想維運 ClickHouse 與 Supertokens 的團隊,Pezzo 的部署面積會大於你實際需要的功能。動手前先確認三件事:你的 ClickHouse 版本是否能被 docker-compose.infra.yaml 直接拉起、apps/server/.env 裡的連線字串是否指向你要長期保留的資料庫、以及 Pezzo Console 在 4200 埠的行為是否符合你內部網路的分權要求。這三項沒確認就上生產,後面補救的成本會集中在資料層。

官方來源

  1. License: Apache-2.0
  2. pezzolabs/pezzo on GitHub
  3. Project website
  4. README
  5. Releases
社群筆記

社群筆記