搞运维的人应该都有过这种经历:设备在现场报警,值班员在电话里跟我反复描述“那个红灯一直闪,风扇声特别大”,我在几百公里外对着手册连猜带蒙,最后还得买张票飞过去。后来我们做了一套“实时音视频 + AI Agent”的远程运维系统,情况才真正扭转过来。现场人员戴上摄像头或者打开手机端,专家在电脑上就能看到第一视角画面、听到设备运转的环境音,还能直接在画面上画线标注;AI Agent在后台实时转写对话、识别声音异常、结合设备日志去知识库里检索故障案例,把排查建议和处置步骤推给专家,最后自动生成工单和巡检报告。

这篇内容把我从需求拆解、架构设计到落地实现的全过程整理出来,包括音视频链路的选型逻辑、Agent 服务的编排方式、上线之后遇到的各种问题,以及一份可以直接参考的最小可运行方案。适合设备制造商、集成商、工厂设备部门,也适合想用 AI 改造售后运维流程的团队。不管你是只想知道原理,还是打算自己动手搭一套,这篇应该都能给你省不少弯路。

1. 先聊清楚:传统远程运维卡在哪,AI Agent 补什么位

1.1 传统远程支持的三座大山

第一座大山是“描述失真”。电话里说一百句“我看到了”,不如让对方把镜头转到设备正前方看一眼。可现实是,现场人员往往不知道专家需要什么视角,专家想要的角度他给不到,你想要看仪表读数,他给你拍个指示灯。这倒不是现场人员不专业,而是“描述”这件事天然有信息损耗,尤其涉及异响、振动、气味这类很难用语言量化的问题时,电话支持基本只能靠猜。

第二座大山是“知识都装在老师傅脑子里”。故障处理经验往往散落在几个核心老师傅的脑子里,没有形成可检索的知识库。新人遇到设备异常,翻手册翻不到,问人又不在,最后要么等老师傅到场,要么按最笨的办法重启一遍。公司花了很多年积累的售后案例,全是聊天记录里的只言片语,真正要用的时候找不着、也留不住。

第三座大山是“事后无记录无沉淀”。远程支持打完电话就结束了,现场是什么状态、说了哪些排查步骤、最后怎么解决的,全部没有留痕。等到半年后同类故障再次发生,还得重新诊断一遍。哪怕天天在处理问题,知识体系仍然在原地踏步。这三个问题叠加在一起,就造成了运维成本高、响应慢、还特别依赖个别关键人物。

1.2 这套系统真正改变的是“协作闭环”

我们设计系统时,没有把它简单做成“能打电话的摄像头”,而是把远程运维看成一条完整的协作链路:感知、传递、诊断、指导、沉淀、再学习。

感知层解决“看见和听见”的问题。现场端的摄像头、麦克风把画面和声音采集上来,同时设备自身的运行数据,比如温度、转速、电流、故障码,也一并接入。传递层解决“信息无损到达专家”的问题。通过实时音视频链路,专家端看到画面、听到声音,还能收到设备数据流,而不是只能听别人转述。诊断层是 AI Agent 的舞台。它持续监听音视频流里的对话和环境声,对照设备数据,在知识库里检索相似案例,给出故障可能性和处置建议。指导层把 AI 建议和专家判断合在一起,通过语音、文字、AR 标注反馈给现场人员。沉淀层把整个过程中产生的音视频片段、转写文本、诊断结论、工单信息自动归档,形成可检索的案例库。

最后还有一层“再学习”。每处理完一个故障,系统可以把“现象—诊断—处置—结果”回写进知识库。下次再遇到类似问题,Agent 查到的就不再是干巴巴的文档,而是包含真实处理过程的完整案例。这样整条链路就形成了一个闭环,而不是七个孤立的功能模块。

1.3 LLM、Agent、AI 模型到底什么关系,DeepSeek 是哪一个

很多朋友在聊 AI Agent 的时候,会把模型和 Agent 混在一起。这里我按自己的理解梳理一下。

