jim4226/CSIS

GitHub: jim4226/CSIS

CSIS是一个通过红队循环和回归测试持续改进多智能体系统的原型框架,旨在增强系统安全性和透明度。

Stars: 1 | Forks: 0

# CSIS · 持续自我改进系统

phase tests cycles findings python license

## 标题 大多数代理框架仓库都在兜售愿景。这个仓库交付的是**其自身失败的可追溯记录**。 在9个周期中,并行的红队代理攻击了系统,修复以代码和回归测试的形式落地,并且周期常常发现*前一个*周期在错误的抽象层修复了bug。其中两个更大的教训是: - **身份标识优于时序检查**。周期8尝试通过预合并快照差异来检测“哪个迭代编写了这个候选项?”。周期9发现快照存在竞态窗口。修复方案不是扩大快照范围——而是在每次写入时为每个候选项打上 `writer_iteration_id` 标记。 - **瓶颈点优于边界防护**。周期8在 `Daemon.__init__` 处添加了 `type(...) is _BackendTracker` 检查,以击败针对LLM计量的子类化旁路。周期9发现三个生产脚本(`burst.py`、`loop.py`、`demo_pr_scenario.py`)完全绕过了守护进程。修复方案是将检查移至 `Coordinator.__init__`——这是每个LLM调用都必须经过的实际单一瓶颈点。 完整的周期表、发现计数和架构转向事后分析位于 **[CYCLES.md](CYCLES.md)**。 ## 这是什么 CSIS是基于Anthropic的托管代理原语构建的**持续、自我改进代理系统**架构提案的可运行第0阶段实现。它不是那种唤醒、工作、然后遗忘的 episodic 代理,而是运行一个由专职角色(研究员、构建者、批评者、验证者、图书管理员、审计员)组成的长期存续组织,这些角色共享持久化记忆,并在承载安全性的压力下逐步改进。 规范文档位于 [`CSIS-architecture.html`](CSIS-architecture.html)。本仓库是其原型。 ``` flowchart LR R["Researcher
T0 · plan"]:::builder --> B["Builder
T1 · artifact"]:::builder B --> V["Verifier
V1 graders + V2 critic"]:::altCkpt V -->|cert| L["Librarian
candidate stores"]:::builder L --> A["Auditor
why-doc + hash precondition"]:::altCkpt A -->|atomic CAS| P(["PROMOTE
candidate → live"]):::promote V -. cert fails .-> RB(["rollback"]):::rollback A -. stale precondition .-> RB classDef builder fill:#fbf4e7,stroke:#d97757,stroke-width:2px,color:#2a2a2a classDef altCkpt fill:#dbe7f3,stroke:#4a82bc,stroke-width:2px,color:#1a3a5e classDef promote fill:#c8d6b2,stroke:#5a6c46,stroke-width:2px,color:#2a3a1a classDef rollback fill:#f3dbd0,stroke:#b85e3f,color:#5a2a1a ``` **当前可用功能(第0阶段):** - 8步持续循环端到端在模拟LLM后端(无需API密钥)或真实Anthropic后端上运行 - 6级记忆信任层级(`原始` → `不可信` → `候选` → `已验证` → `已提升` → `已弃用`),以哈希条件提升作为唯一的变更原语 - V1+V2验证与跨检查点证书签名(验证者和审计员在与构建者结构不同的检查点上) - 5层记忆层次结构(工作记忆 / 情景记忆 / 语义记忆 / 程序性记忆 / 因果记忆),由JSON支持 - 能力层级基质——第0阶段仅限T0/T1;T2+在调用点即被拒绝 - 宪章 + 触发警报 + 关闭令牌 + 层级守卫,全部作为代码强制执行 - 24/7守护进程:好奇心驱动的前沿项生成、预算上限、看门狗、停止文件、自动快照 - 3个领域适配器:PR维护(任意git仓库)、自我改进(本仓库)、Lean形式化数学(如果未安装Lean则优雅降级) - 244个测试;每个周期的发现都有回归测试,外加在第10个周期添加的分布性评分器栈(Dice / IoU / 标志点误差 / ASSD,带Bootstrap置信区间和逐切片分解) ## 分布性评分器——基于结果的评估 大多数代理评估框架(HealthBench、LLM-Rubric、CSIS V1评分器集)是**规则导向**的:每个评分器返回 `passed: bool`。这对于PR维护、lint流水线和CI门禁等具有离散验收标准的任务是正确的。 但对于验收标准是样本分布上的连续指标的任务来说,这是错误的:医学图像分割(Dice / IoU / 豪斯多夫距离,跨N个案例和每个器官切片)、骨科重建(ASSD(毫米)和标志点欧氏误差)、校准(ECE,基于保留集)、药物亲和力预测(Ki / IC50 ± log-units,按目标家族切片)。一个 `passed: bool` 无法承载分布级评估所需的置信区间、切片分解或样本量。 CSIS现在在规则层旁边,增加了一个**分布性评分器层**: ``` from csis.verification.distributional_graders import DiceGrader, Sample grader = DiceGrader(threshold=0.85, n_bootstrap=1000) result = grader.evaluate([ Sample(case_id="c-042", payload={"pred_mask": pred, "true_mask": gold}, slices={"organ": "liver", "modality": "CT"}), # ... 522 more cases ]) # result.point_estimate = 0.892 # result.ci_lower / ci_upper = 0.871 / 0.913 (95% bootstrap percentile) # result.passed = True (下置信区间阈值超过0.85) # result.slices = [organ=liver: 0.94 [0.91, 0.96] 通过, # organ=pancreas: 0.71 [0.66, 0.76] 未通过, ...] ``` 关键设计选择(完整原理见 **[brain/research/02-distributional-graders.md](brain/research/02-distributional-graders.md)**): - **保守的通过语义** —— `passed=True` 要求置信区间下界超过阈值(对于越大越好型)或上界保持在阈值以下(对于越小越好型)。一个平均值为0.87但95%置信区间为[0.81, 0.93]的模型,对于阈值0.85 **不通过**。点估计越过了线;但置信区间的下限没有。 - **逐切片分解** —— 每个样本携带自由格式的切片标签(器官、模态、队列、难度)。评分器为每个包含至少 `slice_min_n` 个样本(默认为5)的 `(键, 值)` 对发出一个 `GraderSlice`,每个切片都有自己的置信区间和通过标志。 - **最差切片批评者钩子** —— `grader.worst_slices(result, k=3)` 返回最接近(或已超过)阈值的切片,以便V2批评者阶段攻击模型最薄弱的环节。 - **纯标准库** —— 使用 `random.Random` + `statistics.mean` 进行Bootstrap;无numpy/scipy依赖。接口规范是 `DistributionalGraderResult`;生产用户可在相同形状下换用基于numpy的实现。 - **向后兼容的证书** —— `VerifierCertificate` 同时携带 `grader_results`(规则性)和 `distributional_results`(分布性)。现有任务默认为 `distributional_results` 为空;哈希条件提升语义不变地传递。 已发布的具体评分器:`DiceGrader`、`IoUGrader`、`LandmarkErrorGrader`、`AssdGrader`。31个回归测试覆盖指标正确性、置信区间形状、通过规则语义、切片分组和模式往返。 **为何其重要性超越医学影像领域:** 任何代理领域,只要“模型好吗?”这个问题的正确答案是*一个带不确定性的数字*而非一个复选框,就需要这种形式——编码代理(跨N+30次提交的回归率)、科学推理(按蛋白质家族的MAE)、机器人(按环境类型的成功率)。关于Anthropic托管代理可以原生提供哪些功能以实现此目标的完整案例,详见研究文档。 **第0阶段的诚实延期(跟踪于 [brain/synthesis/01-validation.md](brain/synthesis/01-validation.md)):** - 真实的Anthropic Dreams API集成(在 `csis/dreams/` 中本地模拟) - V3(辩论)、V4(复制)、V5(校准)验证层 - I4–I7改进层(DPO、蒸馏、持续预训练、NAS) - 多进程事件日志(第0阶段的单进程是有意的) - 构建者T1工作的沙盒子进程执行(评分器读取仓库的当前状态) - LLM生成的摘要文档(第0阶段为模板化) - L6元改进层 - 被包裹后端不变量的进程级隔离(来自周期9的H2/H11延期) ## 快速启动 ``` pip install pydantic pytest # 运行测试套件(244项通过)。 python -m pytest tests/ -v # 运行一次完整的端到端迭代(模拟后端,无需API密钥)。 python -m csis.loop # 演练5场景的PR维护基准测试。 python scripts/demo_pr_scenario.py --clean # 运行24/7守护进程(前台模式;按Ctrl-C停止)。 python -m csis.daemon --backend mock --rate-per-hour 60 # 打开实时仪表盘(仅限只读、本地访问,默认端口8765)。 python -m csis.ui ``` 切换到真实Anthropic后端、按成本上限运行按需突发任务、安装为Windows服务、选择基准领域以及完整的操作员界面 → **[RUN.md](RUN.md)**。 ## 实时仪表盘 ``` python -m csis.ui # opens http://127.0.0.1:8765 in your browser python -m csis.ui --port 9000 # custom port python -m csis.ui --no-open # don't auto-open the browser python -m csis.ui --host 0.0.0.0 # expose beyond localhost (use with care) ``` 单页面仪表盘,每2秒轮询,只读。显示: - **守护进程状态** —— 存活/过期,迭代被提升 vs 回滚,回滚原因分析 - **成本** —— 每个BudgetTracker文件的当日支出,过去一小时的消耗速率,p50/p95延迟,按模型分解 - **记忆层级** —— 工作/情景/语义/程序性/因果每类的候选+活跃计数 - **触发警报** —— 事件日志中最近10条,带标签和表面(前沿/计划/制品/摘要文档) - **最近后端调用** —— 每次调用的延迟、输入/输出token数、成本、重试次数、结果——数据来自每个被包裹后端调用写入的 `brain/*.calls.jsonl` 旁路文件 - **事件日志尾部** —— 最新的20个链式链接事件,带序列号和actor/kind 仪表盘仅从磁盘制品读取(事件日志、预算JSON、记忆存储、守护进程心跳)。与正在运行的守护进程无耦合——你可以在停止状态下启动仪表盘,仍然能看到发生的事件轨迹。 ## 架构 ### 8层栈 ``` flowchart TB L7["L7 · Safety envelope
Constitution · TierGuard · Tripwires · ShutdownToken · WrappedBackend invariant
csis/safety/ — enforced AT THE SUBSTRATE, not as agent-prompt instructions"]:::safety L6["L6 · Meta-improvement
deferred to Phase 1 — improving the improver"]:::deferred L5["L5 · Improvement (I1-I3)
Procedural-tier skill accumulation — the actual self-improving surface, gated by everything below"]:::builder L4["L4 · Verification & critic
V1 pinned graders (rubric + distributional) · V2 critic falsifies · cert is cross-checkpoint signed
csis/verification/ — runs on a structurally different LLM checkpoint than the Builder"]:::verify L3["L3 · Curiosity & frontier
Frontier-item generator: seeds + gap-driven + rollback follow-ups · salt threaded for forensic replay"]:::builder L2["L2 · Memory hierarchy
5 tiers × candidate/live · 6 trust levels · hash-preconditioned promote() is the only mutation primitive
csis/memory/store.py — writer_iteration_id stamp on every candidate (cycle-9 H4)"]:::builder L1["L1 · Agent runtime
Coordinator runs the 8-step loop · delegates to Researcher / Builder / Critic / Verifier / Librarian / Auditor
csis/agents/coordinator.py — delegation depth = 1"]:::builder L0["L0 · Substrate
event log (hash-chained) · capability tags · canonical JSON hashing
csis/substrate/ — the only layer everyone trusts unconditionally"]:::substrate L7 --> L6 --> L5 --> L4 --> L3 --> L2 --> L1 --> L0 classDef substrate fill:#efe2c3,stroke:#c89b3c,stroke-width:2px,color:#2a2a2a classDef builder fill:#fbf4e7,stroke:#d97757,stroke-width:2px,color:#2a2a2a classDef verify fill:#dbe7f3,stroke:#4a82bc,stroke-width:2px,color:#1a3a5e classDef safety fill:#dde6cd,stroke:#5a6c46,stroke-width:2px,color:#2a4a1a classDef deferred fill:#f6ecd6,stroke:#b8a880,stroke-width:2px,color:#8a7c5a ``` ### 6级信任层级 ``` flowchart LR raw([raw
just-observed]):::raw -->|stored| untrusted([untrusted
may be poisoned]):::untrusted untrusted -->|Verifier check| candidate([candidate
awaiting Auditor]):::candidate candidate -->|cert signed
cross-checkpoint| verified([verified
citable as ground truth]):::verified verified -->|why-doc + hash CAS| promoted([promoted
citable as ground truth]):::promoted candidate -.->|deprecate| deprecated([deprecated
terminal · auditor only]):::deprecated verified -.->|deprecate| deprecated promoted -.->|deprecate| deprecated classDef raw fill:#f6ecd6,stroke:#b8a880,color:#2a2a2a classDef untrusted fill:#fbf4e7,stroke:#c89b3c,color:#2a2a2a classDef candidate fill:#fbf4e7,stroke:#d97757,color:#2a2a2a classDef verified fill:#dbe7f3,stroke:#4a82bc,color:#1a3a5e classDef promoted fill:#dde6cd,stroke:#5a6c46,color:#2a4a1a classDef deprecated fill:#f3dbd0,stroke:#b85e3f,color:#5a2a1a ``` ### 代码地图 | 规范层 | 代码 | |---|---| | L0 — 基质 | [`csis/substrate/`](csis/substrate/) — 事件日志(哈希链)、能力标签、哈希计算 | | L1 — 代理运行时 | [`csis/agents/coordinator.py`](csis/agents/coordinator.py) — 8步循环驱动器 | | L2 — 记忆层次 | [`csis/memory/`](csis/memory/) — 6级信任等级,5层层次结构,哈希条件 `promote()` | | L3 — 好奇心与前沿 | [`csis/curiosity.py`](csis/curiosity.py) — 前沿项生成器 | | L4 — 验证与批评 | [`csis/verification/`](csis/verification/) — V1固定+分布性评分器,V2批评者,跨检查点证书 | | L5 — 改进 (I1–I3) | [`csis/improvement/skill_library.py`](csis/improvement/skill_library.py) — 程序性层级积累 | | L6 — 元改进 | *延期至第1阶段 — 参见 [`CSIS-architecture.html`](CSIS-architecture.html) 附录A* | | L7 — 安全边界 | [`csis/safety/`](csis/safety/) — 宪章、层级守卫、触发警报、关闭 | | 休眠/整合 | [`csis/dreams/`](csis/dreams/) — 模拟Dream流水线 + 部分输出编辑 | | 实时监控 | [`csis/ui/`](csis/ui/) — 基于标准库的HTTP仪表盘,带 `--allow-control` 写操作 | 每个角色的完整层级矩阵、跨检查点要求和每层设计原理:**[architecture.html](https://jim4226.github.io/CSIS/architecture.html)**。 ## “大脑”自动保存目录 构建的每个有趣状态都被快照在 [`brain/`](brain/) 下。这个文件夹是持久的工作记忆,允许任何未来的贡献者(或未来的Claude会话)从零开始接手。 - [`brain/BRAIN.html`](brain/BRAIN.html) — 顶级索引,在浏览器中打开 - [`brain/snapshots/`](brain/snapshots/) — 11个时间点状态文件(00-初始 → 11-周期9-已发布) - [`brain/plans/`](brain/plans/) — 来自规划子代理的架构+验证蓝图 - [`brain/critiques/`](brain/critiques/) — 9个周期的实施前和实施后红队报告 - [`brain/research/`](brain/research/) — 带当前API签名的Anthropic SDK研究 - [`brain/synthesis/01-validation.md`](brain/synthesis/01-validation.md) — 确保实现一致性的跨领域验证 从零开始恢复:阅读 `brain/BRAIN.html`,然后是最新的快照,接着运行测试套件。 ## 按后端理解“改进”的含义 | 后端 | 每个迭代发生什么 | 成本 | |---|---|---| | **模拟**(默认) | 架构自我演练:好奇心 → 计划 → 模拟制品 → V1/V2 → 提升。程序性存储积累。证明基础设施能承受24/7运行。**无实际学习。** | $0 | | **Anthropic**(`--backend anthropic`,需要 `ANTHROPIC_API_KEY`) | 真实的Opus 4.7(研究员/构建者/图书管理员)+ 真实的Sonnet 4.6(验证者/批评者/审计员)调用。真实制品、真实的证伪尝试、真实的收益积累。 | 每次迭代约$0.05–0.15。有限次运行带硬性成本上限,参见 [`scripts/burst.py`](scripts/burst.py)。 | ## 安全属性(承载性) | 属性 | 实现 | 回归测试 | |---|---|---| | 能力增长不能超过监督速度 | 第0阶段硬性上限=T1;T2+在调用点即被拒绝 | `test_enforce_rejects_above_phase_0_ceiling_even_if_actor_authorized` | | 记忆变更可逆 | 候选存储 + `MemoryStore.promote()` 是通往活跃状态的唯一路径 | `test_promote_rejects_stale_precondition` | | 跨检查点验证 | `assert_cross_checkpoint` 要求≥2个不同的身份组件 | `test_cross_checkpoint_requires_two_distinct_components` | | 评分器完整性 | 每次构建证书时检查固定的源哈希 | `test_pinned_grader_drift_detection` | | 仅审计的结构化查询 | `structured_query()` 仅允许受信任的生产者 | `test_structured_query_excludes_untrusted_producer` | | 在基质层强制关闭 | `ShutdownToken.halt()` 在下一次迭代时引发 `HaltSignal` | `test_shutdown_blocks_subsequent_checks` | | 竞争下的原子提升 | 单写者锁 + 哈希条件CAS | `test_promote_serialization_under_contention` | | 被包裹后端不变量(LLM计量不可绕过) | `Coordinator.__init__` 要求 `_BackendTracker`;属性设置器在每次重新赋值时重新验证 | `test_H1_coordinator_rejects_unwrapped_backend` + `test_H3_coordinator_backend_setattr_rejected` | | 层级不匹配清理无竞态 | 每个候选项在写入时打上 `writer_iteration_id` 标记;清理时按标记过滤 | `test_H4_sibling_write_during_consolidate_not_over_discarded` | | 锁竞争下的丢失开销 | record()在锁不可用时追加到WAL;下一次成功的record()会排空它 | `test_H5_record_under_lock_timeout_persists_to_wal` | | 分布性证书绑定到证据,而非点估计 | `DistributionalGraderResult` 携带Bootstrap置信区间+样本量;保守的 `passed` 规则要求置信区间下界超过阈值(越大越好型)或上界保持在阈值以下(越小越好型) | `test_dice_grader_fails_when_ci_lower_below_threshold`, `test_landmark_grader_fails_when_ci_upper_exceeds_threshold` | 总计244个测试。每个周期的发现都有一个回归测试来证明缓解措施有效。完整周期历史 → **[CYCLES.md](CYCLES.md)**。 ## 如何构建的 九个周期,全部由LLM驱动,全部记录在 [`brain/critiques/`](brain/critiques/) 和 [`brain/snapshots/`](brain/snapshots/) 下。逐周期分解见 **[CYCLES.md](CYCLES.md)**。 出现的模式是:每个周期,并行的红队代理攻击上一个周期的修复;发现被分类到带有可复现攻击和 `文件:行号` 证据的批评文档中;修复以代码和回归测试形式落地;结果被快照。周期4-9每个都发现上一个周期的转向在正确的概念上,但在错误的抽象层,于是下一个周期将其移动。 ## 状态 第0阶段。可在模拟或真实Anthropic后端端到端运行。架构文档、批评路径和244个测试是证明“第0阶段已完成”的正确框架。 系统在模拟模式下作为结构监视器24/7运行。真实后端学习通过 `scripts/burst.py` 按需进行。两种路径都记录在 [RUN.md](RUN.md) 中。 ## 许可证 MIT — 参见 [LICENSE](LICENSE)。 ## 联系方式 在 https://github.com/jim4226/CSIS/issues 提交issue。
标签:Anthropic平台, DNS解析, PyRIT, Python, TLS抓取, 人工智能, 代码测试, 周期开发, 回归测试, 多智能体系统, 安全测试, 安全规则引擎, 开发流程, 开源项目, 持续自我改进, 攻击性安全, 数据管道, 无后门, 智能体框架, 架构优化, 测试驱动开发, 用户模式Hook绕过, 系统改进, 质量保障, 软件安全, 软件工程, 逆向工具, 问题修复