想象你是一家创业团队的主理人,每周的例会都像三路人马同时开火的口水战:产品讲需求、开发提排期、运营报数据,散会后谁还记得清楚谁说了什么?这时你请来一位特殊助理——水獭“小獭”。它耳力惊人、过耳不忘,最难得的是整套“录记本领”:自己看日历准时出现在会议室,一边听一边把每句话变成文字,还能分辨出是哪位同事在发言,顺手在笔记本页边圈出待办事项,散会十分钟后,一份工整的纪要已经躺进你的收件箱。Otter.ai,就是数字世界里的“小獭”。这篇文章要拆解的,正是这样一套实时会议记录 Agent 的完整技术链路:自动参会编排、语音识别、说话人分离、实时摘要、纪要格式化、知识库管理,以及把这一切串起来的整体架构。不用懂算法细节,跟着小獭忙活一天,你就能建立起对会议助手类产品的全局认知。

岗位关联

掌握这条语音转写与会议纪要的完整链路,你就能把“自动转写+结构化摘要+知识沉淀”的方法复用到会议助手、播客转写、客服质检等真实产品中,是 AI 应用开发中高频复现的经典样板。

目录
  1. 可视化演示
  2. 自动参会编排
  3. 语音识别引擎
  4. 说话人分离
  5. 实时摘要生成
  6. 纪要格式化
  7. 知识库管理
  8. 架构全景
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

交互展示Otter.ai实时会议记录Agent的工作流程:语音识别转写、说话人分离和智能摘要生成。

本节配有交互动效(进入视口后自动加载,约 3KB)。

语音转写:实时语音识别 音频流实时转换为文字文本 支持多语言识别和标点符号自动添加 Audio → Text (Real-time) Zero-Shot语音识别实现高精度转写

自动参会编排

小獭一天的工作,从“看日历”开始。老板周日晚上在日历里新建了一条“周一 10:00 产品评审”,并把小獭的助理账号加进邀请名单。10 点一到,小獭的贴身门童系统自动推开线上会议室的门,悄悄坐上虚拟座席,摆好“录音设备”,接通音量——全程没有任何人喊它,也不需要主持人额外操作。这份从容,就来自 Agent 的编排调度层。

在 Otter.ai 的世界里,这位“门童”对应的是自动参会编排模块。它一端连着日历服务(Google Calendar、Outlook、Office 365),订阅会议事件;另一端连着各大视频会议平台(Zoom、Teams、Meet),以虚拟参会者身份自动入会。用户只需在日历里安排好会议,Otter Assistant 就会像一个训练有素的秘书,准时出现在会议室里。

拆开看有三个环节。日历接入:通过日历 API 的 Webhook 或轮询监听新事件,一旦发现 Otter 被邀请或该会议开启了自动记录,就触发入场流程。自动入会:调度服务在会议开始时刻调用会议平台 SDK,以机器人账号登录并进入指定房间,完成音频订阅与授权。音视频采集:入会后通过 WebRTC 或平台媒体流接口接收混合音频流,做轻量编码后推送到云端媒体网关。不同平台的协议差异由适配层统一屏蔽,就像门童熟悉每一栋大楼的门禁系统。

对小獭来说,“准时出现”只是开场白——它真正的手艺,从耳朵竖起来、开始听写的那一刻才算正式登场。

语音识别引擎

会议室角落的小獭,耳朵开始微微抖动。它面前没有纸笔,只有一套“边说边写”的听写系统:声音流进耳道,字幕流出笔尖。老板语速再快,屏幕上的文字也能紧跟其后——这项“把声音变成文字”的本事,就是实时语音识别(ASR)。

语音识别的任务,是把连续的声波变成一句句可以阅读的文字。早期系统需要音素、词典、语法规则层层拼接,而 Otter.ai 走的是端到端路线:音频特征直接送入深度神经网络,网络另一头直接吐出文字序列,中间的“音素→音节→词组”全部由模型隐式学成。

