docs: 添加发散探讨文档和测试截图
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

添加了关于管家主动性与行业配置体系的发散探讨文档,包含现状诊断、关键讨论、架构设计等内容。同时添加了测试失败的截图和日志文件。
This commit is contained in:
iven
2026-04-12 22:40:45 +08:00
parent d5cb636e86
commit f32216e1e0
129 changed files with 15144 additions and 1095 deletions

View File

@@ -0,0 +1,221 @@
# ZCLAW 端到端功能一致性与完整性验证报告
> 日期: 2026-04-10 | 验证环境: Tauri 桌面端 (1420) + SaaS 后端 (8080) + Admin V2 (5173)
## 一、服务状态
| 服务 | 端口 | 状态 |
|------|------|------|
| SaaS 后端 (Axum) | 8080 | ✅ healthy, DB connected |
| Admin V2 (Vite) | 5173 | ✅ running |
| Tauri 桌面端 | 1420 | ✅ running |
---
## 二、Tauri 桌面端验证结果
### 2.1 登录流程
- ✅ SaaS 登录admin/admin123成功返回 JWT + refresh_token
- ✅ 登录后自动跳转到主聊天界面
### 2.2 主界面 (专业模式)
- ✅ 侧边栏:对话列表 + 智能体面板 + 搜索
- ✅ 聊天区域:流式响应、思考过程展示、工具调用展示 (file_write, shell_exec, 澄清问题)
- ✅ 输入区:文本输入 + 附件 + 模型选择 (kimi-for-coding) + 发送
- ✅ 智能体面板:默认助手 + 创建新 Agent
- ✅ 模式切换:简洁/专业模式正常切换
### 2.3 设置页面 (19 个分类)
| 设置页 | 状态 | 内容 |
|--------|------|------|
| 通用 | ✅ 正常 | Gateway token、简洁/专业模式切换 |
| 用量统计 | ⚠️ 部分 | 6会话/100消息但 Token 统计为 0 |
| 积分详情 | ❌ 开发中 | 显示"积分系统开发中" |
| 模型与 API | ✅ 正常 | 已连接 Gateway、模型列表、Embedding 配置 |
| MCP 服务 | ⚠️ 未接入 | "新增/删除/详细参数配置尚未在桌面端接入" |
| IM 频道 | ⚠️ 未接入 | 0 个频道,飞书/Discord 等为规划中 |
| 工作区 | ✅ 正常 | 项目目录、文件监听、自动保存 |
| 数据与隐私 | ✅ 正常 | 本地数据路径、备案信息 |
| 安全存储 | ✅ 正常 | Keyring 可用6 类密钥槽位 |
| **SaaS 平台** | **❌ 加载失败** | "SaaS 平台加载失败,请稍后重试" |
| **订阅与计费** | **❌ 加载失败** | "计费信息加载失败,请稍后重试" |
| 技能管理 | ⚠️ 空 | 0 个技能加载,"连接 Gateway 后加载" |
| 语义记忆 | ✅ 正常 | SQLite+FTS5+TF-IDF0 条记忆,搜索可用 |
| 安全状态 | ✅ 正常 | 评分 9416 层防护展示 |
| 审计日志 | ✅ 正常 | Live Stream 模式0 条记录 |
| 定时任务 | ⚠️ 空 | 0 个定时任务 |
| 心跳配置 | ✅ 正常 | 巡检间隔、主动性级别、免打扰、检查项 |
| 提交反馈 | ✅ 存在 | 反馈入口 |
| 关于 | ✅ 正常 | 版本 0.1.0 |
### 2.4 Tauri 桌面端问题清单
| 严重度 | 问题 | 影响 |
|--------|------|------|
| **P1** | SaaS 平台页加载失败 | 桌面端无法管理 SaaS 账户 |
| **P1** | 订阅与计费页加载失败 | 桌面端无法查看订阅状态 |
| P2 | 积分系统显示"开发中" | 用户看到占位 UI |
| P2 | 技能管理显示 0 个技能 | 75 个 SKILL.md 未加载到前端 |
| P3 | MCP 服务前端未接入 | 只能配置文件手动添加 |
| P3 | IM 频道为规划中 | 功能未实现 |
| P3 | Token 统计为 0 | 用量统计不完整 |
---
## 三、SaaS 后端 API 验证结果
### 3.1 全端点状态总览
| 模块 | 端点数 | 200 OK | 4xx/5xx | 说明 |
|------|--------|--------|---------|------|
| Auth | 10 | 9 | 1 (password 参数错误) | ✅ |
| Account | 11 | 11 | 0 | ✅ |
| Model Config | 13 | 12 | 1 (usage 500) | ⚠️ |
| Relay | 5 | 5 | 0 | ✅ |
| Role | 7 | 7 | 0 | ✅ |
| Prompt | 6 | 6 | 0 | ✅ |
| Agent Template | 9 | 9 | 0 | ✅ |
| Scheduled Task | 5 | 5 | 0 | ✅ |
| Telemetry | 4 | 4 | 0 | ✅ |
| Billing | 10 | 10 | 0 | ✅ |
| Knowledge | 16 | 13 | 3 (422参数错误) | ✅ |
| Migration | 7 | 7 | 0 | ✅ |
| **总计** | **103** | **95** | **8** | **92% 通过** |
### 3.2 后端问题
| 严重度 | 端点 | 状态码 | 根因 | 修复文件 |
|--------|------|--------|------|----------|
| **P0** | POST /auth/register | 连接重置/崩溃 | `ConnectInfo<SocketAddr>` extractor 在某些条件下引发 panic | `auth/handlers.rs:65` |
| **P0** | GET /usage | 500 | `Option<String>` 绑定到 `$2::timestamptz`PostgreSQL 无法隐式转换 | `model_config/types.rs:148-149`, `service.rs:419` |
| **P0** | POST /auth/refresh | 500 | `refresh_tokens``expires_at` 列 TEXT 类型无法转为 TIMESTAMPTZ | refresh token 相关代码 |
| P3 | POST /knowledge/items/batch | 422 | 参数验证问题 | - |
| P3 | POST /knowledge/items/import | 422 | 参数验证问题 | - |
---
## 四、Admin V2 前端-后端集成对比
### 4.1 统计概览
| 指标 | 数量 |
|------|------|
| 前端定义的 API 调用 | 83 |
| 前端✅匹配后端 | 47 |
| 前端❌调用后端不存在 | 8 |
| 后端⚠️存在但前端未调用 | 34 |
| 有 service 但无页面调用 | ~10 |
### 4.2 前端调了但后端不存在的路由 (❌ 断链)
| 路径 | 说明 |
|------|------|
| DELETE /knowledge/categories/:id | 后端有 categories 但无单条删除 |
| PUT /knowledge/categories/:id | 后端无单条更新 |
| GET /knowledge/items/:id | 后端无单条查询 |
| DELETE /knowledge/items/:id | 后端无单条删除 |
| POST /knowledge/items/:id/rollback/:version | 后端无版本回滚 |
| PUT /config/items/:id | 后端路由不同,无法单条更新 |
| GET /billing/payments/:id | 后端无单条支付查询 |
| POST /prompts/:name/rollback/:version | 后端有 rollback 但需确认路径 |
### 4.3 后端存在但前端完全未接入的路由 (⚠️ 开发了没接)
| 路由 | 模块 | 功能 |
|------|------|------|
| POST /auth/register | Auth | 用户注册 |
| PUT /auth/password | Auth | 修改密码 |
| POST /auth/totp/* (3个) | Auth | TOTP 2FA |
| GET /accounts/:id | Account | 账户详情 |
| GET /tokens | Account | Token 管理 |
| GET /devices | Account | 设备管理 |
| GET /model-groups/* (5个) | Model Config | 模型分组管理(整套) |
| POST /keys/:id/rotate | Model Config | Key 轮换 |
| POST /relay/chat/completions | Relay | Chat 代理 |
| GET /relay/models | Relay | 可用模型列表 |
| GET /agent-templates/available | Agent Template | 可用模板 |
| POST /agent-templates/:id/create-agent | Agent Template | 从模板创建 Agent |
| POST /accounts/me/assign-template | Agent Template | 分配模板 |
| GET /prompts/check | Prompt | Prompt 更新检查 |
| GET /billing/usage | Billing | 计费用量 |
| GET /billing/invoices/* | Billing | 发票 PDF |
| POST /config/analysis | Config | 配置分析 |
| POST /config/seed | Config | 配置种子 |
| POST /config/sync | Config | 配置同步 |
| POST /config/diff | Config | 配置差异 |
| GET /config/pull | Config | 配置拉取 |
### 4.4 空壳/问题页面
| 页面 | 问题 |
|------|------|
| API Keys | service 定义了 CRUD 但无独立页面,路由指向 ModelServices |
| Usage Service | 定义了 daily()/byModel() 但无页面调用Usage 页用 telemetryService |
| Knowledge | 前端定义了 16 个子功能部分后端不存在UI 按钮可能触发 404 |
---
## 五、一致性交叉验证
### 5.1 Tauri 桌面端 vs Admin V2 功能对比
| 功能 | Tauri 桌面端 | Admin V2 | 一致性 |
|------|-------------|----------|--------|
| 账户管理 | ❌ SaaS页加载失败 | ✅ Accounts 页完整 CRUD | ❌ 不一致 |
| 模型管理 | ✅ 设置→模型与API | ✅ ModelServices 页完整 | ✅ 一致 |
| 提供商管理 | ✅ 设置→模型与API | ✅ Provider CRUD | ✅ 一致 |
| 订阅/计费 | ❌ 加载失败 | ✅ Billing 页 | ❌ 不一致 |
| 角色权限 | ❌ 无入口 | ✅ Roles 页完整 CRUD | ❌ Admin独有 |
| Prompt 管理 | ❌ 无入口 | ✅ Prompts 页完整 | ❌ Admin独有 |
| 知识库 | ✅ 语义记忆(本地) | ✅ Knowledge 页(SaaS) | ⚠️ 不同实现 |
| 审计日志 | ✅ 有展示 | ✅ Logs 页 | ✅ 一致 |
| 定时任务 | ✅ 有展示 | ✅ ScheduledTasks 页 | ✅ 一致 |
| 技能管理 | ⚠️ 0 个加载 | ❌ 无页面 | ❌ 不一致 |
| MCP 服务 | ⚠️ 未接入 | ❌ 无页面 | ❌ 两端都缺 |
### 5.2 功能闭环验证
| 闭环流程 | 验证结果 |
|----------|----------|
| 登录→聊天→流式响应 | ✅ 完整 |
| 登录→设置→配置→生效 | ⚠️ Gateway 配置生效SaaS 配置失败 |
| Admin→创建账户→桌面端登录 | ✅ 可行(后端已验证) |
| Admin→配置模型→桌面端切换 | ✅ 可行 |
| Admin→管理角色→桌面端生效 | ✅ 可行RBAC 通过 JWT |
| Admin→管理 Prompt→桌面端使用 | ⚠️ Prompt 系统未接入桌面端 |
| Admin→知识库→桌面端搜索 | ❌ 两端实现不同(本地 vs SaaS |
---
## 六、优先修复建议
### P0 - 必须修复(影响核心用户体验)
1. **POST /auth/register 服务器崩溃** - `ConnectInfo<SocketAddr>``auth/handlers.rs:65` 引发 panic需要改用 `Optional` 或移除该 extractor
2. **GET /usage 500 错误** - `model_config/types.rs:148-149``from/to` 字段为 `Option<String>`,但 SQL 绑定到 `$2::timestamptz`,需改为 `Option<chrono::DateTime>` 或在查询中解析
3. **POST /auth/refresh 500 错误** - `refresh_tokens` 表的 `expires_at` 列类型为 TEXT需迁移为 TIMESTAMPTZ 或在查询中显式转换
4. **Tauri 桌面端 SaaS 平台页加载失败** - 排查 saasStore 连接逻辑,可能是 token 传递或 API 路径问题
5. **Tauri 桌面端 订阅与计费页加载失败** - 同上,与 billing API 交互失败
### P1 - 应该修复(影响功能完整性)
4. **Knowledge 前端 8 个断链路由** - 前端调了后端不存在的路由,需补齐后端或修正前端
5. **技能管理前端为空** - 75 个 SKILL.md 未加载到桌面端,可能是 Gateway 加载逻辑问题
6. **Model Groups 完整模块未接入前端** - 后端 5 个端点已实现Admin 无页面
### P2 - 建议修复(提升产品完成度)
7. **34 个后端路由未接入前端** - 包括 TOTP 2FA、设备管理、配置同步等
8. **积分系统显示"开发中"** - 补齐或隐藏
9. **MCP 服务前端未接入** - 只能手动配置
10. **Usage Service 空壳** - service 定义了但无页面使用
---
## 七、验证方法说明
- **Tauri 桌面端**: 通过 Tauri MCP (Chrome DevTools Protocol) 进行 DOM 交互、截图、JS 执行验证
- **SaaS 后端**: 通过 curl 对全部 103 个 API 端点进行 HTTP 状态码验证
- **Admin V2**: 通过代码分析services/*.ts + pages/*.tsx对比后端路由定义crates/zclaw-saas/src/*/mod.rs
- **Admin V2 浏览器验证**: Tauri MCP 在 Admin V2 (5173) 上 DOM 查询超时(疑似 Vite HMR CSP 限制),仅截图可用

