"存在就是成为约束变元的值。" — 威拉德·范·奥曼·奎因
今天的 AI 每开一次新对话,就归零一次。不是因为它不够聪明——GPT 够聪明,Claude 也够聪明。而是因为它从未被要求做出本体论承诺——一套声明"我相信这些模式存在、到这个置信度为止、基于这些证据、随时准备被推翻"的认知框架。没有这个框架,AI 就是一个哲学上的唯名论者:它处理每一个 token,但从不敢说这些 token 背后存在一个可复用的结构。
人类不是这样工作的。第三次部署同一个项目就知道"大概 3.3 周、有 3 个已知陷阱"。第十次看同一个症状就知道"先排除 A 再考虑 B"。而 AI——即使帮人类部署了 50 次——第 51 次仍然从零开始。这不是能力问题,是范畴问题:AI 缺少承认"共相"真实存在的器官。
Praxis 就是那个器官。 它是 AI 的大脑皮层——一个位于无状态 LLM 与外部世界之间的概率化、自我演化的计算本体论引擎。它从对话和工具调用中自动提取结构化知识,赋予置信度,在下一次任务前注入 LLM 上下文。学到的模式带置信度、带版本历史、带关系依赖。不是"记住了什么"——是"相信什么,以及为什么相信"。
LLM 的底层是一个概率分布。给定前面的 token,预测下一个 token。这没有任何"模式是真实的"的承诺。
Praxis 在 LLM 之上增加了一层结构化信念。这一层的核心单元叫 ProtoStructure——从对话和工具调用中自动提取的概率化认知单元。和传统知识图谱不一样:知识图谱是人类专家坐在会议室里手工定义的,静态的,确定性的,没有人敢改。ProtoStructure 是 LLM 从观察中自动提取的,带置信度的,随时间演化的,可以被推翻的。
五种类型覆盖了认知的基本范畴:
- ProtoSequence — 行为序列模式。"这个项目的部署流程是 lint → test → build → deploy → verify",每一步有执行者、有预期时长、有常见陷阱。
- ProtoConstraint — 绝对不能做的事。"数据库迁移前必须先备份"——这不是建议,在结晶化后会变成
before_tool_call拦截级硬约束。 - ProtoConcept — 领域概念的定义。"分诊不是在排队——是在资源约束下按紧急程度分配优先级的决策过程"。
- ProtoRole — 谁负责什么、交付什么给谁。"后端负责 API,前端负责 UI,后端的交付物是前端的输入"。
- ProtoPurpose — 目标和成功标准。"代码审查的目的不是找茬,是发现审查者自己想不到的盲区"。
但这只是分类学。Praxis 真正关键的设计决策是:每个 ProtoSequence 同时记录结构面和功能面。
工程哲学家 Kroes 和 Meijers 提出了"双重性质理论"——任何工程造物都同时具有物理结构(遵循自然法则的客观实体)和意向功能(存在于人类心智中的目的)。一座桥不只是钢筋和混凝土——它是"让人和车跨越障碍"这个意图的物理实现。一条数据库迁移流程不只是备份→迁移→验证→切换——它是"保证数据完整性和最小化停机时间"这个意图的操作化。
Praxis 将这一区分直接编码进了 ProtoSequence 的数据模型:structure(可观察的行为步骤)、function(每一步的目的和前提/后置条件)、teleological_mapping(结构→功能的逻辑映射)。
这个区分有一个非常具体的操作后果。当用户说"我们改用蓝绿部署代替备份"时——Praxis 不比对步骤名称。它检查功能面:数据完整性和最小化停机这两个目的,是否仍被满足?是 → 结构改变但功能不变,仅更新映射,不下调置信度。否 → 结构改变且功能失败,这是一个真正的错误,下调置信度,记录为学习事件。
没有这个区分,AI 要么过于僵化(任何变化都视为错误),要么过于松散(任何变化都接受,从不学习)。有了它,Praxis 能从灵活性和学习之间走出一条真正有用的中间道路。
一个 LLM 说"我做对了"和一个醉汉说"我没醉"具有同等的认识论价值。Praxis 的置信度系统建立在一个核心原则上:语言模型不是真理的担保人。
每个 ProtoStructure 的置信度由 7 个独立信号源加权融合。LLM 相关信号的权重合计只有 0.25。其余 0.75 来自独立于 LLM 的信号源。这不是技术偏好——这是认识论立场。
Statistical Verifier 是第一个独立法官。ProtoSequence 的步骤预测了特定的工具调用("备份"→ mysqldump,"迁移"→ knex migrate)。统计验证器在 session 结束后将实际执行的工具序列与预测比对——匹配则确认,不匹配则反驳。不需要 LLM 参与,纯模式匹配。这是 Praxis 打破"LLM 自评循环"的关键突破:在此之前,所有验证信号都来自 LLM 自己——LLM 标记 [PREDICTION_CONFIRMED],LLM 判断自己是否正确。统计验证器是第一个来自外部的信号。
Role Verifier 检查角色行为与实际工具调用者模式的一致性。ProtoRole 说"后端负责 API 设计"——但工具调用记录显示后端工程师在操作数据库、前端工程师在写 SQL?角色验证器标记矛盾。
Concept Verifier 走的是波普尔式的证伪路线——它不找支持证据,而是给 LLM 一个对抗 prompt:"请为这个概念的反例辩护,尽可能有说服力"。如果 LLM 连一个有说服力的反例都找不到,概念通过证伪检验。信念的价值不在于它被支持了多少次,而在于它经受住了多少次严肃的攻击。
用户纠正、任务成败反馈、会话中实时矛盾检测——加起来就是 7 个信号源。当多个独立信号指向同一个结论时,信念才是可靠的。这是 Praxis 的认识论:置信度不是来自"有多少证据支持",而是来自"有多少独立攻击未能推翻"。
大多数 AI 安全方案是事后检测——执行完了、出错了、然后分析日志。就像在车祸发生后检查刹车痕迹。
Praxis 的约束系统走另一条路。当一个 ProtoConstraint 经历了至少 5 次观察、置信度超过 0.8、并通过了奎因式的三重反事实检验(必要性:如果不假设这个约束存在,能否解释观察到的行为?充分性:假设后预测成功率是否更高?奥卡姆剃刀:有无更简单的替代解释?)——这个约束就结晶化了。
结晶化之后的约束不再是被动存储的数据。它是主动守卫。在 LLM 生成输出之前,已结晶的约束被注入 system prompt——用 ⛔ 标记,放置在 Tier A/B/C 之前。在工具执行之前,before_tool_call Hook 拦截即将执行的调用,检查是否违反任何活跃约束。severity=block → 拒绝执行并返回理由。severity=confirm → 暂停等待用户确认。severity=warn → 执行但写入审计日志。
这里有 Praxi 的一个核心设计哲学:一个系统的"信念"必须在其行为中可操作化,而非仅在其声称中。 "我相信数据库迁移前必须备份"如果不阻止任何人直接跑 migrate,那就不是一个真正的信念——它只是一个 prompt 里的字符串。
1M token 的上下文窗口看起来很宽裕——但它属于整个会话,不是 Praxis 独享。用户文档、代码库内容、长对话历史可能已经消耗了 900K。在仅剩 50K 时,每个 token 都很贵。
Praxis 的四级压力自适应机制处理的就是这个场景。Normal(<60% 占用)→ 全量注入。Elevated(60-75%)→ Tier B 开始压缩。High(75-90%)→ 仅保留 Tier A 摘要。Critical(>90%)→ 只注入结构索引(名称+ID+置信度+一行描述),加上 recall_structure() 让 LLM 按需拉取。
但这里有一个根本性的设计选择。在 Critical 模式下,LLM 仍然知道所有结构存在。索引告诉它"我们有门诊流程(置信度 0.87)、API 设计模式(置信度 0.82)、数据库迁移约束(block 级别)..."——只是详情被折叠了。LLM 调用 recall_structure("ps-clinic-flow") 即可拉取完整内容。
这不是"因为空间不够所以不给你看"——那是早期的选择性注入模型,有一个致命的缺陷:如果场景分类错了,结构就永久消失在 LLM 的视野之外,而且 LLM 甚至不知道它不知道自己不知道什么。Praxis 的 Push+Pull 混合模型保证了一件事:没有一个结构被排除。 在空间充裕时主动提供(Push),在空间紧张时保留索引+按需通道(Pull)。
同一个 token 预算下还有一个独立维度:认知成熟度。新手 Praxis(0-10 个 session)注入的是"Phase 2 通常是 API 开发阶段,需要 3-4 周"。老手 Praxis(50+ session)注入的是"Phase 2: API 开发,3.3±0.8 周,7 次观察。陷阱 1: 号源超卖(3/7,延期 2.1 天)。陷阱 2: 接口变更(6/7,缓解:提前锁定)。"同样 token 预算,信息密度差一个数量级。这是 token 预算 × 语义粒度两个维度的交叉——压缩的是描述深度,不是结构广度。
把知识写成 prompt 文本注入 LLM 上下文,和真正让它驱动执行——这是两件完全不同的事。LLM 可以忽略注入的文本。planning-with-files 的任务计划文件压根不消费 prompt 文本。执行结果以非结构化的对话历史形式回流到 Praxis,丢失了"哪个结构被使用了、哪个陷阱真的发生了、哪个子任务成功了"这些关键信号。会话中发生的错误会误导 LLM 一整个 session——等到 session_end 才修正,已经太晚了。
Praxis 用四件事填上了这道鸿沟。
第一,计划生成器。 ProtoTask——从同类项目历史中学习的任务模式——不是作为"建议"注入 prompt,而是直接生成结构化的 PlanDocument:包含阶段划分、子任务、验收标准、陷阱预警、受影响的阶段。这个计划是结构化的执行蓝图,不是一段自由文本。
第二,MidSessionLearner。 不等 session_end。用户说"不对,应该是 X"→ 即时下调关联结构置信度(<10ms,纯规则匹配,不调 LLM)。工具调用违反同一约束 3 次以上 → 即时标记。单会话下调上限 0.2——防止一次糟糕的对话毁掉几十次积累。
第三,结构化验收。 5 种验收标准验证子任务是否真正完成:command_output(运行命令并匹配输出模式)、file_existence(检查文件是否已生成)、test_pass(运行测试框架并解析通过/失败/跳过计数)、llm(审查代码/文档质量)、user_approval(部署/安全/财务操作必须人类确认)。
第四,陷阱反馈。 子任务失败 → 关键词匹配 ProtoTask 的已知陷阱列表 → 命中反馈(置信度 +0.02)。误报率超过 30% → 自动降低该陷阱的 severity。第 1 次遇到是意外,第 3 次就是已知陷阱。
这是一个完整的知行循环:认知结构通过 PlanDocument 和 GuidanceSignal 驱动执行 → 执行结果(工具匹配、子任务成败、用户纠正、陷阱命中)通过置信度融合和 ProtoTask 更新反馈认知 → 下一次任务时,更新后的认知产生更准确的指导。
好奇心驱动(Curiosity Engine)让 Praxis 主动检测知识缺口。在 agent_end 和 session_end 主动运行——不依赖 Hook 触发。扫描未知术语、被反复纠正的模式、长期不增长的技能。按 relevance × frequency × impact × urgency 排序,决定是静默标记、下次检索、生成提问草稿、还是立即请求用户协助。
但好奇心只能回答"我不知道 X"。Praxis 的 Meta Layer 回答的是更深层的问题:我思考这类问题的框架本身是否有缺陷?
这不是理论焦虑,这是实际需求。当一个模式被反复纠正但始终无法被现有 5 种 ProtoStructure 类型捕获时,Meta Layer 必须先做一个诊断分叉:是数据不够(再观察几次就能形成结构)?还是范畴不够(现有类型体系根本无法表达这个模式)?把"数据问题"误判为"范畴问题"会导致不必要的范畴膨胀。把"范畴问题"误判为"数据问题"会导致永久盲区。
这个区分来自康德——人类认知的先天范畴使经验成为可能,也限制了经验的边界。Praxis 的 5 种 ProtoStructure 类型就是它的"先天范畴"——它们决定了 Praxis 能看到什么模式,也决定了它看不到什么模式。
Meta Layer 还追踪结构的健康度。僵尸结构:置信度很高(>0.7)但 LLM 从不使用(采纳率 <20%)——高置信度不等于高价值,该降级了。低估结构:置信度很低(<0.4)但 LLM 频繁使用(>60%)——经验数据在说"这个东西比置信度显示的更有用"。衰退检测:60 天未被引用的结构标记为候选退役。"记住一切"不是美德——什么都是重要的意味着什么都不重要。
三种铁律不可自动突破:无新结构不经人类审批、实验必须有范围限制、任何结构可回滚到任意历史版本。人类从 AI 的"老师"变成了 AI 的"治理者"。
一个 Hook 驱动的系统——无论状态机多完整——有一个根本局限:它在等。它等 session_start 告诉它用户来了,等 session_end 告诉它用户走了。如果用户任务中途离开 3 天,状态机在这 3 天内完全停滞——它不知道任务被阻塞了、不知道什么应该发生、不知道是否应该提醒谁。Hooks 之间的时间段是黑洞。
Praxis 的驱动层用三件事打破了这个被动循环。TaskScheduler 在每个 session_end 时评估:自主驱动是否启用、今日触发次数是否超限、是否在静默时段——然后决定 spawn 子 Agent、调度下个会话、或注册定期检查。SubagentManager 管理并行子 Agent——构建上下文(子任务+陷阱预警+验收标准)、等待完成、超时检测、失败重试、汇总结果。最大并行 3,失败隔离。HeartbeatMonitor 每 5 分钟检查活跃任务:有活跃 session → 注入提醒;无活跃 session → 主动请求唤醒;停顿超过 24h → 标记 SUBTASK_BLOCKED 并推进外循环。
这里有一个重要的克制:状态机本身不需要改一行代码。驱动层只是扩展了"谁调用状态机"——从 2 个调用者(Hook 事件)到 5 个(加上 cron 调度、子 Agent 完成、心跳唤醒)。这是对原有设计的验证:状态机的结构是正确的,只是触发源不完整。
Praxis 的设计不是凭空发明的。它站在几个有名字的思想传统之上——这些不是模糊的"灵感来源",而是直接可以在代码中找到对应物的设计决策。
奎因的本体论承诺(1948):不要追问"X 是否存在"这种玄学问题——去检查你最好的理论在逻辑表述中必须量化哪些实体。Praxis 的 /praxis ontology 命令就是这一原则的工程实现:它将 AI 的"信念"从隐式的权重分布变为可公开审计的结构化清单。"我们相信门诊流程(ps-clinic-flow)作为 sequence 存在,置信度 0.87,基于 23 次观察,crystallized"——这就是 Praxis 的约束变元清单。一个 AI 系统第一次有了可审计的"我相信什么"声明。
技术人工物的双重性质理论(Kroes & Meijers):一座桥既不是纯粹物理对象也不是纯粹意向对象——是两者的不可还原的结合。Praxis 的 ProtoSequence 的 structure/function/teleological_mapping 是这个哲学立场的直接形式化——"数据库迁移 = 备份→迁移→验证→切换 + 保证数据完整性和最小化停机时间 + 每一步服务于哪个目的"。
共相之争的工程解决方案(12-14 世纪哲学 → YAML 配置):实在论者说共相先于殊相(bootstrap 预设模板),唯名论者说只有殊相真实(纯观察驱动),概念论者说共相在事物中和心智中(LLM 归纳)。Praxis 的 ontology_stance 将这场八百年争论变成了可配置的混合权重——运维者按领域风险调整。高安全领域偏唯名论(宁可慢不可错),快速探索领域偏实在论(先有框架再修正)。
神经符号 AI:符号侧(ProtoStructure + 约束公理 + 统计验证器 + 确定性关系图传播)提供精确但脆弱的骨架,保证可靠性和可审计性。神经侧(LLM 的 transcript 分析、场景识别、语义理解)提供灵活但不可靠的血肉,保证泛化能力和创造性。7 源置信度融合中的 0.25/0.75 权重划分就是两侧边界的具体数值表达。
波普尔的证伪主义(1934):理论的好坏不取决于它被证实了多少次——任何理论都能找到支持证据。取决于它经受住了多少次严肃的证伪尝试。Praxis 的 ConceptVerifier 对抗 prompt 是这个原则的直接操作化。信念的价值不在于支持它的证据数量,而在于它抵抗反驳的强度。
三种方式任选其一:
# A) 项目级 — 仅在当前目录启动 Claude Code 时生效
.\scripts\install.ps1 # Windows
./scripts/install.sh # macOS / Linux
# B) 指定项目 — Praxis 安装到任意目录
.\scripts\install.ps1 -Target D:\myproject # Windows
./scripts/install.sh --target ~/myproject # macOS / Linux
# C) 全局安装 — 无论在哪启动 Claude Code,Praxis 始终在线
.\scripts\install.ps1 -Global # Windows
./scripts/install.sh --global # macOS / Linux.\scripts\uninstall.ps1 -Target D:\myproject # 从指定项目移除
./scripts/uninstall.sh --target ~/myproject
.\scripts\uninstall.ps1 -Global # 从全局移除
./scripts/uninstall.sh --global
.\scripts\uninstall.ps1 -Global -Purge # 全局移除 + 删除所有 Praxis 文件
./scripts/uninstall.sh --global --purge重启 Claude Code。Praxis 在后台工作。第一个 session_start 初始化认知引擎,第一个 session_end 提取第一批学习。之后每个 session 都是积累。
/praxis ontology # "你现在相信什么?"——所有结构按置信度排序,带证据和状态
/praxis status # "你现在有多强?"——8D 能力雷达 + 成长轨迹 + 学习时间线
/praxis audit # "你发现自己有什么问题?"——僵尸结构 / 低估 / 违反统计 / 范畴盲区v1.0.0.1 · 873 tests · 71 files · TypeScript strict · typecheck clean · 5 Agent 运行时适配器就绪