识别引擎内部有三个环节。音频预处理:把 16kHz 采样的原始波形切成 25 毫秒左右的短帧,做降噪、去混响,再提取声学特征(如滤波器组能量),得到一列特征向量。端到端模型:基于 Transformer 的编码器—解码器网络,把特征序列逐帧映射为文字候选概率。流式解码:模型只消费最新一小块音频,持续输出“部分识别结果”,从而做到边说边出字。至于如何在众多候选里选出最合理的那句,靠的是下面这个经典原理。

就像小獭从不等到会议结束才动笔,流式解码让每一次换气都能立刻变成屏幕上的文字;而贝叶斯公式则像它的语感直觉,永远在“勉强听清”和“读来通顺”之间找到那个最优解。

W^=arg⁡max⁡WP(X∣W)×P(W)\hat{W} = \arg\max_{W} P(X|W) \times P(W)
这句公式说的是:小獭听到一段声音 X 时,会同时考虑“听起来像不像”和“读起来顺不顺”,两项得分相乘最高的那句话,才会被写进字幕。
  1. 声学特征 X麦克风采到的声音先被切成约 25 毫秒的小帧,每帧提取频谱特征,X 就是这些帧特征的集合。
    X={x1,x2,…,xT}X = \{x_1, x_2, \dots, x_T\}
  2. 候选词句 W模型最终要产出的文字,比如“周五前提交排期”,是一个词接一个词组成的序列。
    W=w1 w2 … wnW = w_1\,w_2\,\dots\,w_n
  3. 声学模型 P(X|W)给定这句候选文字 W,“听起来像”实际声音 X 的概率,由端到端声学网络给出,回答“像不像”。
    P(X∣W)=∏t=1Tp(xt∣W)P(X|W) = \prod_{t=1}^{T} p(x_t \mid W)
  4. 语言模型 P(W)这句话在正常中文里通顺的概率——“周五前提交排期”比“排期周五前提交”更像人话,得分更高。
    P(W)=∏i=1np(wi∣w1,…,wi−1)P(W) = \prod_{i=1}^{n} p(w_i \mid w_1,\dots,w_{i-1})
  5. 取最大作为结果对所有候选句重复“像不像 × 顺不顺”的打分,得分最高者胜出,成为最终识别文本。
    W^=arg⁡max⁡WP(X∣W) P(W)\hat{W} = \arg\max_{W} P(X|W)\,P(W)

说话人分离

三位同事正轮流发言,小獭却始终闭着眼睛。但它心里跟明镜似的:第一段是老板定的调子,第二段是设计师在反驳,第三段是运营在补充数据。它凭什么分得清?凭的是“听音色”——就像我们闭着眼也能认出电话那头的熟人,每个人的嗓音都有一枚独一无二的“声纹”。

这套本领在语音技术里叫说话人分离(Speaker Diarization),解决的是“谁在什么时候说了话”。它与语音识别是两条并行的流水线:ASR 管“说了什么”,分离管“谁说的”,各自独立工作,最后在时间轴上把两路结果合并成“带名字的逐字稿”。

分离链路包含三个环节。语音活动检测(VAD):先扫描音频,把静音、掌声、咳嗽等无人声片段滤掉,只保留真正有人说话的片段。声纹特征提取:把每个人声片段送入说话人嵌入网络,压成一个几百维的向量,比如 256 维的“音色指纹”。聚类分析:把所有片段的声纹向量按相似度自动分组,每一组对应一个说话人,再打上“说话人 1/2/3”标签;Otter 还会把标签与用户通讯录或历史声纹库比对,直接在纪要里显示真实姓名。

有了“谁在说”这条轨道,小獭笔记里的每句话都自动带上了主人的名字,散会后再也不会有“这句话到底谁说的”这种尴尬争论。