View File

@@ -0,0 +1,204 @@
# ZCLAW 发散式探讨 — 管家主动性与行业配置体系
> 日期: 2026-04-12
> 形式: 发散式互动探讨
> 参与者: iven + Claude
> 计划产出: `plans/fancy-kindling-karp.md`
---
## 议题Agent 对话主动性 — 如何让管家主动解决问题?
### 抛砖
管家模式已有痛点检测、用户画像、人格检测、Heartbeat 等感知能力,但感知完之后什么都没做。用户提出讨论如何让 agent 主动去解决用户提出的问题,让用户觉得系统人性化、是合格管家。
---
## 一、现状诊断
### 感知层 vs 行动层
**核心发现:感知层齐了,行动层为零。**
| 已有能力 | 状态 | 核心局限 |
|----------|------|---------|
| ButlerRouter 关键词路由 (4域81词) | ✅ | 只注入 prompt不改变行为模式 |
| 痛点检测+聚合 (18信号词) | ✅ | 检测后只存储,不触发行动 |
| 用户画像 (7维度) | ✅ | 只在 prompt 里一行摘要 |
| 人格检测 (含 proactiveness) | ✅ | 检测了但无行为差异 |
| Heartbeat (5项检查) | ✅ | 检查结果不推向用户 |
| 经验闭环 (痛点→方案→经验) | ✅ | 静默复用,用户无感 |
| 冷启动 (4阶段状态机) | ✅ | 只首次,固定问候语 |
**一句话:管家能"看到"用户的痛点、画像、情绪,但看完之后什么都没做。**
### Hermes 分析的关键启发
讨论前先读了 `wiki/hermes-analysis.md`Hermes Agent 44.1K stars 竞品分析),核心洞察:
> **"大多数 Agent 记录了'发生了什么'Hermes 提取了'什么有效'"**
ZCLAW 的痛点检测、画像积累、经验存储全是在**记录发生了什么**,但"什么有效"这一步断了。闭环没合上。
---
## 二、关键讨论与共识
### 2.1 主动性光谱
```
L0 被动响应 "你问我答" ← 当前位置
L1 主动理解 "你没说明白,我追问" ← 有痛点检测但不行动
L2 主动建议 "你问A我顺便提醒B" ← 近期目标
L3 主动行动 "检测到问题,我先做了" ← 中期目标
L4 预见行动 "你还没说,我已经准备好了" ← 远期愿景
```
**共识:目标 L2-L3。**
L4 不应该是弹窗通知,而是**"用户下次来的时候,管家已经准备好了"**。这符合之前"建议不代理"原则,也避免打扰。
### 2.2 主动性由谁驱动?
**讨论:** System Prompt 注入 vs Heartbeat 调度 vs 中间件规则?
**共识(参考 Hermes混合驱动Prompt 驱动为主。**
| 路径 | 占比 | 用途 |
|------|------|------|
| System Prompt 注入 | 80% | 对话内主动建议 |
| Heartbeat 调度 | 15% | 跨对话准备工作 |
| 中间件规则 | 5% | 安全兜底 |
**核心认知:主动性不是独立模块,是 prompt 质量的结果。** 当 system prompt 包含足够用户画像、痛点历史、过往经验时LLM 自然会产生主动行为。
### 2.3 学习驱动方式
**讨论:** Hermes 核心是"Agent 自己决定什么值得学习"。ZCLAW 要走这条路还是规则驱动?
**iven 提出关键约束:** ZCLAW 不仅面向医疗,面向所有行业。
**论证过程:**
纯规则驱动走不通——4 行业 81 关键词已经暴露问题每进入一个新行业就要写一套新规则。500 个关键词、20 个域,这不是产品是定制开发。
纯 LLM 驱动也不对——不可审计(企业客户问"Agent 学了什么"无法回答)、可能学错、隐私风险、成本问题。
**共识:混合模式 — LLM 做发动机,规则做刹车。**
```
规则管"不能做什么" → 安全边界、质量门控、触发信号
LLM 管"应该学什么" → 判断什么有效、提取经验、生成建议
```
**与 Hermes 的区别:** Hermes 无条件触发 Periodic NudgeZCLAW 采用**被动触发**
- 对话结束后检查触发信号(纯规则,零 LLM 成本)
- 有信号才调 LLM 提取
- 触发信号:痛点阈值跨过 / 隐式正反馈 / 连续 3+ 工具调用 / 用户纠正
### 2.4 行业配置架构
**iven 提出架构方向:** 行业配置做到 SaaS Admin 端Tauri 端初始化时选择行业,从 Admin 端获取配置。
**讨论重点:**
**Q: 行业配置粒度?**
- A: 模板化(空白表单)→ 灵活但质量低
- B: 预设+微调 → 快但不可扩展
- C: 分层(内置基础+Admin增强**共识选择**
共识C分层设计上预留向 A 演进。内置 4 行业基础配置保证质量Admin 可覆盖/增强,后续迁移内置到 Admin DB。
**Q: 一个用户可以属于多个行业吗?**
**共识:多行业并行。** Admin 控制用户可用的行业列表。ButlerRouter 只扫描授权行业的关键词多行业同时打分LLM 做最终判断。
**Q: 数据源?**
**共识Admin 管理为主。** SaaS Admin 是真相源Tauri 拉取+本地缓存(离线可用),增量同步。
### 2.5 Admin 用户管理增强
**iven 衍生提出:** Admin 用户管理需要全面升级:
| 新增能力 | 说明 |
|----------|------|
| 行业授权 | 控制用户可使用的行业列表 |
| 页面权限 | 控制用户在 Tauri 端能看到哪些页面/功能 |
| 套餐关联 | 用户关联 BillingPlan |
| Agent 模板 | 初始 Agent 人格、预配技能、工作流 |
### 2.6 实施顺序
**iven 确认:全套一起做。** 顺序:
1. 4 个行业内置配置
2. 学习循环基础
3. Tauri 行业配置加载
4. Admin 行业管理 API+UI
---
## 三、Hermes 参考要点
| 维度 | Hermes 做法 | ZCLAW 借鉴 |
|------|------------|-----------|
| 学习循环 | Periodic Nudge + Skill 自动创建 | 被动触发 + 经验→技能补丁(成本更低) |
| 记忆分层 | 4 层(声明/情景/程序/用户建模) | 增强现有 3 层注入力度 + Prompt 冻结 |
| Prompt Cache | Frozen MEMORY.md技能用 user message | 计划引入会话内冻结策略 |
| 上下文压缩 | 多级策略剪裁→保护头尾→LLM摘要 | 计划增强 CompactionMiddleware |
| 技能进化 | 自动 patch 更新 | 计划引入(经验→技能补丁) |
| 用户建模 | Honcho 方言式建模 12 维度 | 增强 UserProfiler 的注入格式 |
---
## 四、主动性架构全貌
```
SaaS Admin真相源
├── 行业配置 (关键词/Prompt/技能优先级/痛点种子)
├── 用户权限 (页面可见/行业授权/套餐/Agent模板)
└── 管理 API
│ Tauri 初始化拉取 + 缓存
Tauri 客户端
├── 感知层(已有,需增强注入力度)
│ ├── ButlerRouter → 多行业动态关键词
│ ├── PainDetector → 18信号词 + 触发信号
│ ├── UserProfiler → 7维度 + 行业偏好
│ └── PersonalityDetector → proactiveness 维度
├── 学习层(新增,混合驱动)
│ ├── 规则触发(低成本前置判断)
│ ├── LLM 提取("什么有效"
│ ├── 安全过滤DataMasking + 格式校验)
│ └── 持久化ExperienceStore + UserProfile
├── 注入层(已有,需增强)
│ └── System Prompt 组装(会话开始时冻结)
│ ├── 行业上下文
│ ├── 用户画像摘要
│ ├── 活跃痛点
│ ├── 相关经验
│ └── 人格偏好
└── LLM → 自然产生主动行为
"我注意到..." / "顺便提醒..." / "上次您提到的..."
```
---
## 五、计划产出
完整实施计划:`plans/fancy-kindling-karp.md`
5 个 Phase、17 个 Task
| Phase | 内容 | 依赖 |
|-------|------|------|
| Phase 1 | 行业配置基础(数据模型 + 4行业内置 + ButlerRouter改造 | 无 |
| Phase 2 | 学习循环基础(触发信号 + LLM提取 + 经验增强) | Phase 1.1 |
| Phase 3 | Tauri 行业配置加载(拉取缓存 + Rust注入 + Prompt组装 + 行业UI | Phase 1+2 |
| Phase 4 | Admin 用户管理增强(行业管理页 + Accounts增强 + SaaS API + 页面可见性) | Phase 1可与2/3并行 |
| Phase 5 | 主动行为激活Prompt冻结 + 跨会话连续性 + Periodic Reflection + 注入格式) | Phase 1-4 |
**iven 批准计划,将在新会话中推进实施。**

Binary file not shown.

After

Width:  |  Height:  |  Size: 818 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB