审查回填(均 ✅ PASS):
- CR-22 摘要不改 updated_at / CR-23 P2 批次A 读 / CR-24 批次B 写 / CR-25 跑题P0 /
CR-26 跑题P1 / CR-27 跑题P2(6维度全过,topic 无破坏 + 双高置信保守)
跨端 AI Chat 设计(F-260620-01):
- 三层架构 df-tunnel/df-relay/df-miniapp + Rust 云后端选型(代码复用/类型一致/团队版演进)
- todo 规划跨端 P1-P4 + 跑题修复 P0-P2
跑题改进试验记录:
- db 基线(3 长对话:assistant 文本仅 4-5%,95% tool_result,47% echo)
- 5 类跑题现象与 P0-P2 五改进精准对应 + 四层测试计划 + 迭代过程
4.2 KiB
4.2 KiB
F-260620-01 跨端 AI Chat:微信小程序 ↔ Rust 云后端 ↔ DevFlow 桌面端实时同步
创建:2026-06-20 | 状态:📐 设计草案(灵感 4495fbcd 待晋升 + 任务 6c816709 todo) 上级索引:../INDEX.md
一、目标
微信小程序远程使用 DevFlow AI Chat(发送/停止/重新生成/审批/切换对话),体验与桌面端一致。桌面端与小程序打开同一对话时双向实时同步(类似微信电脑端 + 手机端同时在线)。
二、架构(三层,穿 NAT)
微信小程序(df-miniapp) ◄──WSS──► Rust 云后端(df-relay) ◄──WS 出站长连接──► 本地 DevFlow(df-tunnel)
前端 UI(复用 AI Chat) axum WS 中继/广播 AI 对话引擎(现有)
桌面端出站连云(穿 NAT,无需端口映射/公网 IP),云后端中继小程序 ↔ 桌面端。
Layer 1:本地 DevFlow 桌面端 — df-tunnel(WS Client + 事件桥接)
- 新建
crates/df-tunnel/:内嵌 tokio-tungstenite WS client - DevFlow 启动后主动连云后端
wss://your-server/ws/device(出站穿 NAT) - 事件桥接:在
app.emit("ai-chat-event", ...)的同时,clone event 推 WS 隧道 - 指令路由:收到云后端发来的操作指令(send/stop/approve/regenerate/switch),调对应 Tauri command 逻辑
- 配对绑定:桌面端首次配置云后端地址 + token,持久化 Settings KV
Layer 2:云后端 — df-relay(Rust axum WS Server + 广播中继)
- 新建
crates/df-relay/(axum + tokio-tungstenite) - WS Server 接受两类连接:小程序(device_id 鉴权)+ 桌面端(token 配对)
- 广播中继:小程序操作 → 桌面端;桌面端事件 → 小程序
- 无业务逻辑(纯转发,保持轻量)
Layer 3:微信小程序 — df-miniapp(前端 UI)
- 微信小程序前端(复用桌面 AI Chat 逻辑/样式,适配小程序框架)
- WSS 连云后端
- 远程操作映射到桌面端 Tauri command
三、技术选型:Rust 云后端(非 Go/Node)
灵感 4495fbcd(技术选型论证,score 60)核心命题:Rust 云后端最大化代码复用 + 类型一致。
- 代码复用矩阵:DevFlow 现有 10 Rust crate(df-storage/df-ai/df-ai-core/df-workflow/df-nodes/df-execute/df-ideas/df-types/df-mcp/df-project),云后端用 Rust 可直接 path 引用,零适配。Go 需全部重写或 FFI 桥接。
- 类型系统一致性(最被低估):AiChatEvent 17 变体 + ChatMessage 10+ 字段 + 工具调用嵌套 JSON。两端同语言 → 编译时类型一致保证。跨语言 → 手动同步镜像类型 → 必然遗漏 → 运行时消息丢失。
- 团队版演进路径:云后端复用 df-types/df-ai-...,为「单机版 → 团队版」铺路(阶段2 云后端承载多用户/协作)。
四、关键设计点(待定)
| 维度 | 选项 | 待决策 |
|---|---|---|
| 同步粒度 | 事件流透传(ai-chat-event 经隧道)vs 状态同步(全量 messages) | 倾向事件流(增量,带宽低) |
| 冲突处理 | 两端同时发消息/审批 | 时间戳 + 桌面端为真相源(AI 引擎在桌面) |
| 安全 | token 配对 + WSS + 指令鉴权 | 必须(device_id + token 双因子) |
| 离线 | 桌面端离线时小程序降级 | 提示"桌面端未连接"+ 缓存指令待重连 |
| 部署 | df-relay 部署阿里云(ECS/容器) | 待定(成本/运维) |
五、关系链
- 灵感 4495fbcd:跨端控制技术选型论证(score 60,pending_review,待晋升)
- 任务 6c816709:跨端 AI Chat 实现(todo,priority 1)
六、实施分阶段(待 todo 规划)
| Phase | 内容 | 依赖 |
|---|---|---|
| P1 | L2 df-relay 云后端(axum WS Server 基础 + 广播中继 + 鉴权) | 无 |
| P2 | L1 df-tunnel 桌面端(WS client + 事件桥接 + 指令路由 + 配对绑定) | P1 |
| P3 | L3 df-miniapp 小程序(前端 UI + WSS 连云) | P1/P2 |
| P4 | 双向同步完善(冲突 + 安全 + 离线 + 部署) | P1/P2/P3 |
七、与现有架构关系
- df-mcp(已做):对外 stdio 暴露数据层(本地)。跨端是远程(WS 隧道)。互补。
- F-09 多会话(已做):conv_id 路由。跨端事件透传复用 conv_id。
- AiChatEvent 17 变体(现有):跨端透传的事件契约(两端同类型,Rust 优势)。
待决策:晋升灵感 4495fbcd → 启动 P1?或暂缓(单机版稳定后再跨端)?