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

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 云后端最大化代码复用 + 类型一致

  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?或暂缓(单机版稳定后再跨端)?