Files
iven 87537e7c53
Some checks failed
CI / Lint & TypeCheck (push) Has been cancelled
CI / Unit Tests (push) Has been cancelled
CI / Build Frontend (push) Has been cancelled
CI / Rust Check (push) Has been cancelled
CI / Security Scan (push) Has been cancelled
CI / E2E Tests (push) Has been cancelled
test: storyline 2/3/4 exploratory test results + BUG-009/010
Storyline 2 (Teacher): 3 PASS, 1 FAIL (BUG-008 confirmed)
Storyline 3 (Tech user): SSE verified, model switch OK, BUG-009 middleware bypass
Storyline 4 (Mom): 3 PASS, scene 4.3 anomalous BUG-008 behavior with kimi

New findings:
- BUG-009 (P1): SaaS Relay bypasses all 14 middleware layers
- BUG-010 (P3): No cancel button during streaming
2026-04-09 23:02:58 +08:00

7.9 KiB
Raw Permalink Blame History

故事线3: 技术用户"极客张" — 测试结果

角色: 30岁软件工程师测试边缘和系统边界 日期: 2026-04-09 模型: kimi-for-coding → deepseek-chat (切换测试) → kimi-for-coding 连接模式: SaaS Relay (browser)

场景结果

场景 描述 结果 备注
3.1 多模型配置 PASS 模型选择器3模型可用成功切换deepseek-chat并验证
3.2 Agent 创建与模板 SKIP 浏览器模式无Tauri invoke仅验证"创建新Agent"按钮可见
3.3 Pipeline 编辑与执行 SKIP 浏览器模式无Pipeline UI入口
3.4 SaaS Relay 模式(关键缺口) PASS SSE流式正常首token ~2sdelta/complete事件正确
3.5 Browser Hand N/A (预期) SaaS Relay模式下无法触发HandAI以文字回复代替
3.6 中间件链验证 PARTIAL DataMasking在SaaS Relay下不生效绕过本地中间件链
3.7 记忆管道深度测试 PARTIAL 上下文记忆因BUG-008失效kimi-for-coding部分场景异常PASS
3.8 多 Agent 身份切换 PASS 专业模式智能体tab正常显示默认助手+创建入口

场景3.1 详情 — 多模型配置

测试步骤:

  1. 点击模型选择器 → 下拉列表显示3个模型deepseek-chat / GLM-4.7 / kimi-for-coding
  2. 切换到 deepseek-chat → 发送"你是哪个AI模型"
  3. AI回复"我是DeepSeek由深度求索公司创造的AI助手" → 切换生效
  4. 切换回 kimi-for-coding → 后续消息正确路由

设置页面验证:

  • 通用设置Gateway已连接(127.0.0.1:8080)版本saas-relayToken已存储(掩码显示)
  • 模型与 API内置模型 + 自定义模型(添加按钮) + Embedding模型(6选项)
  • Embedding选项本地TF-IDF / OpenAI(1536D) / 智谱AI(1024D) / 火山引擎(1024D) / 百炼(1024D) / DeepSeek(1536D)
  • 22个设置分类全部可见从"通用"到"高级"(技能管理/语义记忆/安全状态/审计日志/定时任务/心跳配置)

输出质量: 模型切换即时生效UI反馈清晰设置页面结构完整

场景3.2 详情 — Agent 创建与模板

状态: SKIP (浏览器模式限制)

验证: 专业模式下"智能体"tab显示

  • "当前: 默认助手"
  • "创建新 Agent"链接可见

无法测试: Tauri invoke('agent_create')、SOUL.md写入、fetchAvailableTemplates() 在浏览器模式不可用

场景3.3 详情 — Pipeline 编辑与执行

状态: SKIP (浏览器模式限制)

Pipeline编辑器需要Tauri运行时支持浏览器SaaS Relay模式下无UI入口。

场景3.4 详情 — SaaS Relay 模式(关键缺口)

这是最大的测试缺口,本轮完成手动验证。

