跳至主要內容

從 VNext 遷移至標準 API

@mastra/corev0.20.0 起,適用下列變更。

舊版 API(AI SDK v4)
「舊版 API(AI SDK v4)」的直接連結

原始方法已重新命名,並維持與 AI SDK v4v1 模型的回溯相容性。

  • .stream().streamLegacy()
  • .generate().generateLegacy()

標準 API(AI SDK v5)
「標準 API(AI SDK v5)」的直接連結

這些現在是目前使用的 API,完整相容於 AI SDK v5v2 模型。

  • .streamVNext().stream()
  • .generateVNext().generate()

遷移路徑
「遷移路徑」的直接連結

如果已使用 .streamVNext().generateVNext(),請使用尋找/替換,分別將方法改為 .stream().generate()

如果使用舊的 .stream().generate(),請決定是否要升級。如果不升級,請使用尋找/替換,將它們分別改為 .streamLegacy().generateLegacy()

請選擇符合需求的遷移路徑:

繼續使用 AI SDK v4 模型
「繼續使用 AI SDK v4 模型」的直接連結

  • 將所有 .stream().generate() 呼叫分別重新命名為 .streamLegacy().generateLegacy()

不需進行其他變更。

繼續使用 AI SDK v5 模型
「繼續使用 AI SDK v5 模型」的直接連結

  • 將所有 .streamVNext().generateVNext() 呼叫分別重新命名為 .stream().generate()

不需進行其他變更。

從 AI SDK v4 升級至 v5
「從 AI SDK v4 升級至 v5」的直接連結

  • 將所有模型 Provider 套件升級一個主要版本。

這可確保它們現在全都是 v5 模型。請依照下方指南瞭解主要差異,並據此更新程式碼。

主要差異
「主要差異」的直接連結

更新後的 .stream().generate() 方法在行為、相容性、傳回型別和可用選項方面,都與舊版方法不同。本節會說明遷移時必須瞭解的最重要變更。

模型版本支援
「模型版本支援」的直接連結

舊版 API

  • .generateLegacy()
  • .streamLegacy()

