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 77K行(274 .rs)、Tauri 189命令、SaaS 137 routes - Admin V2 17页、SaaS 16模块(含industry)、@reserved 22 - SQL 20迁移/42表、TODO/FIXME 4个、dead_code 16 内容更新: - known-issues: V13-GAP 全部标记已修复 + 三端联调测试结果 - middleware: 14层 runtime + 10层 SaaS HTTP 完整清单 - saas: industry模块、路由模块13个、数据表42个 - routing: Store含industryStore、21个Store文件 - butler: 行业配置接入ButlerPanel、4内置行业 - log: 三端联调+V13修复记录追加
5.2 KiB
5.2 KiB
title, updated, status, tags
| title | updated | status | tags | |||
|---|---|---|---|---|---|---|
| 中间件链 | 2026-04-14 | active |
|
中间件链
设计思想
中间件是请求处理的管道,按优先级顺序执行。
- 优先级 0-999,数值越小越先执行(
middleware.rs按升序排列) - 每层中间件实现
AgentMiddlewaretrait,4个 hook 点:before_completion/before_tool_call/after_tool_call/after_completion - 所有消息流(聊天、管家)都经过完整中间件链
- 中间件可返回
Stop/Block/AbortLoop决策来中断流程
代码逻辑
14 层 Runtime 中间件(注册顺序见 kernel/mod.rs:248-361)
| # | 中间件 | 文件 | 职责 | 注册条件 |
|---|---|---|---|---|
| 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 |
轨迹记录 + 压缩 | 始终 (V13-FIX-01 已注册) |
10 层 SaaS HTTP 中间件(zclaw-saas/src/main.rs)
| # | 中间件 | 职责 | 层级 |
|---|---|---|---|
| 1 | public_rate_limit_middleware | 公共端点限流 (20次/分钟/IP) | 公共路由 |
| 2 | api_version_middleware | API 版本校验 | 公共 + 认证路由 |
| 3 | request_id_middleware | 请求 ID 注入 | 公共 + 认证路由 |
| 4 | rate_limit_middleware | 认证端点限流 (5次/分钟/IP) | 认证路由 |
| 5 | auth_middleware | JWT 认证 + 权限校验 | 认证路由 |
| 6 | TimeoutLayer | 请求超时 15s | 认证路由 |
| 7 | api_version_middleware (relay) | API 版本校验 | Relay 路由 |
| 8 | request_id_middleware (relay) | 请求 ID 注入 | Relay 路由 |
| 9 | quota_check_middleware | 配额检查 | Relay 路由 |
| 10 | CORS / 其他 layer | 跨域等 | 全局 |
优先级分类(Runtime,来自 middleware.rs 头注释)
| 范围 | 类别 | 包含的中间件 |
|---|---|---|
| 100-199 | 上下文塑造 | Compaction, Memory |
| 200-399 | 能力 | SkillIndex, Guardrail |
| 400-599 | 安全 | LoopGuard, DataMasking |
| 600-799 | 遥测 | TokenCalibration, Title, 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()
核心接口
// 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-kernel/src/kernel/mod.rs:248-361 — create_middleware_chain() 方法,14 次 chain.register() + 1 个条件注册 (SkillIndex)。
关联模块
- butler — ButlerRouter 是管家模式的核心
- chat — 每条消息经过完整中间件链
- memory — Memory 中间件从对话提取记忆
- hands-skills — SkillIndex 中间件注入技能索引
关键文件
| 文件 | 职责 |
|---|---|
crates/zclaw-runtime/src/middleware.rs |
AgentMiddleware trait + MiddlewareChain |
crates/zclaw-runtime/src/middleware/ |
14 个中间件实现 (14个 .rs 文件) |
crates/zclaw-kernel/src/kernel/mod.rs:248-361 |
注册入口 |
crates/zclaw-saas/src/main.rs |
SaaS HTTP 中间件注册 (10 层) |