约束满足引擎(CSE)

代码库里最危险的不是 bug,是没写进文件的规矩——"这个 map 的 key 不能重复"、"凡是改 schema 都要加迁移"、"HTTP handler 返回前必须记审计日志"。这些规矩活在人的脑子里,新人不知道,AI 更不知道。

CSE(Constraint Satisfaction Engine)把隐式规矩变成可机械验证的谓词。

工作原理

CSE 维护一组约束(Constraint),每条约束是一个可执行的断言:

约束: "所有 HTTP handler 返回前必须调用 auditLog()"
谓词: 对 handler 函数的 AST 检查 → 是否存在 auditLog 调用

当 Agent 修改代码时,CSE 自动检查被影响的约束是否仍然满足。违反时直接反馈到 Agent 上下文,而不是等人 review 时才发现。

约束类型

CSE 内置 13 种检查器(Checker),覆盖五个维度:

维度优先级典型约束
安全(security)最高密钥不入代码、SQL 参数化、权限校验
数据(data)高Schema 变更配迁移、外键一致性
架构(architecture)中层依赖方向、禁止循环引用
质量(quality)中函数长度、圈复杂度、命名规范
一致性(consistency)标准错误处理模式、日志格式、import 顺序

优先级决定冲突时的裁决顺序——安全约束不会被质量约束覆盖。

约束从哪来

三条注册路径,各有不同的生命周期:

1. 种子(Seed)

项目初始化时,CSE 扫描项目结构和配置文件,自动推断基础约束:

2. 项目推断(CKG)

CKG 构建调用图后,CSE 从代码结构中发现模式:

3. 学习(L2.5)

当 QualityGate 检测到验证失败并被修复后,修复模式可被提炼为新约束:

学习到的约束带衰减机制:长期未被触发的约束会自动降级或归档,不会无限膨胀。

飞轮效应

CSE 约束飞轮

CSE 不是静态的规则引擎,它是一个正反馈循环:

项目用得越久,约束越精确。新加入的开发者(或 AI Agent)不需要读完所有文档就能遵守团队的隐式规矩——CSE 会在他违反时立即告诉他。

与其他能力的关系

能力与 CSE 的交互
CKG提供调用图和依赖关系,CSE 基于此发现架构约束
渐进验证QualityGate 执行 CSE 注册的约束检查
上下文管理CSE 的违反信息作为 overlay 注入模型上下文
记忆Correction 类记忆可转化为 CSE 约束

当前状态

CSE 在 wescode 中已实装核心框架(Seed + CKG 推断路径)。L2.5 学习路径和完整的衰减机制为实验性功能,随产品迭代逐步增强。

下一步