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
混合矩阵式审计:10 个功能模块 × 五维检查清单 - 项目整体健康度: 76/100 - 2 个 P0 (M4 双数据库 + 反思引擎 LLM 未接入) - 15 个 P1 (跨 M2/M3/M4/M5/M6/M7/M11) - 三类断链模式: 写了没接/接了不对/双实现未统一 - 三阶段修复路线图: P0(2-3天) → P1(5-7天) → P2(5-7天)
7.8 KiB
7.8 KiB
模块 M4 智能层 审计报告
审计版本: V12 审计日期: 2026-04-04 审计范围: 记忆/身份演化/反思引擎/心跳巡检/自主授权/上下文压缩 6 个子模块
1. 模块概况
功能描述
ZCLAW 智能层提供 Agent 的"认知能力":跨会话记忆、人格演化、行为反思、主动巡检、自主决策授权、上下文压缩。
涉及文件清单
前端
- 记忆:
store/memoryGraphStore.ts,lib/intelligence-client/memory.ts,components/MemoryPanel.tsx - 身份:
lib/intelligence-client/identity.ts,components/AgentOnboardingWizard.tsx - 反思:
lib/intelligence-client/reflection.ts,components/ReflectionLog.tsx - 心跳:
lib/intelligence-client/heartbeat.ts - 自主:
lib/autonomy-manager.ts,components/AutonomyConfig.tsx - 压缩:
lib/intelligence-client/fallback-compactor.ts
后端 (Rust)
- Intelligence 引擎:
desktop/src-tauri/src/intelligence/(memory.rs, identity.rs, reflection.rs, heartbeat.rs, compactor.rs) - Runtime 中间件:
crates/zclaw-runtime/src/middleware/(memory.rs, compaction.rs) - 存储:
crates/zclaw-growth/src/storage/sqlite.rs - Kernel 集成:
crates/zclaw-kernel/src/kernel/messaging.rs
2. 子模块逐个分析
2.1 Agent 记忆
| 检查维度 | 状态 | 详情 |
|---|---|---|
| 链路完整性 | ⚠️ | 双数据库问题 — 前端 UI 用 PersistentMemoryStore(LIKE 搜索),Runtime 中间件用 SqliteStorage(FTS5 搜索),两套独立 SQLite |
| 参数一致性 | ⚠️ | 前端 types?: MemoryType[](数组) vs 后端 memory_type?: string(单值) |
| 边界处理 | ✅ | 错误传播完整,embedding 失败优雅降级 |
| 状态管理 | ⚠️ | 前端手动刷新,无自动同步 |
| 安全 | ⚠️ | 无 content 长度限制,无 importance 范围验证 |
关键问题 [P0]: 双数据库导致:
- 用户手动保存的记忆不出现在对话记忆注入中
- Agent 自动提取的记忆不出现在前端记忆面板
- 前端记忆搜索用的是 LIKE 模糊匹配,文档声称的 FTS5 仅在 Runtime 层生效
2.2 身份演化
| 检查维度 | 状态 | 详情 |
|---|---|---|
| 链路完整性 | ✅ | identity_get/propose_change/approve_proposal 全部注册,UI 组件完整 |
| 参数一致性 | ✅ | Soul/Instructions 枚举匹配正确 |
| 边界处理 | ✅ | 快照上限 50,并发 Mutex 保护 |
| 状态管理 | ✅ | 文件系统持久化(store.json),重启恢复 |
| 安全 | ⚠️ | store.json 无加密,proposal_id 可预测 |
关键问题: user_profile 注入被注释掉(防止对话泄漏),心跳人格改进不会自动创建 identity proposal。整体功能可用但需手动触发。
2.3 反思引擎
| 检查维度 | 状态 | 详情 |
|---|---|---|
| 链路完整性 | ⚠️ | 命令全部注册,但 LLM 驱动未接入 |
| 参数一致性 | ✅ | 类型转换正确 |
| 边界处理 | ✅ | LLM 失败回退到规则分析,空记忆列表处理正确 |
| 状态管理 | ✅ | 对话计数器 + 双重触发条件 |
| 安全 | ✅ | 持久化 fire-and-forget 不影响主流程 |
关键问题 [P0]: reflection_reflect Tauri 命令传入 driver=None,即使配置 use_llm=true 也只用规则分析。LLM 分析路径从未在 Tauri 桌面端生效。
2.4 心跳巡检
| 检查维度 | 状态 | 详情 |
|---|---|---|
| 链路完整性 | ✅ | 后端引擎完整(5 项内置检查) |
| 参数一致性 | ✅ | 安静时间解析正确 |
| 边界处理 | ⚠️ | interval_minutes 无下限验证 |
| 状态管理 | ⚠️ | 不自动启动,需前端调用 heartbeat_init + heartbeat_start |
| 安全 | ⚠️ | 全局静态状态,所有 agent 共享 |
关键问题 [P1]: 心跳引擎完全依赖前端主动初始化和数据同步。MEMORY_STATS_CACHE、LAST_INTERACTION、CORRECTION_COUNTERS 三个全局缓存需前端定期调用命令填充,否则心跳检查返回空结果。
2.5 自主授权
| 检查维度 | 状态 | 详情 |
|---|---|---|
| 链路完整性 | ❌ | 纯前端实现,无后端 Rust 集成 |
| 参数一致性 | ⚠️ | workflow_trigger 映射到 autoCompaction,语义不匹配 |
| 边界处理 | ✅ | 高风险操作强制审批,自主模式禁止自我修改 |
| 状态管理 | ✅ | localStorage 持久化,审计日志 100 条上限 |
| 安全 | ❌ | 后端无强制检查,恶意用户可绕过前端直接调用 Tauri 命令 |
关键问题 [P1]: 自主授权仅是前端"咨询层",后端 MemoryMiddleware 等不检查自主授权级别。TOML 的 requires_approval 仅在 hand_execute 路径生效,其他操作完全绕过。
2.6 上下文压缩
| 检查维度 | 状态 | 详情 |
|---|---|---|
| 链路完整性 | ✅ | Runtime 中间件自动触发,Tauri 命令手动触发 |
| 参数一致性 | ⚠️ | 两套 CompactionConfig 默认值不同 |
| 边界处理 | ✅ | 空消息处理正确,LLM 失败回退 |
| 状态管理 | ✅ | 无状态设计,校准因子全局共享 |
| 安全 | ✅ | 校准使用 EMA + clamp,合理 |
关键问题: Tauri 层和 Runtime 层各有独立的压缩实现,代码重复但配置不同。Runtime 层是实际生效路径。
3. 问题清单
| ID | 描述 | 文件:行号 | 级别 |
|---|---|---|---|
| M4-01 | [P0] 双数据库: PersistentMemoryStore vs SqliteStorage 数据不共享 | memory/persistent.rs vs zclaw-growth/src/storage/sqlite.rs |
P0 |
| M4-02 | [P0] 反思引擎 LLM 未接入: reflection_reflect 传 driver=None | reflection.rs:759-766 |
P0 |
| M4-03 | [P1] 心跳不自动启动: 需前端手动初始化 | heartbeat.rs |
P1 |
| M4-04 | [P1] 自主授权后端无强制: 仅前端咨询层 | autonomy-manager.ts |
P1 |
| M4-05 | 前端记忆搜索用 LIKE 非 FTS5 | persistent.rs search() |
P1 |
| M4-06 | 前端 types 数组 vs 后端单值 | MemorySearchOptions 类型定义 |
P2 |
| M4-07 | 记忆 content 无长度限制 | memory_commands |
P2 |
| M4-08 | tags 参数标注 dead_code 未使用 | persistent.rs |
P2 |
| M4-09 | heartbeat interval_minutes 无下限验证 | heartbeat.rs |
P2 |
| M4-10 | identity proposal_id 可预测 | identity.rs rand_id() |
P2 |
| M4-11 | store.json 无加密 | identity.rs |
P2 |
| M4-12 | 自主授权 workflow_trigger 映射错误 | autonomy-manager.ts:271 |
P2 |
| M4-13 | 两套压缩实现代码重复 | compactor.rs vs compaction.rs |
P3 |
| M4-14 | heartbeat broadcast subscribe 未被使用 | heartbeat.rs |
P3 |
| M4-15 | heartbeat 历史截断 split_off 语义 | heartbeat.rs |
P3 |
4. 改进建议
短期修复(按优先级)
- [P0] 统一存储层:合并 PersistentMemoryStore 和 SqliteStorage,或让前端搜索也查询 SqliteStorage
- [P0] 在 reflection_reflect Tauri 命令中传入实际 LLM 驱动
- [P1] 自动启动心跳引擎(在 agent_chat_stream 或 Kernel 初始化中)
- [P1] 将自主授权关键检查移到 Rust 后端
长期架构建议
- 前端记忆搜索升级为 FTS5
- 移除 Tauri 层的重复压缩实现,统一使用 Runtime 中间件
- identity 持久化改为 SQLite
5. 健康度评分
| 维度 | 评分 | 说明 |
|---|---|---|
| 链路完整性 | 50/100 | 双数据库是架构级问题,LLM/心跳未接入 |
| 参数一致性 | 65/100 | 基本匹配但有多处类型/映射不一致 |
| 边界处理 | 70/100 | 整体较好,缺少输入验证 |
| 状态管理 | 65/100 | 多数子模块缺少自动触发/同步 |
| 安全资源 | 55/100 | 自主授权不强制、store.json 不加密 |
综合健康度: 61/100
两个 P0 级问题(双数据库 + 反思 LLM 未接入)是此模块的核心架构缺陷。智能层"写了但没接通"的问题最集中。