AI 模型是“能处理单一任务的能力单元”。比如语音识别模型负责把音频转成文字,图像分类模型负责判断画面里有没有异常,大语言模型负责理解和生成自然语言。DeepSeek 属于大语言模型,它接收文本输入,生成文本输出,本质上是模型,还不是 Agent。你可以把 DeepSeek 当成 Agent 的“大脑组件”,但它单独不会自己感知现场、不会自己调用工具、也不会主动发起处置动作。

LLM 是“基于海量文本训练的大规模语言模型”,它是 AI 模型这个大类里的一个子集。Agent 则是“能自主完成任务的系统”。这个系统由感知模块、决策模块、行动模块和记忆模块组成:感知模块接收外部信息,决策模块调用 LLM 进行推理和规划,行动模块调用工具去执行动作,记忆模块保存短期会话历史和长期知识。所以 Agent 会用 LLM,但 Agent 不是 LLM。

拿这套远程运维系统来举例:实时音视频流本身不是 LLM 处理的,而是先经过 ASR 转成文字,再把文字交给 LLM;LLM 根据转写内容判断“可能是轴承磨损”,然后 Agent 并不会满足于这个判断,它会调用知识库检索接口去搜相似案例,把检索结果整理成一份建议,推给专家端。这里的“调用检索”和“推送”就是 Agent 的行动能力。所以你可以说系统里装了一个 DeepSeek,但它只是其中一个组件,我们更关注的是围绕它搭起来的 Agent 体系。

2. 系统整体架构与音视频链路设计

2.1 端到端架构:现场端、调度端、媒体服务、Agent 服务

整套系统从物理上可以分成四块。

现场端是一台运行 Android 或 iOS 的采集设备,可以是手机、平板、智能头盔或者加固型手持终端,负责采集摄像头画面、麦克风声音和现场设备传感器数据。调度端是专家的操作台,通常是一个浏览器页面,也可以做桌面客户端,负责显示实时画面、播放声音、收发 AR 标注、查看 Agent 推送的诊断信息。媒体服务是中间的核心通道,负责音视频流的转发、录制和信令转发,一般部署在公网环境。Agent 服务是一组 AI 微服务的集合,包含 ASR 语音转写、声纹特征提取、视觉识别、LLM 推理、知识库检索和工单生成,它和媒体服务通过 API 对接。

设备数据流不直接塞进音视频流里。现场设备通过 Modbus、OPC UA、MQTT 等协议把 PLC、传感器、智能仪表的数据采集到边缘网关,边缘网关一方面把这些数据推给 Agent 服务做判断,另一方面也推到调度端做可视化展示。音视频流走一条链路,设备数据走另一条链路,两条链路在 Agent 服务和调度端汇合,互相补充。这样设计的好处是,哪怕设备数据接入暂时不可用,音视频通话还能继续,不会出现“通信断了连画面都没了”的情况。

2.2 为什么选 WebRTC 而不是传统 RTMP 推流

最早我们考虑过用 RTMP 推流加 HLS 播放的方案,毕竟直播技术成熟,相关组件也多。但评估后发现 RTMP 是单向推流,专家端想看什么角度、想放大哪块区域,都没法和现场端实时交互;HLS 的延迟通常在 5 到 15 秒,根本没法支撑实时指导。专家对着延迟十秒的画面说“往左转一下”,现场人员可能已经走过去了,协作体验非常差。

所以最终选了 WebRTC。它有几个特点正合远程运维的胃口:端到端延迟能做到 300 到 500 毫秒以内,接近电话沟通的体验;原生支持双向音视频,现场端和专家端可以随时互动;自带 DataChannel,可以在音视频之外传 AR 标注、控制指令、小体积的结构化数据;浏览器原生支持,专家端不用装额外软件,打开网页就能接入。

当然 WebRTC 也有代价。它在多人或者多房间场景下需要搭配媒体服务器做混合转发,没有成熟的公网 CDN 分发能力,弱网拥塞控制虽然比传统 RTMP 好些,但也不是万能的。后面我会专门写踩坑经验。

2.3 除了画面和声音,还要传什么:AR 标注、传感器状态、控制指令

