Skip to content

v4.1.0

Choose a tag to compare

@joey-zhou joey-zhou released this 21 Feb 08:36

[4.1.0] - 2026-02-21

💥 重大变更

  • feat: 对话记忆系统引入摘要模式

    • 新增 SummaryConversation / SummaryConversationFactory,支持对话摘要长期记忆
    • 当上下文消息数达到阈值(默认 8 条)时,通过虚拟线程调用 LLM 异步生成 ≤150 字摘要
    • 摘要自动注入后续对话的系统提示词,实现跨会话记忆延续
    • 新增 ConversationIdentifier 统一标识 deviceId + roleId + sessionId
    • 新增摘要提示词模板:init_summarizer.md(首次摘要)、again_summarizer.md(增量摘要)、system_prompt_with_summary.md(摘要注入)
    • 角色支持选择记忆类型(window / summary),通过 memoryType 字段配置
    • 删除 WindowConversationFactory,由 DefaultConversationFactory + SummaryConversationFactory 分别承担
  • feat: 音频播放架构全面重构

    • 新增 ScheduledPlayer:纳秒精度帧调度、突发预缓冲(前 2 帧立即发送)、句间 300ms 间隔、基于 Flux 的多句排队
    • 新增 PlayerWithOpusFile:播放同时录制 Ogg-Opus 文件,并向 AEC 喂参考信号
    • 新增 Speech 值对象,携带音频数据及对应文本(用于歌词同步等场景)
    • 新增 SentenceHelper:独立的句子分割辅助类,支持中英文标点、表情检测、小数点消歧
    • 新增 ChatConverter 函数式接口,用于 token 流到句子流的转换
    • 删除 FilePlayer、ThreadPlayer、ThreadSynthesizer(由新架构替代)
  • feat: 对话领域模型重构(Persona / Dialogue)

    • 新增 Persona:封装 ChatModel、Synthesizer、Player、Conversation、SttService 等,统一管理对话全链路
    • 新增 Dialogue:不可变值对象,完整表达一轮对话(UserMessage、ChatResponse、工具调用详情、时间戳等),支持转换为持久化实体
    • DialogueService 大幅精简,核心 LLM/TTS 逻辑下沉到 Persona
    • ChatService 演进为 Persona 工厂,通过 buildPersona() 统一构建对话能力

新增功能

服务端 AEC 回声消除

  • feat: 新增 AecService,基于 WebRTC AEC3(webrtc-java 0.14.0)实现服务端回声消除
    • 集成回声消除、噪声抑制(MODERATE)、高通滤波、自适应增益控制
    • TTS 播放结束后自动重建 AEC 实例,避免过度抑制后续用户语音
    • 可通过 aec.enabledaec.stream.delay.msaec.noise.suppression.level 配置
  • feat: 新增 TtsPlaybackEndEvent 事件,播放停止时通知 AEC 和 VAD 重置状态
  • delete: 删除 AudioEnhancer(功能由 AEC 管道中的 AGC 替代)

MCP 工具管理

  • feat: 新增 McpToolController,提供 MCP 工具的全局/角色级启用禁用管理 API
    • 支持单个工具开关、批量设置角色排除工具列表、全局工具开关
    • 查询角色及全局禁用工具列表、获取系统内置工具列表、刷新缓存
  • feat: 新增 McpToolExcludeService 及 Redis 缓存支持
  • feat: 新增请求参数类:BatchSetRoleExcludeToolsParam、ToggleGlobalToolStatusParam、ToggleRoleToolStatusParam

记忆管理接口

  • feat: 新增 MemoryController,提供摘要记忆的查询与删除 REST API
  • feat: 新增 SysSummaryService 及 SummaryMapper 数据访问层
  • feat: 前端新增 memory.ts 服务模块,支持摘要记忆和聊天记忆查询/删除

新增 STT 提供商:火山引擎

  • feat: 新增 VolcengineSttService,实现火山引擎(字节跳动)WebSocket 流式语音识别
    • 使用自定义二进制协议 + Gzip 压缩 JSON 头 + 音频载荷
    • 支持批量和流式识别模式

