docs(wiki): 全量代码验证驱动更新 — 10页基于实际扫描非文档推测
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
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
关键数字修正: - Rust 74.5K行(原66K), Tauri命令 183(原182), SaaS路由 121 - 前端组件 104, lib/ 85文件, Store 17+4子store - TODO/FIXME 仅 8 个(前端4+Rust4) 内容增强: - 中间件完整14层注册清单含注册条件和优先级分类 - Store完整目录结构, Pipeline完整目录树 - Hands测试分布, Memory 16个Tauri命令列表 - 管家模式: 关键词路由→语义路由(TF-IDF)修正 - 代码健康度指标新增
This commit is contained in:
@@ -13,51 +13,88 @@ tags: [module, middleware, runtime]
|
||||
|
||||
**中间件是请求处理的管道,按优先级顺序执行。**
|
||||
|
||||
- 优先级 0-100,数值越大越先执行
|
||||
- 每层中间件可以: 修改请求 / 拦截响应 / 记录日志 / 注入上下文
|
||||
- 优先级 0-999,数值越小越先执行(`middleware.rs` 按升序排列)
|
||||
- 每层中间件实现 `AgentMiddleware` trait,4个 hook 点: `before_completion` / `before_tool_call` / `after_tool_call` / `after_completion`
|
||||
- 所有消息流(聊天、管家)都经过完整中间件链
|
||||
- 中间件可返回 `Stop`/`Block`/`AbortLoop` 决策来中断流程
|
||||
|
||||
## 代码逻辑
|
||||
|
||||
### 14 层中间件
|
||||
### 14 层中间件(注册顺序见 `kernel/mod.rs:190-345`)
|
||||
|
||||
关键中间件(按优先级排序):
|
||||
| # | 中间件 | 文件 | 职责 | 注册条件 |
|
||||
|---|--------|------|------|----------|
|
||||
| 1 | ButlerRouter | `middleware/butler_router.rs` | 语义技能路由 + system prompt 增强 | 始终 |
|
||||
| 2 | DataMasking | `middleware/data_masking.rs` | 手机号/身份证等敏感数据脱敏 | 始终 |
|
||||
| 3 | Compaction | `middleware/compaction.rs` | 超阈值时压缩对话历史 | `compaction_threshold > 0` |
|
||||
| 4 | Memory | `middleware/memory.rs` | 对话后自动提取记忆 | 始终 |
|
||||
| 5 | LoopGuard | `middleware/loop_guard.rs` | 防止工具调用无限循环 | 始终 |
|
||||
| 6 | TokenCalibration | `middleware/token_calibration.rs` | Token 用量校准 | 始终 |
|
||||
| 7 | SkillIndex | `middleware/skill_index.rs` | 注入技能索引到 system prompt | `!skill_index.is_empty()` |
|
||||
| 8 | Title | `middleware/title.rs` | 自动生成会话标题 | 始终 |
|
||||
| 9 | DanglingTool | `middleware/dangling_tool.rs` | 修复缺失的工具调用结果 | 始终 |
|
||||
| 10 | ToolError | `middleware/tool_error.rs` | 格式化工具错误供 LLM 恢复 | 始终 |
|
||||
| 11 | ToolOutputGuard | `middleware/tool_output_guard.rs` | 工具输出安全检查 | 始终 |
|
||||
| 12 | Guardrail | `middleware/guardrail.rs` | shell_exec/file_write/web_fetch 安全规则 | 始终 |
|
||||
| 13 | SubagentLimit | `middleware/subagent_limit.rs` | 限制并发子 agent | 始终 |
|
||||
| 14 | TrajectoryRecorder | `middleware/trajectory_recorder.rs` | 轨迹记录 + 压缩 | 始终 |
|
||||
|
||||
| 优先级 | 中间件 | 文件 | 职责 |
|
||||
|--------|--------|------|------|
|
||||
| 90 | DataMasking | `middleware/data_masking.rs` | 请求发送前数据脱敏 (手机号/身份证) |
|
||||
| ~500 | ButlerRouter | `middleware/butler_router.rs` | 4域关键词分类 + system prompt 增强 |
|
||||
| 650 | TrajectoryRecorder | `middleware/trajectory_recorder.rs` | 轨迹记录 + 压缩 |
|
||||
### 优先级分类(来自 `middleware.rs` 头注释)
|
||||
|
||||
其他 11 层: 认证、速率限制、日志、技能注入、记忆注入等。
|
||||
| 范围 | 类别 | 包含的中间件 |
|
||||
|------|------|-------------|
|
||||
| 100-199 | 上下文塑造 | Compaction, Memory |
|
||||
| 200-399 | 能力 | SkillIndex, Guardrail |
|
||||
| 400-599 | 安全 | LoopGuard, DataMasking |
|
||||
| 600-799 | 遥测 | TokenCalibration, Title, TrajectoryRecorder |
|
||||
|
||||
### 中间件执行流
|
||||
|
||||
```
|
||||
用户消息
|
||||
→ [优先级 90] DataMasking — 脱敏敏感数据
|
||||
→ [优先级 ~500] ButlerRouter — 关键词分类 + prompt 增强
|
||||
→ [优先级 650] TrajectoryRecorder — 记录请求轨迹
|
||||
→ [其他层] 认证/限流/日志/技能/记忆
|
||||
用户消息 → AgentLoop
|
||||
→ chain.run_before_completion(ctx)
|
||||
→ [按优先级升序] 每层 middleware.before_completion()
|
||||
→ Continue: 继续下一层
|
||||
→ Stop(reason): 中断循环,返回 reason
|
||||
→ LLM 调用
|
||||
→ 响应原路返回
|
||||
→ (工具调用时) chain.run_before_tool_call()
|
||||
→ Allow: 允许执行
|
||||
→ Block(msg): 阻止,返回错误给 LLM
|
||||
→ ReplaceInput: 替换参数后允许
|
||||
→ AbortLoop: 立即终止整个循环
|
||||
→ chain.run_after_tool_call()
|
||||
→ chain.run_after_completion()
|
||||
```
|
||||
|
||||
### 核心接口
|
||||
|
||||
```rust
|
||||
// crates/zclaw-runtime/src/middleware.rs
|
||||
trait AgentMiddleware: Send + Sync {
|
||||
fn name(&self) -> &str;
|
||||
fn priority(&self) -> i32 { 500 }
|
||||
async fn before_completion(&self, ctx: &mut MiddlewareContext) -> Result<MiddlewareDecision>;
|
||||
async fn before_tool_call(&self, ctx: &MiddlewareContext, tool_name: &str, tool_input: &Value) -> Result<ToolCallDecision>;
|
||||
async fn after_tool_call(&self, ctx: &mut MiddlewareContext, tool_name: &str, result: &Value) -> Result<()>;
|
||||
async fn after_completion(&self, ctx: &MiddlewareContext) -> Result<()>;
|
||||
}
|
||||
```
|
||||
|
||||
### 注册位置
|
||||
|
||||
中间件在 `crates/zclaw-runtime/` 中注册,Kernel 启动时加载。
|
||||
`crates/zclaw-kernel/src/kernel/mod.rs:190-345` — `create_middleware_chain()` 方法,13 次 `chain.register()` + 1 个条件注册。
|
||||
|
||||
## 关联模块
|
||||
|
||||
- [[butler]] — ButlerRouter 是管家模式的核心
|
||||
- [[chat]] — 每条消息经过完整中间件链
|
||||
- [[memory]] — 记忆注入层从 FTS5 检索并注入 system prompt
|
||||
- [[memory]] — Memory 中间件从对话提取记忆
|
||||
- [[hands-skills]] — SkillIndex 中间件注入技能索引
|
||||
|
||||
## 关键文件
|
||||
|
||||
| 文件 | 职责 |
|
||||
|------|------|
|
||||
| `crates/zclaw-runtime/src/middleware/` | 所有中间件实现 |
|
||||
| `crates/zclaw-runtime/src/middleware/butler_router.rs` | 管家路由器 |
|
||||
| `crates/zclaw-runtime/src/middleware/data_masking.rs` | 数据脱敏 |
|
||||
| `crates/zclaw-runtime/src/middleware/trajectory_recorder.rs` | 轨迹记录 |
|
||||
| `crates/zclaw-runtime/src/middleware.rs` | AgentMiddleware trait + MiddlewareChain |
|
||||
| `crates/zclaw-runtime/src/middleware/` | 14 个中间件实现 (14个 .rs 文件) |
|
||||
| `crates/zclaw-kernel/src/kernel/mod.rs:190-345` | 注册入口 |
|
||||
|
||||
Reference in New Issue
Block a user