news 2026/11/5 1:48:25

livekit-client RPC实战指南:参与者之间的请求-响应式远程调用,轻松转发LLM function call

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
livekit-client RPC实战指南:参与者之间的请求-响应式远程调用,轻松转发LLM function call

【免费下载链接】client-sdk-js

LiveKit browser client SDK (javascript)

项目地址:https://gitcode.com/gh_mirrors/cl/client-sdk-js
点击查看免费下载

LiveKit client SDK(npm 包名livekit-client)的 RPC 功能,让房间内的浏览器参与者之间可以直接发起请求-响应式远程调用:一方调用performRpc发起请求,另一方通过registerRpcMethod注册的处理函数响应返回,无需自建信令服务器。本文带你快速上手 livekit-client RPC 实战,并演示如何用它把 LLM 的 function call 轻松转发到客户端执行。

为什么需要参与者间 RPC?

传统实时应用里,参与者之间传消息多为"只发不回"的广播。而很多场景需要一问一答:

  • 🤖 把 LLM 的 function call 转发给某个客户端执行,并取回结果
  • 🔍 向指定参与者查询状态、设备信息
  • 🎮 多人互动中发起"投票、点赞"等带响应的操作

livekit-client 内置的 RPC 基于房间可靠数据通道实现,天然支持点对点、超时控制与错误回传,且与 LiveKit Agents 深度配合,非常适合"AI 智能体 ↔ 浏览器端"的双向调用。

核心关键词速记:livekit-client RPC、performRpc、registerRpcMethod、请求-响应式远程调用、LLM function call 转发

快速上手:两步完成一次 RPC 调用

整个流程只有两个 API:接收方注册方法,发起方调用方法。

第一步:接收方注册 RPC 方法

在实现方法的参与者端调用room.registerRpcMethod(method, handler),handler 是一个异步函数,接收RpcInvocationData(含requestId、callerIdentity、payload、responseTimeout),返回的字符串就是对方的响应:

room.localParticipant?.registerRpcMethod( 'greet', // 方法名,任意字符串 async (data: RpcInvocationData) => { console.log(`收到来自 ${data.callerIdentity} 的调用:${data.payload}`); return `Hello, ${data.callerIdentity}!`; }, );

⚠️ 注意:handler 收到的responseTimeout告诉你最多还有多少毫秒可响应;超时未返回,调用方会收到超时错误。

第二步:发起方调用 performRpc

调用方通过room.localParticipant.performRpc()发起请求,参数包含目标参与者identity、方法名和 payload:

try { const response = await room.localParticipant!.performRpc({ destinationIdentity: 'recipient-identity', method: 'greet', payload: 'Hello from RPC!', }); console.log('RPC 响应:', response); } catch (error) { console.error('RPC 调用失败:', error); }

官方文档对这两步的完整说明见 README.md。

超时控制与内置错误码速查

performRpc的responseTimeout参数默认15000ms,若设置小于 8000ms 会被自动提升到 8000ms(为往返延迟留出缓冲)。相关定义见 utils.ts。

RPC 在实时环境下可能因各种原因失败,SDK 提供了结构化的RpcError,常见内置错误码如下:

错误码名称含义
1400UNSUPPORTED_METHOD对端未注册该方法
1401RECIPIENT_NOT_FOUND找不到目标参与者
1402REQUEST_PAYLOAD_TOO_LARGE请求负载过大(旧版协议 15KB 上限)
1500APPLICATION_ERROR处理函数抛出非 RpcError 异常
1501CONNECTION_TIMEOUT连接确认超时
1502RESPONSE_TIMEOUT等待响应超时
1503RECIPIENT_DISCONNECTED对端在请求期间断开

💡 最佳实践:在 handler 中抛出带message的RpcError,错误信息会原样传递给调用方;其他类型异常只会以1500(Application Error)到达对端。完整错误定义见 utils.ts。

实战:转发 LLM function call 到浏览器端

这是 RPC 最亮眼的用法:LiveKit Agents 中的 LLM 决定执行某个 function call(如"打开闪光灯""查询用户数据")后,直接通过 RPC 把它转发给对应浏览器客户端执行,并同步取回执行结果——几行代码即可打通"云端 AI → 端侧执行 → 结果回流"的闭环。

流程示意:

LLM (Agent 端) 浏览器客户端 │ │ │ 1. performRpc('run-action', │ │ payload=JSON 参数) │ ├─────────────────────────────▶│ │ 2. handler 执行本地动作│ │ │ │ 3. return 执行结果(JSON) │ ◀──────────────────────────────┤

接收端只需注册一个通用执行器,把 function call 的name与args映射到本地能力,返回 JSON 结果字符串;发送端(Agent 侧)拿到响应后即可把结果喂回 LLM 继续对话。完整参数与类型定义可参考 RpcClientManager.ts 与 extension.ts。

运行官方 RPC Demo

仓库内置了一个多参与者演示:caller向greeter发问候、向math-genius请求开平方/除法,并演示了错误处理与对端断开场景。

运行方式(在examples/rpc目录下):

pnpm install pnpm dev

然后打开本地地址(通常是 http://localhost:5173),点击按钮即可观看完整演示。注意需先在.env.local配置LIVEKIT_API_KEY、LIVEKIT_API_SECRET和LIVEKIT_URL,详见 examples/rpc/README.md。

示例代码包含 5 个典型场景,推荐对照阅读:

  • 基础问候:performGreeting
  • 长数据往返(20KB 级 payload):performSendVeryLongInfo
  • 错误处理(除以 0 抛出异常):performDivision
  • 调用未注册方法:performQuantumHypergeometricSeries
  • 对端断开的感知:performDisconnection

核心源码导航

想深入原理的同学可以按以下路径阅读:

  • 扩展入口(rpc扩展注册、API 挂载):src/room/rpc/extension.ts
  • 发起端管理器(请求发布、ACK 跟踪、超时):src/room/rpc/client/RpcClientManager.ts
  • 接收端管理器(方法分发、响应回传):src/room/rpc/server/RpcServerManager.ts
  • 参数与错误类型定义:src/room/rpc/utils.ts
  • 可运行示例:examples/rpc/rpc-demo.ts

小结

livekit-client 的 RPC 用一对极简 API(registerRpcMethod+performRpc)就实现了房间内的请求-响应式远程调用,配合内置超时与错误体系,尤其适合把 LLM function call 转发到浏览器端执行的 AI 实时应用场景。建议先跑一遍 examples/rpc 示例,再结合本文错误码表把异常场景覆盖到位 🚀

【免费下载链接】client-sdk-js

LiveKit browser client SDK (javascript)

项目地址:https://gitcode.com/gh_mirrors/cl/client-sdk-js
点击查看免费下载

相关推荐

上一篇:agentic-ai优化 | 延迟与成本优化终极技巧:让你的Agentic系统又快又省钱
下一篇:pure_live HLS 按短轨结束的原生边界控制审计:`-shortest` 候选策略的取舍与证据链

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/11/5 1:48:00

10分钟拿到EFI:OpCore-Simplify 一键构建 OpenCore EFI 实战

10分钟拿到EFI:OpCore-Simplify 一键构建 OpenCore EFI 实战 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify OpCore-Simplify 是菜单式黑苹…

作者头像 李华
网站建设 2026/11/5 1:48:00

hakuX虚拟硬盘全攻略:HDD镜像创建、备份与Xbox仪表板设置

【免费下载链接】hakuX xbox emulator for Android 项目地址: https://gitcode.com/gh_mirrors/ha/hakuX 点击查看 免费下载 hakuX 是一款运行在 Android 上的 Xbox 模拟器,它的虚拟硬盘(HDD)功能让你可以导入 qcow2/raw 硬盘镜像…

作者头像 李华
网站建设 2026/11/5 1:46:00

Light-SLAM:把 ORB换成SuperPoint + LightGlue,让 SLAM 在黑夜里也能认路

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华