做过远程运维就会知道,光通视频远远不够。专家看到一个阀门,想跟现场人员说“拧的是旁边那个,不是这个”,语言描述容易出错。所以系统里必须支持 AR 标注,让专家直接在实时画面上画圈、画箭头、写字,这些标注通过网络传给现场端,叠加在现场第一视角画面之上。这里要注意“坐标同步”问题:专家标注的坐标是基于他看到的视频帧的,而现场端一直在动,所以标注要和视频帧绑定,要么在发送端带上时间戳和帧号,要么用图像识别锁定目标物体后做跟踪,否则画完圈就飘走了。

设备状态也要同步送达。现场端把当前设备的运行参数,比如主轴温度、振动幅值、电流值,通过 DataChannel 发给调度端,专家画面上就能看到一排实时数据。再进阶一点,可以在专家端做远程控制授权,比如远程下发参数修改指令给边缘网关,由网关确认后写入 PLC。注意:控制指令必须走独立的数据通道,并且要有二次确认机制,防止专家误触。

媒体服务器收到的 Audio 和 Video 流会被录制下来,这一步有很多讲究。录制不能简单地把每个参与者的流分开存,因为运维场景里“谁说了什么、当时画面是什么”是关联的,最好录制成带时间轴的合成流,或者把各轨录制成独立文件,再写上公共时间戳。否则后面做案例归档时,根本对不上时间线。

2.4 媒体服务选型:自建媒体服务器还是用托管服务

媒体服务器可选方案大致有几类。第一类是开源媒体服务器,如 Janus、MediaSoup 和 LiveKit,社区活跃、可控性强,部署在自有环境;第二类是云服务商的音视频 SDK,如声网、腾讯云等,集成快、全球节点多,但是需要按使用量付费,并且部分数据链路经过服务商;第三类是开箱即用的商用一体机,适合不想维护技术栈的团队。

我们团队因为需要和内部知识库、工单系统深度集成,最后选择了基于 LiveKit 做自建。LiveKit 的部署相对轻,用 Docker 就能起服务,提供 WebRTC 网关、录制、房间管理和客户端 SDK,支持多房间和动态扩展。Janus 功能也很强,但它的配置和插件体系更偏底层,维护成本高一些;MediaSoup 灵活性最好,适合做定制化 RTC,但几乎所有上层逻辑都要自己写,不推荐小团队直接上手。

自建媒体服务需要一台带宽和性能都够的公网服务器。我们最开始用一台 4 核 8G 的云主机跑单节点,一路 720p 通话再加一路录制,CPU 占用还能接受,但是并发到十路以上就开始出现抖动。后来调整到 8 核 16G,并把录制功能单独拆到另一台机器上,问题才缓解。

2.5 延迟预算和带宽估算

做实时音视频最忌讳“上了再说”,必须先算清楚延迟预算。

我们把端到端体验拆成四段。第一段是现场端采集和编码,设备性能正常的话大约 30 到 80 毫秒;第二段是上行传输到媒体服务器,在家庭宽带或者 4G/5G 网络下大约 50 到 150 毫秒;第三段是媒体服务器转发和下行分发,一般在 30 到 100 毫秒;第四段是专家端解码渲染,大约 30 到 60 毫秒。加起来在 150 到 400 毫秒之间。如果超过 500 毫秒,专家和现场对话就会明显“打手”,所以我们的调优目标是端到端不超过 400 毫秒。

带宽按照编码参数估算:一路 720p 30fps 的视频,用 H.264 编码,码率设置在 1.2 到 1.8Mbps 比较常见;音频用 Opus,码率大约 32 到 64kbps。假设并发 30 路通话,每路一路视频一路音频再加一路录制,媒体服务器的出口带宽大概是 30 乘以 2(视频上行和下行各一路)再乘以 1.5Mbps,再加上录制回传带宽,约 100Mbps 到 150Mbps。如果现场使用 1080p,码率直接翻倍,带宽也要跟着翻。所以不要只看单路码率,要按“上行 + 下行 + 录制”三份流量来预留。

3. 核心功能拆解:AI Agent 往运维流程里塞了什么

3.1 三路感知:音频、视频、设备数据

