AUDIT_2026-06-11.md 11 KB

LambdAgentPaaS 全面审计报告(2026-06-11)

范围:功能测试(两套 pytest 套件 + 真实启动冒烟测试)、性能基准、bug 修复、功能清单、改进建议。 上一次审计:docs/AUDIT_2026-06-05.md。


1. 测试结果

套件 修复前 修复后
tests/(agentpaas 平台层) 244 通过 / 11 失败 / 1 跳过 255 通过 / 1 跳过
lambdagent/tests/(核心库) 565 通过 / 1 失败 566 通过

真实启动冒烟测试(uvicorn 起服务、临时 data dir):/health/setup/health/.well-known/agent.jsonPOST /setup/bootstrap、agent 创建/列表、内置包自动安装、限流(未鉴权 10/min 后 429)全部通过。

2. 本次修复的 bug(已验证)

BUG-A(真实产品 bug)AGENTPAAS_TESTING=0 被当成"测试模式开启"

  • api/app.pyos.getenv("AGENTPAAS_TESTING") 真值判断,字符串 "0" 非空为真 → desktop 启动跳过 auto-bootstrap 和内置包安装,且限流被关闭。
  • 修复:config.py 新增 is_testing() 单一事实来源(只认 1/true/yes),app.py 两处改用它。
  • 冒烟验证:AGENTPAAS_TESTING=0 启动后 3 个内置研究包正常自动安装。

BUG-B(测试隔离 bug)机器级 ~/.agentpaas/.env 泄漏进测试进程

  • config.py import 时无条件加载开发者的 ~/.agentpaas/.env(PORT=8067、DATA_DIR)和 providers.json(真实 API key!),导致 test_config_defaultstest_set_data_dir_persists_and_requires_restart 在本机失败,且真实密钥进入测试环境。
  • 修复:AGENTPAAS_TESTING 开启时跳过 _load_dotenv()_load_providers_json()

BUG-C(内置包政策违规)multi-reviewer 包声明 network: true

  • 内置研究包政策为 local-first(permissions.network 管工具层网络如 WebFetch,不管 LLM provider 调用);参照包 top-journal-reviewer 同样走云端 LLM 却正确声明 false
  • 修复:manifest 改为 network: false 并修正注释。

BUG-D(静默回退)ConversationLam 创建失败无任何日志

  • fromconfig/compiler.py 捕获所有异常后静默回退到无状态旧 Lam —— provider 配错(key/模型名)的表象变成"agent 每轮失忆",极难排查。
  • 修复:回退前打 logging.warning(含 agent 名、模型名、异常)。

BUG-E(测试过时)persona 测试期望 🐑,源码自 release-v1 起为 lambda 🐂

  • 修复:更新断言为 🐂。

