跳转到内容

Remote Tool Calling

Remote Tool Calling(RTC) 是 RTC Agent 的核心协议。它颠覆了传统的调用方向:不是前端调用后端 API,而是 AI 调用前端工具——文件读写、脚本执行、业务接口调用,都在用户浏览器内完成。

传统方案RTC
工具执行服务端前端
数据流向上云 🔒留在用户设备 🔐
隐私数据经过服务端端到端,数据不出浏览器
可观测性黑箱用户全程可见

一次 RTC 调用经历以下步骤:

💡 关键设计:服务端在推送 RTC 后将 Turn 暂停并保存 Checkpoint 到 Redis。即使服务端重启,也能从 Checkpoint 恢复——用户完全无感知。

RTC 协议定义了 8 个内置工具,覆盖文件系统操作、脚本执行和精确编辑:

工具功能关键参数状态
🔍 ls列出目录内容path(默认 /)✅ 可用
📖 read读取文件内容path,offset / limit(分页)✅ 可用
✏️ write写入文件(全量覆盖)path、content✅ 可用
🔧 edit精确替换文件中的文本path、old_string、new_string、replace_all✅ 可用
🔎 grep按内容搜索pattern(正则),path✅ 可用
📁 find按名称搜索pattern(glob),path✅ 可用
⚡ script执行 JavaScriptaction(save / run / eval),code✅ 可用
💬 askUser向用户提问(中断轮次)questions(1-4 个选择题)✅ 可用

💡 write 工具执行全量写入——传入完整内容覆盖目标文件。如需局部修改,使用 edit 工具(精确字符串替换)或通过 script 工具中的 rtcAgent.fs.write() API 实现。

这 8 个工具让 AI 拥有了一个 完整的文件操作界面——就像操作本地终端一样操作前端虚拟文件系统。

💡 所有 RTC 工具都遵循相同的生命周期:服务端创建 RTC 记录 -> 保存 Checkpoint -> 暂停 Turn -> 推送事件到前端 -> 前端执行 -> 提交结果 -> 恢复 Checkpoint -> 继续推理。

每个 RTC 调用都有明确的生命周期状态:

状态AI 看到的提示说明
Pending[Tool Pending]等待前端接收
Sent[Tool Pending]已送达前端
Executing[Tool Pending]正在执行
Completed工具输出执行成功,结果回传
Failed[Tool Error]执行失败
Timeout[Tool Timeout]执行超时
Rejected[Tool Rejected]用户拒绝执行

不同工作模式决定了工具执行前是否需要用户确认。完整的权限矩阵详见工作模式。

📌 核心原则:只读操作始终安全放行;write 仅在最高警戒模式下需要确认;script 因为可以执行任意代码,除 bypass 外都需要用户确认。

RTC 的核心可靠性保障是 Checkpoint:

特性说明
存储位置Redis,TTL 24 小时
崩溃恢复服务端重启后可从 Checkpoint 恢复
用户体验感知为”AI 等待工具结果后继续”

RTC 结果上报遵循 100% 送达 原则:

为什么必须 100% 送达? 因为 AI 在等待工具结果才能继续推理。如果结果丢失,AI 会无限等待。

机制说明
无限重试提交失败自动重试,无放弃机制
幂等保证相同 client_id 重复提交返回成功
指数退避重试间隔 1s → 2s → 4s → … → 30s 封顶

同一会话内的 RTC 严格串行,避免并发导致的文件冲突:

当前 RTC 完成后,才会处理下一个。这对用户来说是无感知的——AI 会自然地依次完成每个操作。

rtc-queue 使用 hold-lock 模式 处理同一 Session 的连续工作:Worker 在完成一个 work item 后保持 session 锁,继续领取同一 Session 的后续工作,直到队列为空才释放锁。这确保了 turn-loop Agent(如连续执行多个 RTC 工具调用)无需在每次操作间重新竞争锁,提升了连续处理的效率。

💡 这是内部优化,对用户完全透明。用户只会感受到 AI 操作的连贯性——多个工具调用之间没有不必要的等待。