sim(u,v)=u⋅v∥u∥×∥v∥=cos⁡θ\text{sim}(u, v) = \frac{u \cdot v}{\lVert u \rVert \times \lVert v \rVert} = \cos\theta
余弦相似度是声纹聚类的“尺子”:两段声音的指纹方向越一致,越可能是同一位说话人。
  1. 声纹向量 u 与 v把“老板的声音”和“同事的声音”各压成一个几百维的向量,相当于声音的数字指纹。
    u,v∈Rdu, v \in \mathbb{R}^{d}
  2. 点积 u·v把两个向量对应维度相乘再相加,方向越一致、值越大,是相似度的原始度量。
    u⋅v=∑i=1dui×viu \cdot v = \sum_{i=1}^{d} u_i \times v_i
  3. 模长范数对向量各维度平方和开根号,用来消除“音量大小”的影响——大声或小声都不该改变音色属性。
    ∥u∥=∑i=1dui2\lVert u \rVert = \sqrt{\sum_{i=1}^{d} u_i^{2}}
  4. 归一化相似度点积除以两个模长后,结果被压缩到 -1 到 1 之间,越接近 1 表示两段声音越像同一个人。
    sim(u,v)=u⋅v∥u∥×∥v∥=cos⁡θ\text{sim}(u,v) = \frac{u \cdot v}{\lVert u \rVert \times \lVert v \rVert} = \cos\theta

实时摘要生成

光是“听到并记下”还不够。小獭的笔记本页边还会不断浮现一行行小字:“结论:下周二上线”“待办:运营今晚给数据”。它一边听,一边在脑内画重点——这份在会议进行中就同步产出的提炼,就是实时摘要生成。

摘要生成的难点在于“实时”:会议还在进行,摘要就要持续更新,而不是等录音结束后再一次性生成。Otter 的做法是把发言流按话题切成多个语义段落,对每个段落实时产出一句凝练摘要,再汇总到侧边的“实时要点”面板,让参会者瞄一眼就能抓住当前话题的结论。

这里面有三层技术。语义分段:利用句子向量之间的相似度检测话题切换,比如大家从“排期”聊到“风险”时,自动切断上一段、开启新一段。摘要模型:采用序列到序列的 Transformer,输入一个段落的多句话,输出一句压缩表述,支持抽取式(摘原句)与生成式(重新造句)两种模式。关键抽取:用规则加模型的混合方式识别“我需要”“周五前”“你来负责”这类表达,把它们作为行动项候选单独抽出。而让摘要模型“知道该看哪里”,靠的是注意力机制——

小獭的页边笔记,靠的就是这种“选择性注意”——它从不当复读机,而是盯住最重要的几句话,再用自己的话记下来。

Attention(Q,K,V)=softmax(QK⊤dk)V\text{Attention}(Q,K,V) = \text{softmax}\left(\frac{Q K^{\top}}{\sqrt{d_k}}\right) V
注意力机制就是摘要模型的目光管理——生成每一个词时,它都盯着原文里最相关的几个位置看。
  1. 查询向量 Q当前正在生成的内容作为“问题”,去原文里寻找相关的句子。
    Q∈RdkQ \in \mathbb{R}^{d_k}
  2. 键与值 K、V原文里的每一句话都有一对“标签”和“正文”,K 用来被匹配,V 用来被提取。
    K,V∈Rn×dkK, V \in \mathbb{R}^{n \times d_k}
  3. 相关性打分Q 与每个 K 做点积,得到当前内容与每句话的相关分数。
    scorei=Q⋅Ki\text{score}_i = Q \cdot K_i
  4. 缩放与归一化除以 √d_k 防止分数过大,再经 softmax 变成一组和为 1 的权重。
    αi=softmax(QKi⊤dk)\alpha_i = \text{softmax}\left(\frac{Q K_i^{\top}}{\sqrt{d_k}}\right)
  5. 加权汇总用权重对 V 加权求和,得到融合了关键上下文的表示,再据此生成摘要词。
    Attention(Q,K,V)=∑iαiVi\text{Attention}(Q,K,V) = \sum_{i} \alpha_i V_i

纪要格式化

散会铃响,小獭没有合上本子,而是开始“誊写正稿”:把潦草的速记变成工整的纪要,每条要点旁边标好时间码,老板点一下就能跳回当时的原声回放。这份“成品”,就是把零散转写稿打磨成可交付物的纪要格式化。

转写结果是一条长文本流,直接扔给参会者没人愿意读。纪要格式化模块的任务,是把“转写 + 说话人 + 摘要”进一步结构化成一份“可回看、可跳转、可执行”的会议记录。

