Files
DevFlow/docs/02-架构设计/已编号方案/F-260620-01-跨端AIChat-微信小程序-2026-06-20.md
绝尘 7911bc292c 文档: 审查回填 CR-22~27 + 跨端 AI Chat 设计 + 跑题试验记录
审查回填(均  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 五改进精准对应 + 四层测试计划 + 迭代过程
2026-06-20 03:54:59 +08:00

76 lines
4.2 KiB
Markdown

# F-260620-01 跨端 AI Chat:微信小程序 ↔ Rust 云后端 ↔ DevFlow 桌面端实时同步
> 创建:2026-06-20 | 状态:📐 设计草案(灵感 4495fbcd 待晋升 + 任务 6c816709 todo)
> 上级索引:[../INDEX.md](../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 云后端最大化代码复用 + 类型一致**。
1. **代码复用矩阵**: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 桥接。
2. **类型系统一致性(最被低估)**:AiChatEvent 17 变体 + ChatMessage 10+ 字段 + 工具调用嵌套 JSON。两端同语言 → 编译时类型一致保证。跨语言 → 手动同步镜像类型 → 必然遗漏 → 运行时消息丢失。
3. **团队版演进路径**:云后端复用 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?或暂缓(单机版稳定后再跨端)?