본문으로 건너뛰기

Workflow 경로()

AI SDK 형식을 사용하여 스트리밍 Workflow 실행을 위한 Workflow 경로 핸들러를 만듭니다. 이 함수는 HTTP를 등록합니다.POST입력 데이터를 받아들이고, Workflow를 실행하고, AI SDK 호환 형식으로 클라이언트에 응답을 다시 스트리밍하는 엔드포인트입니다. 내부에서 사용해야합니다.커스텀 API 경로.

프레임워크에 종속되지 않는 핸들러가 필요하면 handleWorkflowStream()을 사용하세요. workflowRoute()기존 AI SDK v5/기본 동작을 유지합니다. 앱이 AI SDK v6에 대해 입력된 경우 다음을 통과하세요.version: 'v6'.

Workflow에서 Agent 스트리밍

Workflow 단계에서 Agent의 스트림을 Workflow 작성자에게 파이프하는 경우(예: await response.fullStream.pipeTo(writer)) Agent가 Workflow 단계 내에서 실행되더라도 Agent의 텍스트 청크와 Tool 호출이 UI 스트림에 실시간으로 전달됩니다. 자세한 내용은 Workflow 스트리밍을 참조하세요.

사용예
사용예에 대한 직접 링크

이 예제에서는 ID가 weatherWorkflow인 Workflow를 사용하는 /workflow 엔드포인트에 Workflow 경로를 설정하는 방법을 보여줍니다.

src/mastra/index.ts
import { Mastra } from '@mastra/core'
import { workflowRoute } from '@mastra/ai-sdk'

export const mastra = new Mastra({
server: {
apiRoutes: [
workflowRoute({
path: '/workflow',
workflow: 'weatherWorkflow',
}),
],
},
})

workflowId를 기반으로 런타임 정의 Workflow 라우팅을 사용할 수도 있습니다. URL /workflow/weatherWorkflow는 ID가 weatherWorkflow인 Workflow로 확인됩니다.

src/mastra/index.ts
import { Mastra } from '@mastra/core'
import { workflowRoute } from '@mastra/ai-sdk'

export const mastra = new Mastra({
server: {
apiRoutes: [
workflowRoute({
path: '/workflow/:workflowId',
}),
],
},
})

매개변수
매개변수에 대한 직접 링크

version?:

'v5' | 'v6'
= 'v5'
출력할 AI SDK 스트림 계약을 선택합니다. 기존 기본 동작을 사용하려면 생략하거나 'v5'를 전달하세요. 앱이 AI SDK v6 응답 헬퍼를 기준으로 타입이 지정된 경우 'v6'을 전달하세요.

path?:

string
= '/api/workflows/:workflowId/stream'
경로 경로입니다(예: /workflow 또는 /workflow/:workflowId). 동적 Workflow 라우팅에는 :workflowId를 포함하세요.

workflow?:

string
= undefined
동적 라우팅을 사용하지 않을 때의 고정 Workflow ID입니다.

includeTextStreamParts?:

boolean
= true
출력에 텍스트 스트림 부분을 포함할지 여부입니다.

추가 구성
추가 구성에 대한 직접 링크

prepareSendMessagesRequest를 사용하여 Workflow 경로로 전송되는 요청을 사용자 정의할 수 있습니다. 예를 들어 Workflow에 추가 구성을 전달할 수 있습니다.

const { error, status, sendMessage, messages, regenerate, stop } = useChat({
transport: new DefaultChatTransport({
api: 'http://localhost:4111/workflow',
prepareSendMessagesRequest({ messages }) {
return {
body: {
inputData: {
city: messages[messages.length - 1].parts[0].text,
},
// Or resumeData for resuming a suspended workflow
resumeData: {
confirmation: messages[messages.length - 1].parts[0].text,
},
},
}
},
}),
})