三个关键处理。时间戳对齐:为每个转写片段记录在音频流中的起止时间,文字与声音严格对齐,点击任意一句即可回听原声。重点高亮:用 TF-IDF 这类关键词算法找出“本场会议特有”的高区分度词,再结合语义重要性给关键句子加底色。行动项提取:用意图识别模型从句子中抽出“谁 + 何时 + 做什么”的结构,整理成 Action Items 列表,成为纪要里最抢眼的部分。

就像小獭把贴满彩色标签的笔记本双手递到你面前,一份格式化纪要让人一眼就能找到“谁、何时、该做什么”,效率从此不再依赖记忆。

tfidf(t,d)=tf(t,d)×log⁡Ndf(t)\text{tfidf}(t, d) = \text{tf}(t, d) \times \log\frac{N}{\text{df}(t)}
TF-IDF 是一把“重点筛子”:在本场会议里出现得多、别场会议很少见的词,才会被筛出来高亮。
  1. 词频 tf(t,d)词 t 在本场会议纪要里出现的次数占比——“排期”反复出现五次,说明是高频词。
    tf(t,d)=count(t,d)count(all words in d)\text{tf}(t,d) = \frac{\mathrm{count}(t,d)}{\mathrm{count}(\mathrm{all\ words\ in}\ d)}
  2. 逆文档频率 idf(t)包含词 t 的会议场数越少,越说明它是本场特色——“例会”每场都有,区分度低;“发布”只在这场出现,区分度高。
    idf(t)=log⁡Ndf(t)\text{idf}(t) = \log\frac{N}{\mathrm{df}(t)}
  3. 相乘得到重点得分两个分数相乘,既频繁又独特的词成为关键词,被标为纪要重点。
    tfidf(t,d)=tf(t,d)×idf(t)\text{tfidf}(t,d) = \text{tf}(t,d) \times \text{idf}(t)

知识库管理

一个月后,老板想翻“上个月聊过用户增长方案的那次会议”。小獭走到档案柜前,拉开标着“项目 / 日期”的抽屉,几秒钟就抽出那份纪要——它不仅记性好,还善于归档。对小獭来说,会议记录不是一次性消耗品,而是不断增值的团队记忆。

在 Otter.ai 中,每场会议结束后,纪要、音频、摘要会被打包沉淀,自动归档到对应的项目空间,按日期、参与人、标签组织成可检索的知识库。新成员加入团队时,翻一翻历史纪要就能快速了解项目脉络。

三个核心能力。自动归档:会议结束后自动写入云端存储,通过元数据(项目名、参与人、时间、标签)建立索引,形成“会议档案夹”。全文检索:对转写文本建立倒排索引,支持跨会议搜索,“增长”一词立刻列出所有相关片段;近年还引入向量检索,说“用户增长”也能命中语义相近的“拉新留存”内容。分享协作:一键生成分享链接,导出 PDF / Word / CSV,并同步到 Notion、Slack、Salesforce 等工具,让纪要进入团队既有工作流。

小獭的档案柜不只是仓库,更是第二大脑——所有会议积累成团队的集体记忆,让每一次决策都有据可查、每一个新人都有迹可循。

架构全景

退后一步,看看小獭的全身像:耳朵负责采集声音,大脑负责识别和辨人,手负责誊写纪要,档案柜负责归整归档,而神经系统把这些器官串成一条高速流水线——哪一环慢了,都会让“实时”变成“延时”。

Otter.ai 的系统架构可以概括为三层:终端采集层、云端处理层、应用展示层。终端负责“进门”和“收音”,云端负责“听懂”和“记好”,应用负责“摆给你看”。三层之间用实时数据流管道连通。

终端采集层是浏览器 / 移动端 SDK,负责日历接入、自动入会、音频采集编码。云端处理层是核心大脑,包含媒体网关、ASR 引擎、说话人分离服务、摘要与纪要服务、知识库索引。应用展示层是 Web / App 客户端,渲染实时字幕、实时要点和历史纪要检索界面。数据流管道采用并行设计:音频分片到达后,ASR 与说话人分离并行处理,结果在时间轴上合并,再触发摘要流水线;纪要格式化与归档在会后异步完成。为了做到秒级出字,Otter 用就近媒体节点缩短传输路径,用流式增量解码只算新片段,用模型量化压缩推理时间,把端到端延迟逐项拆解、逐项压低:

