——基于 RAG 异步分析结果实时推送架构设计
一、背景
在"灵犀安全"反诈 App 中,系统需要实现一个核心能力:
当用户收到疑似诈骗信息后,App 能够在 AI 分析完成的第一时间主动提醒用户,而不是等待用户刷新页面。
例如:
用户收到:
【XX银行】
您的账户存在异常,请点击链接验证身份
系统流程:
通知监听
|
↓
提交AI分析
|
↓
RAG模型判断
|
↓
返回风险等级
|
↓
App立即报警
这里存在一个关键问题:
AI分析不是瞬间完成的。
一次完整的 RAG 流程可能包含:
- 文本清洗;
- Embedding向量计算;
- 知识库检索;
- Prompt构造;
- 大模型推理;
- 风险规则判断。
耗时可能:
3秒 ~ 30秒
如果使用传统 HTTP 请求:
App请求
↓
服务器分析30秒
↓
返回结果
会导致:
- 请求长时间占用;
- 超时风险;
- 用户体验差。
因此,需要一种:
服务端主动向客户端推送消息的通信方式。
这就是 WebSocket。
二、为什么选择 WebSocket?
1. HTTP通信模型
传统HTTP:
客户端
请求
↓
服务器
↓
响应
客户端
特点:
- 客户端主动;
- 服务端被动。
如果想知道任务是否完成:
只能:
每隔5秒查询一次
例如:
GET /task/result?id=123
问题:
高延迟
任务完成:
第1秒完成
客户端:
第5秒才知道
浪费:
4秒等待时间
2. WebSocket通信模型
WebSocket:
建立一次连接:
客户端
⇄
服务器
之后:
双方可以随时发送消息。
流程:
App
|
|
| websocket连接
|
↓
服务器
分析完成
|
|
↓
主动推送
App收到结果
三、灵犀安全中的 WebSocket 架构
整体设计:
手机端
UniApp App
|
|
WebSocket连接
|
|
WebSocket服务
|
-----------------
| |
任务管理器 RAG服务
|
|
AI分析完成
四、完整业务流程设计
第一步:提交分析任务
App监听到通知:
微信:
客服要求退款
调用:
POST
/api/v1/fraud-detect/analyzeContent
请求:
{
"type":"text",
"content":
"客服要求退款,需要验证码"
}
服务器返回:
{
"taskId":
"task_20260718_001",
"status":
"processing"
}
注意:
此时:
AI还没有完成。
第二步:建立WebSocket连接
客户端连接:
ws://server.com/ws/result
携带:
token
例如:
ws://server.com/ws/result?token=xxxx
服务器:
验证用户身份。
第三步:RAG异步分析
后台任务:
task_001
|
↓
文本预处理
|
↓
Embedding
|
↓
向量检索
|
↓
LLM分析
|
↓
生成结果
第四步:WebSocket推送
分析完成:
服务器主动发送:
{
"type":
"RAG_RESULT",
"taskId":
"task_20260718_001",
"riskLevel":
"HIGH",
"reason":
"疑似冒充客服诈骗",
"suggestion":
"立即停止操作"
}
App立即响应。
五、客户端 WebSocket 实现
UniApp中:
const socket =
uni.connectSocket({
url:
"wss://server/ws/result"
})
连接成功:
socket.onOpen(()=>{
console.log(
"WebSocket连接成功"
)
})
收到消息:
socket.onMessage((res)=>{
const data =
JSON.parse(res.data)
if(
data.type==="RAG_RESULT"
){
handleRisk(data)
}
})
六、风险结果处理
收到:
{
"riskLevel":"HIGH"
}
进入:
function handleRisk(data){
switch(
data.riskLevel
){
case "HIGH":
showDanger()
break
case "MEDIUM":
showWarning()
break
case "LOW":
updateStatus()
break
}
}
七、HIGH风险处理设计
高风险:
例如:
公安诈骗
投资诈骗
冒充客服
处理:
收到HIGH
↓
播放警告音
↓
弹窗提醒
↓
通知守护人
流程:
RAG_RESULT
|
↓
风险中心
|
-----------------
| | |
声音 弹窗 守护通知
八、WebSocket心跳机制
移动网络环境复杂:
可能:
- 切换WiFi;
- 手机锁屏;
- 网络波动。
因此需要:
心跳。
客户端:
每30秒:
发送:
{
"type":"ping"
}
服务器:
返回:
{
"type":"pong"
}
作用:
确认连接仍然存在。
九、断线重连设计
移动端常见:
WebSocket断开
|
↓
检测close事件
|
↓
等待3秒
|
↓
重新连接
示例:
socket.onClose(()=>{
setTimeout(()=>{
connectWebSocket()
},3000)
})
十、Token身份认证设计
因为风险数据属于:
敏感安全信息。
不能:
任何人连接WebSocket查看。
因此:
连接时:
携带:
JWT Token
例如:
wss://server/ws?
token=eyxxx
服务器:
验证:
用户身份
设备身份
权限
十一、消息协议设计
为了方便扩展:
定义统一消息格式。
基础结构:
{
"type":"",
"timestamp":"",
"data":{}
}
风险结果消息
{
"type":
"RAG_RESULT",
"data":{
"riskLevel":
"HIGH",
"content":
"发现诈骗风险"
}
}
守护人更新消息
{
"type":
"GUARDIAN_UPDATE",
"data":{
"name":
"爸爸",
"status":
"online"
}
}
系统通知
{
"type":
"SYSTEM_MESSAGE",
"data":{
"message":
"安全服务已启动"
}
}
十二、高并发场景设计
假设:
10万个用户同时使用。
如果每个人:
保持一个WebSocket连接:
服务器需要维护:
100000个TCP连接
因此需要:
1. 连接管理
维护:
userId
↓
WebSocket Session
例如:
10001
↓
session001
2. 消息异步化
不要:
WebSocket线程直接执行AI分析。
错误:
WebSocket
↓
LLM
↓
返回
会阻塞。
正确:
WebSocket
↓
任务队列
↓
AI服务
↓
消息队列
↓
WebSocket推送
十三、与消息队列结合
完整架构:
HTTP请求
|
↓
任务队列
|
↓
RAG Worker
|
↓
结果队列
|
↓
WebSocket服务
|
↓
客户端
优势:
- 解耦;
- 可扩展;
- 支持高并发。
十四、项目中的实际应用
"灵犀安全"中:
WebSocket主要承担:
1. RAG结果实时同步
AI分析完成
↓
实时通知App
2. 守护列表同步
例如:
绑定新的守护人:
父亲加入守护列表
服务器:
推送:
{
"type":
"GUARDIAN_UPDATE"
}
App:
立即刷新。
3. 风险报警
HIGH风险
↓
WebSocket
↓
所有授权设备同步
十五、技术总结
在"灵犀安全"项目中:
WebSocket承担了:
AI分析结果与移动端之间实时通信桥梁。
核心技术:
HTTP任务提交
+
异步RAG分析
+
WebSocket实时推送
+
心跳保活
+
自动重连
+
Token认证
最终形成:
系统事件发生
↓
AI智能分析
↓
实时风险推送
↓
用户主动防护
相比传统轮询方案:
| 方案 | HTTP轮询 | WebSocket |
|---|---|---|
| 实时性 | 低 | 高 |
| 服务器压力 | 高 | 低 |
| 延迟 | 秒级 | 毫秒级 |
| 双向通信 | 不支持 | 支持 |
| 适合AI任务 | 一般 | 优秀 |
总结
WebSocket不仅是一种通信协议,更是实时智能应用的重要基础设施。
在 AI 安全领域:
模型负责:
思考
WebSocket负责:
及时告诉用户
二者结合,才能形成真正可用的智能安全系统。