# lambdagentpaas 项目全面审计报告 (2026 Q2) > **Date**: 2026-04-05 > **Scope**: Core kernel (lambdagent/) + PaaS layer (agentpaas/) + Tests + Docs > **Method**: 三路并行代码审计 (核心内核 / PaaS+运行时 / 测试+文档) > **Finding**: 40+ 代码缺陷, 57 项未完成 TODO, 30 个模块无测试覆盖 --- ## 一、项目现状总览 | 维度 | 现状 | 评级 | |------|------|------| | 理论基础 | 三篇论文, λA 类型系统, CEK Machine, 效果代数 | **A+** | | 核心 DSL | 11 构造 + 5 多智能体扩展, 全部实现 | **A** | | 测试覆盖 | 402 个测试, 16 个测试文件, **30 个核心模块无测试** | **C** | | PaaS 层 | 28 个端点, 多租户, RBAC, 但**追踪断裂/安全漏洞** | **D+** | | 文档 | 500KB+, 21 个文件, **4 个是空 stub** | **B-** | | 生产就绪度 | 基础设施完成, **关键集成断裂** | **Not Ready** | ### 完成度 ``` Phase 1 (P0 生存基础): 12/12 ✅ 100% Phase 2 (P1 可靠运行): 5/5 ✅ 100% Phase 3 (P2 竞争力): 5/5 ✅ 100% Phase 4 (安全加固): 18/34 ⚠️ 53% Phase 5 (助手工具): 28/38 ⚠️ 74% Phase 6 (PaaS 服务): 8/8 ✅ 100% Phase 6.5 (双引擎): 5/7 ⚠️ 71% Phase 7 (集成层): 0/17 ❌ 0% Phase 8 (Provider): 0/5 ❌ 0% Research P2: 0/12 ❌ 0% ───────────────────────────────────── 总计: 81/143 完成 (57%) ``` --- ## 二、功能缺陷 (Bugs — 运行时会崩溃) ### BUG-01: Context.fork() 浅拷贝导致并行数据竞争 [严重] **文件**: `core.py` L99-112 ```python def fork(self) -> Context: return Context( bindings=dict(self.bindings), # 浅拷贝! 嵌套 dict/list 共享引用 memory=dict(self.memory), # 浅拷贝! ) ``` **影响**: Par/AsyncPar 并行分支修改嵌套对象时互相干扰, 违反 Paper II Proposition 30 **修复**: 改用 `copy.deepcopy()` 或 frozen dict ### BUG-02: Guard 调用 `If._is_truthy()` 时可能 NameError [严重] **文件**: `extensions.py` L178 ```python valid = If._is_truthy(valid) if isinstance(valid, str) else bool(valid) ``` **影响**: 循环导入场景下 `If` 未定义, Guard validator 返回字符串时崩溃 **修复**: 内联 truthy 检查逻辑, 不依赖 If 类 ### BUG-03: Fst/Snd 无类型检查直接索引 [中等] **文件**: `primitives.py` L345-360 ```python class Fst(Term): def apply(self, input, ctx=None): return input[0] # input 非 tuple 时 IndexError ``` **修复**: 添加 `if not isinstance(input, (tuple, list)) or len(input) < 2: raise TypeError(...)` ### BUG-04: CEK Machine 不处理 Term 闭包环境 [中等] **文件**: `cek_machine.py` L295 **影响**: 带捕获绑定的 Term 在 CEK 中执行时丢失环境 **修复**: `load()` 时从 Term 提取绑定注入 `env` ### BUG-05: 类型系统 `is_subtype(T_INT, T_JSON())` 返回 False [中等] **文件**: `types.py` L223-225 **影响**: Paper III 说 `Num <: Json(untyped)` 成立, 但实现返回 False, 类型检查器误报 **修复**: 无 schema 的 `T_JSON()` 应接受所有基础类型 ### BUG-06: PaaS 追踪断裂 — ctx.trace 从未被填充 [严重] **文件**: `agentruntime/runtime.py` L81-97, `react_engine.py` L128-220 **影响**: Executor 和 ReActEngine 各维护独立 trace, 互不通信; PaaS API 返回空 trace **修复**: 统一 trace 路径, 所有引擎必须写入 `ctx.trace` ### BUG-07: PaaS 数据库无索引 [严重] **文件**: `agentpaas/db/models.py` L43-151 **影响**: 所有查询全表扫描, >1000 agent 时不可接受 **修复**: 添加 `CREATE INDEX idx_agents_tenant ON agents(tenant_id)` 等 --- ## 三、设计缺陷 (Design Smells — 工作但设计不良) ### ~~DESIGN-01: Handler 类型检测是隐式的~~ ✅ 已修复 已引入 `PassthroughHandler` 基类。`ProductionHandler` 和 `TraceHandler` 继承 `PassthroughHandler`,Lam/Tool/CEK 统一通过 `isinstance(handler, PassthroughHandler)` 判断是否透传。新增 handler 只需决定是否继承 `PassthroughHandler`。 ### DESIGN-02: Lam 模型检测做网络调用 [高] `_detect_provider()` 在检测 Ollama 时 `urllib.request.urlopen("http://localhost:11434")`, 有副作用. **改进**: 不做 auto-detection, 要求显式配置 `provider` 字段 ### DESIGN-03: Memory 注入用字符串拼接 [中] ```python augmented = f"[Memory]\n{memory_str}\n\n[Input]\n{input}" ``` 无转义, 如果 input 包含 `[Memory]` 标记会混淆 LLM. **改进**: 让 Lam 的 prompt template 处理 memory 注入, 不在 Memory 层硬编码格式 ### DESIGN-04: Route 模糊匹配过于宽松 [中] ```python if key.lower() in label: # "code" 匹配 "code_review" ``` 多个路由键可能同时匹配, 取第一个(dict 迭代序). **改进**: 优先精确匹配, 模糊匹配仅在无精确匹配时启用, 有歧义时报错 ### DESIGN-05: GroupChat 上下文窗口用魔术数字 [中] `tail_size = 3 * len(self.agent_list)` 无依据, 且 `conversation.index(m)` 在循环内导致 O(n^2) ### DESIGN-06: Guard 重试用相同输入 [中] CEK `GuardK` 重试时 `_AppTerm(k.agent_term, k.input_val)` — 同一个输入给 LLM, 大概率得到相同无效输出. **改进**: 重试时增加 temperature 或在 prompt 中注入验证失败原因 ### ~~DESIGN-07: 效果推断不覆盖多智能体构造~~ ✅ 已修复 `infer_effect_for_term()` 现已覆盖 GroupChat(iterate(parallel(...), n))、AsyncPar(parallel(...))、Handoff(serial(...))、Send(serial(inner, state))、Receive(serial(state, handler))。 ### ~~DESIGN-08: 成本估算与成本追踪完全脱节~~ ✅ 已修复 新增 `validate_cost(predicted, actual_tokens, actual_money)` 函数,交叉验证预测 CostGrade 与实际 CostVector,偏差 >2x 时返回 `COST_ANOMALY` 告警。 --- ## 四、安全漏洞 | ID | 描述 | 严重度 | |----|------|--------| | SEC-01 | API Key PBKDF2 用固定 salt (从 key 前缀派生) | **高** | | SEC-02 | Tool output 原样注入 prompt, 无转义 (prompt injection) | **高** | | SEC-03 | `/api/v1/agents/{id}/run` 无速率限制 | **高** | | SEC-04 | RBAC 未在 API 层执行 (viewer 可调 PUT) | **中** | | SEC-05 | SQLite `check_same_thread=False` 无锁保护 | **中** | | SEC-06 | 异常日志可能泄露 API Key | **中** | | SEC-07 | 流式端点 Queue 无上限, 慢客户端导致 OOM | **中** | | SEC-08 | sub-agent 编译无递归深度限制 (A→B→C→A 死循环) | **中** | --- ## 五、性能问题 | ID | 描述 | 影响 | |----|------|------| | PERF-01 | Par 每次调用创建新 ThreadPoolExecutor | 线程创建开销 | | PERF-02 | trace merge 在循环内逐个 extend → O(n^2) | 多 agent 时慢 | | PERF-03 | GroupChat 上下文构建 O(n^2) (循环内 list.index) | 长对话时慢 | | PERF-04 | 数据库全表扫描 (无索引) | >1000 agent 不可用 | --- ## 六、测试覆盖缺口 **30 个核心模块无专属测试文件**. 最高优先级: | 模块 | 重要度 | 测试难度 | 建议 | |------|--------|---------|------| | `core.py` | 基石 | 低 | Context.fork 深拷贝验证 | | `primitives.py` | 基石 | 低 | 每个 apply() 的边界条件 | | `multiagent.py` | 高 | 中 | GroupChat/Handoff/Channel 并发 | | `async_core.py` | 高 | 中 | 取消传播, 并行收集 | | `isolation.py` | 高 | 高 | Worktree 创建/清理/合并 | | `compiler.py` | 高 | 中 | 各种 YAML 格式编译正确性 | --- ## 七、文档缺口 | 文件 | 状态 | 需要 | |------|------|------| | `docs/theory.md` | 空 stub (71 bytes) | 论文摘要 + 形式化定义 | | `docs/multi-agent.md` | 空 stub (242 bytes) | GroupChat/Channel 示例 | | `docs/api.md` | 极简 (1.6 KB) | REST API 完整参考 | | `docs/constructs.md` | 仅表格 (1.2 KB) | 叙述说明 + 代码示例 | --- ## 八、全部未实现功能 — 优先级排序 ### Tier 0: 修 Bug (立即, ~5 人天) | ID | 任务 | 工作量 | |----|------|--------| | FIX-01 | Context.fork() 改用 deepcopy | 0.5d | | FIX-02 | Guard truthy 检查内联 | 0.5d | | FIX-03 | Fst/Snd 添加类型检查 | 0.5d | | FIX-04 | is_subtype 修复基础类型 → 无 schema JSON | 0.5d | | FIX-05 | PaaS 追踪断裂修复 (统一 ctx.trace) | 1d | | FIX-06 | 数据库添加索引 | 0.5d | | FIX-07 | __init__.py 导出 Phase 6.5 Engine 类 | 0.1d | | FIX-08 | API Key salt 改为随机生成 | 0.5d | | FIX-09 | 流式 Queue 加 maxsize=1000 | 0.2d | | FIX-10 | sub-agent 编译加递归深度限制 | 0.5d | ### Tier 1: 安全加固 (~15 人天) | ID | 任务 | 来源 | 工作量 | |----|------|------|--------| | S13 | Checkpoint 加密 AES-256-GCM | Phase 4 | 1d | | S14 | Memory 按 Agent/Tenant 隔离 | Phase 4 | 2d | | S15 | Channel 访问控制 | Phase 4 | 1d | | S17 | Token 硬限制 | Phase 4 | 1d | | S18 | ToolGateway 路径 ACL | Phase 4 | 2d | | S19 | ToolGateway 网络 ACL | Phase 4 | 1d | | SEC-03 | API 速率限制 (run 端点) | 审计 | 1d | | SEC-04 | RBAC 在 API 层执行 | 审计 | 1d | | S21 | 安全审计日志 | Phase 4 | 2d | | S28 | YAML parser fuzz 测试 | Phase 4 | 2d | | SEC-02 | Tool output prompt injection 防护 | 审计 | 1d | ### Tier 2: 双引擎 + Provider 完成 (~12 人天) | ID | 任务 | 来源 | 工作量 | |----|------|------|--------| | E06 | AdaptiveEngine 自动选择 | Phase 6.5 | 1d | | E07 | 双引擎 125+60 一致性测试 | Phase 6.5 | 1d | | L01 | LLMProvider 统一接口 | Phase 8 | 1d | | L02 | 4 个 Provider 实现 | Phase 8 | 2d | | L03 | ConversationLam 对话持久化 | Phase 8 | 2d | | L04 | from_config 编译器集成 | Phase 8 | 1d | | L05 | 端到端验证 | Phase 8 | 1d | | DESIGN-01 | Handler 类型体系重构 | 审计 | 1d | | DESIGN-07 | 效果推断覆盖多智能体 | 审计 | 1d | | DESIGN-08 | 成本估算 vs 实际追踪交叉验证 | 审计 | 1d | ### Tier 3: 集成层 — MCP + GitHub Action (~10 人天) | ID | 任务 | 来源 | 工作量 | |----|------|------|--------| | I01 | MCP Server 实现 (4 个工具) | Phase 7a | 2d | | I02 | MCP Server PyPI 发布 | Phase 7a | 1d | | I03 | 成本异常运行时检测 | Phase 7a | 1d | | I04 | GitHub Action 实现 | Phase 7b | 2d | | I05 | GitHub Marketplace 发布 | Phase 7b | 1d | | I15 | REST API /analyze/* 端点 | Phase 7e | 1d | | API-01 | 统一错误响应格式 | 审计 | 1d | | API-03 | 幂等 key 支持 | 审计 | 1d | ### Tier 4: 集成层 — 框架提取器 + 运行时守卫 (~18 人天) | ID | 任务 | 来源 | 工作量 | |----|------|------|--------| | I06 | 提取器接口 | Phase 7c | 0.5d | | I07 | LangChain 提取器 | Phase 7c | 2d | | I08 | CrewAI 提取器 | Phase 7c | 2d | | I09 | AutoGen 提取器 | Phase 7c | 2d | | I10 | lambdagent-guard 核心 | Phase 7d | 2d | | I11 | LangChain 守卫 | Phase 7d | 2d | | I12 | CrewAI 守卫 | Phase 7d | 2d | | I13 | AutoGen 守卫 | Phase 7d | 2d | | I14 | lambdagent-guard PyPI 发布 | Phase 7d | 1d | | FEAT-02 | PaaS 异步 Job API | 审计 | 2d | ### Tier 5: 助手工具补全 (~16 人天) | ID | 任务 | 来源 | 工作量 | |----|------|------|--------| | A18 | NotebookEdit 工具 | Phase 5 | 3d | | A19 | WebSearch 工具 | Phase 5 | 1d | | A20 | WebFetch 工具 | Phase 5 | 1.5d | | A21 | 模型 auto-fallback | Phase 5 | 1.5d | | A24 | LSP 代码智能 | Phase 5 | 5d | | I16 | VS Code 扩展 | Phase 7f | 3d | | I17 | Marketplace 发布 | Phase 7f | 1d | ### Tier 6: 高级功能 + 研究 (~35 人天) | ID | 任务 | 来源 | 工作量 | |----|------|------|--------| | A25-A33 | 用户交互/规划模式/Worktree/团队等 | Phase 5 Tier 4 | 20d | | S27 | L2 容器沙箱 | Phase 4 | 5d | | S30 | macOS sandbox-exec | Phase 4 | 3d | | Research P2 | 概率预言机/互模拟/Coq 等 12 项 | Research | 不定 | ### Tier 7: 测试 + 文档补全 (~12 人天) | ID | 任务 | 工作量 | |----|------|--------| | TEST-01 | core.py + primitives.py 测试 | 2d | | TEST-02 | multiagent.py 测试 | 2d | | TEST-03 | async_core.py + isolation.py 测试 | 2d | | TEST-04 | compiler.py + lint.py 测试 | 2d | | DOC-01 | theory.md 完善 | 1d | | DOC-02 | multi-agent.md 完善 | 1d | | DOC-03 | api.md REST 参考 | 1d | | DOC-04 | constructs.md 示例 | 1d | --- ## 九、推荐执行顺序 ``` Week 1: Tier 0 (修 Bug) ~5d ← 立即 Week 2-3: Tier 1 (安全) ~15d ← 生产阻塞 Week 3-4: Tier 2 (双引擎+Provider) ~12d ← 核心完成 Week 5: Tier 3 (MCP+Action) ~10d ← 最高商业价值 Week 6-7: Tier 4 (框架守卫) ~18d ← 生态扩展 Week 8: Tier 7 (测试+文档) ~12d ← 质量保证 Week 9+: Tier 5-6 (工具+高级) ~51d ← 功能丰富 总计: ~123 人天 (未完成部分) 已完成: ~89 人天 (81 项) ``` --- ## 十、2026-04-06 后续更新 ### 已修复的审计项 (P0+P1 实现期间) | ID | 状态 | 修复方式 | |----|------|---------| | DESIGN-01 | ✅ | `PassthroughHandler` 基类 (`handlers.py`) | | DESIGN-07 | ✅ | `infer_effect_for_term()` 覆盖全部多智能体构造 (`effects.py`) | | DESIGN-08 | ✅ | `validate_cost()` 交叉验证预测 vs 实际 (`cost_grade.py`) | ### 新增架构: Agent Instance 机制 **Agent 是函数定义,Instance 是函数调用。** 一份 agent 模板可被多个领域实例化。 ``` agentexample/qaagent67wiki/ ← 模板(版本控制) agent-config.yml ← 默认配置(相对路径) agents/, skills/ agentexample/instances/maritime/ ← 实例(数据不跟踪) instance.yml ← 路径覆盖(跟踪) wiki/ ← 累积知识(不跟踪) knowledge/ ← 原始文件(不跟踪) workspace/ ← per-run 数据(不跟踪) ``` 关键文件: - `agentpaas/engine/instance.py` — `load_instance()`, `create_instance()`, `_deep_merge()` - DB: agents 表新增 `agent_template`, `instance_dir` 列 - API: `CreateAgentRequest` 接受 `instance_dir` / `agent_template` ### 新增架构: Run Workspace 每次 `POST /agents/{id}/run` 在 `{agent_dir}/workspace/run_{YYYYMMDD_HHMMSS}/` 创建隔离目录,保存 input/output/trace/config/cost,保留所有历史 run 不删除。 --- ## 十一、一句话总结 **理论层 A+, 工程层 C+ → B-.** P0+P1 修复了 DESIGN-01/07/08,新增了 175 测试和 Instance 机制。最关键的剩余问题是**追踪链路三路分叉**和 PaaS 层的安全漏洞。