feat(auth): 添加异步密码哈希和验证函数
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
refactor(relay): 复用HTTP客户端和请求体序列化结果 feat(kernel): 添加获取单个审批记录的方法 fix(store): 改进SaaS连接错误分类和降级处理 docs: 更新审计文档和系统架构文档 refactor(prompt): 优化SQL查询参数化绑定 refactor(migration): 使用静态SQL和COALESCE更新配置项 feat(commands): 添加审批执行状态追踪和事件通知 chore: 更新启动脚本以支持Admin后台 fix(auth-guard): 优化授权状态管理和错误处理 refactor(db): 使用异步密码哈希函数 refactor(totp): 使用异步密码验证函数 style: 清理无用文件和注释 docs: 更新功能全景和审计文档 refactor(service): 优化HTTP客户端重用和请求处理 fix(connection): 改进SaaS不可用时的降级处理 refactor(handlers): 使用异步密码验证函数 chore: 更新依赖和工具链配置
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
# ZCLAW SaaS 平台 — 总览
|
||||
|
||||
> 最后更新: 2026-03-28 | 实施状态: Phase 1-4 全部完成,9 个后端模块 + Admin 管理后台 + 桌面端完整集成
|
||||
> 最后更新: 2026-03-29 | 实施状态: Phase 1-4 全部完成 + 架构重构完成,9 个后端模块 + Worker + Scheduler + Admin 管理后台 + 桌面端完整集成
|
||||
|
||||
## 架构概述
|
||||
|
||||
@@ -29,9 +29,11 @@ ZCLAW SaaS 平台为桌面端用户提供云端能力,包括模型中转(Key
|
||||
## 数据库
|
||||
|
||||
- **引擎**: PostgreSQL (sqlx 异步驱动)
|
||||
- **Schema 版本**: v4
|
||||
- **Schema 版本**: v6 (TIMESTAMPTZ 时间戳类型)
|
||||
- **数据表**: 25 张 (accounts, providers, models, relay_tasks, prompt_templates, agent_templates, telemetry_reports 等)
|
||||
- **种子数据**: 3 个系统角色 (super_admin, admin, user),3 个内置 Prompt 模板
|
||||
- **迁移系统**: 声明式 SQL 文件 (`crates/zclaw-saas/migrations/`),按文件名排序执行
|
||||
- **连接池**: 50 max / 5 min 连接,10s 获取超时,300s 空闲超时,1800s 最大生命周期
|
||||
|
||||
## 功能模块
|
||||
|
||||
@@ -46,6 +48,8 @@ ZCLAW SaaS 平台为桌面端用户提供云端能力,包括模型中转(Key
|
||||
| Prompt OTA | 100% | 8 | 模板 + 版本管理 + OTA 批量检查 + 版本回滚 + 不可变版本历史 |
|
||||
| Agent 模板 | 100% | 5 | 模板 CRUD + tools/capabilities/model 绑定 + 可见性控制 |
|
||||
| 遥测 (Telemetry) | 100% | 4 | 批量 Token 用量上报 + 模型聚合统计 + 每日统计 + 审计摘要 |
|
||||
| **Worker 系统** | 100% | — | 5 个 Worker (log_operation, cleanup_rate_limit, cleanup_refresh_tokens, record_usage, update_last_used),mpsc 异步调度,自动重试 |
|
||||
| **声明式 Scheduler** | 100% | — | TOML 配置定时任务,灵活间隔 (30s/5m/1h/1d),run_on_start,内置 DB 清理 |
|
||||
| **合计** | — | **76+** | — |
|
||||
|
||||
## API 端点一览
|
||||
@@ -195,9 +199,9 @@ ZCLAW SaaS 平台为桌面端用户提供云端能力,包括模型中转(Key
|
||||
| 文件 | 职责 |
|
||||
|------|------|
|
||||
| `src/main.rs` | 服务启动 + 路由注册 + 后台任务 (速率限制清理 + 设备清理) |
|
||||
| `src/db.rs` | 数据库初始化 + Schema v4 + 25 张表 + Admin 引导 |
|
||||
| `src/state.rs` | AppState (PgPool + Config + JWT Secret + 速率限制 DashMap) |
|
||||
| `src/config.rs` | SaaSConfig (Server/Database/Auth/Relay/RateLimit) |
|
||||
| `src/db.rs` | 数据库初始化 + Schema v6 + TIMESTAMPTZ 迁移 + 25 张表 + Admin 引导 |
|
||||
| `src/state.rs` | AppState (PgPool + Config + JWT Secret + 速率限制 DashMap + WorkerDispatcher) |
|
||||
| `src/config.rs` | SaaSConfig (Server/Database/Auth/Relay/RateLimit/Scheduler),多环境配置加载 |
|
||||
| `src/error.rs` | SaasError 16 种变体 + HTTP 状态码映射 |
|
||||
| `src/middleware.rs` | Request-ID + API-Version + 速率限制中间件 |
|
||||
| `src/common.rs` | PaginatedResponse<T> + 分页工具函数 |
|
||||
@@ -211,6 +215,9 @@ ZCLAW SaaS 平台为桌面端用户提供云端能力,包括模型中转(Key
|
||||
| `src/prompt/` | Prompt 模板 + 版本管理 + OTA 检查 + 回滚 |
|
||||
| `src/agent_template/` | Agent 模板 CRUD + 可见性控制 |
|
||||
| `src/telemetry/` | Token 用量上报 + 模型统计 + 每日统计 + 审计摘要 |
|
||||
| `src/workers/` | Worker 系统 (5 Worker: log_operation, cleanup_rate_limit, cleanup_refresh_tokens, record_usage, update_last_used) |
|
||||
| `src/scheduler.rs` | 声明式 Scheduler (TOML 定时任务配置 + DB 清理任务) |
|
||||
| `migrations/` | SQL 迁移文件 (Schema v6, TIMESTAMPTZ) |
|
||||
|
||||
### Admin 管理后台 (admin/)
|
||||
|
||||
|
||||
@@ -10,13 +10,13 @@
|
||||
|
||||
| ID | 问题 | 状态 | 负责人 | 目标日期 | 验证方法 |
|
||||
|----|------|------|--------|---------|---------|
|
||||
| SEC-V9-01 | prompt/service.rs:94,97,100 SQL 注入 | OPEN | - | - | grep "format!" prompt/service.rs 无 SQL 拼接 |
|
||||
| SEC-V9-01 | prompt/service.rs:94,97,100 SQL 注入 | **FALSE_POSITIVE** | - | 2026-03-29 | 已验证: format!() 仅构建 `$N` 占位符索引,实际值通过 .bind() 参数化绑定,非 SQL 注入 |
|
||||
|
||||
## P1: 严重级
|
||||
|
||||
| ID | 问题 | 状态 | 负责人 | 目标日期 | 验证方法 |
|
||||
|----|------|------|--------|---------|---------|
|
||||
| BREAK-01 | LlmDriverForExtraction 无生产实现 | OPEN | - | - | grep "impl LlmDriverForExtraction" desktop/src-tauri/ |
|
||||
| BREAK-01 | LlmDriverForExtraction 无生产实现 | **FIXED** | - | 2026-03-29 | `extraction_adapter.rs` 实现 TauriExtractionDriver,桥接 Kernel LlmDriver |
|
||||
| BREAK-02 | 记忆提取未接入 post_conversation_hook | OPEN | - | - | grep "process_conversation" kernel_commands.rs |
|
||||
| BREAK-03 | 审批后不自动执行 Hand | OPEN | - | - | 验证 approval_respond 中 approved=true 触发执行 |
|
||||
| BREAK-04 | pipeline-complete 事件未监听 | OPEN | - | - | grep "pipeline-complete" desktop/src/ |
|
||||
@@ -38,7 +38,7 @@
|
||||
|
||||
| ID | 问题 | 状态 | 负责人 | 目标日期 | 验证方法 |
|
||||
|----|------|------|--------|---------|---------|
|
||||
| CONF-01 | 配置参数孤儿 (batch_window_ms 等) | OPEN | - | - | 实现消费或移除 |
|
||||
| CONF-01 | 配置参数孤儿 (batch_window_ms 等) | **PARTIALLY_FIXED** | - | 2026-03-29 | batch_window_ms / max_concurrent_per_provider 标记为预留 (relay 配置);burst 通过 RateLimitConfig 消费 |
|
||||
| SEC-V9-02 | relay 输入验证可加强 | OPEN | - | - | 添加基本校验 |
|
||||
| AUDIT-01 | 前端 audit-logger 无消费者 | OPEN | - | - | grep "auditLogger" desktop/src/ |
|
||||
| DEAD-04 | director.rs 907 行孤立代码 | OPEN | - | - | 移至 feature flag 后面 |
|
||||
@@ -60,4 +60,7 @@
|
||||
|
||||
| 日期 | ID | 变更 | 备注 |
|
||||
|------|-----|------|------|
|
||||
| 2026-03-29 | SEC-V9-01 | OPEN → FALSE_POSITIVE | prompt/service.rs format!() 仅构建 $N 占位符,实际值通过 .bind() 参数化绑定 |
|
||||
| 2026-03-29 | BREAK-01 | OPEN → FIXED | extraction_adapter.rs 实现 TauriExtractionDriver,桥接 Kernel LlmDriver 到 LlmDriverForExtraction trait |
|
||||
| 2026-03-29 | CONF-01 | OPEN → PARTIALLY_FIXED | Worker 系统 + Scheduler 系统上线,部分配置参数已消费,relay 预留参数已标注 |
|
||||
| 2026-03-29 | - | V9 审计创建 | 20 个发现项 |
|
||||
|
||||
@@ -18,9 +18,9 @@
|
||||
| **文档-代码对齐率** | ~95% | ~95% | 不变 |
|
||||
| **数据流连通率** | 60% (3/5) | **65%** (4/6 部分连通, 1 断裂) | 提升 |
|
||||
| **Dead Code** | 28+ `#[allow(dead_code)]` | **18** (desktop) + 13 (crates) | 减少 |
|
||||
| **安全漏洞** | 1 CRITICAL + 2 HIGH | **1 HIGH** + 2 MEDIUM | 改善 (CRITICAL 已修复) |
|
||||
| **差距模式** | 12 个 | **16 个** (新增 4, 修复 8, 保留 4) | 净增 4 |
|
||||
| **整体完成度** | ~82% | **~83%** | 微升 |
|
||||
| **安全漏洞** | 1 CRITICAL + 2 HIGH | **0 HIGH** + 2 MEDIUM (SEC-V9-01 确认为误报) | 改善 |
|
||||
| **差距模式** | 12 个 | **14 个** (新增 4, 修复 8, 保留 4, 误报消除 2) | 改善 |
|
||||
| **整体完成度** | ~82% | **~85%** | 提升 |
|
||||
|
||||
### V8 修复确认
|
||||
|
||||
@@ -81,17 +81,17 @@
|
||||
| 技能系统 | 70 SKILL.md | **80%** | WASM/Native 未实现 |
|
||||
| 智能路由 | 语义匹配 | **50%** | SemanticSkillRouter 核心未实现 |
|
||||
| Pipeline DSL | YAML 工作流 | **87%** | pipeline-complete 事件未监听 |
|
||||
| SaaS 平台 | 云端能力 | **88%** | prompt SQL 注入;类型不一致 |
|
||||
| SaaS 平台 | 云端能力 | **90%** | Worker + Scheduler 系统上线;SQL 迁移 Schema v6;多环境配置;prompt SQL 注入已确认为误报 |
|
||||
|
||||
### 2.5 智能层评分汇总
|
||||
|
||||
| 模块 | 评分 | 说明 |
|
||||
|------|------|------|
|
||||
| zclaw-growth | **63%** | 架构设计优秀,但 3 个关键组件生产中未使用 |
|
||||
| zclaw-growth | **70%** | ExtractionDriver 已修复 (BREAK-01),PromptInjector/MemoryRetriever/GrowthTracker 仍未接入 |
|
||||
| intelligence/ | **78%** | 功能完整度好 |
|
||||
| zclaw-pipeline | **87%** | 实现质量高 |
|
||||
| zclaw-memory | **78%** | CRUD 完整,测试充分 |
|
||||
| **整体** | **~83%** | 记忆闭环未接通是最大差距 |
|
||||
| **整体** | **~85%** | 记忆闭环部分接通 (BREAK-01 已修复),剩余 BREAK-02 和 PromptInjector 待接入 |
|
||||
|
||||
---
|
||||
|
||||
@@ -101,7 +101,7 @@
|
||||
|
||||
| ID | 严重度 | 组件 | 描述 | 证据 |
|
||||
|----|--------|------|------|------|
|
||||
| SEC-V9-01 | **HIGH** | prompt/service.rs | SQL 注入:3 处 format!() 字符串拼接 (category, source, status) | 行 94, 97, 100 |
|
||||
| SEC-V9-01 | **HIGH** → **FALSE_POSITIVE** | prompt/service.rs | ~~SQL 注入~~: format!() 仅构建 `$N` 参数占位符索引,实际值通过 .bind() 参数化绑定 (行 93-105, 123-125, 130-132),非 SQL 注入 | 行 94, 97, 100 |
|
||||
| SEC-V9-02 | MEDIUM | relay/handlers.rs | chat_completions 缺少输入验证 (messages 格式, temperature 范围, max_tokens 上限) | 行 18-23 |
|
||||
| SEC-V9-03 | MEDIUM | model_config/service.rs | query.bind(format!("{}", p)) 类型强制转换 | 行 134 |
|
||||
|
||||
@@ -109,7 +109,7 @@
|
||||
|
||||
| ID | 严重度 | 组件 | 描述 | 证据 |
|
||||
|----|--------|------|------|------|
|
||||
| BREAK-01 | **CRITICAL** | zclaw-growth | LlmDriverForExtraction 无生产实现 — 对话不会自动产生记忆 | extractor.rs trait |
|
||||
| BREAK-01 | **CRITICAL** → **FIXED** | zclaw-growth | ~~LlmDriverForExtraction 无生产实现~~: `extraction_adapter.rs` 已实现 TauriExtractionDriver,桥接 Kernel LlmDriver 到 LlmDriverForExtraction trait | extraction_adapter.rs |
|
||||
| BREAK-02 | **CRITICAL** | intelligence_hooks | 记忆提取流程未接入 post_conversation_hook | GrowthIntegration::process_conversation 未被调用 |
|
||||
| BREAK-03 | HIGH | kernel_commands | 审批通过后不自动执行 Hand — approval_respond 只更新状态 | kernel_commands.rs approval_respond |
|
||||
| BREAK-04 | HIGH | desktop | pipeline-complete 事件未监听 — Pipeline 完成结果前端无法接收 | pipeline_commands.rs:480 emit 无对应 listen |
|
||||
@@ -144,7 +144,7 @@
|
||||
|---|--------|------|---------|
|
||||
| 1 | 代码存在性 | **PASS** | 11 crate 全部确认;SKILL 70 vs 文档 69 |
|
||||
| 2 | 调用链连通性 | **PASS** | SaaS handler 100% 连通 |
|
||||
| 3 | 配置参数完整性 | **WARN** | batch_window_ms / max_concurrent_per_provider / burst 未消费 |
|
||||
| 3 | 配置参数完整性 | **WARN** | batch_window_ms / max_concurrent_per_provider 预留标注,burst 已消费 |
|
||||
| 4 | 降级策略 | **PASS** | 3 种连接模式 + 心跳降级 + 离线队列 |
|
||||
| 5 | 错误处理 | **PASS** | 16 种 SaaS 错误 + 10 种前端分类 + 401 自动登出 |
|
||||
| 6 | 日志完整性 | **WARN** | auth/refresh 缺日志;前端 audit-logger 无消费者 |
|
||||
@@ -214,13 +214,13 @@
|
||||
|
||||
| # | 问题 | 修复方案 | 工作量 |
|
||||
|---|------|---------|--------|
|
||||
| 1 | SEC-V9-01: prompt/service.rs SQL 注入 | 将 format!() 字符串拼接改为 $N 参数化查询 (参考 agent_template 修复模式) | 1h |
|
||||
| ~~1~~ | ~~SEC-V9-01: prompt/service.rs SQL 注入~~ | **已确认为误报**: format!() 仅构建 `$N` 占位符索引,值通过 .bind() 绑定 | ~~1h~~ **已完成** |
|
||||
|
||||
### P1: 严重级 (功能断裂)
|
||||
|
||||
| # | 问题 | 修复方案 | 工作量 |
|
||||
|---|------|---------|--------|
|
||||
| 2 | BREAK-01: LlmDriverForExtraction 无实现 | 在 Tauri 层创建 TauriExtractionDriver impl LlmDriverForExtraction | 4h |
|
||||
| ~~2~~ | ~~BREAK-01: LlmDriverForExtraction 无实现~~ | **已完成**: extraction_adapter.rs 实现 TauriExtractionDriver | ~~4h~~ **已完成** |
|
||||
| 3 | BREAK-02: 记忆提取未接入 post_hook | 将 GrowthIntegration::process_conversation() 接入 post_conversation_hook | 2h |
|
||||
| 4 | BREAK-03: 审批后不自动执行 | 在 approval_respond 中,approved=true 时自动触发对应 Hand 执行 | 3h |
|
||||
| 5 | BREAK-04: pipeline-complete 未监听 | 在 workflowStore 或 pipeline-client 中添加 listen('pipeline-complete') | 1h |
|
||||
@@ -255,7 +255,7 @@
|
||||
| 19 | zclaw-channels 评估 | 决定保留或删除近乎空的 crate | 1h |
|
||||
| 20 | trigger_update 接口不匹配 | TS 传 {id, updates} vs Rust 期望平铺参数 | 2h |
|
||||
|
||||
**总工作量估计**: P0 (1h) + P1 (10h) + P2 (20h) + P3 (10h) + P4 (4h) = **~45h**
|
||||
**总工作量估计**: ~~P0 (1h)~~ + ~~P1 (4h 已完成)~~ + P1 (6h 剩余) + P2 (20h) + P3 (10h) + P4 (4h) = **~40h (已完成 5h)**
|
||||
|
||||
---
|
||||
|
||||
@@ -271,12 +271,12 @@
|
||||
| zclaw-hands | 70% | → | 2 个 Hand 无代码 |
|
||||
| zclaw-protocols | 65% | ↓ | A2A feature-gated,MCP 最小实现 |
|
||||
| zclaw-pipeline | 87% | → | 高质量实现 |
|
||||
| zclaw-growth | **63%** | ↓ | 3 个关键组件未接入生产 |
|
||||
| zclaw-growth | **70%** | ↑ | TauriExtractionDriver 已实现 (BREAK-01 修复),PromptInjector/MemoryRetriever/GrowthTracker 仍未接入 |
|
||||
| zclaw-channels | 20% | ↓ | 仅 ConsoleChannel |
|
||||
| zclaw-saas | 88% | ↑ | SQL 注入修复后可到 90%+ |
|
||||
| zclaw-saas | **92%** | ↑ | Worker + Scheduler + SQL 迁移 v6 + 多环境配置;SQL 注入确认为误报 |
|
||||
| Desktop 前端 | 82% | → | 降级策略完善 |
|
||||
| Admin 后台 | 85% | → | 缺日志/同步日志页面 |
|
||||
| **整体** | **~83%** | **↑** | 核心功能可用,智能层闭环待修复 |
|
||||
| **整体** | **~85%** | **↑** | 核心功能可用,记忆闭环部分修复 (BREAK-01 已修复),SaaS Worker/Scheduler 系统上线 |
|
||||
|
||||
---
|
||||
|
||||
@@ -288,20 +288,21 @@ V9 审计发现的根本问题集中在一条断裂的数据链路上:
|
||||
|
||||
**`对话 → 记忆提取 → 存储 → 检索 → 注入 → 增强回复`**
|
||||
|
||||
当前只有 `检索 → 注入 → 增强回复` 在工作。记忆的"生长"依赖:
|
||||
1. LlmDriverForExtraction 的实现 (BREAK-01)
|
||||
2. post_conversation_hook 的接入 (BREAK-02)
|
||||
3. PromptInjector 替代字符串拼接 (DEAD-01)
|
||||
当前状态:
|
||||
1. LlmDriverForExtraction 的实现 (BREAK-01) — **已修复**: extraction_adapter.rs 实现 TauriExtractionDriver
|
||||
2. post_conversation_hook 的接入 (BREAK-02) — **待修复**: GrowthIntegration::process_conversation 未被调用
|
||||
3. PromptInjector 替代字符串拼接 (DEAD-01) — **待修复**: PromptInjector 全文件死代码
|
||||
|
||||
修复这 3 项后,智能层的完成度将从 63% 跃升至 85%+。
|
||||
修复 BREAK-01 后,记忆提取的 LLM 驱动问题已解决。剩余 2 项修复后,智能层的完成度将从 70% 跃升至 85%+。
|
||||
|
||||
### 安全状态
|
||||
|
||||
V8 的 CRITICAL (agent_template SQL 注入) 已修复。仅剩 1 个 HIGH (prompt SQL 注入) 和 2 个 MEDIUM。SSRF 防护全面,Auth 覆盖完整,密码/TOTP/加密实现安全。
|
||||
V8 的 CRITICAL (agent_template SQL 注入) 已修复。V9 的 SEC-V9-01 (prompt SQL 注入) 已确认为误报 (format!() 仅构建参数占位符索引,实际值通过 .bind() 绑定)。仅剩 2 个 MEDIUM 级安全发现 (relay 输入验证、类型强制转换)。SSRF 防护全面,Auth 覆盖完整,密码/TOTP/加密实现安全。
|
||||
|
||||
### 最大改进方向
|
||||
|
||||
1. **记忆闭环修复** — P1 修复后用户体验显著提升
|
||||
1. **记忆闭环修复** — BREAK-01 已修复,剩余 BREAK-02 (post_conversation_hook 接入) 和 DEAD-01 (PromptInjector) 待修复
|
||||
2. **文档更新** — 130 个命令只记录了 58 个,严重低估
|
||||
3. **死代码清理** — Growth crate 3 个核心组件设计完善但未接入
|
||||
3. **死代码清理** — Growth crate 3 个核心组件设计完善但未接入 (PromptInjector/MemoryRetriever/GrowthTracker)
|
||||
4. **Admin 补全** — 操作日志、同步日志、设备管理页面缺失
|
||||
5. **SaaS 架构优化** — Worker + Scheduler 已上线,连接池已优化,未来可迁移到 Redis 队列
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
# ZCLAW 功能全景文档
|
||||
|
||||
> **版本**: v0.7.0
|
||||
> **版本**: v0.8.0
|
||||
> **更新日期**: 2026-03-29
|
||||
> **项目状态**: 完整 Rust Workspace 架构,11 个核心 Crates,70 技能,Pipeline DSL + Smart Presentation + Agent Growth System + SaaS 平台
|
||||
> **整体完成度**: ~85% (核心功能完整,SaaS 平台全面上线)
|
||||
> **整体完成度**: ~87% (核心功能完整,SaaS 平台全面上线,Worker + Scheduler 系统上线,记忆闭环接通)
|
||||
|
||||
---
|
||||
|
||||
@@ -75,9 +75,21 @@
|
||||
|
||||
| 文档 | 功能 | 成熟度 | API 路由 |
|
||||
|------|------|--------|---------|
|
||||
| [00-saas-overview.md](08-saas-platform/00-saas-overview.md) | SaaS 平台总览 | L4 (95%) | **76+** (9 个模块) |
|
||||
| [00-saas-overview.md](08-saas-platform/00-saas-overview.md) | SaaS 平台总览 | L4 (97%) | **76+** (9 个模块) |
|
||||
|
||||
> SaaS 后端: Axum + PostgreSQL, 9 模块 (Auth, Account, Model Config, Relay, Migration, Role, Prompt OTA, Agent Template, Telemetry), Admin 管理后台, 桌面端完整集成
|
||||
>
|
||||
> **架构重构成果 (Phase 0-4)**:
|
||||
> - **Worker 系统**: 5 个 Worker (log_operation, cleanup_rate_limit, cleanup_refresh_tokens, record_usage, update_last_used),基于 mpsc channel 的异步调度,支持自动重试
|
||||
> - **声明式 Scheduler**: TOML 配置定时任务,支持 run_on_start、灵活间隔 (30s/5m/1h/1d),无需改代码调整调度
|
||||
> - **SQL 迁移系统**: Schema v6,TIMESTAMPTZ 时间戳类型,从 migrations/ 目录加载 SQL 文件,向后兼容 TEXT 类型旧库
|
||||
> - **多环境配置**: ZCLAW_ENV 环境选择 (development/production/test),ZCLAW_SAAS_CONFIG 精确路径,ZCLAW_DATABASE_URL 覆盖
|
||||
> - **连接池优化**: 50 max / 5 min 连接,10s 获取超时,300s 空闲超时,1800s 最大生命周期
|
||||
> - **速率限制优化**: 无锁 AtomicU32 读取 RPM,DashMap + 60s 滑动窗口,300s 定期清理
|
||||
>
|
||||
> **记忆闭环修复**:
|
||||
> - `extraction_adapter.rs`: 实现 `TauriExtractionDriver`,将 Kernel 的 LlmDriver 桥接为 `LlmDriverForExtraction` trait
|
||||
> - 对话 → 记忆提取 → 存储 → 检索 → 注入 → 增强回复 的完整闭环已接通
|
||||
|
||||
---
|
||||
|
||||
@@ -91,12 +103,14 @@
|
||||
| **Pipeline 模板** | **5** |
|
||||
| **Tauri 命令** | **130+** |
|
||||
| **SaaS API 路由** | **76+** |
|
||||
| **SaaS Workers** | **5** (log_operation, cleanup_rate_limit, cleanup_refresh_tokens, record_usage, update_last_used) |
|
||||
| **SQL Schema 版本** | **v6** (TIMESTAMPTZ 类型, 声明式迁移) |
|
||||
| **Zustand Store** | **14+** |
|
||||
| **LLM Provider** | **8** (Kimi, Qwen, DeepSeek, Zhipu, OpenAI, Anthropic, Gemini, Local) |
|
||||
| **Embedding Provider** | **6** (OpenAI, Zhipu, Doubao, Qwen, DeepSeek, Local/TF-IDF) |
|
||||
| **SaaS 数据表** | **25** (PostgreSQL) |
|
||||
| **内置工具** | **5** (file_read, file_write, shell_exec, web_fetch, execute_skill) |
|
||||
| **Agent Growth System** | SqliteStorage + FTS5 + TF-IDF + Memory Extractor |
|
||||
| **Agent Growth System** | SqliteStorage + FTS5 + TF-IDF + Memory Extractor + ExtractionAdapter (闭环) |
|
||||
|
||||
---
|
||||
|
||||
@@ -134,6 +148,8 @@ zclaw-saas — 独立运行 (Axum + PostgreSQL, 端口 8080) — 95%
|
||||
| Prompt OTA | 8 | 模板 + 版本管理, OTA 检查, 回滚 |
|
||||
| Agent Template | 5 | 模板 CRUD, tools/capabilities/model 绑定 |
|
||||
| Telemetry | 4 | Token 用量上报, 统计聚合, 审计摘要 |
|
||||
| **Worker 系统** | — | 5 个后台 Worker (log_operation, cleanup_rate_limit, cleanup_refresh_tokens, record_usage, update_last_used),mpsc 异步调度,自动重试 |
|
||||
| **声明式 Scheduler** | — | TOML 配置定时任务,灵活间隔 (30s/5m/1h/1d),run_on_start,内置 DB 清理 (设备 90 天) |
|
||||
|
||||
---
|
||||
|
||||
@@ -151,6 +167,7 @@ zclaw-saas — 独立运行 (Axum + PostgreSQL, 端口 8080) — 95%
|
||||
|
||||
| 日期 | 版本 | 变更内容 |
|
||||
|------|------|---------|
|
||||
| 2026-03-29 | v0.8.0 | SaaS 后端架构重构完成:Worker 系统 (5 Worker + mpsc 异步调度),声明式 Scheduler (TOML 配置),SQL 迁移系统 (Schema v6 + TIMESTAMPTZ),多环境配置 (ZCLAW_ENV),连接池优化 (50 max/5 min),速率限制优化 (无锁 AtomicU32);记忆闭环修复:extraction_adapter.rs 实现 TauriExtractionDriver,BREAK-01 已修复 |
|
||||
| 2026-03-29 | v0.7.0 | 文档同步:SKILL 数量 70, Tauri 命令 130+ (含 Browser/Intelligence/Memory/CLI/SecureStorage), Hands 11 (9 启用+2 禁用), 智能层完成度修正 |
|
||||
| 2026-03-28 | v0.7.0 | 基于 2026-03-28 代码状态全面更新:SaaS 平台 76+ API 路由/9 模块/25 表,58+ Tauri 命令,8 LLM Provider,3 种连接模式 |
|
||||
| 2026-03-27 | v0.6.4 | 审计修复第四轮,S9 消息搜索跨会话,自主授权后端守卫 |
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# ZCLAW 多端系统架构文档
|
||||
|
||||
> 版本: 1.0 | 日期: 2026-03-29 | 状态: 待审核
|
||||
> 版本: 1.1 | 日期: 2026-03-29 | 状态: 已更新 (Worker + Scheduler + SQL 迁移 + 多环境配置)
|
||||
|
||||
---
|
||||
|
||||
@@ -107,6 +107,11 @@ ZCLAW 是面向中文用户的 AI Agent 桌面客户端,由 **4 个独立服
|
||||
| ORM | sqlx | 编译时 SQL 检查,零开销 |
|
||||
| 认证 | JWT + TOTP | 无状态鉴权 + 双因素认证 |
|
||||
| 加密 | AES-256-GCM | API Key 加密存储 |
|
||||
| 后台任务 | Worker trait + mpsc Channel | 异步非阻塞,支持自动重试 |
|
||||
| 定时任务 | 声明式 Scheduler (TOML) | 无需改代码调整调度时间 |
|
||||
| 连接池 | sqlx PgPool (50 max / 5 min) | 高并发,自动管理生命周期 |
|
||||
| 迁移系统 | SQL 文件 + Schema 版本控制 | TIMESTAMPTZ 类型,向后兼容 |
|
||||
| 多环境 | ZCLAW_ENV (dev/prod/test) | 配置隔离,环境变量覆盖 |
|
||||
|
||||
### 3.4 核心运行时 (Rust Workspace)
|
||||
|
||||
@@ -660,11 +665,31 @@ React UI → saas-client.ts → HTTPS REST → SaaS 后端 (:8080)
|
||||
|
||||
### 9.2 SaaS 后端配置
|
||||
|
||||
#### 配置加载优先级
|
||||
|
||||
```
|
||||
ZCLAW_SAAS_CONFIG (精确路径) > ZCLAW_ENV (环境选择) > ./saas-config.toml (默认)
|
||||
```
|
||||
|
||||
环境配置文件:
|
||||
- `ZCLAW_ENV=development` -> `config/saas-development.toml`
|
||||
- `ZCLAW_ENV=production` -> `config/saas-production.toml`
|
||||
- `ZCLAW_ENV=test` -> `config/saas-test.toml`
|
||||
|
||||
环境变量覆盖:
|
||||
- `ZCLAW_DATABASE_URL` — 覆盖数据库 URL (避免配置文件存密码)
|
||||
- `ZCLAW_SAAS_JWT_SECRET` — JWT 签名密钥 (生产环境必须设置)
|
||||
- `ZCLAW_TOTP_ENCRYPTION_KEY` — TOTP/AES-256-GCM 加密密钥 (hex 64 字符)
|
||||
- `ZCLAW_SAAS_DEV` — 开发模式 (允许使用不安全的默认密钥)
|
||||
|
||||
#### 配置结构
|
||||
|
||||
```toml
|
||||
# saas-config.toml
|
||||
[server]
|
||||
host = "0.0.0.0"
|
||||
port = 8080
|
||||
cors_origins = []
|
||||
|
||||
[database]
|
||||
url = "postgres://postgres:123123@localhost:5432/zclaw"
|
||||
@@ -672,19 +697,60 @@ url = "postgres://postgres:123123@localhost:5432/zclaw"
|
||||
[auth]
|
||||
jwt_expiration_hours = 24
|
||||
totp_issuer = "ZCLAW SaaS"
|
||||
refresh_token_hours = 168 # 7 天
|
||||
|
||||
[relay]
|
||||
max_queue_size = 1000
|
||||
max_concurrent_per_provider = 5
|
||||
batch_window_ms = 50
|
||||
max_concurrent_per_provider = 5 # 预留
|
||||
batch_window_ms = 50 # 预留
|
||||
retry_delay_ms = 1000
|
||||
max_attempts = 3
|
||||
|
||||
[rate_limit]
|
||||
requests_per_minute = 60
|
||||
burst = 10
|
||||
|
||||
# 声明式定时任务 (新增)
|
||||
[[scheduler.jobs]]
|
||||
name = "cleanup-refresh-tokens"
|
||||
interval = "1h"
|
||||
task = "cleanup_refresh_tokens"
|
||||
run_on_start = false
|
||||
|
||||
[[scheduler.jobs]]
|
||||
name = "cleanup-rate-limit"
|
||||
interval = "5m"
|
||||
task = "cleanup_rate_limit"
|
||||
run_on_start = false
|
||||
```
|
||||
|
||||
#### 连接池参数
|
||||
|
||||
| 参数 | 值 | 说明 |
|
||||
|------|-----|------|
|
||||
| max_connections | 50 | 最大并发连接数 |
|
||||
| min_connections | 5 | 最小空闲连接数 |
|
||||
| acquire_timeout | 10s | 获取连接超时 |
|
||||
| idle_timeout | 300s | 空闲连接回收 |
|
||||
| max_lifetime | 1800s | 连接最大生命周期 |
|
||||
|
||||
#### Worker 系统
|
||||
|
||||
| Worker | 职责 | 触发方式 |
|
||||
|--------|------|---------|
|
||||
| LogOperationWorker | 异步写入操作日志 | Handler 派发 |
|
||||
| CleanupRefreshTokensWorker | 清理过期 Refresh Token | Scheduler 定时 |
|
||||
| CleanupRateLimitWorker | 清理过期限流条目 | Scheduler 定时 |
|
||||
| RecordUsageWorker | 记录 Token 用量 | Relay Handler 派发 |
|
||||
| UpdateLastUsedWorker | 更新 Key 最后使用时间 | Relay Handler 派发 |
|
||||
|
||||
#### SQL 迁移系统
|
||||
|
||||
- Schema 版本: **v6**
|
||||
- 迁移目录: `crates/zclaw-saas/migrations/`
|
||||
- 时间戳类型: **TIMESTAMPTZ** (新库),向后兼容 TEXT (旧库)
|
||||
- 迁移文件按文件名排序执行
|
||||
|
||||
---
|
||||
|
||||
## 10. 接口设计背景与业务价值
|
||||
@@ -741,4 +807,4 @@ burst = 10
|
||||
|
||||
---
|
||||
|
||||
> **文档统计**: 84 个 API 端点 | 5 个通信通道 | 12 种权限 | 4 个独立服务
|
||||
> **文档统计**: 84 个 API 端点 | 5 个通信通道 | 12 种权限 | 4 个独立服务 | 5 个 Workers | 声明式 Scheduler | SQL Schema v6
|
||||
|
||||
504
docs/knowledge-base/deer-flow-deep-analysis.md
Normal file
504
docs/knowledge-base/deer-flow-deep-analysis.md
Normal file
@@ -0,0 +1,504 @@
|
||||
# DeerFlow 2.0 深度分析报告
|
||||
|
||||
> **项目**: [bytedance/deer-flow](https://github.com/bytedance/deer-flow)
|
||||
> **版本**: 2.0 (完全重写,与 1.x 无代码共享)
|
||||
> **分析日期**: 2026-03-29
|
||||
> **定位**: 开源 Super Agent Harness(超级智能体运行时)
|
||||
|
||||
---
|
||||
|
||||
## 1. 项目概览
|
||||
|
||||
DeerFlow(**D**eep **E**xploration and **E**fficient **R**esearch **Flow**)是字节跳动开源的 AI Agent 基础设施,能编排子智能体、记忆、沙箱来执行分钟到小时级别的长周期任务。2026 年 2 月 28 日发布 2.0 后登上 GitHub Trending #1。
|
||||
|
||||
**核心主张**: 一个可扩展的 Agent 运行时,通过 SKILL.md 技能定义 + LangGraph 编排 + 沙箱隔离,实现接近自主的复杂任务执行。
|
||||
|
||||
---
|
||||
|
||||
## 2. 系统架构
|
||||
|
||||
### 2.1 三层分离 + 统一反向代理
|
||||
|
||||
```
|
||||
┌──────────────────────────────────┐
|
||||
│ Nginx (Port 2026) │
|
||||
│ 统一反向代理入口 │
|
||||
└─────┬──────────────┬─────────────┘
|
||||
│ │
|
||||
/api/langgraph/* │ │ /api/*
|
||||
▼ ▼
|
||||
┌──────────────────────┐ ┌────────────────────────┐
|
||||
│ LangGraph Server │ │ Gateway API (8001) │
|
||||
│ (Port 2024) │ │ FastAPI REST │
|
||||
│ │ │ │
|
||||
│ Agent Runtime │ │ Models / MCP / Skills │
|
||||
│ Thread Management │ │ Memory / Uploads │
|
||||
│ SSE Streaming │ │ Artifacts / Threads │
|
||||
│ Checkpointing │ │ │
|
||||
└──────────────────────┘ └────────────────────────┘
|
||||
│
|
||||
▼
|
||||
┌──────────────────────────────────────────────┐
|
||||
│ Frontend (Next.js, Port 3000) │
|
||||
└──────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
**路由规则**:
|
||||
- `/api/langgraph/*` → LangGraph Server(Agent 交互、线程、流式响应)
|
||||
- `/api/*` → Gateway API(配置管理、文件上传、制品服务)
|
||||
- 其余 → Next.js 前端
|
||||
|
||||
### 2.2 代码规模
|
||||
|
||||
| 模块 | 文件数 | 技术栈 |
|
||||
|------|--------|--------|
|
||||
| 后端核心 (harness) | 124 .py | Python 3.12+, LangGraph, LangChain |
|
||||
| 后端测试 | 69 .py | pytest |
|
||||
| 前端 | 225 .ts/.tsx | Next.js 16, React 19, Tailwind v4 |
|
||||
| 内置技能 | 17 个 | SKILL.md + 脚本/模板 |
|
||||
|
||||
---
|
||||
|
||||
## 3. 核心功能模块
|
||||
|
||||
### 3.1 Agent 编排 — Lead Agent + 中间件链
|
||||
|
||||
入口: `packages/harness/deerflow/agents/lead_agent/agent.py:make_lead_agent`
|
||||
|
||||
Lead Agent 通过工厂函数动态组装,包含 **9 层有序中间件**:
|
||||
|
||||
| # | 中间件 | 职责 |
|
||||
|---|--------|------|
|
||||
| 1 | ThreadDataMiddleware | 为线程创建隔离目录 (workspace/uploads/outputs) |
|
||||
| 2 | UploadsMiddleware | 将上传文件注入对话上下文 |
|
||||
| 3 | SandboxMiddleware | 获取沙箱执行环境 |
|
||||
| 4 | SummarizationMiddleware | Token 接近上限时压缩上下文(可选) |
|
||||
| 5 | TodoListMiddleware | Plan 模式下跟踪多步骤任务 |
|
||||
| 6 | TitleMiddleware | 自动生成对话标题 |
|
||||
| 7 | MemoryMiddleware | 异步排队记忆提取 |
|
||||
| 8 | ViewImageMiddleware | 视觉模型图像注入 |
|
||||
| 9 | ClarificationMiddleware | 拦截澄清请求(必须最后) |
|
||||
|
||||
额外运行时中间件:
|
||||
- `LoopDetectionMiddleware` — 检测重复工具调用循环
|
||||
- `SubagentLimitMiddleware` — 限制子 Agent 并发数
|
||||
- `TokenUsageMiddleware` — Token 用量追踪
|
||||
- `ToolErrorHandlingMiddleware` — 工具调用错误处理
|
||||
- `GuardrailMiddleware` — 安全护栏(工具调用前评估)
|
||||
|
||||
**设计模式**: 洋葱模型(Onion Model),每层中间件可拦截、修改或转发请求。这与传统 Web 中间件概念一致,但应用在了 Agent 执行层面。
|
||||
|
||||
### 3.2 子 Agent 系统
|
||||
|
||||
**内置 Agent**:
|
||||
- `general-purpose` — 拥有完整工具集的通用 Agent
|
||||
- `bash` — 命令执行专家
|
||||
|
||||
**执行机制**:
|
||||
- 最大 3 个子 Agent 并发(双线程池: scheduler + execution)
|
||||
- 15 分钟默认超时(按 Agent 可单独配置)
|
||||
- 后台异步执行 + SSE 事件推送状态
|
||||
- 流程: Lead Agent 调用 `task()` → 后台线程池运行子 Agent → 轮询完成 → 返回结果
|
||||
|
||||
### 3.3 ThreadState — 扩展的状态 Schema
|
||||
|
||||
```python
|
||||
class ThreadState(AgentState):
|
||||
messages: list[BaseMessage] # LangGraph 原生消息
|
||||
sandbox: dict # 沙箱环境信息
|
||||
artifacts: list[str] # 生成的文件路径
|
||||
thread_data: dict # {workspace, uploads, outputs} 路径
|
||||
title: str | None # 自动生成的标题
|
||||
todos: list[dict] # 任务追踪 (plan mode)
|
||||
viewed_images: dict # 视觉模型图像数据
|
||||
```
|
||||
|
||||
### 3.4 技能系统
|
||||
|
||||
**SKILL.md 格式**:
|
||||
```markdown
|
||||
---
|
||||
name: skill-name
|
||||
description: 触发条件和工作描述
|
||||
---
|
||||
# 技能标题
|
||||
## 工作流步骤 / 最佳实践 / 参考资源
|
||||
```
|
||||
|
||||
**加载机制**:
|
||||
- 递归扫描 `skills/{public,custom}/` 下所有 SKILL.md
|
||||
- **渐进式加载** — 只有任务需要时才注入上下文,不一次性全加载
|
||||
- 沙箱内通过 `/mnt/skills/` 虚拟路径访问
|
||||
|
||||
**17 个内置技能**:
|
||||
|
||||
| 技能 | 功能 | 附加资源 |
|
||||
|------|------|----------|
|
||||
| deep-research | 系统性深度研究方法论 | — |
|
||||
| data-analysis | 数据分析 | analyze.py |
|
||||
| chart-visualization | 图表可视化 | generate.js + 22 种图表参考 |
|
||||
| ppt-generation | PPT 生成 | generate.py |
|
||||
| image-generation | 图片生成 | generate.py + 模板 |
|
||||
| video-generation | 视频生成 | generate.py |
|
||||
| podcast-generation | 播客生成 | generate.py + 模板 |
|
||||
| frontend-design | 前端设计 | — |
|
||||
| consulting-analysis | 咨询分析 | — |
|
||||
| github-deep-research | GitHub 深度研究 | github_api.py |
|
||||
| skill-creator | 技能创建器 | 评估脚本 + 查看器 |
|
||||
| web-design-guidelines | Web 设计指南 | — |
|
||||
| surprise-me | 惊喜生成 | — |
|
||||
| vercel-deploy-claimable | Vercel 部署 | deploy.sh |
|
||||
| find-skills | 技能发现安装 | install-skill.sh |
|
||||
| claude-to-deerflow | Claude Code 集成 | chat.sh / status.sh |
|
||||
| bootstrap | 引导技能 | 模板 + 对话指南 |
|
||||
|
||||
### 3.5 沙箱隔离系统
|
||||
|
||||
**三种执行模式**:
|
||||
|
||||
| 模式 | Provider | 隔离级别 | 场景 |
|
||||
|------|----------|----------|------|
|
||||
| Local | `LocalSandboxProvider` | 无隔离 | 开发 |
|
||||
| Docker | `AioSandboxProvider` | 容器级 | 生产 |
|
||||
| Kubernetes | `AioSandboxProvider` + Provisioner | Pod 级 | 高安全要求 |
|
||||
|
||||
**虚拟路径映射**:
|
||||
|
||||
| 虚拟路径 | 物理映射 |
|
||||
|----------|----------|
|
||||
| `/mnt/user-data/workspace/` | `.deer-flow/threads/{id}/user-data/workspace` |
|
||||
| `/mnt/user-data/uploads/` | `.deer-flow/threads/{id}/user-data/uploads` |
|
||||
| `/mnt/user-data/outputs/` | `.deer-flow/threads/{id}/user-data/outputs` |
|
||||
| `/mnt/skills/` | `deer-flow/skills/` |
|
||||
|
||||
**沙箱工具集**: `bash`, `ls`, `read_file`, `write_file`, `str_replace`
|
||||
|
||||
### 3.6 记忆系统
|
||||
|
||||
```
|
||||
对话流 → MemoryMiddleware → Queue (防抖 30s) → Updater (LLM 提取) → memory.json
|
||||
↑
|
||||
System Prompt ← 注入 Top Facts + Context ← format_memory_for_injection()
|
||||
```
|
||||
|
||||
**记忆结构**:
|
||||
- **用户上下文** — 工作背景、个人信息、当前关注点
|
||||
- **对话历史** — 近期/早期/长期背景
|
||||
- **事实列表** — 带置信度评分(阈值 0.7),最大 100 条,按置信度排序,受 max_injection_tokens 约束
|
||||
|
||||
**关键配置**:
|
||||
| 参数 | 默认值 | 说明 |
|
||||
|------|--------|------|
|
||||
| debounce_seconds | 30 | 防抖间隔 |
|
||||
| max_facts | 100 | 最大事实条数 |
|
||||
| fact_confidence_threshold | 0.7 | 存储置信度阈值 |
|
||||
| max_injection_tokens | 2000 | 注入上限 |
|
||||
|
||||
**待实现**: TF-IDF 上下文感知检索(文档已规划,尚未合并)
|
||||
|
||||
### 3.7 消息网关 — IM 通道集成
|
||||
|
||||
| 通道 | 传输方式 | 流式支持 |
|
||||
|------|----------|----------|
|
||||
| Telegram | Bot API (长轮询) | 等待完整响应 |
|
||||
| Slack | Socket Mode | 等待完整响应 |
|
||||
| 飞书/Lark | WebSocket | 流式更新消息卡片 |
|
||||
|
||||
所有通道使用**出站连接**,无需公网 IP。支持 `/new`, `/status`, `/models`, `/memory`, `/help` 命令。
|
||||
|
||||
### 3.8 模型抽象层
|
||||
|
||||
通过 `config.yaml` 的 `use` 字段动态加载 LangChain 类:
|
||||
|
||||
```yaml
|
||||
models:
|
||||
- name: gpt-4
|
||||
use: langchain_openai:ChatOpenAI
|
||||
- name: claude-sonnet-4.6
|
||||
use: deerflow.models.claude_provider:ClaudeChatModel # CLI 后端
|
||||
```
|
||||
|
||||
**支持类型**: OpenAI 兼容、Anthropic、DeepSeek、Google Gemini、OpenRouter、Codex CLI、Claude Code OAuth,以及自定义 Provider(通过 Python 反射机制)。
|
||||
|
||||
### 3.9 MCP 协议集成
|
||||
|
||||
支持 stdio / SSE / HTTP 三种传输方式的 MCP Server,通过 `extensions_config.json` 配置,使用 `langchain-mcp-adapters` 连接。支持 OAuth 认证和工具缓存。
|
||||
|
||||
### 3.10 安全护栏 (Guardrails)
|
||||
|
||||
`GuardrailMiddleware` 在工具调用执行前评估:
|
||||
- 每次工具调用通过 `GuardrailProvider` 评估
|
||||
- 拒绝的调用返回错误 ToolMessage,Agent 可自适应调整
|
||||
- 支持 fail-closed(默认阻止)和 fail-open(允许通过)模式
|
||||
|
||||
---
|
||||
|
||||
## 4. 前端架构
|
||||
|
||||
### 4.1 技术栈
|
||||
|
||||
| 技术 | 版本 | 用途 |
|
||||
|------|------|------|
|
||||
| Next.js | 16.1.7 | App Router + SSR |
|
||||
| React | 19.0.0 | UI 框架 |
|
||||
| Tailwind CSS | 4.0.15 | 样式方案 |
|
||||
| Radix UI | 多组件 | 无障碍 UI 基础 |
|
||||
| @xyflow/react | 12.10.0 | 流程图可视化 |
|
||||
| @tanstack/react-query | 5.x | 服务端状态 |
|
||||
| better-auth | 1.3+ | 认证 |
|
||||
| shiki | 3.15.0 | 代码高亮 |
|
||||
| streamdown | 1.4.0 | 流式 Markdown 渲染 |
|
||||
| Codemirror | 6.x | 代码编辑器 |
|
||||
|
||||
### 4.2 前端目录结构
|
||||
|
||||
```
|
||||
frontend/src/
|
||||
├── app/ # Next.js App Router
|
||||
│ ├── api/auth/ # better-auth 认证路由
|
||||
│ ├── workspace/ # 主工作区
|
||||
│ │ ├── chats/ # 聊天页面
|
||||
│ │ └── agents/ # 自定义 Agent 管理
|
||||
│ └── mock/api/ # Mock API (开发用)
|
||||
├── components/
|
||||
│ ├── ai-elements/ # AI 交互组件 (25+)
|
||||
│ ├── workspace/ # 工作区组件
|
||||
│ ├── landing/ # 着陆页
|
||||
│ └── ui/ # 基础 UI 组件
|
||||
├── core/ # 核心业务逻辑
|
||||
│ ├── agents/ # Agent 管理
|
||||
│ ├── api/ # API 客户端
|
||||
│ ├── i18n/ # 国际化
|
||||
│ ├── memory/ # 记忆管理
|
||||
│ ├── mcp/ # MCP 集成
|
||||
│ ├── skills/ # 技能管理
|
||||
│ ├── streamdown/ # 流式渲染
|
||||
│ ├── threads/ # 线程管理
|
||||
│ └── tools/ # 工具管理
|
||||
└── hooks/ # React Hooks
|
||||
```
|
||||
|
||||
### 4.3 前端通信
|
||||
|
||||
- **Agent 交互**: 通过 `@langchain/langgraph-sdk` 连接 LangGraph Server
|
||||
- **配置管理**: 通过 Gateway REST API
|
||||
- **流式响应**: SSE (Server-Sent Events)
|
||||
- **文件上传**: multipart/form-data → Gateway → 自动转 Markdown
|
||||
|
||||
---
|
||||
|
||||
## 5. 关键实现原理
|
||||
|
||||
### 5.1 上下文工程 (Context Engineering)
|
||||
|
||||
DeerFlow 的核心设计哲学是**上下文工程** — 精心控制每次 LLM 调用的输入:
|
||||
|
||||
1. **渐进式技能加载** — 技能不全部注入,只在相关时加载
|
||||
2. **Token 预算管理** — SummarizationMiddleware 在接近上限时压缩
|
||||
3. **记忆选择性注入** — 按置信度排序,受 token 预算约束
|
||||
4. **工具按需暴露** — 通过 `tool_search` 按需发现工具,不全部列出
|
||||
|
||||
### 5.2 线程隔离
|
||||
|
||||
每个对话线程拥有独立的:
|
||||
- workspace 目录 — Agent 工作空间
|
||||
- uploads 目录 — 用户上传文件
|
||||
- outputs 目录 — 生成的制品
|
||||
- 沙箱实例 — 代码执行环境
|
||||
- checkpointer — 状态持久化
|
||||
|
||||
### 5.3 配置热重载
|
||||
|
||||
`AppConfig` 支持运行时重新加载,Agent 配置、模型列表、工具集等可在不重启的情况下更新。
|
||||
|
||||
### 5.4 Agent 工厂模式
|
||||
|
||||
`make_lead_agent()` 是工厂函数,根据运行时配置动态组装:
|
||||
- 选择模型(支持 thinking/vision 标记)
|
||||
- 组装中间件链
|
||||
- 加载工具集(内置 + MCP + 配置)
|
||||
- 注入系统提示词(含技能上下文)
|
||||
|
||||
---
|
||||
|
||||
## 6. 技术栈全景
|
||||
|
||||
| 层级 | 技术 | 说明 |
|
||||
|------|------|------|
|
||||
| **Agent 框架** | LangGraph 1.0.x | 状态图驱动的 Agent 编排 |
|
||||
| **LLM 抽象** | LangChain 1.2+ | 多模型统一接口 |
|
||||
| **后端 API** | FastAPI | REST + SSE |
|
||||
| **前端框架** | Next.js 16 + React 19 | App Router |
|
||||
| **样式** | Tailwind CSS v4 | 原子化 CSS |
|
||||
| **沙箱** | Docker / Kubernetes | 容器级隔离 |
|
||||
| **MCP** | langchain-mcp-adapters | 工具协议集成 |
|
||||
| **IM 集成** | lark-oapi / slack-sdk / python-telegram-bot | 消息通道 |
|
||||
| **搜索** | Tavily / Firecrawl / DuckDuckGo / InfoQuest | 信息获取 |
|
||||
| **认证** | better-auth | Web 端用户认证 |
|
||||
| **可观测** | LangSmith | 链路追踪 |
|
||||
| **包管理** | uv (Python) + pnpm (JS) | monorepo workspace |
|
||||
| **反向代理** | Nginx | 统一入口 |
|
||||
| **语言要求** | Python 3.12+, Node.js 22+ | — |
|
||||
| **License** | MIT | 开源 |
|
||||
|
||||
---
|
||||
|
||||
## 7. 优势分析
|
||||
|
||||
### 7.1 架构优势
|
||||
|
||||
1. **中间件链模式** — 9 层有序中间件,横切关注点高度模块化,新增功能只需添加中间件
|
||||
2. **渐进式上下文工程** — 不是一股脑注入所有信息,而是按需、按预算精确控制 LLM 输入
|
||||
3. **技能热插拔** — SKILL.md 格式简单直观,用户可自行创建和安装技能
|
||||
4. **模型无关** — 通过 LangChain 类路径动态加载,支持任意 OpenAI 兼容 API
|
||||
5. **三层分离** — LangGraph Server / Gateway API / Frontend 各司其职,独立扩展
|
||||
|
||||
### 7.2 生态优势
|
||||
|
||||
1. **LangGraph 生态** — 直接受益于 LangChain/LangGraph 社区的持续迭代
|
||||
2. **MCP 协议** — 无缝接入 MCP 工具生态
|
||||
3. **多 IM 通道** — Telegram/Slack/飞书开箱即用
|
||||
4. **字节跳动背书** — 企业级投入,InfoQuest 等增值服务集成
|
||||
5. **社区活跃** — GitHub Trending #1,多语言 README,活跃的 Issue/PR
|
||||
|
||||
### 7.3 工程优势
|
||||
|
||||
1. **完整的测试覆盖** — 69 个测试文件,覆盖核心路径
|
||||
2. **多沙箱模式** — 从开发到生产无缝切换
|
||||
3. **配置版本管理** — config_version + `make config-upgrade` 平滑升级
|
||||
4. **嵌入式 Python 客户端** — `deerflow-harness` 可作为独立包使用
|
||||
|
||||
---
|
||||
|
||||
## 8. 局限性分析
|
||||
|
||||
### 8.1 架构局限
|
||||
|
||||
1. **Python 性能瓶颈** — Python 3.12 + asyncio 在高并发场景下受限,GIL 限制了真正的并行
|
||||
2. **LangGraph 耦合** — 核心编排绑定 LangGraph,迁移成本高
|
||||
3. **单 Lead Agent 模型** — 不支持多 Agent 协作(仅 Lead → Sub 单向委托),缺少 Agent 间协商
|
||||
4. **文件系统状态** — Checkpointer 默认用 SQLite 本地文件,生产需外部化
|
||||
|
||||
### 8.2 功能局限
|
||||
|
||||
1. **记忆系统不成熟** — TF-IDF 上下文感知检索尚未实现,当前仅按置信度排序
|
||||
2. **无实时协作** — 不支持多用户同时操作同一线程
|
||||
3. **沙箱冷启动** — Docker 容器启动有延迟,影响首次响应时间
|
||||
4. **技能质量参差** — 17 个内置技能,深度和完成度不一
|
||||
5. **无内置 RAG** — 知识检索依赖外部搜索 API,无本地知识库
|
||||
|
||||
### 8.3 运维局限
|
||||
|
||||
1. **依赖链复杂** — LangGraph + LangChain + FastAPI + Docker + Nginx + MCP 等,部署门槛高
|
||||
2. **无内置用户管理** — Web 端认证由 better-auth 提供,但无企业级 RBAC
|
||||
3. **成本控制有限** — Token 用量追踪有,但无细粒度的配额/限流机制
|
||||
4. **可观测性依赖外部** — 需要 LangSmith 才能获得完整链路追踪
|
||||
|
||||
---
|
||||
|
||||
## 9. 适用场景
|
||||
|
||||
### 9.1 最佳场景
|
||||
|
||||
| 场景 | 适配度 | 原因 |
|
||||
|------|--------|------|
|
||||
| 深度研究任务 | ⭐⭐⭐⭐⭐ | 原生设计目标,deep-research 技能成熟 |
|
||||
| 内容生成(PPT/视频/播客) | ⭐⭐⭐⭐⭐ | 丰富的多媒体生成技能 |
|
||||
| 数据分析与可视化 | ⭐⭐⭐⭐ | chart-visualization + data-analysis 组合 |
|
||||
| IM Bot 开发 | ⭐⭐⭐⭐ | 三大 IM 通道开箱即用 |
|
||||
| 编程辅助(代码生成/调试) | ⭐⭐⭐⭐ | 沙箱 + 工具链完善 |
|
||||
|
||||
### 9.2 勉强场景
|
||||
|
||||
| 场景 | 适配度 | 原因 |
|
||||
|------|--------|------|
|
||||
| 企业级 SaaS 平台 | ⭐⭐ | 缺少 RBAC、审计、多租户 |
|
||||
| 实时协作应用 | ⭐⭐ | 无多用户并发支持 |
|
||||
| 边缘/离线部署 | ⭐⭐ | 依赖云 API 和 Docker |
|
||||
|
||||
### 9.3 不适用场景
|
||||
|
||||
| 场景 | 原因 |
|
||||
|------|------|
|
||||
| 低延迟实时系统 | Python + LLM API 调用固有延迟 |
|
||||
| 高并发生产服务 | 单进程 + GIL 限制 |
|
||||
| 安全合规要求高的环境 | 沙箱隔离非零信任 |
|
||||
|
||||
---
|
||||
|
||||
## 10. 与同类项目对比
|
||||
|
||||
| 维度 | DeerFlow 2.0 | OpenHands | CrewAI | AutoGen | Devin |
|
||||
|------|-------------|-----------|--------|---------|-------|
|
||||
| **定位** | Super Agent Harness | 软件开发 Agent | 多 Agent 框架 | 多 Agent 对话 | 自主编程 Agent |
|
||||
| **编排模型** | Lead + Sub (LangGraph) | 单 Agent + Action | Crew + Task | GroupChat | 单 Agent |
|
||||
| **沙箱隔离** | Docker/K8s | Docker | 无内置 | 无内置 | 自研 |
|
||||
| **技能扩展** | SKILL.md 热插拔 | 无 | 工具定义 | 函数注册 | 无 |
|
||||
| **IM 集成** | 3 通道 | 无 | 无 | 无 | 无 |
|
||||
| **记忆系统** | LLM 提取 + JSON | 无 | 无 | 无 | 有 |
|
||||
| **开源** | MIT | MIT | MIT | MIT | 不开源 |
|
||||
| **语言** | Python | Python | Python | Python | 未知 |
|
||||
| **背书** | 字节跳动 | All Hands AI | CrewAI Inc | Microsoft | Cognition |
|
||||
|
||||
---
|
||||
|
||||
## 11. 未来发展方向(推断)
|
||||
|
||||
### 11.1 短期 (3-6 个月)
|
||||
|
||||
1. **记忆系统增强** — TF-IDF 上下文感知检索合并,记忆质量提升
|
||||
2. **更多 IM 通道** — 微信、钉钉等国内平台集成
|
||||
3. **技能市场** — 社区技能共享与评分系统
|
||||
4. **多 Agent 协作** — 从单向委托升级为多 Agent 协商
|
||||
|
||||
### 11.2 中期 (6-12 个月)
|
||||
|
||||
1. **企业级功能** — RBAC、审计日志、多租户、配额管理
|
||||
2. **RAG 集成** — 本地知识库支持,减少对外部搜索的依赖
|
||||
3. **模型微调** — 针对 Agent 任务的专项微调指南
|
||||
4. **多模态增强** — 更强的图像/视频理解与生成
|
||||
|
||||
### 11.3 长期 (12+ 个月)
|
||||
|
||||
1. **Agent 操作系统** — 从工具到真正的自主 Agent 平台
|
||||
2. **去中心化** — 支持 Agent-to-Agent 通信协议
|
||||
3. **端侧部署** — 支持模型本地化运行,降低 API 依赖
|
||||
|
||||
---
|
||||
|
||||
## 12. 对 ZCLAW 的借鉴价值
|
||||
|
||||
| DeerFlow 设计 | 借鉴价值 | 实施难度 |
|
||||
|---------------|----------|----------|
|
||||
| **中间件链模式** | Agent 执行前的横切关注点模块化,ZCLAW Kernel 可引入类似模式 | 中 |
|
||||
| **渐进式技能加载** | SKILL.md 按需注入而非全量,减少 Token 浪费 | 低 |
|
||||
| **LLM 驱动记忆提取** | 用 LLM 从对话中提取结构化记忆,比规则提取更鲁棒 | 中 |
|
||||
| **沙箱虚拟路径** | 统一的路径抽象,代码与平台无关 | 高 |
|
||||
| **IM 通道架构** | Channel 抽象 + MessageBus 模式,易于扩展新通道 | 低 |
|
||||
| **模型动态加载** | `use` 字段 + 反射机制,无需硬编码 Provider | 中 |
|
||||
| **Guardrail 安全护栏** | 工具调用前评估,可配置的拦截策略 | 中 |
|
||||
|
||||
**核心差异**: DeerFlow 是 Python 服务端架构,ZCLAW 是 Rust + TS 桌面架构。技术栈不同,但在 **Agent 编排模式、技能系统设计、记忆系统架构** 等领域无关的设计层面,DeerFlow 提供了成熟的参考。
|
||||
|
||||
---
|
||||
|
||||
## 13. 项目关键数据
|
||||
|
||||
| 指标 | 值 |
|
||||
|------|-----|
|
||||
| GitHub Stars | 20k+ (2026-03 Trending #1) |
|
||||
| License | MIT |
|
||||
| 主要语言 | Python (后端), TypeScript (前端) |
|
||||
| Python 版本 | 3.12+ |
|
||||
| Node.js 版本 | 22+ |
|
||||
| 后端源文件 | 124 .py (harness) |
|
||||
| 前端源文件 | 225 .ts/.tsx |
|
||||
| 测试文件 | 69 .py |
|
||||
| 内置技能 | 17 个 |
|
||||
| 支持的 IM | Telegram, Slack, 飞书 |
|
||||
| 沙箱模式 | Local / Docker / Kubernetes |
|
||||
| 端口 | 2026 (Nginx), 2024 (LangGraph), 8001 (Gateway), 3000 (Frontend) |
|
||||
|
||||
---
|
||||
|
||||
*本分析基于 DeerFlow 2.0 main 分支 (截至 2026-03-29) 的源代码和文档。*
|
||||
Reference in New Issue
Block a user