# 故事线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 ~2s,delta/complete事件正确 | | 3.5 | Browser Hand | N/A (预期) | SaaS Relay模式下无法触发Hand,AI以文字回复代替 | | 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-relay,Token已存储(掩码显示) - 模型与 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/A(SaaS 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 正在回复..."并禁用,但无明确的停止/取消按钮 **影响**: 用户无法主动取消正在生成的长响应 **建议**: 在流式期间将发送按钮变为停止按钮,或添加浮动取消按钮