傲瑞视频会议是如何实现AI会议纪要的?

发布时间:2026/7/9 13:17:39
傲瑞视频会议是如何实现AI会议纪要的? 对于视频会议软件而言会议纪要功能现在几乎成了标配为会议结束后回顾会议内容提供了极大的方便省去了大量的人力。接下来我们以 傲瑞会议OrayMeeting为例来介绍会议纪要功能的具体实现。傲瑞会议纪要功能基于会议实时音视频数据流实时采集会议语音音频。借助AI能力完成语音实时转写、语义规整与核心信息提炼自动生成标准化的会议纪要。 并且客户端可实现全文内容与重点摘要分层渲染展示全面满足会议全流程智能化纪要生成及归档管理的业务需求。 傲瑞视频会议的纪要功能的效果如下图所示一、功能说明1主持人创建会议时可勾选控制是否开启会议纪要。2如果创建时没有开启纪要也可以在会议进行过程中通过设置菜单手动开启。3纪要功能开启后服务端实时采集参会人发言音频通过ASR语音转写与智能纪要接口自动整理成文并实时推送至所有参会人员。4参会者可实时查看动态更新的纪要内容会议纪要完成后还能一键复制导出完整纪要内容方便留存查阅。二、实现原理要实现会议纪要功能有两个地方需要用到AI功能。1实时语音转文字ASR。2会议摘要生成。傲瑞会议支持两种方式接入AI功能1利用大厂发布的AI服务如讯飞在公网提供的服务接口。2私有部署本地大模型如FunASR、QWen。接入的两种AI能力通过统一的接口规范起来在部署的时候可以自由选择配置。三、服务端实现1AI 能力对接服务端实时拉取会议音频码流同步转发至 AI 语音转写模型实现语音到文本的实时转换经由 AI 大模型完成语句规整、冗余语气词过滤、内容梳理归纳及会议重点萃取。首先是语音识别接口IASRWebApi其定义如下/// summary /// 语音识别WebApi调用接口 /// /summary public interface IASRWebApi { /// summary /// 每返回一段有效识别文本时触发 /// /summary event ActionVoiceDictationModel AudioConvertSucceeded; /// summary /// 初始化ASR识别会话 /// /summary /// param nameindex会话索引/param /// param namespeakerID说话人/param /// param namestartTime本次语音片段采集起始时间/param void Init(int index, string speakerID, DateTime startTime); /// summary /// 单次完整说话结束调用告知ASR引擎做断句、完整识别输出 /// /summary /// param nameendTime语音采集结束时间/param /// param nameisEnd是否为整轮会话完全结束true关闭连接销毁会话false仅单句停顿结束/param void AudioEndNotify(DateTime endTime, bool isEnd false); /// summary /// 异步入队一段PCM音频分片数据推送到ASR WebApi进行流式识别 /// /summary /// param namepcmDataPCM音频/param /// param name_status音频的发送状态;0第一帧1继续帧2最后一帧 等/param Task EnqueueAudioChunk(byte[] pcmData, int _status -1); }会议纪要接口IMeetingSumWebApi其定义如下/// summary /// 会议纪要生成WebApi调用接口 /// /summary internal interface IMeetingSumWebApi { /// summary /// 发起会议纪要/摘要生成请求 /// /summary /// param namespeechModels语音识别结果集合/param /// param nameisCompleteContenttrue生成完整正式纪要false为实时片段摘要/param /// returns /// 第一个booltrue接口调用正常第二个string生成的会议摘要/完整纪要文案失败时返回错误描述 /// /returns Task(bool, string) Ask(ListVoiceDictationModel speechModels, bool isCompleteContent false); }2调用ASR与会议纪要接口服务端在拿到发言人的语音数据后会首先调用IASRWebApi将其转换为文字。private async void Connector_AudioMixed(string speakerID, byte[] pcm, bool isSilent) { try { if (!enable || !working) return; if (GlobalOptions.Enable_Local_Deploy) //使用本地部署ASR { lastRecognizer?.EnqueueAudioChunk(pcm); } else { _audioBuffer.Enqueue(item: pcm); } if (!string.IsNullOrEmpty(speakerID)) { currentSpeakerID speakerID; } if (lastRecognizer null !string.IsNullOrEmpty(currentSpeakerID) !isSilent) { index; startTime currentTime; lastRecognizer CommonTool.GetASRWebApi(); lastRecognizer.Init(index, Tool.GetRealID4OMCS(currentSpeakerID), startTime); lastRecognizer.AudioConvertSucceeded Recognizer_AudioConvertSucceeded; } SendAudioData(); } catch (Exception ex) { Program.Logger.Log(ex, MeetingSpeech.Connector_AudioMixed, ErrorLevel.Standard); } }当需要生成会议纪要时调用 IMeetingSumWebApi 接口try { int count voiceDictationModels.Count; int current _lastIndex; var batch new ListVoiceDictationModel(); if (count ! 0) { while (current count) { var item voiceDictationModels[current]; batch.Add(item); current; } if (batch.Any()) { Interlocked.Exchange(ref _lastIndex, current); IMeetingSumWebApi sdk2 CommonTool.GetSumWebApi(); var (ok2, msg2) await sdk2.Ask(batch); if (ok2) { Console.WriteLine(TakeNextBatch1); OnTextOptimized?.Invoke(this.meetingID, msg2, batch[batch.Count - 1].IsEnd); } else { Console.WriteLine(实时的会议纪要接口返回失败 msg2); } } } if (!working (index 0 || voiceDictationModels.Any() voiceDictationModels[count - 1].Index index)) { Console.WriteLine(TakeNextBatch2); GetCompleteMeetingMinutes(); } } catch (Exception ex) { Program.Logger.Log(ex, MeetingSpeech.TakeNextBatch, ErrorLevel.Standard); }3记录存储将语音实时转写文本、AI 完整会议纪要、会议重点摘要及相关元数据封装为统一数据对象以 JSON 格式序列化后写入 TXT 文件进行本地持久化保存。统一文件命名与存储目录规范便于后续纪要查阅、内容复用与历史记录检索保障会议全量资料完整留存、可追溯可复用。internal void Save() { try { string data JsonConvert.SerializeObject(this); ESBasic.Helpers.FileHelper.GenerateFile(MeetingCacheFilePath, data); } catch (Exception ee) { Program.Logger.Log(ee, MeetingMinutesCache.Save, ErrorLevel.Standard); } }四、通信消息交互傲瑞会议采用 ESFramework 完成客户端与服务端的实时通信统一制定与会议纪要相关的业务消息协议。定义会议起始、AI 纪要分段下发、纪要生成完成等标准消息指令。依托标准协议标识规整消息交互逻辑依托协议编号区分不同业务数据流便于后续交互流程核查、问题定位与功能迭代保障通信交互规范可追溯、易维护。/// summary /// 开启会议纪要 /// /summary public int OpenMeetingMinutes { get; set; } 665; /// summary /// 关闭会议纪要 /// /summary public int CloseMeetingMinutes { get; set; } 666; /// summary /// 实时转写的纪要内容 | 服务端客户端 /// /summary public int MeetingSpeechSegment { get; set; } 667; /// summary /// 完整的会议纪要 | 服务端客户端 /// /summary public int MeetingSummary { get; set; } 668; /// summary /// 客户端请求历史会议纪要 /// /summary public int RequestMeetingMinutes { get; set; } 669;五、客户端1UI 控制会议主界面预留会议纪要功能独立入口支持手动启停纪要服务。同时提供纪要面板展开 / 收起、内容复制等常用操作入口界面布局简洁易用操作逻辑直观便捷。2纪要内容渲染基于 ESFramework 内置IChatRender消息渲染组件可快速实现类似腾讯会议的纪要消息排版展示效果。客户端监听服务端实时推送的分段纪要数据采用增量拼接、动态渲染机制完成内容实时刷新。对完整纪要、AI 重点摘要、发言人信息、时间节点等重要信息进行清晰的展示。以上就是 傲瑞视频会议 借助AI来实现会议纪要功能的基本原理和方案有什么疑问或建议的欢迎留言讨论交流谢谢