跳至主要內容

將 Mastra 部署至 Vercel

使用 @mastra/deployer-vercel,將 Mastra 伺服器以 serverless function 方式部署至 Vercel。deployer 會將程式碼打包,並產生符合 Vercel Build Output API.vercel/output 目錄,無需額外配置即可部署。

資訊

本指南說明如何部署 Mastra 伺服器。如果你使用伺服器 adapter網絡框架,請按該框架的慣常方式部署。

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

你需要一個 Mastra 應用程式及一個 Vercel 帳戶。

注意

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

安裝
安裝 的直接連結

@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。如果你沒有 build script,請將 "build": "mastra build" 加入 package.json

    備註

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

  2. 準備好後,按一下 部署,並等待首次部署完成。

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

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

  4. 你現在可以透過 HTTP 調用 Mastra 端點。

    注意

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

Studio
Studio 的直接連結

啟用 studio 選項,即可在部署 API 的同時部署 Studio。Studio 會部署為由 Vercel Edge CDN 提供的靜態資源,因此不會佔用 function invocation。

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() 加入的 route 仍可透過其本身的路徑存取。請避免為自訂 route 指定 Studio 已使用的路徑(例如 /agents/workflows),因為 Studio 會優先使用這些路徑。

注意

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

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

Vercel deployer 支援寫入 Vercel Output API function 配置的選項。有關 maxDurationmemoryregions 等可用選項,請參閱 VercelDeployer 參考資料

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

Serverless function 可在傳回回應後立即終止。任何待處理的非同步工作(例如傳送 telemetry)都可能在完成前被終止。等待 flush() 完成可確保所有 Trace 都在 function 結束前送出。

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 調用。如有需要,你必須自行包裝 handler,在傳回回應前加入相關邏輯。另一做法是部署至長時間運行的伺服器,例如不存在此問題的虛擬機器