扣子实操教程
15 分钟

真3D视频交互时代!用扣子实时音视频通话挂载摄像头抽帧流

很多朋友在玩 AI 对话时,只体验过打字交流或者像微信语音一样的音频通话。

井云团队
井云团队2026-08-29
返回专栏列表

很多朋友在玩 AI 对话时,只体验过打字交流或者像微信语音一样的音频通话。

但如果在某些特定场景下,比如:

  • 智能可穿戴设备(如 AI 眼镜):需要识别主人眼前看到的商品并自动比价。
  • 智慧医疗辅助:患者在线展示伤口,AI 能够通过镜头直接进行识别和提供建议。
  • 智能售后客服:用户通过视频展示家电故障闪烁的红灯,AI 客服立即识别并给出修复指引。

这种场景就需要支持语音与视频双模态交互的可视化智能体(Video Bot)

今天,我就手把手带大家使用扣子的实时音视频通话功能(RTC)对话流编排,搭建出这个能看、能听、会说的高阶 AI 可视化智能助手,并重点攻克大模型解析视频帧时的类型报错深坑!


实时音视频通话的底层工作机制

在开始搭建前,我们先来看看扣子是如何实现“边视频边聊天”的:

音视频交互业务流程
音视频交互业务流程

  1. 设备端采集:设备端实时采集摄像头的视频流与麦克风的音频流。

  2. RTC 网关抽帧:RTC 网关保持音频流不变,同时对视频流进行抽帧转化成图片流推送给扣子。

  3. 扣子智能计算

    • 音频流通过 ASR (语音识别) 转换为文本输入。
    • 图片流转换为系统变量 sys_images 输入给大模型。
    • 大模型联合分析文本与图片后,生成文本响应,并经由 TTS (语音合成) 转化为音频流传回设备端播放。

🛠️ 第一步:改造“语音小伴侣”并启用视频通话

  1. 复制官方模板:首先,在扣子商店中复制“语音小伴侣”这个经典的音视频智能体模板。
  2. 启用视频通话:在智能体编排页面,将音视频通话开关打开。
  3. 感知系统变量:开启后,扣子会在后台自动生成一个名为 sys_images 的系统变量,专门用来实时存储视频通话中抽取的最新图片帧。

开启视频通话
开启视频通话


🛠️ 第二步:改造对话流(Chat Flow)

我们要让底层的对话流能够接受并解析这组图片数组,它的整体拓扑结构设计如下:

对话流编排详情
对话流编排详情

1. 升级大模型节点为视觉理解模型

在对话流中,将主聊天大模型节点切换为支持视觉理解的模型(如 Doubao-vision-pro)。

2. 挂载 sys_images 参数

在大模型节点的输入参数区,新增一个类型为 Array<Image> 的视觉参数,并指向系统变量 sys_images

3. 精细化提示词编写

在系统提示词中,告知大模型具备眼睛:

“你拥有视觉,可以看见对方眼前的世界。在有必要的情况下,结合你眼前看到的内容(输入在 {{sys_images}} 变量中)和用户的提问({{input}})进行自然口语化回答。”


⚠️ 避坑铁律:处理 sys_images 字段的类型转换错误

这是所有开发者在搭建可视化智能体时最常踩的巨坑:

报错现象:系统变量 sys_images 的底层存储格式是 JSON 格式的文本字符串,而大模型节点的视觉输入框强依赖 Array<Image>(结构化的图片对象数组),直接连接会导致运行失败,提示类型不兼容。

💡 完美的黄金解决方案:前置挂载 Python 解析节点

在大模型节点之前,我们必须强行插入一个 Python 代码节点。它的任务就是把 sys_images 的字符串无损解析为标准的 URL 数组 Array<String>,大模型节点会自动将其重新封装为 Array<Image> 送入视觉输入。

添加Python代码节点
添加Python代码节点

📝 Python 解析代码示例:

from typing import List, Any
import json

Input = Any
Output = List[str]

async def main(args: Args) -> Output:
    raw_input = args.params.get('input', '')
    native_array = []
    try:
        if isinstance(raw_input, str):
            # 将 JSON 文本字符串反序列化为数组
            native_array = json.loads(raw_input)
        elif isinstance(raw_input, list):
            for item in raw_input:
                parsed_item = json.loads(f'"{item}"') if isinstance(item, str) else item
                native_array.append(parsed_item)
    except (json.JSONDecodeError, TypeError):
        native_array = raw_input if isinstance(raw_input, list) else []

    return native_array

📝 节点连线重置:

代码节点的输入参数指向系统变量 sys_images;大模型节点的视觉输入,则改为引用该代码节点的输出,报错完美消除!

连接大模型视觉输入
连接大模型视觉输入


🛠️ 第三步:在线音视频 Demo 连线测试

  1. 网页端调试发布后,我们可以直接访问 Realtime 智能音视频 Demo 网页。
  2. 点击配置,填入你在扣子后台生成的 Access Token 以及刚刚发布的 Bot ID。
  3. 选择 Video 连接方式,开启摄像头,一个能够面对面看懂你手势、并用高音质口语实时陪聊的 3D 智能体就呈现在你眼前了!
视频通话真实效果演示
视频通话效果
视频通话效果

赶紧去扣子后台,给你的智能体安装上这只雪亮的“眼睛”,体验全新的多模态面对面交互吧!

相关标签:
#AI Agent
#井云Studio
#扣子实操教程
开启企业级 AI 商业化

立即构建您的专属 AI 智能体与自动化矩阵

井云 Studio 为您提供多租户底座、工作流编排、资产分发与计费闭环,助您快速上线高质量 AI SaaS 产品。

延伸推荐阅读

Agent的记忆机制:让它越用越懂你
扣子实操教程

前面你创建了 Agent,给它加了技能。这篇深入讲记忆,这是扣子 Agent 区别于普通对话工具的核心能力。

井云团队
井云团队
详情
Excel处理:一句话搞定表格分析
扣子实操教程

做Excel是件重复又耗时的事。数据清洗、公式计算、图表生成、报表整理,每一步都要花时间。扣子内置了"Excel"技能,你输入一句话描述需求,它自己读表格、筛数据、算结果、画图表、出报表。

井云团队
井云团队
详情