AI Agent 要干活,首先得“感知”到现场发生了什么。我们设计了三条感知通道。

音频通道是主力。专家和现场人员沟通时不可能对着麦克风把故障描述完整,但他们的对话本身就是信息流。系统把现场端麦克风采集到的音频实时送入 ASR 服务,转写成文本,然后交给 LLM 做语义分析。同时还有一个声纹识别和声音事件检测模块,专门识别“尖锐金属摩擦声”“漏气声”“电机异响”等异常声学事件。实际测试下来,异常声识别对轴承磨损、皮带打滑这类问题特别有效,经常比专家听出来的还早。

视频通道做视觉辅助。现场端摄像头画面会定时抽帧,送入视觉识别模型,检测仪表读数、指示灯状态、设备表面有无冒烟或漏油。这里要特别注意,视频识别不要全频率跑,否则 GPU 消耗扛不住。我们当时对每秒钟抽 2 帧做检测,只有在 Agent 判断“疑似异常”时才把抽帧频率提升到每秒 5 帧。

设备数据通道提供定量的运行状态。边缘网关按 1 到 5 秒的周期把 PLC 里的温度、压力、转速、电流、故障码推给 Agent。有了这三路感知,Agent 才不是“闭着眼睛瞎猜”,而是真正基于现场多模态信息做判断。

3.2 故障判断不是“大模型直接答”,而是 RAG 加结构化预案

刚开始做原型时,我们走了一条弯路:把设备手册和维修案例喂给大模型,让它直接给出答案。结果观察了两周发现,大模型的回答经常“听起来很有道理,实际完全不能执行”。比如它建议“检查电压是否稳定”,但对现场操作员来说,这句话等于没说,因为没有给出具体的测量点、标准值和操作步骤。

后来我们换成 RAG(检索增强生成)加结构化预案的方案。维护一个专门的知识库,里面存的是设备手册、历史工单、维修案例,每篇文档都做了分段和向量化。Agent 收到当前故障现象和现场数据后,先从知识库检索出最相关的 5 到 10 个段落,再把这些段落连同上下文一起交给 LLM 做归纳整理。LLM 的任务不是“现场发挥”,而是“把检索到的知识组织成可执行的步骤”。

关键点是:知识库里的每一份文档都必须是结构化的。一个故障预案至少包含设备型号、故障现象、可能原因列表、检查步骤、处置动作、注意事项、预估工时。凡是没有结构化处理的 PDF 文档,直接丢给 RAG 效果都很差,因为 LLM 提取不到清晰的字段。我们后来专门做了个清洗脚本,把维修案例全部转成统一的 YAML 格式入库。

3.3 实时辅助:Agent 给专家推送什么,什么时候推送

Agent 不是“一次问一次答”的聊天机器人,它要主动把判断推给专家。我们设计了几类推送信息,按紧急程度分级。

正常情况下,Agent 会把通话转写、设备数据变化、知识库匹配度最高的案例摘要展示在专家端的侧边栏,供专家参考。当 Agent 发现疑似异常时,会推送一条“异常告警”,内容包括异常类型、置信度、相关依据。比如“现场音频 14:32:05 出现高频摩擦声,设备主轴温度 86 度,与知识库中轴承磨损案例 2024017 匹配度 0.82”,同时给出建议的检查动作。

当 LLM 判断现场可能处于高风险状态,比如气体泄漏或者温度超过阈值,Agent 会触发更主动的干预,提示专家确认是否下发紧急停机指令。注意:Agent 永远不能直接下发控制指令,它只能建议专家操作。我们在系统里强制了“Agent 建议—专家确认—网关执行”的三级流程,这是出于安全责任的考虑,也是合规的基本要求。

3.4 两类 Agent 的划分:诊断 Agent 和调度 Agent

实际做的时候,我们没做一个“万能 Agent”,而是拆成了两个角色。

诊断 Agent 负责“这个故障是什么、该怎么处理”。它连接知识库、设备数据和感知模块,输出的是诊断结论和处置建议。调度 Agent 负责“这件事该谁处理、什么时候处理”。它监听诊断 Agent 的输出和当前工单状态,如果发现故障等级较高,自动查询排班表和人员技能标签,把工单分配给最近的、具备相应技能的二线工程师,同时通知主管。

