跳至主要內容

Run.timeTravelStream()

.timeTravelStream() 方法會從任一指定步驟開始重新執行 Workflow,並串流傳輸事件。時間旅行執行期間,你可以即時接收更新,同時完整掌握每個步驟的進度。

使用範例
「使用範例」的直接連結

const run = await workflow.createRun()

const output = run.timeTravelStream({
step: 'step2',
inputData: { value: 10 },
})

// Process events as they arrive
for await (const event of output.fullStream) {
console.log(event.type, event.payload)
}

// Get the final result
const result = await output.result

參數
「參數」的直接連結

所有參數都與 Run.timeTravel() 相同。詳細的參數文件請參閱 timeTravel 參考

回傳值
「回傳值」的直接連結

output:

WorkflowRunOutput<WorkflowResult<TState, TInput, TOutput, TSteps>>
同時包含串流與結果 Promise 的物件

output.fullStream:

ReadableStream<WorkflowStreamEvent>
隨著執行進度輸出 Workflow 事件的可讀串流

output.result:

Promise<WorkflowResult<TState, TInput, TOutput, TSteps>>
會解析為最終 Workflow 執行結果的 Promise

output.traceId?:

string
啟用 Tracing 時,與此次執行相關聯的 Trace ID

串流事件
「串流事件」的直接連結

串流會在執行期間輸出 Workflow 事件:

  • workflow-step-start:步驟開始執行時輸出
  • workflow-step-finish:步驟成功完成時輸出
  • workflow-step-error:步驟發生錯誤時輸出
  • workflow-step-suspended:步驟暫停時輸出
  • 依步驟類型而定的其他事件(Agent、Tool 等)

進階使用範例
「進階使用範例」的直接連結

在時間旅行期間處理事件
「在時間旅行期間處理事件」的直接連結

const run = await workflow.createRun()

const output = run.timeTravelStream({
step: 'step2',
inputData: { value: 10 },
})

for await (const event of output.fullStream) {
switch (event.type) {
case 'workflow-step-start':
console.log(`Starting step: ${event.payload.stepName}`)
break
case 'workflow-step-finish':
console.log(`Completed step: ${event.payload.stepName}`)
break
case 'workflow-step-error':
console.error(`Error in step: ${event.payload.stepName}`, event.payload.error)
break
}
}

const result = await output.result
console.log('Time travel completed:', result)

搭配 context 的時間旅行串流
「搭配 context 的時間旅行串流」的直接連結

const output = run.timeTravelStream({
step: 'step2',
context: {
step1: {
status: 'success',
payload: { value: 0 },
output: { step1Result: 2 },
startedAt: Date.now(),
endedAt: Date.now(),
},
},
})

for await (const event of output.fullStream) {
// Handle events
console.log(event)
}

const result = await output.result

搭配巢狀 Workflow 的時間旅行串流
「搭配巢狀 Workflow 的時間旅行串流」的直接連結

const output = run.timeTravelStream({
step: ['nestedWorkflow', 'step3'],
inputData: { value: 10 },
nestedStepsContext: {
nestedWorkflow: {
step2: {
status: 'success',
payload: { step1Result: 2 },
output: { step2Result: 3 },
startedAt: Date.now(),
endedAt: Date.now(),
},
},
},
})

for await (const event of output.fullStream) {
console.log(event.type, event.payload)
}

const result = await output.result

注意事項
「注意事項」的直接連結

  • 時間旅行執行完成或發生錯誤時,串流會自動關閉
  • Workflow 仍在執行時,你就能處理串流中的事件
  • result Promise 只會在所有步驟完成後解析
  • 串流事件的格式與一般 Workflow 串流相同
  • 時間旅行串流依賴持久儲存的 Workflow 快照,因此必須設定儲存空間