整条链路就像小獭的条件反射:声音进耳朵,文字上屏幕,重点进纪要,纪要进档案。每一个环节都为“快”而设计,组合起来,就是一位从不缺席、从不走神、永远准时的数字速记员。

Te2e=Tcapture+Ttransfer+Tdecode+Tsummary+TrenderT_{\text{e2e}} = T_{\text{capture}} + T_{\text{transfer}} + T_{\text{decode}} + T_{\text{summary}} + T_{\text{render}}
端到端延迟是整条链路“快不快”的体检报告,每一环都可以压缩,实时字幕才追得上说话的速度。
  1. 采集延迟麦克风把声音编码成数据包的时间,通常只有几十毫秒。
    TcaptureT_{\text{capture}}
  2. 传输延迟数据包经网络上行到就近云端节点的时间,选近的节点能明显缩短。
    TtransferT_{\text{transfer}}
  3. 解码延迟ASR 对增量音频帧输出文字的时间,流式解码每次都只算最新一小片。
    TdecodeT_{\text{decode}}
  4. 摘要与渲染延迟摘要模型在句子边界触发推理,前端同时增量渲染字幕。
    Tsummary+TrenderT_{\text{summary}} + T_{\text{render}}
  5. 总延迟各环节相加得到端到端延迟,优化目标就是让每一项都尽量小。
    Te2e=Tcapture+Ttransfer+Tdecode+Tsummary+TrenderT_{\text{e2e}} = T_{\text{capture}} + T_{\text{transfer}} + T_{\text{decode}} + T_{\text{summary}} + T_{\text{render}}

AI 应用场景

产品研发团队的每日站会

阶段:Agent 编排与自动转写

解决的问题:站会上信息密集但没人专职记录,会后行动项常常丢失。传统方式是会后找一个人补笔记,既不及时也不完整。AI 会议记录 Agent 自动入会转写,并抽取行动项同步到项目管理工具,让站会结论自动落地。

具体案例:某互联网团队每天用 Zoom 开 15 分钟站会,接入 Otter 后自动生成带说话人标签和时间戳的纪要,行动项自动同步到 Jira 看板。实施一周后,行动项完成率提升约 40%,每日站会时间缩短到 10 分钟。

播客与访谈的多嘉宾内容生产

阶段:语音转写 + 说话人分离

解决的问题:多人对话录音整理逐字稿费时费力,且分不清谁说了什么。传统剪辑师要反复听音频手动标注人名,Otter 一次录音自动输出按说话人分段的文稿,还可生成要点摘要,直接作为播客 shownotes 和文章素材。

具体案例:一档三人访谈播客,每期 60 分钟,过去编辑需要花 4 小时整理逐字稿和重点。使用 Otter 转写并用实时摘要提炼核心观点后,编辑只需 30 分钟完成发布文案,并且在后期剪辑时靠时间戳快速定位关键段落。

呼叫中心的客服质检

阶段:实时转写 + 摘要 + 关键抽取

解决的问题:通话质检靠人工抽听,覆盖率低且反馈滞后。传统质检专员每天只能抽听约 5% 的通话。参考会议记录 Agent 的架构,对通话实时转写并打上“客户情绪”“高频问题”标签,自动生成质检报告,实现全量覆盖。

具体案例:某电商客服团队每天 500 通电话,接入转写 Agent 后全量转为文本,高频投诉词自动聚类,产品改进需求从周报升级为日报;质检员从逐条听录音改为审阅自动标记的风险片段,人均效率提升 3 倍。

Python 演示