把两个 Agent 分开有个明显好处:诊断 Agent 可以专注于准确性和知识库质量,调度 Agent 可以专注于流程状态机,两者的改动互不影响。而且不同企业对授权机制要求不同,调度 Agent 的规则完全可以按客户定制,而诊断逻辑保持统一。

3.5 这里为什么不用纯大模型直接回答问题

回到很多朋友问的问题:既然 DeepSeek 这类大模型已经很强了,能不能直接拿它做远程运维的 AI?我的经验是:不能只用纯模型,至少要叠加两层约束。

第一层是知识约束。大模型训练时没见过你们公司的设备型号和故障案例,它只能给出通用常识,甚至用错误的常识“一本正经地胡说八道”。而运维场景追求的是可执行、可追溯,不能接受一个听起来合理但实际错误的建议。RAG 的作用就是把模型的知识范围框定在你们自己的知识库里,检索不到就不允许乱答。我后来对所有输出加了校验:如果知识库召回结果的相似度低于某个阈值,Agent 会明确回复“未检索到完全匹配案例”,并给出通用检查建议的提示,而不是假装确定。

第二层是动作约束。纯 LLM 的输出是文本,不是可执行操作。Agent 必须通过类别判断来决定调用哪个工具:是查知识库、发工单、推送给专家,还是触发告警?这些动作是程序里写死的工具函数,LLM 只是决定调用哪个函数、填什么参数,真正执行动作的仍然是可靠的程序逻辑。这样才能保证 AI 说错了也不会造成破坏性后果。

4. 实操过程:搭一套最小可运行的远程运维系统

4.1 场景和组件约定

为了让这篇内容可复现,我接下来描述一个最小可运行版本,不考虑生产级的容灾和复杂权限。假设场景是一台车间的空压机,现场人员用手机作为采集端,专家在办公室用浏览器查看,Agent 跑在局域网服务器上,设备数据通过一个模拟网关每 3 秒上报一条 JSON。

所需组件:一台媒体服务器(LiveKit)、一套信令服务(可以直接用 LiveKit 自带的信令)、一个 Agent 服务(Python 编写,包含 ASR、LLM 调用、RAG 检索和推送)、一个前端页面(专家端)、一个手机 App(现场端可以用 LiveKit SDK 快速封装)。如果你不想写 App,也可以用手机浏览器访问现场端 Web 页面,只要浏览器支持 WebRTC 和摄像头权限即可。

知识库先用简单的 SQLite 存向量和文档元数据,或者直接用开源的向量数据库,比如 Chroma。LLM 部分可以调用云厂商 API,也可以部署一个开源模型。我建议先用云 API 把整个流程跑通,模型能力稳定之后再做私有化部署。

4.2 音视频通话链路:从创建房间到播放流

先启动 LiveKit 服务。假设你的 LiveKit 部署在 media.example.com ,端口 7880。前端用官方 JS SDK 连接。

# agent_service/main.py 框架示意
from agents import Agent
// 专家端连接流程(LiveKit JS SDK 伪代码)
const room = new Room();
await room.connect('wss://media.example.com', { token });
const remoteParticipant = room.participants.get(remoteSid);
const videoTrack = remoteParticipant.getTrackPublication(trackSid).track;
const el = document.getElementById('remote-video');
await videoTrack.attach(el);

现场端采集屏幕方向、分辨率、码率等参数,注意旋转问题。很多手机默认竖屏,专家端看到的画面是竖着的。空压机这种设备更适合横屏拍摄,需要在 App 里强制横屏,或者在专家端提供旋转按钮。我们在第一次实测时没注意这个,专家对着竖屏画面看了半天,体验很差。

媒体服务器在房间里做转发和录制。LiveKit 提供了录制功能,可以设置录制存储路径。这里的经验是:一定要在房间创建时就启动录制,不要等故障发生了再“想起”去开录制,否则故障前的现场信息就全丢了。如果担心存储成本,可以做“全程低码率录制 + 故障时切高码率录制”。