新增 TTS 提供商:腾讯云

  • feat: 新增 TencentTtsService,实现腾讯云 WebSocket 流式语音合成
    • 支持语音名称、音调、语速配置
  • feat: 新增腾讯云音色列表 tencentVoicesList.json

绘本与音乐播放器

  • feat: 新增 HuiBenPlayer,替代 HuiBenService,独立绘本播放器
  • feat: 新增 MusicPlayer,替代 MusicService,独立音乐播放器
    • 支持 LRC 歌词解析与同步显示,歌词文本随音频帧发送
  • delete: 删除 HuiBenService、MusicService(功能整合到新播放器)

事件系统

  • feat: 新增 DeviceOnlineEvent,设备上线时触发(用于 OTA 升级结果检查等)
  • feat: 新增 TtsPlaybackEndEvent,TTS 播放结束时触发

优化与改进

Tool Calling 增强

  • fix: 修复 Spring AI #4629/#4790 问题——OpenAI 兼容 API(如通义千问)流式返回的工具调用分片合并
    • 新增 mergeFragmentedToolCalls() 方法,按 ID 及空 ID/空名称延续策略合并分片
  • fix: 优雅处理 LLM 幻觉工具调用(调用未注册工具名时返回错误信息而非崩溃)
  • update: 工具调用详情记录到 ChatSession,支持持久化

VAD 重构

  • refactor: 简化 VAD 架构,删除 VadDetector 接口、VadSessionState、VadServiceAdapter
  • update: VadService 监听 TtsPlaybackEndEvent,TTS 结束后重置 Silero 隐藏状态,消除状态污染

会话管理

  • update: ChatSession 新增 toolCallDetails 管理(CopyOnWriteArrayList)
  • update: ChatSession 新增 getAudioPath() 方法,统一生成用户 WAV / 助手 Ogg 文件路径
  • update: SessionManager 新增 findConversation() 查找活跃会话的 Conversation 实例

前端优化

  • update: 记忆管理视图 MemoryManagementView 支持摘要记忆的展示与删除
  • update: 角色编辑表单新增 memoryType 选择器(window / summary)
  • update: 新增 useSelectLoadMore 组合式函数,支持下拉分页加载
  • update: 国际化资源更新,新增记忆类型、MCP 工具管理、新提供商相关翻译
  • update: 路由配置新增记忆管理页面
  • update: LLM 工厂配置与 Provider 配置更新

其他

  • update: Entity 基类支持自动传递
  • update: 角色相关参数和 DTO 新增 memoryType 字段
  • refactor: 智谱模型提供商 ZhiPuModelProvider 优化
  • update: 消息删除新增 MessageDeleteParam 参数类

删除

  • delete: 删除 AjaxResult、HttpStatus(已被 ResultMessage 替代)
  • delete: 删除 FilePlayer、ThreadPlayer、ThreadSynthesizer(已被 ScheduledPlayer 架构替代)
  • delete: 删除 HuiBenService、MusicService(已被 HuiBenPlayer、MusicPlayer 替代)
  • delete: 删除 VadDetector、VadSessionState、VadServiceAdapter(VAD 架构简化)
  • delete: 删除 WindowConversationFactory(由新工厂类替代)
  • delete: 删除 AudioEnhancer(由 AEC 替代)
  • delete: 删除 docs/images/model.jpg

数据库变更

  • add: 新增 sys_summary 表,存储对话摘要记忆
  • add: 新增 sys_mcp_tool_exclude 表,存储 MCP 工具排除配置
  • update: sys_role 表新增 memoryType 字段(enum: summary / window,默认 window)
  • update: init.sql 同步更新

依赖更新

  • update: 版本升级至 4.1.0
  • update: 新增 dev.onvoid.webrtc:webrtc-java:0.14.0(WebRTC AEC3 回声消除)
  • update: 新增腾讯云 TTS SDK
  • update: pom.xml 依赖更新