菜单

上下文摘要和会话管理

相关源文件

本文档涵盖了使用OpenAI实时API实现实时语音应用程序的对话状态管理和自动上下文摘要功能。该系统通过自动压缩旧的对话历史,同时保留近期上下文,解决了在令牌限制内保持对话质量的挑战。

有关实时API的基本用法和语音解决方案,请参阅9.1。有关通用流式传输模式,请参阅3.1

目的与范围

实时语音应用程序在管理长时间对话时面临独特的挑战,这归因于令牌消耗模式。音频令牌消耗的令牌量大约是等效文本的10倍,导致128k令牌上下文窗口迅速填满。本系统提供自动化对话管理,具备以下功能:

  • 使用结构化状态容器跟踪对话历史
  • 实时监控会话中的令牌使用情况
  • 在接近限制时自动摘要旧的对话轮次
  • 保持对话的连贯性和质量
  • 支持可扩展的对话管理模式

令牌管理架构

实时语音应用程序的核心挑战是随着对话的延长,令牌消耗呈指数级增长。与基于文本的聊天不同,音频对话会消耗令牌来处理声学信息,包括时间、振幅和韵律特征。

令牌消耗模式

来源:examples/Context_summarization_with_realtime_api.ipynb91-104 images/text-vs-audio-tokens.png

对话状态管理

该系统通过ConversationStateTurn类实现结构化对话跟踪,为实时API的会话管理提供了清晰的抽象。

核心数据结构

来源:examples/Context_summarization_with_realtime_api.ipynb135-151

状态跟踪实现

对话状态容器跟踪当前会话的多个方面

  • 历史跟踪:代表用户和助手话语的Turn对象有序列表
  • 转录管理:用于待处理转录完成的异步Future
  • 令牌监控:最新助手响应后的当前令牌计数
  • 摘要控制:防止并发摘要操作的保护标志

来源: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

PCM音频配置

该系统使用为实时API优化的特定音频参数

参数目的
采样率24 kHz实时API要求
格式PCM-16小端带符号16位
通道单声道 (1)减少令牌消耗
数据块时长~40ms平衡延迟与效率
编码Base64JSON安全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

轮次选择逻辑

摘要过程遵循一个仔细的策略来保留对话上下文

  1. 识别摘要候选:选择超出近期窗口(通常是最近3-5个轮次)的较旧轮次
  2. 保留对话边界:保持完整的用户-助手交流对
  3. 生成上下文摘要:使用Chat Completions API创建连贯的摘要,保留关键信息
  4. 替换为摘要轮次:插入包含对话摘要的单个助手消息
  5. 更新令牌跟踪:重新计算缩减历史的令牌计数

这种方法确保了近期上下文可用于自然的对话流,同时历史信息以压缩形式保存。

与实时API集成

对话管理系统与OpenAI的实时API WebSocket协议紧密集成,处理会话管理和对话级别的操作。

WebSocket消息处理

来源:examples/Context_summarization_with_realtime_api.ipynb244-290 examples/Context_summarization_with_realtime_api.ipynb135-151

实现模式

异步状态管理

对话状态使用asyncio模式处理并发操作

  • 基于Future的转录等待waiting字典将项ID映射到Future对象
  • 基于队列的音频流式传输:用于PCM音频块的asyncio.Queue
  • 任务协调:通过布尔标志防止并发摘要

错误处理和恢复

该系统为实时操作实现了强大的错误处理机制

  • 队列溢出保护:如果WebSocket无法跟上,则丢弃音频帧
  • WebSocket重连:优雅地处理连接断开
  • 转录完成超时:管理缺失或延迟的转录
  • 摘要失败恢复:如果摘要失败,则回退到截断

来源:examples/Context_summarization_with_realtime_api.ipynb218-222 examples/Context_summarization_with_realtime_api.ipynb146-147

这种架构为构建复杂的语音应用程序提供了基础,这些应用程序能够在长时间交互中保持对话质量,同时高效管理计算资源。