4.3 Agent 管线:语音转写、RAG 检索、推送

Agent 服务从音视频流里拿音频,不是直接读 LiveKit 的媒体包,而是通过 LiveKit 的“Egress”把音频流转发出来,或者用现场端 App 里的实时音频上传通道。最小可运行版本里,为了让架构清晰,我建议让现场端同时做两件事:一路推给 LiveKit 做音视频通话,另一路把音频以流式 HTTP 推给 Agent 服务的 ASR 接口。这样 Agent 和通话相互独立,就算 Agent 服务挂了也不影响主要通话。

# 伪代码体现 Agent 编排思路
import asyncio

def get_transcript(audio_stream):
    # 调用 ASR,返回带时间戳的文本
    return asr.transcribe(audio_stream)

def search_kb(query, top_k=5):
    # 将 query 向量化,在 Chroma 里检索
    return kb.query(query, top_k)

def build_payload(transcript, kb_hits, device_status):
    prompt = f"""
    当前对话转写:{transcript}
    设备数据:{device_status}
    检索到相关知识:{kb_hits}
    ...
    """
    return llm.complete(prompt)

Agent 服务拆成三个进程更合理:ASR 进程只负责把音频转写文字,推理进程负责 RAG 和 LLM 推理,推送进程负责把结果通过 WebSocket 推到专家端。三个进程用消息队列串起来,避免一个环节处理不过来拖垮整个链路。我最早把所有逻辑塞在一个进程里,ASR 转写慢的时候,整个 Agent 的推理也被卡住了,后来拆开才解决。

推送层有两种方式。一种是直接通过 WebSocket 推给专家端前端;另一种是写入 Redis 消息队列,由前端长轮询读取。我们最后用了 WebSocket 方案,因为延迟更低,体验更好。

4.4 关键配置参数与实际选择

音视频相关的编码参数、延迟预算、带宽估算,我在第 2.5 节已经算过。这里补充 AI 侧的资源估算。

ASR 转写如果实时性要求高,建议用流式接口,每个会话的音频流单独建一个转写会话。我们用的流式转写延迟大约为 300 到 800 毫秒,对运维场景可以接受。如果用离线转写,虽然准确率高,但一次要等完整段落,实用性差很多。

LLM 推理的开销主要看并发。每次咨询请求的输入 token 包括转写上下文、知识库召回段落和系统提示词,大约在 1500 到 3000 token;输出 token 控制在 500 以内。假设每次故障诊断持续 30 分钟,期间 Agent 每个异常触发点做一次推理,大概 20 次左右,总共输入约 60000 token,输出约 10000 token,这部分按 token 计费成本可控。如果走本地模型,则要准备一台带 24GB 显存的 GPU 才能跑到能用的上下文长度。

知识库检索的向量化要提前完成。每次检索的耗时主要是向量计算和 TopK 排序,在几十万条文档规模下基本都在 50 毫秒以内。如果文档数量更大,建议加一层基于设备型号的预过滤,先限定搜索范围,再做向量匹配。

4.5 从 0 到 1 的上线步骤清单

第一步,先跑通音视频通话。把 LiveKit 服务部署起来,两个浏览器页面互开视频,确认画面和声音延迟可接受,再接入手机端采集。第二步,加入录制功能。每次测试会话都保留录制文件,方便后续分析。第三步,接入设备数据模拟器。写一个小程序模拟 PLC 数据上报,推到 Agent 服务和专家端前端。第四步,接 ASR 和 LLM。先把对话转写跑通,让专家端侧边栏能看到转写文本。第五步,做知识库。找 50 份历史维修案例,清洗成结构化 YAML,导入向量库。第六步,把 RAG 检索和推送接上,让 Agent 能主动推送案例。第七步,加工单和报告功能,整条链路才完整。

每一步都要有一个可验收的里程碑。很多团队一上来就想做大而全的系统,结果卡在 AI 幻觉上出不了活。我建议垂直打通,先把一条故障的“感知—诊断—指导—沉淀”循环跑通,再扩功能。

4.6 上线前检查清单