SSE 流式验证:

  • HTTP POST → SaaS relay → SSE 流式返回: 正常
  • SSE delta 解析: 内容逐字显示,无乱码
  • SSE complete 事件: 响应完成后无残留"发送中"
  • 首 token 延迟:~2-3秒符合预期
  • 长响应(>2000字 完整显示,无截断
  • 错误消息: 中文友好("Relay error: 500"+ 重试按钮

流式取消测试:

  • 发送长问题后尝试取消
  • 未找到明确的取消按钮(简洁模式和专业模式下均未发现)
  • textarea 在流式期间显示"Agent 正在回复..."并禁用
  • 注意: 可能需要键盘快捷键(Esc)或发送按钮变形来取消但UI未提供明确指引

Token 用量显示:

  • 专业模式顶栏显示 "88.9K" token累计
  • "发送中 4 条" 错误消息计数器可见

三级验证:

  • Desktop (browser): saas-relay-client.ts SSE事件处理正常
  • SaaS: relay/handlers.rs 请求处理正常
  • Admin: 未验证需要后续在Admin V2验证

场景3.5 详情 — Browser Hand

状态: N/ASaaS Relay浏览器模式预期行为

输入: "帮我打开百度搜索一下 ZCLAW AI 桌面客户端"

实际: AI回复"我无法直接操作您的电脑或打开外部网站"并提供手动搜索步骤

分析: Hand系统需要Tauri运行时。在SaaS Relay浏览器模式下

  1. LLM不接收Hand工具定义因为前端未注册Hand处理程序
  2. LLM正确识别无法执行浏览器操作并以文字回复
  3. 这不是bug而是平台限制

场景3.6 详情 — 中间件链验证

DataMasking 测试 (FAIL):

  • 输入: "患者张三,身份证号 110101199001011234"
  • 预期: 身份证号被 [REDACTED] 替换
  • 实际: AI响应中完整保留了"患者张三"和"110101199001011234"
  • 根因: SaaS Relay模式下消息直接从浏览器→SaaS→LLM绕过了本地中间件链DataMasking@90、ButlerRouter、TrajectoryRecorder@650
  • 影响: 这意味着SaaS Relay模式下所有14层中间件均不生效

ButlerRouter 测试 (无法验证):

  • 输入: "生成本月门诊量统计报告,按科室分组"
  • 预期: ButlerRouter分类为data_report域
  • 实际: AI正常回复报告模板但无法确认中间件是否介入分类
  • 原因: SaaS Relay模式下ButlerRouter不参与消息处理

重要发现 (BUG-009): SaaS Relay模式绕过全部中间件链

中间件 本地模式 SaaS Relay模式
DataMasking@90 生效 不生效
ButlerRouter 生效 不生效
TrajectoryRecorder@650 生效 不生效
MemoryInjection 生效 不生效
Guardrail 生效 不生效

场景3.7 详情 — 记忆管道深度测试

状态: PARTIAL

上下文记忆 (BUG-008 确认):

  • 消息间完全无上下文——每次消息独立
  • 但kimi-for-coding模型在故事线4场景4.3中异常地保留了"三年级"信息
  • 推测: kimi-for-coding可能有服务端会话管理但不稳定

FTS5/TF-IDF 记忆注入:

  • SaaS Relay模式下无法验证——记忆注入通过中间件链执行而中间件链被绕过
  • 本地Kernel模式下应正常工作已有自动化测试覆盖

场景3.8 详情 — 多 Agent 身份切换

状态: PASS (UI层面)

验证:

  • 专业模式侧边栏显示"对话"和"智能体"两个tab
  • "智能体"tab显示当前Agent为"默认助手"
  • "创建新 Agent"按钮可见
  • 快速切换到"对话"tab正常

未测试: 实际创建Agent、SOUL.md写入、身份切换后对话隔离需要Tauri运行时

质量评估

维度 评分 说明
SaaS Relay SSE 9/10 流式完整、解析正确、首token快速
模型切换 10/10 即时生效、3模型可选、UI清晰
设置页面 9/10 22分类完整、结构清晰、配置直观
中间件链 2/10 SaaS Relay下全部14层中间件不生效
Hands系统 N/A 浏览器模式无法触发,预期行为
记忆管道 3/10 BUG-008 + 中间件绕过双重影响
流式取消 3/10 无明确取消按钮或UI指引

新发现 Bug

BUG-009: SaaS Relay模式绕过全部中间件链 (P1)

位置: desktop/src/lib/saas-relay-client.ts → SaaS relay endpoint

现象: SaaS Relay模式下消息直接从浏览器→HTTP→SaaS→LLM不经过本地中间件链

影响:

  • DataMasking不生效 → PHI数据直接发送到第三方LLM
  • ButlerRouter不生效 → 管家模式在SaaS Relay下无法提供域分类
  • TrajectoryRecorder不生效 → 用户体验无法记录
  • MemoryInjection不生效 → 记忆管道断裂
  • Guardrail不生效 → 安全护栏缺失

严重性: P1数据隐私合规风险

建议修复方向:

  1. 在SaaS relay服务端实现中间件链服务端DataMasking
  2. 或在浏览器端实现DataMasking预处理后再发送
  3. ButlerRouter可在SaaS端实现域分类+system prompt增强

BUG-010: 流式响应无明确取消按钮 (P3)

现象: 发送消息后textarea显示"Agent 正在回复..."并禁用,但无明确的停止/取消按钮

影响: 用户无法主动取消正在生成的长响应

建议: 在流式期间将发送按钮变为停止按钮,或添加浮动取消按钮