【免费下载链接】agent-starter-react
A complete voice AI frontend app for LiveKit Agents with Next.js
agent-starter-react 是一个基于Next.js与LiveKit Agents的语音 AI 前端应用模板,内置麦克风/摄像头控制栏、实时聊天转写(Chat Transcript)与多种音频可视化效果。本文将从新手视角拆解它的核心界面:底部的AgentControlBar 控制栏与AgentChatTranscript 聊天转写是如何一步步实现的。
一、语音 AI 前端模板 agent-starter-react 简介
agent-starter-react 定位是「开箱即用的语音助手前端」,主要能力包括:
- 🎙️ 与 LiveKit Agents 的实时语音交互(对讲式语音)
- 💬聊天转写:语音对话内容实时转成文字,并支持反向的文本输入
- 📹 摄像头视频流、屏幕共享
- 🌈 5 种音频可视化风格:
bar、grid、radial、wave、aura - 🌗 明暗主题自动切换,品牌与文案可配置
业务逻辑集中在components/app目录,UI 组件则来自 Agents UI 组件库(存放在components/agents-ui),两者通过 Context 共享会话状态。
二、整体架构:从会话建立到界面渲染
整个应用的启动链路很短,理解它就能读懂后面所有组件:
- 建立会话:components/app/app.tsx 中通过
useSession(tokenSource)创建 LiveKit 会话,tokenSource指向本地接口 app/api/token/route.ts - 签发令牌:token 接口用
LIVEKIT_API_KEY/LIVEKIT_API_SECRET生成参与者 JWT(有效期 15 分钟),并附带roomJoin、canPublish、canPublishData等权限 - 注入上下文:components/agents-ui/agent-session-provider.tsx 把会话包进
SessionProvider,并挂载RoomAudioRenderer负责播放 AI 的语音 - 视图切换:components/app/view-controller.tsx 监听
isConnected,在「欢迎页」与「通话页(AgentSessionView_01)」之间做淡入淡出
通话页的组装工作主要由 agent-session-block.tsx 完成,它把三个区块叠在一起:顶部转写区、中间媒体/可视化区(TileLayout)、底部控制栏。
三、控制栏 AgentControlBar 的实现原理
控制栏源码在 components/agents-ui/agent-control-bar.tsx,它对应界面上最底部那条白色圆角长条:麦克风、摄像头、屏幕共享、转写开关,以及最右侧的END CALL挂断按钮。
1. 按钮显隐由「权限」而非写死
很多人会问:为什么我的界面没有屏幕共享按钮?答案在 usePublishPermissions 这个 Hook 里。它读取服务端签发的发布权限,判断当前用户能否发布相机、麦克风、屏幕共享和数据通道,并汇总成 4 个布尔值。控制栏据此决定显示哪些按钮:
- 有
microphone权限 → 显示麦克风开关 - 有
data权限 → 显示聊天转写开关 isConnected为真 → 挂断按钮才可点击
当然你也可以通过controls属性手动覆盖,例如只保留麦克风和挂断按钮,实现极简的语音助手界面。
2. 设备开关与用户偏好记忆
麦克风、摄像头、屏幕共享的开关逻辑封装在 useInputControls 中,有三个值得学习的细节:
- 互斥逻辑:打开摄像头会自动关闭屏幕共享(反之亦然),保证视频画面只有一路
- 偏好持久化:通过
usePersistentUserChoices把「是否开启麦克风」和「上次选择的设备 ID」存下来,下次打开页面自动恢复 - 错误上报:设备切换失败(比如拔了耳机)会回调
onDeviceError,由上层弹出 Toast 提示
每个开关本身是一个可拆分的按钮组合:主按钮切换开/关,旁边的小箭头弹出设备选择下拉框,麦克风按钮里还嵌了一个迷你音频可视化条,说话时能看到声纹跳动,交互反馈非常细腻。
3. 一键展开的文本聊天输入
控制栏上方有一个可伸缩区域:点下「💬 转写」按钮,控制栏顶部会平滑展开一个文本输入框(AgentChatInput),用户可以直接打字提问,发送走 LiveKit 的send数据通道,AI 收到后同样以语音应答。展开/收起使用 motion 的height: 0 → auto动画,收起时输入框会保持焦点恢复逻辑,体验顺滑不突兀。
四、聊天转写 AgentChatTranscript 的实现原理
聊天转写组件源码在 components/agents-ui/agent-chat-transcript.tsx,它把「语音对话」变成了一屏可读的文字记录。
1. 消息流与自动吸底滚动
消息本身不需要手动轮询:agent-session-block.tsx 通过useSessionMessages(session)订阅 LiveKit 的数据消息流,messages数组会随语音识别结果实时增长。组件内部再把每条消息的from.isLocal区分成user(我说的话)或assistant(AI 的回复),并附上本地化时间戳,渲染成左右分列的气泡。
滚动体验由 conversation.tsx 中的Conversation组件保障——它基于use-stick-to-bottom实现「自动吸底」:新消息到来时视口自动贴住底部;如果你向上翻看历史,就不会被打断,此时右下角浮现一个圆形「↓」按钮,点一下回到最新消息。
2. Agent thinking 状态指示
AI 思考时转写区底部会出现一个脉冲圆点。逻辑非常简单:useAgent()返回的agentState变为'thinking'时,用AnimatePresence挂入 AgentChatIndicator 组件。这个小点采用 spring 弹性动画无限呼吸,比转圈加载器更符合「AI 正在组织语言」的心智模型。
五、界面联动:控制栏与转写如何协同
真正让这个界面显得「专业」的,是控制栏、转写区、可视化区三者围绕同一个chatOpen状态做的联动:
chatOpen = true:转写区以淡入动画铺满屏幕,中央的音频可视化缩小到 20% 并移入左上角小圆,给文字让路chatOpen = false:转写区退出动画,可视化波形弹回中央放大为主角,同时底部显示「Agent is listening, ask it a question」的流光提示文案(连接缓冲期,避免冷场)
这一整套状态流转都由 agent-session-block.tsx 编排,控制栏通过onIsChatOpenChange回调与之双向同步——这是一个很典型的「单一状态源 + 多视图响应」模式,值得前端新手参考。
六、快速自定义:配置你的语音助手界面
想改成自己的品牌?只改两个文件:
- app-config.ts:公司名称、标题、Logo、主题色、开始按钮文案,以及可视化风格(如
audioVisualizerType: 'wave'、audioVisualizerBarCount: 8) .env.local:填入LIVEKIT_API_KEY、LIVEKIT_API_SECRET、LIVEKIT_URL三个环境变量即可接通后端
例如换一种可视化风格,只需在 app-config.ts 中取消对应注释:
audioVisualizerType: 'radial', // 圆形放射状声纹 audioVisualizerRadialBarCount: 24, audioVisualizerColor: '#002cf2',所有 Agents UI 组件的样式都支持 Tailwind class 覆盖,源码可直接在 components/agents-ui/ 目录下修改,改坏了也方便回滚。
七、小结
🏁 agent-starter-react 用不到千行代码就搭出了一个体验完整的语音助手前端:
| 能力 | 关键组件 | 核心思路 |
|---|---|---|
| 控制栏 | agent-control-bar.tsx | 权限驱动显隐 + 设备偏好记忆 |
| 聊天转写 | agent-chat-transcript.tsx | 数据通道订阅 + 吸底滚动 |
| 会话注入 | agent-session-provider.tsx | Context 共享 Session + 音频渲染 |
| 界面联动 | agent-session-block.tsx | 单一 chatOpen 状态编排三区域 |
如果你正在用 LiveKit Agents 开发语音 AI 产品,这套「控制栏 + 转写」的组合可以直接复用,也可以作为学习 React 状态管理与实时通信 UI 的优质范例。
【免费下载链接】agent-starter-react
A complete voice AI frontend app for LiveKit Agents with Next.js
相关推荐
BetterDiscord Installer核心功能详解:安装、修复和卸载的完整流程
BetterDiscord Installer核心功能详解:安装、修复和卸载的完整流程 BetterDiscord Installer是一款专为简化Better
小智AI聊天机器人项目:打造你的专属语音助手
小智AI聊天机器人项目:打造你的专属语音助手 小智AI聊天机器人是一个基于ESP32的开源项目,采用MIT许可证发布,允许任何人免费使用、修改或用于商业用途。该
人工智能AI 应用语音交互助手物联网嵌入式智能硬件MCP 服务终极指南:如何用ESP32打造你的专属智能语音助手
终极指南:如何用ESP32打造你的专属智能语音助手 想拥有一个能听懂你指令的AI聊天伙伴吗?基于MCP协议的xiaozhi esp32项目让这一切变得简单!无需
人工智能AI 应用语音交互助手物联网嵌入式智能硬件MCP 服务
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考