上线前要检查的事情很多,我列一下我印象最深的几条。

权限模型必须有。现场端谁能发起通话,专家端谁能看到哪些现场,录制文件谁能下载,都要有明确权限。尤其是跨部门协作时,权限混乱会引发很大的合规风险。连接安全方面,WebRTC 的媒体流默认是加密的,但信令和 Agent 服务之间的 API 要加鉴权,防止有人冒用专家身份下发指令。

故障切换。如果媒体服务器挂了,怎么让专家和现场重新连接?如果 Agent 服务挂了,音视频还要保持能通话。我们在架构上刻意让 Agent 依赖音视频链路,一旦 Agent 全部宕机,专家仍然能手动指导,只是没有 AI 辅助。这个降级策略很重要。

录制和日志保留策略。远程运维会涉及现场画面和通话,企业通常有自己的数据安全要求。录制文件默认保留 90 天,过期自动清理。AI 转写文本和工单长期保存,用于后续知识沉淀。这个策略要提前和企业确认,不要等运营一段时间后再去补。

5. 常见问题与排查技巧实录

5.1 音画不同步问题

首次实测时,专家端发现画面里的阀门已经动了,声音却延迟了半拍。排查下来,问题出在音频经过了一条更长链路。现场端音频推给 ASR 进程做转写,转写结果又通过 WebSocket 推送,而视频是直接经过 LiveKit 转发的,两条链路的时间基准不一致,导致专家端的转写文本、现场声音和画面三者对不上。

解决思路是:所有环节统一使用媒体服务器的时间戳,转写结果必须带上段落的起止时间,并且和专家端回放的本地时间轴对齐。前端做字幕叠加时,用 NTP 同步过的时间戳计算延迟差,做动态补偿。这看起来是个细节,但直接影响专家阅读的准确性。

5.2 音频噪声导致 ASR 乱转写

车间环境很吵,ASR 转写经常出现“胡言乱语”,甚至把设备轰鸣声转成无意义的句子。这个问题并不好解决。我们首先在采集端增加了一个噪声抑制滤波器,把环境背景音压掉一些;然后给 ASR 模型加载了“车间专用热词表”,把常见设备名、零件名、故障词都加进去,提高专有名词识别率。

更有效的一招是:ASR 默认不返回低置信度的片段,在转写结果里过滤掉置信度低于 0.6 的短句。虽然会丢一些现场人员的口语词,但整体准确率明显提升。对于关键故障词,比如“漏油”“异响”“报警”,我们设置了单独的声学关键词检测,不依赖 ASR 的文本结果,一旦声学特征命中就直接触发告警。这类关键词检测对噪声的容忍度比大模型转写高很多。

5.3 Agent 给出错误建议怎么办

AI 幻觉是躲不掉的,只能降低概率和影响。我们做了三层防线。

第一层,RAG 检索相关性过滤。检索召回结果里,如果最高的向量相似度低于 0.75,就直接判定为“知识库无匹配”,不让 LLM 强行作答。第二层,输出规范校验。LLM 输出必须是一个固定 JSON 结构,包括建议的操作步骤、依据来源、置信度。如果输出不合法,程序直接丢弃,不展示给专家。第三层,专家复核闭环。专家端每个 Agent 建议旁边都有一个“采纳”或“驳回”按钮,驳回时必须填写原因。被驳回的案例会回流到一个待优化队列,由运维工程师定期分析,修正知识库内容。

这层机制跑下来,Agent 建议的采纳率从最开始的不到四成,慢慢提升到了七成左右。最关键的还是知识库质量。与其花时间调大模型提示词,不如多花时间把历史案例整理好。

5.4 弱网卡顿与断线恢复

工厂现场的 4G、Wi-Fi 信号不一定稳定,弱网环境是绕不开的。WebRTC 自带拥塞控制,但默认参数不一定适合“现场画面很少动、偶尔快速移动”的运维场景。我把采集端的比特率上限调低了一些,优先保证流畅度,而不是画质。同时开启 WebRTC 的丢包重传机制,让关键帧能够更可靠地到达,避免画面卡在花屏上。

