toAISdkStream()
Mastra のストリーム(Agent、network、Workflow)を AI SDK 互換ストリームに変換します。Mastra のストリームを手動で変換し、AI SDK の createUIMessageStream() および createUIMessageStreamResponse() で使用する必要がある場合に、この関数を使用します。
これは、chatRoute() や workflowRoute() など、Mastra が提供するルートヘルパーを使用せずにカスタムストリーミングエンドポイントを構築する場合に役立ちます。
toAISdkStream() では、既存の AI SDK v5 のデフォルト動作が維持されます。アプリが AI SDK v6 に対して型付けされている場合は、オプションオブジェクトで version: 'v6' を渡してください。
UI ストリームの構造化出力UI ストリームの構造化出力への直接リンク
ソースとなる Agent ストリームに最終的な構造化出力オブジェクトが含まれている場合、toAISdkStream() はそれをカスタム AI SDK UI データパーツとして出力します。
{
"type": "data-structured-output",
"data": {
"object": {}
}
}
object フィールドには、構造化出力の完全な値が格納されます。これにより、Mastra の最終構造化出力チャンクが AI SDK UI ストリームにマッピングされます。部分的な構造化出力チャンクは出力されません。
使用例使用例への直接リンク
Next.js App Router の例:
import { mastra } from '../../mastra'
import { createUIMessageStream, createUIMessageStreamResponse } from 'ai'
import { toAISdkStream } from '@mastra/ai-sdk'
export async function POST(req: Request) {
const { messages } = await req.json()
const myAgent = mastra.getAgent('weatherAgent')
const stream = await myAgent.stream(messages)
const uiMessageStream = createUIMessageStream({
originalMessages: messages,
execute: async ({ writer }) => {
for await (const part of toAISdkStream(stream, { from: 'agent' })) {
await writer.write(part)
}
},
})
return createUIMessageStreamResponse({
stream: uiMessageStream,
})
}
UI でアシスタントメッセージが重複しないようにするには、createUIMessageStream() の originalMessages に messages を渡します。詳しくは、トラブルシューティング:アシスタントメッセージの繰り返しを参照してください。
パラメーターパラメーターへの直接リンク
第 1 パラメーターは、変換する Mastra ストリームです。次のいずれかを指定できます。
MastraModelOutput-agent.stream()からの Agent ストリームMastraAgentNetworkStream-agent.network()からのネットワークストリームMastraWorkflowStreamまたはWorkflowRunOutput- Workflow ストリーム
第 2 パラメーターはオプションオブジェクトです。
version?:
'v5' を渡します。アプリが AI SDK v6 のレスポンスヘルパーに対して型付けされている場合は、'v6' を渡します。from:
lastMessageId?:
sendStart?:
sendFinish?:
sendReasoning?:
sendSources?:
includeTextStreamParts?:
messageMetadata?:
onError?:
例例への直接リンク
Workflow ストリームを変換するWorkflow ストリームを変換するへの直接リンク
import { mastra } from '../../mastra'
import { createUIMessageStream, createUIMessageStreamResponse } from 'ai'
import { toAISdkStream } from '@mastra/ai-sdk'
export async function POST(req: Request) {
const { input } = await req.json()
const workflow = mastra.getWorkflow('myWorkflow')
const run = workflow.createRun()
const stream = await run.stream({ inputData: input })
const uiMessageStream = createUIMessageStream({
execute: async ({ writer }) => {
for await (const part of toAISdkStream(stream, { from: 'workflow' })) {
await writer.write(part)
}
},
})
return createUIMessageStreamResponse({
stream: uiMessageStream,
})
}
ネットワークストリームを変換するネットワークストリームを変換するへの直接リンク
import { mastra } from '../../mastra'
import { createUIMessageStream, createUIMessageStreamResponse } from 'ai'
import { toAISdkStream } from '@mastra/ai-sdk'
export async function POST(req: Request) {
const { messages } = await req.json()
const routingAgent = mastra.getAgent('routingAgent')
const stream = await routingAgent.network(messages)
const uiMessageStream = createUIMessageStream({
execute: async ({ writer }) => {
for await (const part of toAISdkStream(stream, { from: 'network' })) {
await writer.write(part)
}
},
})
return createUIMessageStreamResponse({
stream: uiMessageStream,
})
}
推論を有効にして Agent ストリームを変換する推論を有効にして Agent ストリームを変換するへの直接リンク
import { mastra } from '../../mastra'
import { createUIMessageStream, createUIMessageStreamResponse } from 'ai'
import { toAISdkStream } from '@mastra/ai-sdk'
export async function POST(req: Request) {
const { messages } = await req.json()
const reasoningAgent = mastra.getAgent('reasoningAgent')
const stream = await reasoningAgent.stream(messages, {
providerOptions: {
openai: { reasoningEffort: 'high' },
},
})
const uiMessageStream = createUIMessageStream({
originalMessages: messages,
execute: async ({ writer }) => {
for await (const part of toAISdkStream(stream, {
from: 'agent',
sendReasoning: true,
})) {
await writer.write(part)
}
},
})
return createUIMessageStreamResponse({
stream: uiMessageStream,
})
}
AI SDK v6 向けに Agent ストリームを変換するAI SDK v6 向けに Agent ストリームを変換するへの直接リンク
import { mastra } from '../../mastra'
import { createUIMessageStream, createUIMessageStreamResponse } from 'ai'
import { toAISdkStream } from '@mastra/ai-sdk'
export async function POST(req: Request) {
const { messages } = await req.json()
const myAgent = mastra.getAgent('weatherAgent')
const stream = await myAgent.stream(messages)
const uiMessageStream = createUIMessageStream({
originalMessages: messages,
execute: async ({ writer }) => {
for await (const part of toAISdkStream(stream, {
from: 'agent',
version: 'v6',
})) {
await writer.write(part)
}
},
})
return createUIMessageStreamResponse({
stream: uiMessageStream,
})
}
messageMetadata を使用するusing-messagemetadataへの直接リンク
import { mastra } from '../../mastra'
import { createUIMessageStream, createUIMessageStreamResponse } from 'ai'
import { toAISdkStream } from '@mastra/ai-sdk'
export async function POST(req: Request) {
const { messages } = await req.json()
const myAgent = mastra.getAgent('weatherAgent')
const stream = await myAgent.stream(messages)
const uiMessageStream = createUIMessageStream({
originalMessages: messages,
execute: async ({ writer }) => {
for await (const part of toAISdkStream(stream, {
from: 'agent',
messageMetadata: ({ part }) => ({
timestamp: Date.now(),
partType: part.type,
}),
})) {
await writer.write(part)
}
},
})
return createUIMessageStreamResponse({
stream: uiMessageStream,
})
}
クライアント側でストリームを変換するクライアント側でストリームを変換するへの直接リンク
クライアント側で Mastra クライアント SDK(@mastra/client-js)を使用していて、ストリームを AI SDK 形式に変換する場合:
import { MastraClient } from '@mastra/client-js'
import { createUIMessageStream } from 'ai'
import { toAISdkStream } from '@mastra/ai-sdk'
import type { ChunkType, MastraModelOutput } from '@mastra/core/stream'
const client = new MastraClient({
baseUrl: 'http://localhost:4111',
})
const agent = client.getAgent('weatherAgent')
const response = await agent.stream('What is the weather in Tokyo?')
// Convert the client SDK stream to a ReadableStream<ChunkType>
const chunkStream = new ReadableStream<ChunkType>({
async start(controller) {
await response.processDataStream({
onChunk: async chunk => {
controller.enqueue(chunk)
},
})
controller.close()
},
})
// Transform to AI SDK format
const uiMessageStream = createUIMessageStream({
execute: async ({ writer }) => {
for await (const part of toAISdkStream(chunkStream as unknown as MastraModelOutput, {
from: 'agent',
})) {
await writer.write(part)
}
},
})
for await (const part of uiMessageStream) {
console.log(part)
}