本文档涵盖了使用OpenAI实时API实现实时语音应用程序的对话状态管理和自动上下文摘要功能。该系统通过自动压缩旧的对话历史,同时保留近期上下文,解决了在令牌限制内保持对话质量的挑战。
有关实时API的基本用法和语音解决方案,请参阅9.1。有关通用流式传输模式,请参阅3.1。
实时语音应用程序在管理长时间对话时面临独特的挑战,这归因于令牌消耗模式。音频令牌消耗的令牌量大约是等效文本的10倍,导致128k令牌上下文窗口迅速填满。本系统提供自动化对话管理,具备以下功能:
实时语音应用程序的核心挑战是随着对话的延长,令牌消耗呈指数级增长。与基于文本的聊天不同,音频对话会消耗令牌来处理声学信息,包括时间、振幅和韵律特征。
来源:examples/Context_summarization_with_realtime_api.ipynb91-104 images/text-vs-audio-tokens.png
该系统通过ConversationState和Turn类实现结构化对话跟踪,为实时API的会话管理提供了清晰的抽象。
来源:examples/Context_summarization_with_realtime_api.ipynb135-151
对话状态容器跟踪当前会话的多个方面
Turn对象有序列表来源:examples/Context_summarization_with_realtime_api.ipynb203-237 examples/Context_summarization_with_realtime_api.ipynb166-173
实时音频处理管道捕获麦克风输入,将其流式传输到实时API,并管理响应播放,同时保持对话状态。
来源:examples/Context_summarization_with_realtime_api.ipynb203-237 examples/Context_summarization_with_realtime_api.ipynb244-290
该系统使用为实时API优化的特定音频参数
| 参数 | 值 | 目的 |
|---|---|---|
| 采样率 | 24 kHz | 实时API要求 |
| 格式 | PCM-16 | 小端带符号16位 |
| 通道 | 单声道 (1) | 减少令牌消耗 |
| 数据块时长 | ~40ms | 平衡延迟与效率 |
| 编码 | Base64 | JSON安全WebSocket传输 |
来源:examples/Context_summarization_with_realtime_api.ipynb213-236
当令牌使用量接近128k限制时,系统会自动将旧的对话历史压缩成摘要,同时逐字保留近期的对话轮次。这既保持了对话的连贯性,又管理了令牌消耗。
来源:examples/Context_summarization_with_realtime_api.ipynb91-104 examples/Context_summarization_with_realtime_api.ipynb148-151
摘要过程遵循一个仔细的策略来保留对话上下文
这种方法确保了近期上下文可用于自然的对话流,同时历史信息以压缩形式保存。
对话管理系统与OpenAI的实时API WebSocket协议紧密集成,处理会话管理和对话级别的操作。
来源:examples/Context_summarization_with_realtime_api.ipynb244-290 examples/Context_summarization_with_realtime_api.ipynb135-151
对话状态使用asyncio模式处理并发操作
waiting字典将项ID映射到Future对象asyncio.Queue该系统为实时操作实现了强大的错误处理机制
来源:examples/Context_summarization_with_realtime_api.ipynb218-222 examples/Context_summarization_with_realtime_api.ipynb146-147
这种架构为构建复杂的语音应用程序提供了基础,这些应用程序能够在长时间交互中保持对话质量,同时高效管理计算资源。