python85 行
# 简化版会议记录Agent演示: 模拟Otter.ai核心链路# 分段 -> 过滤静音 -> 声纹聚类(说话人分离) -> 转写拼接 -> 抽取式摘要import math  def cos_sim(u, v):    # 计算两个声纹向量的余弦相似度    dot = sum(a * b for a, b in zip(u, v))    nu = math.sqrt(sum(a * a for a in u))    nv = math.sqrt(sum(b * b for b in v))    return dot / (nu * nv)  def vad_split(segments):    # 语音活动检测: 过滤掉能量过低的静音片段    return [s for s in segments if s["energy"] > 0.1]  def diarize(segments, threshold=0.85):    # 说话人分离: 按声纹相似度把片段聚类成若干说话人    speakers = []    for seg in segments:        matched = None        for sp in speakers:            if cos_sim(seg["embedding"], sp["embedding"]) >= threshold:                matched = sp                break        if matched is None:            sp = {"embedding": seg["embedding"], "segs": []}            speakers.append(sp)            matched = sp        matched["segs"].append(seg)    return speakers  def transcribe(segments):    # 模拟实时转写: 拼接文字并附带起始时间戳    lines = []    for seg in segments:        lines.append("[%.1fs] %s" % (seg["start"], seg["text"]))    return "\n".join(lines)  def summarize(segments):    # 抽取式摘要: 按关键词密度选出最重要的三句话    keywords = {"排期", "用户", "上线", "风险", "方案"}    scored = []    for seg in segments:        cnt = sum(1 for w in keywords if w in seg["text"])        scored.append((cnt, seg))    scored.sort(key=lambda x: x[0], reverse=True)    return [seg["text"] for _, seg in scored[:3]]  def main():    segments = [        {"start": 0.0, "energy": 0.45, "text": "我们看一下排期方案",         "embedding": [0.9, 0.1, 0.3]},        {"start": 0.2, "energy": 0.40, "text": "你是说用户反馈风险吗",         "embedding": [0.2, 0.9, 0.1]},        {"start": 0.4, "energy": 0.50, "text": "对,我觉得要优先上线",         "embedding": [0.8, 0.2, 0.2]},        {"start": 0.6, "energy": 0.05, "text": "(静音段)",         "embedding": [0.0, 0.0, 0.0]},        {"start": 0.8, "energy": 0.35, "text": "用户对方案很满意",         "embedding": [0.1, 0.8, 0.2]},    ]    voiced = vad_split(segments)    groups = diarize(voiced)    transcript = transcribe(voiced)    summary = summarize(voiced)     print("== 转写结果 ==")    print(transcript)    print("\n== 说话人分离 ==")    for i, g in enumerate(groups):        texts = " | ".join(s["text"] for s in g["segs"])        print("说话人%d: %s" % (i + 1, texts))    print("\n== 会议摘要 ==")    for line in summary:        print("-", line)  if __name__ == "__main__":    main()
目的:用纯 Python 复刻会议记录 Agent 的主干链路——先过滤静音,再按声纹相似度分离说话人,最后拼接转写并抽取摘要,直观展现 Otter.ai 核心流程。
  1. dot = sum(a * b for a, b in zip(u, v))计算两个声纹向量的点积,方向越一致值越大
  2. return dot / (nu * nv)归一化成余弦相似度,消除音量大小的影响
  3. return [s for s in segments if s["energy"] > 0.1]VAD 过滤静音,只保留有人声的片段
  4. for sp in speakers:遍历已分好的说话人组,寻找匹配对象
  5. cos_sim(seg["embedding"], sp["embedding"]) >= threshold相似度够高就归入该说话人
  6. sp = {"embedding": seg["embedding"], "segs": []}没有匹配则新建一个说话人组
  7. cnt = sum(1 for w in keywords if w in seg["text"])统计一句话命中了几个关键词
  8. scored.sort(key=lambda x: x[0], reverse=True)按关键词命中数从高到低排序
  9. voiced = vad_split(segments)先做语音活动检测,再去聚类
  10. groups = diarize(voiced)执行说话人分离,得到分组结果

常见误区

误区我一直以为转写出来的文字天然就带着人名,ASR 既然能识别语音,应该会顺便知道是谁在说话吧?毕竟界面里直接显示“老板:……”。

正解ASR 只解决“说了什么”,完全不感知“谁说的”。说话人分离是一条独立的并行流水线,靠声纹嵌入和聚类区分说话人,最后在时间轴上与转写结果合并。类比来说,小獭的耳朵负责听写,辨声靠的是另一套本领,两边同时开工,最后再把“这句话属于谁”缝到一起。