环境修复(非代码)

  • 安装缺失的 dev 依赖 pytest-asyncio(pyproject 已声明),解锁 8 个 test_authenticate.py 用例(audit #34 的鉴权链路覆盖此前全部没在跑)。
  • 顺带修好本机 pip:anaconda 的 pyodbc 元数据版本号 4.0.0-unsupported 不合 PEP440,导致 pip install 一律崩溃;已改为 4.0.0+unsupported

3. 性能基准(2.6 GHz Intel Mac,单进程)

路径 p50 p95 评价
import lambdagent 137ms 正常
import agentpaas.api.app 440ms 正常(FastAPI + 路由)
from_config(simple yml) 0.5ms 0.7ms
from_config(审稿67 react yml,含子智能体) 5.7ms 6.3ms
CompileCache 命中 ~0ms
pipeline rule-gate 求值(has/contains/regex) 0.06ms 0.09ms
create_run_workspace 0.6ms 0.8ms
build_change_manifest(21 文件) 58ms 63ms ⚠ 偏慢:开销在 git 子进程(rev-parse/status/diff),文件扫描本身 <1ms。每 run 一次可接受;多 stage pipeline 会乘 stage 数
GET /health(进程内 TestClient) 6.4ms 7.2ms 可接受(含中间件链)
estimate_cost(静态折叠) 0.01ms
真实服务吞吐(uvicorn 单 worker,50 并发×400 请求 /health) 156 req/s,p50 315ms(排队延迟)。desktop 单用户场景足够

结论:无性能瓶颈级问题;编译、gate、成本折叠都在亚毫秒级。唯一值得优化的是 manifest 的 git 子进程开销(P2)。

4. 已实现功能清单(审计盘点)

lambdagent 核心库(566 测试)

  • 演算内核:6 个核心项(Lam/Compose/If/Loop/Pair+Fst+Snd/Tool)+ 多智能体构造(GroupChat/AsyncPar/Handoff/Route/Guard/Memory)
  • 类型系统:LamType + Json Schema 结构类型 + 子类型(T-Compose 编译期组合检查)
  • 效应系统:PURE/LLM/IO/STATE 格 + serial/parallel/iterate 组合 + 自动推断(DESIGN-07 全构造覆盖)
  • 成本分级:CostGrade(probability/tokens/latency/money/p_fatal)+ grade_serial/parallel/iterate/guard + validate_cost 交叉验证(DESIGN-08)
  • Provider:Anthropic、OpenAI、Ollama、DashScope/Qwen、DeepSeek、Moonshot、Zhipu、Claude Code(8 家);统一 chat_typed 接口、usage 累积、CJK 字符上限兜底
  • ConversationLam:带窗口管理的有状态会话(80k token / 200k 字符双上限)
  • fromconfig 编译器:simple/react/chain/router/parallel + guard/memory/subAgents/hooks/MCP 策略;安全特性 S04/S05/S16/S17/SEC-02
  • 内置工具:11 模块(code/file/knowledge/web/qa/shell/wiki/task/terminal/permission/registry),ValidatedTool 参数别名规范化

agentpaas 平台层(255 测试)

  • API:约 70 个端点 —— agent CRUD+版本+回滚、同步/SSE 流式执行、run 取消、workspace 浏览/下载、三层记忆(core/recall/archival)、知识库(索引/wiki/BM25 搜索/流式 QA)、AgentPack 安装/卸载、provider 管理、模板、租户/配额/计费、trace/工具审计、静态分析(lint/type-check/cost)、A2A 发现
  • 引擎:sandbox(资源限制+run workspace 永久留存+manifest 修改清单)、pipeline(产物 Gate:受限规则 DSL + LLM judge + write-ahead 状态 + 契约校验)、instance(模板/实例分离)、queue(内存/Redis)、retry+熔断、compile cache、三层记忆存储
  • 安全:PBKDF2 API key、租户隔离、RBAC、滑动窗口限流(/cancel 永不限流)、路径穿越防护、CORS 白名单、安全响应头、loopback-gated setup
  • 部署模式:desktop(自动 bootstrap + 内置包)/ lab / paas 三模式
  • WebUI:12 页面(向导/仪表盘/agent 管理/聊天含 ReAct 可视化与 Lambda Trace/知识库/包管理/provider 配置)

5. 改进建议(带优先级,待确认后实现)

P0(正确性/安全,建议立即做)

  1. _rate_store 加锁app.py 限流字典多线程无保护,GIL 下大体安全但清理/插入存在竞态;加 threading.Lock 成本极低。
  2. 错误前缀判定改结构化agents.py 用正则 \[[A-Z0-9_-]*(ERROR|TIMEOUT)\] 从输出文本判 run 失败 —— LLM 输出里出现同样字样会误判。建议执行层返回结构化 status 而非靠文本。
  3. traces.py:76 的 HIGH-risk 工具确认 TODO/tools/{tool}/confirm 端点存在但未接真正的 ToolGateway 确认机制,SEC-12/30 闭环缺最后一段。

P1(功能完整性)

  1. multi-reviewer 注册为内置包:加进 BUILTIN_PACK_IDS(包已通过 manifest 校验和 5-agent 编译测试,本次已修权限声明)。
  2. estimate_cost 认识 ConversationLam:pipeline 成本预估中 stage 主 agent 算 0(已知 v1.1 残留),cost soundness 论文叙事也需要这个补齐。
  3. 孤儿 run 的 SSE 通知:启动清扫只改 DB 状态,前端正在看的 run 不会收到终止事件;补一个 reaper → 前端的状态推送或前端轮询兜底。
  4. Pydantic v2 弃用清理errors.py.dict().model_dump()on_event → lifespan(两处 DeprecationWarning,V3 会断)。

P2(性能/工程质量)

  1. build_change_manifest 跳过非 git 目录:先快速判断 .git 是否存在再起子进程,或缓存 repo-root 探测;多 stage pipeline 下每 stage 省约 50ms。
  2. CI 加 dev 依赖检查:本次 8 个鉴权测试因缺 pytest-asyncio 静默没跑——CI 里 pip install -e .[dev] 并对 "collected N" 数做下限断言,防测试静默蒸发。
  3. FIX-10 循环引用报错带路径:子智能体循环检测只报深度超限,不报 A→B→C→A 链路。

P3(产品方向,可后排)

  1. pipeline P2/P3 残留:human gate 的 YIELD+resume 语义、崩溃孤儿确定性恢复、真 regex timeout。
  2. simple agent token=0:跨 provider 既有限制,usage 透传补齐。

6. 改进项实现记录(用户确认 P0+P1+P2 后,同日完成)

全部 ①–⑩ 已实现并回归(tests/ 255 通过 + lambdagent 566 通过 + webui tsc/build 0 错误):

# 实现 关键文件
_rate_storethreading.Lock,清理/检查/追加原子化 api/app.py
结构化失败判定:Context.provider_errors 通道(extend 共享引用、fork+merge_trace 汇回)→ ConversationLam 两处 ProviderError 捕获时 record_provider_error()_execute_agent 透出 trace_info["provider_errors"] → 边界判定泛化 [XXX_ERROR] 正则须有结构化佐证才判失败([MCP_*] 纯文本通道单独保留)。LLM 正常输出以错误字样开头不再误判 lambdagent/core.py, conversation.py, agents.py
SEC-12/30 闭环:新建 engine/confirmations.py 登记处(threading.Event 阻塞等待、5 分钟超时拒绝、fail-closed);_execute_agent 注入 _confirm_callback(编译器原生支持)并推 confirm_required SSE 事件;traces.py 实现 GET/POST /{run_id}/confirm(带租户校验,body {"approved": bool} engine/confirmations.py, agents.py, traces.py
research.multi-reviewer 加入 BUILTIN_PACK_IDS,desktop 启动自动安装 engine/builtin_packs.py
estimate_cost 加 ConversationLam 分支(懒 import 防循环依赖),按 model 计费。验证:simple term 0 → 800 tokens lambdagent/cost_grade.py
Chat.tsx 流结束无终态事件 / 网络异常时,拉 GET /traces/{run_id} 真实终态结束气泡(原来气泡永远 streaming) webui/src/pages/Chat.tsx
.dict()model_dump()on_event("startup")→lifespan api/errors.py, api/app.py
manifest 先文件系统探测 .git 再起 git 子进程:非 git 目录 58ms→1.5ms engine/sandbox.py
CI 跑两套套件 + collected 数下限(tests/≥240、lambdagent≥540),防测试静默蒸发;补跑 lambdagent/tests/(此前 566 个测试不在 CI!) .github/workflows/ci.yml
FIX-10 修复:原 _depth 形参在递归点从未传递(死代码)。改 thread-local 编译栈报完整链路;另加运行期懒编译子智能体的在飞栈环检测([SubAgent cycle detected: A → B → A] lambdagent/fromconfig/compiler.py

审计人:Claude(Fable 5)。第 1-5 节修复 + 第 6 节全部改进均已通过全量回归。