只支援 AI SDK v4 模型(specificationVersion: 'v1'

標準 API

  • .generate()
  • .stream()

只支援 AI SDK v5 模型(specificationVersion: 'v2'

這項限制會在執行階段強制執行,並提供清楚的錯誤訊息。

傳回型別
「傳回型別」的直接連結

舊版 API

  • .generateLegacy() 傳回:GenerateTextResultGenerateObjectResult

  • .streamLegacy() 傳回:StreamTextResultStreamObjectResult

如需詳細資訊,請參閱下列 API 參考文件:

標準 API

  • .generate()

    • format: 'mastra'(預設):傳回 MastraModelOutput.getFullOutput()
    • format: 'aisdk':傳回 AISDKV5OutputStream.getFullOutput()
    • 內部會呼叫 .stream() 並等待 .getFullOutput()
  • .stream()

    • format: 'mastra'(預設):傳回 MastraModelOutput<OUTPUT>
    • format: 'aisdk':傳回 AISDKV5OutputStream<OUTPUT>

如需詳細資訊,請參閱下列 API 參考文件:

格式控制
「格式控制」的直接連結

舊版 API
「舊版 API」的直接連結

沒有 format 選項:一律傳回 AI SDK v4 型別

// Mastra native format (default)
const result = await agent.stream(messages)

標準 API
「標準 API」的直接連結

使用 format 選項選擇輸出:

  • 'mastra'(預設)
  • 'aisdk'(相容於 AI SDK v5)
// AI SDK v5 compatibility
const result = await agent.stream(messages, {
format: 'aisdk',
})

標準 API 的新選項
「標準 API 的新選項」的直接連結

標準 .stream()generate() 提供下列選項,但舊版方法不提供

  • format - 選擇「mastra」或「aisdk」輸出格式:

    const result = await agent.stream(messages, {
    format: 'aisdk', // or 'mastra' (default)
    })
  • system - 自訂系統訊息(與 instructions 分開)。

    const result = await agent.stream(messages, {
    system: 'You are a helpful assistant',
    })
  • structuredOutput - 強化的結構化輸出,支援覆寫模型與自訂選項。

    • jsonPromptInjection - 用來覆寫將 response_format 傳給模型的預設行為。這會將內容插入提示詞,引導模型傳回結構化輸出。

    • model - 新增模型後,會建立 subagent,將主要 Agent 的回應結構化。主要 Agent 會呼叫 Tool 並傳回文字,而 subagent 會傳回符合所提供結構描述的物件。這會取代 experimental_output

    • errorStrategy - 決定輸出與結構描述不符時的處理方式:

      • 'warn' - 記錄警告
      • 'error' - 擲回錯誤
      • 'fallback' - 傳回你提供的備用值
      const result = await agent.generate(messages, {
      structuredOutput: {
      schema: z.object({
      name: z.string(),
      age: z.number(),
      }),
      model: 'openai/gpt-5.6-sol', // Optional model override for structuring
      errorStrategy: 'fallback',
      fallbackValue: { name: 'unknown', age: 0 },
      instructions: 'Extract user information', // Override default structuring instructions
      },
      })
  • stopWhen - 彈性的停止條件(步數、token 上限等)。

    const result = await agent.stream(messages, {
    stopWhen: ({ steps, totalTokens }) => steps >= 5 || totalTokens >= 10000,
    })
  • providerOptions - Provider 專屬選項(例如 OpenAI 專屬設定)

    const result = await agent.stream(messages, {
    providerOptions: {
    openai: {
    store: true,
    metadata: { userId: '123' },
    },
    },
    })
  • onChunk - 每個串流區塊的回呼。

    const result = await agent.stream(messages, {
    onChunk: chunk => {
    console.log('Received chunk:', chunk)
    },
    })
  • onError - 錯誤回呼。

    const result = await agent.stream(messages, {
    onError: error => {
    console.error('Stream error:', error)
    },
    })
  • onAbort - 中止回呼。

    const result = await agent.stream(messages, {
    onAbort: () => {
    console.log('Stream aborted')
    },
    })
  • activeTools - 指定此次執行中啟用的 Tool。

    const result = await agent.stream(messages, {
    activeTools: ['search', 'calculator'], // Only these tools will be available
    })
  • abortSignal - 用於取消的 AbortSignal。

    const controller = new AbortController()
    const result = await agent.stream(messages, {
    abortSignal: controller.signal,
    })

    // Later: controller.abort();
  • prepareStep - 多步驟執行中每個步驟開始前的回呼。

    const result = await agent.stream(messages, {
    prepareStep: ({ step, state }) => {
    console.log('About to execute step:', step)
    return {/* modified state */}
    },
    })
  • requireToolApproval - 所有 Tool 呼叫都必須經過核准。

    const result = await agent.stream(messages, {
    requireToolApproval: true,
    })

已移動的舊版選項
「已移動的舊版選項」的直接連結

  • temperature 與其他 modelSettings

    統一至 modelSettings

    const result = await agent.stream(messages, {
    modelSettings: {
    temperature: 0.7,
    maxTokens: 1000,
    topP: 0.9,
    },
    })
  • resourceIdthreadId

    移至 Memory 物件。

    const result = await agent.stream(messages, {
    memory: {
    resource: 'user-123',
    thread: 'thread-456',
    },
    })

已棄用或移除的選項
「已棄用或移除的選項」的直接連結

  • experimental_output

    請改用 structuredOutput,以允許 Tool 呼叫並傳回物件。

    const result = await agent.generate(messages, {
    structuredOutput: {
    schema: z.object({
    summary: z.string(),
    }),
    model: 'openai/gpt-5.6-sol',
    },
    })
  • output

    output 屬性已棄用,請改用 structuredOutput。若要達到相同結果,請省略模型,只傳入 structuredOutput.schema;如果模型原生不支援 response_format,可選擇新增 jsonPromptInjection: true

    const result = await agent.generate(messages, {
    structuredOutput: {
    schema: z.object({
    name: z.string(),
    }),
    },
    })
  • memoryOptions

    請改用 memory

    const result = await agent.generate(messages, {
    memory: {},
    })

型別變更
「型別變更」的直接連結

舊版 API

  • CoreMessage[]

如需詳細資訊,請參閱下列 API 參考文件:

標準 API

  • ModelMessage[]

    toolChoice 使用 AI SDK v5 的 ToolChoice 型別。

    type ToolChoice<TOOLS extends Record<string, unknown>> =
    | 'auto'
    | 'none'
    | 'required'
    | {
    type: 'tool'
    toolName: Extract<keyof TOOLS, string>
    }

如需詳細資訊,請參閱下列 API 參考文件: