1. 项目概述:当会议遇上“对话式AI”
如果你和我一样,每天要开好几个会,那你肯定对“会前约人、会中记录、会后跟进”这一套繁琐流程深恶痛绝。光是协调一个多方会议的时间,就能在聊天软件里来来回回发几十条消息。更别提会后整理纪要、分配任务,经常是会议一结束,热情就消退,任务就搁置。所以,当我看到“腾讯会议Skill”这个概念时,第一反应是:这玩意儿要是真能做好,绝对是生产力的一次大解放。
简单来说,腾讯会议Skill,你可以把它理解为一个内嵌在腾讯会议里的“智能会议助手”。它不是一个独立的应用,而是一个基于自然语言交互(NLP)的模块化能力。它的核心目标,就是让你能用“说人话”的方式,去管理会议的全生命周期。想象一下,你不用再在复杂的菜单里点来点去,而是直接对会议软件说:“帮我约一下老王、老李和小张,下周二下午三点,讨论Q3产品规划,记得提前把需求文档发给他们。” 然后,这个Skill就能自动解析你的意图,创建会议、发送邀请、附加文档,一气呵成。
这背后,是“Skill”这个概念的兴起。最近在AI圈,特别是围绕大型语言模型(LLM)的应用开发中,“Skill”或“插件”模式非常火热。它本质上是一种让AI模型获得“调用外部工具能力”的标准化接口。比如,一个“天气查询Skill”让AI能调用天气API;一个“邮件发送Skill”让AI能操作你的邮箱。腾讯会议Skill,就是专门为“会议管理”这个垂直场景打造的一套标准化能力集合。它把创建会议、邀请成员、录制会议、生成纪要、创建待办等一系列离散的操作,封装成了一个个可以被自然语言指令触发的“技能”。
这个项目的价值,远不止是“语音控制开会”那么简单。它触及了协同办公最深层的痛点:流程中断和信息孤岛。传统的会议管理,工具(日历、IM、文档、任务列表)是割裂的,操作是手动的,信息是碎片化的。而一个设计良好的Skill模块,能够以对话为纽带,串联起这些工具和流程,实现真正的“一句话办事”,让组织者从机械操作中解脱出来,更专注于会议内容本身。
2. 核心设计思路:从“功能罗列”到“意图驱动”
开发这样一个Skill,最忌讳的就是把腾讯会议现有的所有功能按钮,简单地用语音指令重新实现一遍。那只是换了一种操作方式,并没有创造新价值。真正的智能,在于理解用户的意图,并自动完成一连串关联操作。
2.1 意图识别:听懂用户的“弦外之音”
这是整个Skill的“大脑”。用户的自然语言指令往往是模糊、省略甚至包含歧义的。例如,“跟团队同步一下进度”这句话,背后至少包含几个关键信息需要补全:
- 会议主题:“项目进度同步”。
- 参会人:“团队”具体指谁?需要关联组织架构或常用联系人分组。
- 时间:没说时间,那可能是“尽快”或“找一个大家都有空的时间”。
- 议程:是否需要提前准备材料?
我们的设计思路是建立一个“意图-槽位”填充模型。
- 意图:用户想要完成的核心动作,如
ScheduleMeeting(安排会议)、SummarizeMeeting(总结会议)、CreateActionItem(创建待办)。 - 槽位:完成该意图所必需的参数。例如,对于
ScheduleMeeting,槽位包括topic(主题)、participants(参与者)、start_time(开始时间)、duration(时长)、agenda(议程)等。
系统的工作流程是:首先通过NLP模型识别用户语句的意图,然后像侦探一样,从语句中提取或通过多轮对话询问补全所有必需的槽位信息。这里的一个关键技术点是上下文理解。如果用户先说“明天下午三点开会”,然后说“把需求文档加进去”,系统需要能理解“加进去”指的是附加到刚才提到的那个会议里。
实操心得:槽位设计的颗粒度槽位不是越细越好。初期我们曾把
location(地点)设计为必填槽位,但发现超过90%的线上会议地点都是“腾讯会议”,这导致了大量不必要的确认对话。后来我们将其改为可选槽位,并默认填充为“线上会议”,只有当用户明确说“线下会议室”时才触发询问,体验流畅度大幅提升。经验是:用真实对话数据去反推槽位设计,默认值是你的好朋友。
2.2 技能编排:让多个Skill像乐团一样协作
一个复杂的用户指令,往往需要调用多个基础Skill协同完成。这就是“技能编排”或“工作流引擎”负责的事。例如,用户指令:“刚才的会议很棒,把纪要发给没来的人,并给我们几个分配一下任务。”
这个指令会被拆解成以下工作流:
- 识别意图:这是一个复合意图,包含
SendSummary和AssignTasks。 - 执行序列:
- 首先,触发
SummarizeMeetingSkill,基于刚才会议的录音和转录,生成结构化纪要。 - 然后,触发
GetAbsenteesSkill,对比会议邀请列表和实际参会人名单,找出未参会者。 - 接着,触发
SendEmailSkill,将纪要通过邮件发送给未参会者。 - 同时,解析指令中的“给我们几个分配任务”,触发
ParseActionItemsSkill,从会议转录中提取出诸如“张三负责下周更新PRD”、“李四需要联系客户确认需求”这样的任务项。 - 最后,触发
CreateTodoSkill,将这些任务项同步到腾讯会议待办或关联的腾讯文档、TAPD等任务管理工具,并指派给对应责任人。
- 首先,触发
这个编排引擎需要解决几个问题:顺序执行还是并行执行?(发邮件和创建任务可以并行);如何传递数据?(纪要内容需要从Skill A传递给Skill B和C);某个Skill执行失败怎么办?(需要有错误处理和回滚机制)。我们采用了一种基于有向无环图(DAG)的工作流设计,每个Skill是一个节点,节点间通过共享的上下文数据池传递信息。
2.3 个性化与记忆:让你的助手更懂你
一个冷冰冰的、每次都要重复询问相同信息的助手是令人沮丧的。因此,Skill必须具备“记忆”和“个性化”能力。
- 用户偏好记忆:比如,用户总是喜欢在会议开始前10分钟设置提醒,那么当他说“开会”时,系统可以自动补上“提前10分钟提醒所有参会人”这个动作。
- 上下文记忆:在同一个会话中,用户提到的实体(如项目名、人名)需要被记住。例如,用户说“为‘火星计划’项目创建一个评审会”,之后又说“把刚才说的材料加进去”,系统需要知道“材料”关联的是“火星计划”项目的文档。
- 团队习惯学习:如果某个团队开会总是习惯先过一下“上周待办”,那么为该团队创建会议时,Skill可以建议将“回顾上周待办”作为默认议程项。
实现这一点,需要在架构上设计一个独立的“用户状态与画像”服务,持久化存储这些偏好和上下文,并在每次意图识别时作为输入信息提供给模型。
3. 关键技术模块拆解与实现
3.1 自然语言理解模块
这是入口,我们采用了“预训练大模型 + 微调 + 业务规则”的混合架构。
- 基础模型:选用在中文理解和指令跟随方面表现优秀的开源或商用大模型作为基座。它负责将用户输入转换成结构化的语义表示。
- 意图识别微调:使用大量标注好的对话数据(用户query + 意图标签)对基座模型进行有监督微调。这部分数据质量至关重要,需要覆盖各种口语化、省略式的表达。
# 伪代码示例:意图分类模型调用 def recognize_intent(user_query, conversation_history): # 将历史对话和当前query拼接 prompt = f""" 历史对话: {conversation_history} 用户最新输入:{user_query} 请判断用户的意图是什么?选项:安排会议、查询会议、修改会议、总结会议、创建待办、其他。 只输出意图名称。 """ response = call_llm_api(prompt) return response.strip() - 槽位填充与实体识别:对于识别出的关键意图,我们训练了专门的命名实体识别模型,用于抽取时间、人名、项目名等槽位值。同时,会与腾讯会议的后台数据(通讯录、日历事件)进行联动校验和补全。例如,识别出“老王”,会去通讯录中查找并确认唯一ID。
避坑指南:NLU的冷启动问题项目初期最头疼的就是没有足够的标注数据来训练意图识别模型。我们的解决方案是“规则引擎兜底+主动学习”。先人工编写一批核心意图的正则表达式和关键词规则,确保基础功能可用。然后,将所有未被规则覆盖的用户query(归类为“其他”意图)记录下来,由标注团队快速审核和标注,每周迭代注入到训练集中。这样,模型的智能边界就像滚雪球一样不断扩大。
3.2 会议上下文感知模块
这是Skill的“眼睛”,让它知道“刚才”、“下周”、“我们部门的会”具体指什么。
- 实时会议上下文:当用户在会议中说“把刚才说的那条记下来”,Skill需要接入会议的实时语音转写(ASR)流,能够定位“刚才说的那条”大致对应的时间段和文本内容。这涉及到语音流的分段、索引和语义检索技术。
- 日历与历史上下文:Skill需要有权读取用户的日历信息。当用户说“把我明天的第一个会推迟半小时”,它要能查询到用户明天第一个会议的具体信息。这需要与腾讯会议日历API深度集成,并处理好权限和隐私问题。
- 文档与项目上下文:当用户说“把Q3规划文档附上”,Skill需要能访问用户关联的云文档(如腾讯文档、微盘),并能通过文档标题或内容语义搜索找到“Q3规划文档”。这里涉及文档权限的鉴权和文档内容索引技术。
我们构建了一个统一的“上下文检索服务”,它聚合了日历、会议录制、文档、聊天记录等多种数据源,并建立了统一的索引。当Skill需要理解一个指代性短语时,就向这个服务发起查询。
3.3 技能执行与集成模块
这是Skill的“手和脚”,负责将解析好的意图转化为实实在在的操作。
- 技能API封装:将腾讯会议的核心功能(创建/修改/删除会议、邀请成员、开始录制、云录制管理、设置联席主持人等)封装成一个个纯净的、功能单一的API。这些API就是最基本的“原子Skill”。
- 外部系统连接器:为了实现全流程管理,必须集成外部系统。我们为腾讯文档、企业微信、TAPD、腾讯待办等开发了标准的连接器。这些连接器负责身份认证、API调用和数据格式转换。例如,
CreateTodoSkill内部就是调用了腾讯待办的创建任务API。 - 执行引擎:接收来自编排引擎的工作流DAG,按顺序调用各个原子Skill或连接器。它需要管理任务队列、处理超时和重试、记录执行日志,并将最终结果汇总返回。
一个创建会议并发送预读材料的复合技能执行流程示例:
- 用户输入:“下周一10点,和产品团队开需求评审会,记得把PRD发给大家看看。”
- NLU模块输出:意图=
ScheduleMeetingWithMaterial;槽位=time=下周一10:00,participants=产品团队,topic=需求评审,material=PRD。 - 编排引擎生成工作流:
- Step 1:
ResolveTeamSkill- 将“产品团队”解析为具体的成员列表。 - Step 2:
SearchDocumentSkill- 在用户的腾讯文档中搜索标题或内容包含“PRD”的最新文档。 - Step 3:
ScheduleMeetingSkill- 使用时间、成员、主题创建会议。 - Step 4:
AttachMaterialSkill- 将找到的文档链接附加到会议描述中。 - Step 5:
SendCalendarInviteSkill- 向所有成员发送日历邀请(内含会议链接和文档链接)。
- Step 1:
- 执行引擎按序执行,任何一步失败都会触发预定义的错误处理(如通知用户“未找到PRD文档,是否继续创建会议?”)。
4. 典型应用场景与实操对话示例
光讲原理可能有点干,我们来看几个具体的、你明天就能想象自己会用到的场景。
4.1 场景一:复杂会议的轻松安排
- 用户(语音或文字输入):“帮我约上海的王经理和北京研发部的张工、李工,下周三或周四下午,用1小时时间讨论一下‘天枢’项目下一阶段的接口联调方案。会议标题就叫‘天枢项目接口联调方案讨论’。提前把技术方案文档发给他们,并设置会后10分钟提醒我写纪要。”
- Skill处理过程与回复:
- 解析:识别意图为
ScheduleMeeting。槽位提取:参会人(跨地域多成员)、时间范围(下周三或周四下午)、时长(1小时)、主题、预读材料、会后任务。 - 查询与确认:Skill会查询“王经理”、“张工”、“李工”在企业通讯录中的具体信息,并检查他们下周三、周四下午的忙闲状态。
- 智能建议:Skill回复:“找到三位参会人。他们下周三下午2-4点均有空,周四下午3-5点均有空。建议定在下周三下午2:00-3:00。已在你的腾讯文档中找到最新版的‘天枢项目技术方案V2.3’,将作为预读材料附加。确认创建吗?”
- 用户:“确认,就用这个时间。”
- Skill执行:创建会议,发送带文档链接的邀请,并自动在用户的腾讯待办中创建了一条“下周三下午3:10 - 撰写‘天枢项目接口联调方案讨论’会议纪要”的任务。
- 解析:识别意图为
4.2 场景二:会议中的即时协作
- 会议中,用户说:“刚才我们决定的,由小李负责跟进客户反馈,这个记一下。另外,把白板上画的这个架构图保存下来,放到会议纪要里。”
- Skill处理过程:
- 上下文捕捉:Skill实时转写会议语音。当听到“刚才我们决定的”,它结合语音流的时间戳,回溯前30秒的对话内容,提取出关键决策:“小李负责跟进客户反馈”。
- 任务创建:自动触发
CreateActionItemSkill,生成一条待办:“【负责人】小李 - 【任务】跟进客户反馈 - 【来源会议】当前会议”。 - 内容提取:对于“白板上的架构图”,Skill需要调用腾讯会议的“智能白板”API,获取当前白板页面的截图或矢量图形。
- 纪要更新:将“决策事项”和“白板架构图”作为增量内容,实时更新到本次会议的临时纪要中。所有参会者可以在侧边栏实时看到这些更新。
4.3 场景三:会后自动化闭环
- 会议刚结束,用户说:“把今天的会议纪要和待办事项,发到我们的项目群里,并@相关责任人。”
- Skill处理过程:
- 素材整合:触发
SummarizeMeetingSkill,结合完整的会议录音、转写文本、聊天记录、共享屏幕截图、白板内容,生成一份结构化的最终纪要(包含会议主题、参会人、时间、议程、讨论要点、决策项、待办事项)。 - 待办同步:将会议中标记的所有待办事项,同步到团队使用的TAPD或腾讯文档项目计划表中,并自动指派给责任人。
- 消息推送:触发
SendGroupMessageSkill,将纪要和待办列表摘要,一键发送到指定的企业微信群,并自动@待办的责任人。消息格式清晰,可直接点击跳转到详细纪要和任务详情页。
- 素材整合:触发
5. 开发与集成中的挑战与解决方案
在实际构建这样一个Skill模块时,我们遇到了不少坑,这里分享一些核心的挑战和我们的应对之策。
5.1 挑战一:语义理解的模糊性与容错性
用户的语言是灵活多变的。“快点搞个会”和“请紧急召集一次会议”表达同一个意图。更麻烦的是错误输入,比如“帮我约一下昨天下午三点的会”(时间矛盾)。
我们的解决方案:
- 多模型融合:不单纯依赖一个LLM。我们结合了基于规则的快速匹配(处理高频、固定句式)、传统机器学习分类模型(处理常见变体)和大语言模型(处理长尾、复杂句式)。形成一个决策漏斗,兼顾速度和精度。
- 置信度与澄清机制:为每次意图识别的结果输出一个置信度分数。当分数低于阈值(如0.7)时,Skill不会盲目执行,而是会发起澄清式询问。例如,用户说“取消会议”,Skill会问:“您是想取消今天下午3点的‘项目周会’,还是明天上午10点的‘客户沟通会’?” 这比直接操作错误安全得多。
- 强大的时间/实体归一化:我们投入了大量精力构建一个鲁棒的时间表达式解析器,能将“下礼拜一”、“三天后”、“国庆节后第一个工作日”准确转换为具体的日期时间。对于人名、项目名等实体,则与企业通讯录、项目管理系统做实时联动查询和消歧。
5.2 挑战二:系统集成的复杂度与安全性
Skill要调用腾讯会议内部API和多个外部系统(文档、邮件、任务),如何保证集成的稳定、高效和安全?
我们的解决方案:
- 面向Skill的API网关:我们不是让Skill直接调用各个业务系统的原始API,而是建立了一个统一的“Skill API网关”。这个网关负责:
- 协议转换:将内部不同的API协议(HTTP/gRPC/等)统一成Skill模块易于调用的RESTful格式。
- 认证鉴权:集中处理OAuth 2.0等复杂的授权流程。Skill只需持有一次用户授权后的令牌,网关会负责令牌的刷新和向下游系统的传递。
- 限流熔断:防止某个Skill的异常调用打垮下游业务系统。
- 日志与监控:统一收集所有调用链路的日志,便于问题排查。
- 权限最小化原则:每个Skill在申请权限时,都必须明确声明其需要的数据和操作范围(例如,“读取会议日历”、“创建腾讯文档任务”)。并向用户透明展示。Skill无法越权访问它不需要的数据。
- 异步化与队列:对于耗时的操作(如生成长达一小时的会议摘要),Skill不会同步等待,而是提交任务到队列后立即返回“任务已受理,摘要生成后将通知您”。这保证了对话交互的即时性。
5.3 挑战三:用户体验的流畅度
如果用户每说一句话,都要等待好几秒才能得到响应,那么这个功能注定失败。延迟是体验杀手。
我们的解决方案:
- 流式响应与渐进式理解:对于语音交互,我们采用流式ASR,用户一边说,系统一边转写和进行初步的意图识别。可能用户还没说完,系统已经猜到了他要“安排会议”,并开始准备时间选择器的UI。这种“预加载”极大地减少了感知延迟。
- 本地轻量模型与边缘计算:将简单的意图识别(如“取消会议”、“静音”)模型部署到终端设备或边缘节点,实现毫秒级响应。复杂的、需要上下文的理解才上送云端大模型处理。
- UI与非语音交互的补充:并非所有操作都适合语音。例如,从100个联系人里选择10个参会人,用语音念名字效率极低。因此,我们的Skill模块是“多模态”的。当识别到“邀请一些人”这个意图时,会在屏幕上弹出一个联系人选择器,让用户快速勾选。语音、文字、图形界面(GUI)三者有机结合,才是最佳体验。
6. 未来展望:从“管理会议”到“赋能协作”
目前,这个Skill模块还主要集中在会议流程本身的自动化管理上。但这只是一个起点。在我看来,它的未来进化方向,是成为一个真正的“团队协作智能体”。
1. 从“执行者”到“建议者”:未来的Skill不仅能听令行事,还能主动提出建议。例如,分析历史会议数据后,它可能会在每周一早上提醒你:“根据过往记录,每周三下午是团队效率最高的‘深度讨论时间’,建议将重要的方案评审会安排在那个时段。” 或者,在会议开始前自动提示:“本次会议参会人中有两位是新加入项目的同事,建议将项目背景文档提前发给他们。”
2. 深度融入知识管理:会议是组织知识产生的重要场所。Skill可以自动将会议中的决策、待办、分享的文档片段,结构化地沉淀到团队的知识库或Wiki中,并打好标签。下次有新成员加入项目,他可以通过询问Skill快速了解项目历史和关键决策。
3. 跨工具工作流自动化:现在的Skill主要串联腾讯系产品。未来,通过更开放的插件生态或标准化API(如OpenAI的Function Calling),它可以连接更多工具。比如,用户说“根据刚才讨论的方案,更新一下Jira上的产品需求状态,并在Slack的#产品频道发个公告”,Skill可以自动编排跨越多个国内外主流SaaS工具的工作流。
4. 情感与参与度分析:通过分析会议中的语音语调、发言时长、互动频率,Skill可以为主持人提供隐性的反馈:“本次会议后半段,有两位成员发言显著减少,可能参与度下降,建议适当提问互动。” 这能帮助提升远程会议的质量。
实现这些愿景,需要我们在自然语言理解、多模态感知、工作流自动化、数据隐私与伦理等多个技术领域持续深耕。但核心思想不变:技术应该隐藏于无形,服务于人。最好的智能会议管理,就是让你感觉不到“管理”的存在,所有繁琐的流程都在你专注讨论时,被安静、准确地完成了。
回过头看,开发这样一个Skill模块,最大的收获不是我们实现了多少酷炫的功能,而是我们更深刻地理解了一个道理:真正的智能化,不在于让机器模仿人的所有操作,而在于让机器理解人的核心意图,并补全那些人类不擅长或不愿做的“连接性”工作。从这个角度看,我们写的每一行代码,设计的每一次对话,都是在为更流畅、更聚焦的人与人之间的协作,铺平道路。这条路还很长,但每一次看到用户因为少点了几次鼠标、少发了几条提醒消息而露出轻松的表情时,我就觉得,这事儿做得值。