跳转到内容

后端架构

RTC Agent 包含两个 Go 服务:主服务器(Main Server)负责 AI 推理编排、上下文管理、实时通信、工具调用调度和对象存储;Admin-server 是独立的管理服务,提供管理员认证、用户管理等功能,通过 RFC 8693 Token Exchange 与主服务器集成。

层职责关键模块
🌐 接入层协议适配、认证鉴权WebSocket Gateway、OAuth2 Handler、Token Exchange
📋 用例层业务编排、RPC 处理Session / Message / Turn / RTC 用例
🤖 领域层AI 推理、状态管理Agent 引擎、上下文管理、记忆系统
💾 基础设施层数据持久化、消息传递、对象存储PostgreSQL、Redis、Centrifuge、MinIO/S3
🔐 Admin-server管理员认证、用户管理JWT 签发(RS256/ES256/EdDSA)、JWKS 端点、Admin UI

认证体系:主服务器采用 OAuth2 授权码流程服务终端用户;Admin-server 使用邮箱密码登录服务管理员。管理员通过 Admin-server 获得的 JWT 可通过 RFC 8693 Token Exchange 被主服务器识别。详见 认证流程 和 HTTP API。

Gateway 是前后端通信的入口,管理所有 WebSocket 连接和 RPC 路由。

职责说明
连接管理处理 WebSocket 建连、鉴权、心跳、断线
RPC 路由将 17 个 RPC 方法分发到对应的用例处理
事件推送将 Agent 产生的事件通过 Centrifuge 推送到前端
RTC 中转将 AI 的工具调用请求转发到前端,接收执行结果

17 个 RPC 方法分类:

类别方法
Sessionv1.session.list, v1.session.get, v1.session.open, v1.session.close, v1.session.update, v1.session.fork, v1.session.compact
Messagev1.message.send, v1.message.list, v1.message.get
Turnv1.turn.list, v1.turn.get, v1.turn.stop
RTCv1.rtc.list, v1.rtc.get, v1.rtc.update_status, v1.rtc.submit_result

详见 WebSocket RPC。

Agent 引擎是 AI 推理的核心——组装 Prompt、调用 LLM、处理工具调用、管理推理循环。

能力说明
推理循环调用 LLM → 处理响应 → 工具调用 → 继续推理,直到生成最终回复
内置工具文件操作(ls/read/write/grep/find/script)、子代理(subAgent/listSubAgent/stopSubAgent)、用户交互(askUser)、目标管理(goal)、循环任务(loop)等
多模态理解处理用户消息中的文件附件——图片经 OSS 加载、预处理(EXIF 校正/缩放/压缩)后以 base64 注入 LLM Vision;文本文件经 UTF-8 校验/截断后 XML 包裹追加到 Content(详见下文)
流式输出实时将 LLM 输出推送到前端
错误反馈Turn 失败时自动分类错误,生成结构化 ErrorContent 消息推送给前端(详见下文)
子代理复杂任务自动拆解,多个专业子代理并行工作(详见下文)

当 Turn 执行失败时,系统自动将错误分类并生成结构化错误消息,前端可渲染为带重试按钮的用户友好提示:

错误分类说明典型场景
apiAPI 调用错误模型返回错误、速率限制
context上下文相关上下文超长、压缩失败
network网络错误连接超时、DNS 失败
permission权限错误认证失败、会话归属不匹配
stream流式处理错误SSE 中断、stream 解析失败
system系统错误内部异常、数据库错误
timeout超时错误推理超时、工具执行超时
tool工具调用错误工具不存在、参数校验失败

💡 限流保护:每个 session 每小时最多 20 条错误消息,防止错误风暴。debug.show_raw_errors 配置可控制是否向前端暴露原始错误详情。

详见 ErrorContent 协议定义。

当任务复杂度超过单次推理能力时,Agent 引擎会自动拆解任务,创建子代理并行处理:

  • 独立上下文:每个子代理有自己的会话和上下文,互不干扰
  • 并行执行:多个子代理可以同时调用 LLM 和工具
  • 结果汇总:主 Agent 收集所有子代理的结果,生成最终回复

上下文管理负责构建发送给 LLM 的完整 Prompt,并在对话过长时自动压缩。

当对话长度接近 Token 限制时,系统采用递进式压缩:

策略触发条件压缩方式成本
Microcompact工具调用后清理早期工具结果,只保留最近 5 个零
Auto CompactToken 达到阈值LLM 摘要早期对话(9 部分结构化摘要)一次 LLM 调用
Reactive CompactAuto Compact 后仍超标渐进式多级压缩(3 级,从零成本到激进裁剪)零 ~ 一次 LLM
Session Memory CompactAuto Compact 触发时直接用 Session Memory 作为摘要零

💡 性能优化:Strategic Cache Breakpoints 在消息列表关键位置设置缓存断点,压缩后 LLM prompt cache hit rate 从 0% 提升至 75%,input cost 降低约 69%。

详见 上下文管理。

双层记忆架构,让 AI 同时拥有短期和长期记忆。

每个会话独立维护,用于长对话的上下文压缩:

分类说明
decision用户做出的决策和选择
context当前任务的背景信息
progress已完成的工作和进度
issue遇到的问题和阻碍
learnings从任务中学到的经验
  • 容量:最多 20 条,约 12K tokens
  • 提取方式:双轨制——后台 Agent 自动提取 + Agent 主动保存
  • 用途:Session Memory Compact 的摘要来源,每轮对话注入 5 条到上下文

跨会话的长期记忆,存储用户偏好和历史事实:

