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%)
文件: core.py L99-112
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
If._is_truthy() 时可能 NameError [严重]文件: extensions.py L178
valid = If._is_truthy(valid) if isinstance(valid, str) else bool(valid)
影响: 循环导入场景下 If 未定义, Guard validator 返回字符串时崩溃
修复: 内联 truthy 检查逻辑, 不依赖 If 类
文件: primitives.py L345-360
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(...)
文件: cek_machine.py L295
影响: 带捕获绑定的 Term 在 CEK 中执行时丢失环境
修复: load() 时从 Term 提取绑定注入 env
is_subtype(T_INT, T_JSON()) 返回 False [中等]文件: types.py L223-225
影响: Paper III 说 Num <: Json(untyped) 成立, 但实现返回 False, 类型检查器误报
修复: 无 schema 的 T_JSON() 应接受所有基础类型
文件: agentruntime/runtime.py L81-97, react_engine.py L128-220
影响: Executor 和 ReActEngine 各维护独立 trace, 互不通信; PaaS API 返回空 trace
修复: 统一 trace 路径, 所有引擎必须写入 ctx.trace
文件: agentpaas/db/models.py L43-151
影响: 所有查询全表扫描, >1000 agent 时不可接受
修复: 添加 CREATE INDEX idx_agents_tenant ON agents(tenant_id) 等
已引入 PassthroughHandler 基类。ProductionHandler 和 TraceHandler 继承 PassthroughHandler,Lam/Tool/CEK 统一通过 isinstance(handler, PassthroughHandler) 判断是否透传。新增 handler 只需决定是否继承 PassthroughHandler。
_detect_provider() 在检测 Ollama 时 urllib.request.urlopen("http://localhost:11434"), 有副作用.
改进: 不做 auto-detection, 要求显式配置 provider 字段
augmented = f"[Memory]\n{memory_str}\n\n[Input]\n{input}"
无转义, 如果 input 包含 [Memory] 标记会混淆 LLM.
改进: 让 Lam 的 prompt template 处理 memory 注入, 不在 Memory 层硬编码格式
if key.lower() in label: # "code" 匹配 "code_review"
多个路由键可能同时匹配, 取第一个(dict 迭代序).
改进: 优先精确匹配, 模糊匹配仅在无精确匹配时启用, 有歧义时报错
tail_size = 3 * len(self.agent_list) 无依据, 且 conversation.index(m) 在循环内导致 O(n^2)
CEK GuardK 重试时 _AppTerm(k.agent_term, k.input_val) — 同一个输入给 LLM, 大概率得到相同无效输出.
改进: 重试时增加 temperature 或在 prompt 中注入验证失败原因
infer_effect_for_term() 现已覆盖 GroupChat(iterate(parallel(...), n))、AsyncPar(parallel(...))、Handoff(serial(...))、Send(serial(inner, state))、Receive(serial(state, handler))。
新增 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) | 叙述说明 + 代码示例 |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 | 不定 |
| 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 项)
| 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 模板可被多个领域实例化。
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()agent_template, instance_dir 列CreateAgentRequest 接受 instance_dir / agent_template每次 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 层的安全漏洞。