断线恢复方面,我们在业务层做了“自动重连 + 恢复上下文”的机制。现场端断线后,重新进同一个房间;如果房间已经销毁,则自动创建一个新房间并把已录制的片段串起来。专家端重连后,系统会提示“现场端已重连,期间画面中断 35 秒”,避免专家不知情时做出错误判断。

还有一个特别推荐的技巧:现场端弱网时,会自动切换音频优先模式,降低视频码率甚至暂时关闭摄像头,保证语音能持续。因为远程运维里,最不能丢的是对话通道,画面卡了可以截图重发,语音断了协作就彻底垮了。

5.5 问题速查表

我把实施过程中遇到的常见问题整理成一张速查表,方便同行直接定位。

现象 可能原因 排查与解决
音画延迟超过 500ms 媒体服务器离现场端太远 就近部署边缘节点或改用托管 RTC 服务
画面模糊 上行带宽不足 降低码率,启用丢包重传,关闭非必要视频流
ASR 乱转写 环境噪声大 加噪声抑制,热词表扩展,低置信度过滤
专家端看不到 AR 标注 标注坐标绑在了旧帧上 用时间戳绑定视频帧,或做目标跟踪
Agent 建议和实际不符 知识库缺案例或召回不准 人工确认案例,不合格的驳回并回流修正
工单重复创建 Agent 多次判断为异常 引入去重状态:同一会话内同类型异常 5 分钟内只建一次
录制文件时间线对不上 多轨录制没有统一时间戳 用 NTP 同步,写入公共时间轴
媒体服务器 CPU 高 转码开销大,或并发超预期 使用 Simulcast 分层转发,避免全部转码

6. 最后聊聊我在这套系统上踩过的几个坑

如果你准备动手做类似系统,我忍不住多啰嗦几句。

第一,不要一上来就追大模型的热点。先把音视频链路跑通、把知识库整理好,再考虑 AI 的深度。我们最开始的演示版本用了很炫的 Agent 界面,但音视频链路偶尔断线,现场人员用了几次就失去信任了。后来花了两周把媒体服务的稳定性提上来,大家对系统态度才转变。运维工具的首要属性是可靠,然后是智能。

第二,现场端和专家端的产品设计要分开思考。现场端面对的是可能戴着手套、正在操作设备的人,界面要极简,尽量做到“打开就能通话”;专家端面对的是需要同时看视频、听音频、看数据、读结果的人,信息要分区明确,不能一股脑堆在一起。我们早期的专家端把转写、设备数据、图纸堆在同一列,专家根本看不过来,后来改成分栏布局,左侧画面、右侧信息区,才勉强可用。

第三,知识库的整理远比模型调参重要。我们内部有一句话:Agent 的上限由知识库决定,不是由模型决定。把过去三年的维修记录结构化之后,系统可用性提升了不止一个档次。这事看起来不性感,但它是整套系统真正的护城河。

第四,保留一手的人工复核手段。Agent 再聪明,也只能是辅助工具。我们特意在界面上保留了“一键转人工”的入口,确保现场人员随时能找到真正的专家。这个入口在日常运维里可能不常用,但在关键故障发生时,它是兜底的信任来源。

最后分享一个小技巧:上线初期可以专门安排一次“模拟故障演练”,不通知值班人员,让 Agent 和专家端共同处理一个仿真故障,把整个过程录下来复盘。我们的很多流程缺陷都是在演练中暴露的,比如现场端没有应急电源、专家端侧边栏被浏览器遮挡、知识库里某个型号的设备漏维护,等等。这些问题如果靠真实故障来发现,代价就太大了。

Logo

火山引擎视频云技术社区,是面向 AI 音视频开发者的技术交流平台。这里汇聚源自抖音、豆包等亿级 DAU 产品的 RTC、直播、点播、AI 媒体处理、音视频互动技术,提供接入指南、最佳实践、性能调优、场景案例、Demo 代码、开源项目、白皮书和 API 文档。社区汇聚官方工程师与一线开发者,为 AI 视频通话、数字人、AI 视频处理等应用的开发与落地提供技术支持。

更多推荐