分类说明
user用户身份信息(角色、专长、偏好)
feedback用户对工作方式的反馈
project进行中的项目、目标、约束
reference外部资源指针(URL、文档、工单)
  • 重要性级别:low / medium / high / critical
  • 容量:最多 1000 条
  • 提取方式:Agent 主动保存
  • 检索方式:关键词全文检索 + 重要性加权 → top 5

详见 记忆系统。

RTC 处理器管理工具调用的完整生命周期——从创建 RTC 记录到保存 Checkpoint、暂停 Turn、等待结果、恢复推理。

特性说明
Checkpoint保存当前推理状态到 Redis,TTL 24 小时
崩溃恢复服务端重启后可从 Checkpoint 恢复
串行执行同一会话内 RTC 严格串行,避免文件冲突
100% 送达前端结果提交无限重试,幂等保证

不同工作模式下,工具调用的确认策略不同:

工具类型manualeditplanautobypass
只读工具(ls/read/grep/find)✅ 自动执行✅ 自动执行✅ 自动执行✅ 自动执行✅ 自动执行
写工具(write)⚠️ 需确认✅ 自动执行⚠️ 需确认✅ 自动执行✅ 自动执行
script 工具⚠️ 需确认⚠️ 需确认⚠️ 需确认⚠️ 需确认✅ 自动执行

详见 工作模式。

OSS3 包提供 S3 兼容的对象存储抽象,用于管理用户上传的文件附件(图片、文本等)。

rtc-oss3.Backend 定义了 S3 兼容的对象存储操作:

操作类别方法说明
基础操作PutObject / GetObject / DeleteObject / HeadObject对象的增删查改
批量/范围DeleteObjects / GetObjectRange / ListObjects / CopyObject批量删除、范围下载、列表、复制
分片上传CreateMultipartUpload / UploadPart / CompleteMultipartUpload / AbortMultipartUpload / ListParts大文件分片上传
预签名PresignGet / PresignPut生成预签名 URL(服务端代理上传/下载)
生命周期HealthCheck / Close健康检查、资源释放

💡 当前实现为 MinIO 后端,接口设计兼容阿里云 OSS、AWS S3 等所有 S3 协议的存储服务。切换后端只需更换构造函数,无需修改业务代码。

端点认证方式用途
POST /api/credentials/temporaryJWTSTS 临时凭证——客户端获取临时 S3 凭证后直传/下载对象
POST /api/presigned-urlJWT预签名 URL——服务端生成带签名的 GET/PUT URL,有效期可配(默认 1 小时,最长 7 天)
PUT/GET/DELETE/HEAD /{bucket}/{key}SigV4 签名S3 兼容 API——客户端使用临时凭证直接操作对象
POST /{bucket}?deleteSigV4 签名批量删除对象
分片上传相关SigV4 签名大文件分片上传(?uploads、?partNumber、?uploadId)

💡 两种上传模式:(1) STS 临时凭证模式——客户端获取临时 AK/SK/Token 后,使用标准 AWS SDK 直接操作 S3;(2) 预签名 URL 模式——服务端生成签名 URL,客户端直接 PUT/GET,无需 SDK。

用户消息中的文件附件(FileAttachment)经过端到端处理后注入 LLM 上下文。

文件类型处理管线注入方式
图片(JPEG/PNG/BMP/TIFF/SVG)OSS 读取 → Magic bytes 检测 → EXIF 自动校正 → 缩放至 2000x2000 边界 → 多级 JPEG 压缩(80→60→40→20)→ base64 编码(≤ 5MB)MultiContent Image 部分,LLM Vision 直接理解
文本OSS 读取 → UTF-8 校验 → 超限截断(256KB,UTF-8 安全边界)XML 包裹 <file_content name="..." type="...">,追加到 Content
其他跳过(日志警告)—

💡 并行加载:多个文件附件使用 goroutine 并行加载,降低多文件场景的延迟。WebP/GIF 格式因解码库限制被拒绝,建议用户转换为 JPEG/PNG。

Admin 管理后台是基于 Ant Design Pro 构建的单页应用(SPA),由 admin-server 以静态资源方式托管。管理员通过浏览器访问管理后台,使用邮箱密码登录后管理用户、查看系统状态。

特性说明
技术栈React + Ant Design Pro + Umi 路由
认证机制邮箱密码登录,Access Token + Refresh Token 双令牌,自动刷新
令牌安全Access Token 仅存内存(防 XSS),Refresh Token 通过 httpOnly cookie 或安全存储
RTC Agent 集成登录后自动挂载 <rtc-agent> 全局浮窗,使用 Token Exchange 模式(admin JWT 换取 RTC JWT)
部署方式admin-server 编译时嵌入 SPA 静态资源,通过 /admin/ 路径访问

💡 RTC Agent 浮窗:管理员登录后,RTC Agent 以全局浮窗形式悬浮在管理后台之上,可以直接在管理界面中与 AI 交互。浮窗使用 Token Exchange 模式,将 admin-server 签发的 JWT 自动换取主服务器的 RTC JWT,无需单独登录。

频道用途特性
Topic状态变更事件(Session、Message、Turn、RTC)持久化、offset 追踪、离线恢复
Live流式输出中间 chunks非持久化、Redis PUB/SUB、低延迟、可丢失
  • 短暂断线(< 5 秒):重连后自动推送缺失事件
  • 长时间断线:客户端检测 offset gap,主动拉取历史记录
  • Epoch 变化:服务端重启后 epoch 改变,客户端重置 offset 并重新拉取全量

详见 实时通信。