为何常见:用户看到的产物(带名字的逐字稿)是合并后的结果,界面层隐藏了内部两条流水线,让人误以为一步到位。

误区反正都是同一个识别模型,录完音再转写和会议中实时出字,结果应该差不多吧?很多人觉得“实时”只是 UI 上的花哨效果。

正解实时转写是流式处理:音频分片到达即解码,只允许秒级甚至亚秒级延迟,模型每次只能看增量片段;离线转写可以看完整句话甚至整篇音频,效果通常更稳。两者的工程架构完全不同。小獭是边听边写,不是会后抱着录音机补笔记。

为何常见:大家熟悉“录音→转写”的输入法或语音备忘录流程,容易把批处理思维套到流式场景上。

误区聚类都要定簇数,所以用 Otter 之前应该先告诉它会议里有几位参会者吧?不然它怎么知道要分成几组?

正解现代分离系统会自动估计说话人数,比如谱聚类在聚类过程中自动选择最优分组数,或设定相似度阈值、动态开启新组。Otter 还能把说话人标签关联到通讯录,自动显示真实姓名。小獭不用点名,凭音色就能自动分堆。

为何常见:课本上 K-Means 聚类需要指定 k,容易把“聚类要定簇数”泛化到所有聚类方法,忽略了层次聚类等自动定簇的手段。

误区摘要生成嘛,就是把逐字稿丢给模型,让它输出一段更短的文字,字数越少越好。很多初学 Prompt 的人都是这么写的。

正解直接压缩长文本容易丢失关键行动项。工业化流程是先做话题分段,再对每段做抽取式或生成式摘要,并单独抽取行动项、决策和日期,最后组装成结构化纪要。小獭不是把笔记抄短,而是把“结论”和“待办”挑出来贴上标签。

为何常见:手机输入法的“AI 摘要”让“长文压缩”深入人心,但会议纪要更看重结构化的关键信息,而非一段通顺的缩写。

面试题

Q1. Otter.ai 这类会议记录 Agent 通常如何“进入”一场线上会议?

单选题 · easy

  • A.由主持人手动邀请并授权旁听
  • B.通过日历接入由机器人自动入会← 正确答案
  • C.在会议结束后人工上传录音文件
  • D.通过网络爬虫抓取会议的音频流

答案:B。会议记录 Agent 的核心价值是“无人值守自动化”:通过日历订阅感知会议事件,再由会议机器人按既定流程自动入会并采集音视频,全程不需要人工喊话。A 依赖手动操作违背自动化初衷,C 退化成了普通的录音转写工具,D 更是无稽之谈——就像小獭总是自己看日历准时到场,而不是等主人喊。

Q2. 语音识别公式 P(W|X)∝P(X|W)×P(W) 中的 P(W) 代表什么?

单选题 · easy

  • A.声学模型的概率得分
  • B.语言模型的概率得分← 正确答案
  • C.音频采样率的数值
  • D.噪声抑制的强度值

答案:B。小獭听写时既要“听清”也要“听懂”:P(X|W) 是声学模型,衡量发音像不像;P(W) 是语言模型,衡量句子通不通顺。A 把两个模型搞混了,C 是预处理层的采样概念,D 是音频增强的范畴。就像“你是李”和“你是谁”,声音相似,但语言模型会让后者胜出。

Q3. 关于 Otter.ai 的自动归档与检索能力,下列说法正确的是?

多选题 · easy

  • A.会议纪要自动按日期项目归档← 正确答案
  • B.支持对历史会议进行全文检索← 正确答案
  • C.可导出纪要并同步协作工具← 正确答案
  • D.所有音频内容只保留一小时

答案:ABC。会议记录 Agent 的价值不止于当场转写,还在于沉淀知识资产:自动归档、全文检索、导出同步都是标配能力,让历史会议可被随时调用。D 说只能存一小时不符合产品设计——小獭的档案柜可以装下整年的会议,而不是过夜的便签。

Q4. 说话人分离(Diarization)最核心的输入特征是什么?

