服务层 SHALL 使用 fetch + ReadableStream 实现流式对话,通过 AsyncGenerator<SSEEvent> 供上层消费。
speak(sessionId, audioBlob) 发起请求transcript、token(多次)、done 事件每个流式请求 SHALL 支持通过 AbortController 取消。
signal.abort()AbortError,上层保留已接收内容请求失败时 SHALL 统一抛出错误,不区分错误类型(v1 简化版)。
error,显示重试按钮服务层 SHALL 通过 DialogueAPI 接口抽象后端通信,支持 mock 和真实 API 切换。
interface DialogueAPI {
createSession(config: SessionConfig): Promise<SessionInfo>
speak(sessionId: string, audioBlob: Blob, signal: AbortSignal): AsyncGenerator<SSEEvent>
getReport(sessionId: string): Promise<Report>
}
mode 为 preview 时MockDialogueAPI,模拟 transcript + 逐 token 输出mode 为 real 时RealDialogueAPI,对接后端 3 个接口服务层 SHALL 解析后端返回的 SSE 格式流。
event: transcript\ndata: {...}\n\n 格式