跳至主要內容

將 Mastra 部署至 Vercel

使用 @mastra/deployer-vercel 將 Mastra 伺服器部署為 Vercel 上的無伺服器函式。Deployer 會封裝程式碼,並產生符合 Vercel Build Output API.vercel/output 目錄,不需要額外設定即可部署。

資訊

本指南說明如何部署 Mastra 伺服器。若你使用伺服器轉接器Web 框架,請依該框架平常的方式部署。

開始之前
「開始之前」的直接連結

你需要一個 Mastra 應用程式和一個 Vercel 帳號。

警告

Vercel Functions 使用暫時性檔案系統,因此設定的任何儲存空間(包括可觀測性儲存空間)都必須託管於外部。若你使用的 LibSQLStore 採用檔案 URL,請改用遠端託管的資料庫。

安裝
「安裝」的直接連結

@mastra/deployer-vercel 套件加入專案:

npm install @mastra/deployer-vercel@latest

匯入 VercelDeployer,並在 Mastra 設定中將其設為 Deployer:

src/mastra/index.ts
import { Mastra } from '@mastra/core'
import { VercelDeployer } from '@mastra/deployer-vercel'

export const mastra = new Mastra({
deployer: new VercelDeployer(),
})

部署
「部署」的直接連結

  1. 將專案推送至遠端 Git Provider(例如 GitHub),並將儲存庫連接至 Vercel。

    Vercel 預設會執行 npm run build,進而觸發 mastra build。若沒有建置指令碼,請在 package.json 中加入 "build": "mastra build"

    備註

    請記得設定執行應用程式所需的環境變數(例如模型 Provider 的 API 金鑰)。

  2. 準備就緒後,按一下 Deploy,等待第一次部署完成。

  3. 前往 https://<your-project>.vercel.app/api/agents 驗證部署;頁面應傳回 Agent 的 JSON 清單。

    由於 Mastra 伺服器會在每個端點前加上 /api,因此提出要求時必須將其加入 URL。

  4. 現在可以透過 HTTP 呼叫 Mastra 端點。

    警告

    將端點公開前,請先設定驗證

Studio
「Studio」的直接連結

啟用 studio 選項,即可將 Studio 與 API 一起部署。Studio 會部署為由 Vercel Edge CDN 提供的靜態資源,因此不會耗用函式叫用次數。

src/mastra/index.ts
import { Mastra } from '@mastra/core'
import { VercelDeployer } from '@mastra/deployer-vercel'

export const mastra = new Mastra({
deployer: new VercelDeployer({
studio: true,
}),
})

部署後,可從根 URL(https://<your-project>.vercel.app/)使用 Studio,而 API 仍位於 /api/*。Studio 會自動連線至同源的 API,因此不需要額外的環境變數。

Studio 會從 CDN 提供自己的頁面,其他所有路徑則會前往伺服器,因此透過 registerApiRoute() 加入的路由仍可從各自的路徑存取。請避免為自訂路由使用 Studio 已占用的路徑(例如 /agents/workflows),因為 Studio 會優先處理這些路徑。

警告

Studio 連接至 Mastra 伺服器後,便能完整存取 Agent、Workflow 和 Tool。請務必在正式環境中妥善保護 Studio(例如置於驗證或 VPN 之後),以防止未經授權的存取。

選用覆寫設定
「選用覆寫設定」的直接連結

Vercel Deployer 支援會寫入 Vercel Output API 函式設定的選項。可用的 maxDurationmemoryregions 等選項,請參閱 VercelDeployer 參考資料

可觀測性
「可觀測性」的直接連結

無伺服器函式可能在傳回回應後立即終止。任何待處理的非同步工作(例如傳送遙測資料)都可能在完成前遭到終止。等候 flush() 完成,可確保所有 Trace 都在函式結束前送出。

api/chat.ts
import type { VercelRequest, VercelResponse } from '@vercel/node'
import { mastra } from '../src/mastra'

export default async function handler(req: VercelRequest, res: VercelResponse) {
const { message } = req.body
const agent = mastra.getAgent('myAgent')
const result = await agent.generate([{ role: 'user', content: message }])

await mastra.observability.flush()

return res.json(result)
}
警告

Vercel Deployer 不包含 flush 呼叫。若需要此功能,必須自行包裝處理常式,在傳回回應前加入相關邏輯。或者,也可部署至虛擬機器等長時間執行的伺服器,以避開這個問題。