본문으로 건너뛰기

타입 별칭: StructuredOutputStream<T>

type StructuredOutputStream<T> = AsyncIterable<
| Exclude<StreamChunk, CustomEvent>
| StructuredOutputStartEvent
| StructuredOutputCompleteEvent<T>
| ApprovalRequestedEvent
| ToolInputAvailableEvent>;

정의 위치: packages/ai/src/types.ts:1598

chat({ outputSchema, stream: true })이 반환하는 스트림의 공개 타입입니다.

표준 StreamChunk 라이프사이클 이벤트를 모두 반환하며, 이 경로를 통해 방출되는 타입화된 CUSTOM 구조화된 출력 이벤트도 포함합니다:

  • structured-output.complete — 타입화된 value.object: T 을 갖는 종단 이벤트

도구 승인 및 클라이언트 도구 입력과 같이 사용자 작업이 필요한 대기는 현재 코어 스트림에서 RUN_FINISHED.outcome.type === 'interrupt'로 표현됩니다. 레거시 approval-requestedtool-input-available 커스텀 이벤트는 재생과 하위 호환성을 위해 여전히 소비할 수 있지만, 현재 대기의 기준 정보는 아닙니다.

각 변형에는 리터럴 name이 있으므로, 판별된 단일 narrowing만으로 헬퍼나 캐스트 없이 타입이 지정된 value를 얻을 수 있습니다.

for await (const chunk of stream) {
if (chunk.type === 'CUSTOM' && chunk.name === 'structured-output.complete') {
chunk.value.object // typed as T
}
}

주의: 도구는 emitCustomEvent(name, value) 컨텍스트 API를 통해 임의의 사용자 정의 커스텀 이벤트를 발생시킬 수 있습니다. 이러한 이벤트는 런타임에 이 스트림을 통과하지만 의도적으로 이 타입에서 제외됩니다. CustomEvent를 그대로 포함하면(value: any가 유니언을 오염시키므로) narrowing 후 chunk.value가 다시 any로 축소됩니다. emitCustomEventoutputSchema + stream: true를 함께 사용하는 경우 리터럴 name narrowing의 바깥에서 CUSTOM을 분기하거나 명시적으로 캐스트하세요.

타입 매개변수

T

T = unknown