单选题 · mid

  • A.词的上下文向量表示形式
  • B.声纹嵌入的向量特征指纹← 正确答案
  • C.图像的像素点矩阵数据
  • D.句子的语法分析树结构

答案:B。说话人分离不关心内容,只关心“音色指纹”——声纹嵌入向量。词向量描述语义,图像像素描述画面,语法树描述句子结构,都和“谁在说话”无关。就像小獭闭着眼听的也是音色,而不是台词内容。

Q5. 两个声纹向量的余弦相似度接近 1,表示什么?

单选题 · mid

  • A.两段声音的音量大小基本一致
  • B.两个声纹向量的方向高度一致← 正确答案
  • C.两段语音的时间长度完全相等
  • D.两个词语的拼写方式完全一样

答案:B。余弦相似度衡量两个向量的方向一致性,接近 1 说明两个声纹向量方向几乎相同,大概率是同一个人的声音;音量、时长、拼写都和它无关。小獭判断“这是老板”靠的就是这种方向上的“像”,就像看两个人的笔迹走势是否一致。

Q6. 实时会议转写最看重哪一项性能指标?

单选题 · mid

  • A.端到端延迟保持在秒级或亚秒级← 正确答案
  • B.会议结束二十四小时内生成纪要
  • C.每月定期更新一次语音识别模型
  • D.网络波动完全不影响任何环节

答案:A。实时会议记录的核心卖点是“边说边出字”,端到端延迟必须做到秒级甚至亚秒级,否则会破坏实时体验。B 是离线场景的时限,C 是模型迭代节奏,D 恰恰相反——延迟受网络影响最大。小獭的听写要求声音进耳朵、字就上纸,容不得隔夜。

Q7. 抽取式摘要与生成式摘要的主要区别是什么?

单选题 · hard

  • A.抽取式从原文选句,生成式重新造句← 正确答案
  • B.抽取式需要人工标注,生成式免训练
  • C.生成式模型只能处理英文单语料
  • D.两种方式的算法原理完全相同

答案:A。抽取式摘要是“从原文里挑句子”拼起来,生成式摘要是“理解了再自己造句”。B 说反了,两者都需要训练;C 是能力边界而非主要区别;D 完全错误。小獭誊写纪要时,既会摘抄原话,也会用自己的话概括,两种模式各有用武之地。

Q8. 一份 Otter 会议纪要通常包含哪些结构化内容?

多选题 · mid

  • A.带时间戳的逐字转写稿← 正确答案
  • B.每个说话人的角色标签← 正确答案
  • C.被自动提取的待办行动项← 正确答案
  • D.参会者的实时地理位置

答案:ABC。一份可用纪要至少要包含“谁在何时说了什么”(时间戳逐字稿 + 说话人标签)和“接下来做什么”(行动项);参会者实时地理位置既不采集也没有价值。小獭整理的纪要正是三件套:时间轴、角色名、待办清单。

Q9. 下列哪些技术被用于说话人分离的标准链路?

多选题 · hard

  • A.语音活动检测以定位人声片段← 正确答案
  • B.声纹嵌入以刻画音色指纹← 正确答案
  • C.聚类算法以合并同一个人← 正确答案
  • D.目标检测以识别表情动作

答案:ABC。说话人分离的标准链路是:VAD 先找出发言片段,声纹嵌入提取音色特征,聚类把同一人的片段合并。目标检测用于视觉任务,和音频分离无关。小獭的三步是“先听哪里有人声,再辨什么音色,最后归堆”。

Q10. 在注意力公式中除以 √d_k 的目的是什么?

单选题 · hard

  • A.减少模型整体计算复杂度
  • B.防止点积过大导致梯度不稳定← 正确答案
  • C.让所有矩阵维度能够对齐
  • D.让模型参数量能够动态扩展

答案:B。当向量维度 d_k 较大时,点积的方差会变大,数值过大容易把 softmax 推向饱和区,导致梯度消失或训练不稳;除以 √d_k 相当于给得分做了一次缩放,让权重更均衡。A、C、D 都不是这个缩放的本质目的。就像小獭记笔记时把重点“按比例收敛”,避免某一句的权重把整页盖过。