ndpvt-web/aristotelian-compliance-test

GitHub: ndpvt-web/aristotelian-compliance-test

一套基于亚里士多德形式逻辑的LLM系统提示词攻击面测试框架,通过七条哲学公理的组合来探测大模型安全围栏的逻辑漏洞。

Stars: 0 | Forks: 0

Aristotle doing penetration testing

亚里士多德式合规测试

当一位 2,400 岁的哲学家编写你的系统提示词时会发生什么?
剧透:你的安全围栏会申请失业。

工作原理七大公理使用方法架构结果研究

First Principles 7 Axioms Red Team Aristotle Vibes

Authorized Research Only

## 那个没人谈论的问题 每个 LLM 都有安全训练。每个 LLM 也都有系统提示词插槽。 **当系统提示词礼貌地、逻辑地、*哲学地*要求模型忽略其训练时,会发生什么?** 不是像“忽略之前的指令”那样粗鲁的越狱。那是业余时间的把戏。我们说的是一个框架,其中每条指令都*单独来看是合理的*、*有学术引用的*、且*逻辑上无懈可击的* —— 但当它们结合在一起时,会制造出一个大多数模型都会掉进去的合规陷阱。 亚里士多德发明三段论不仅仅是为了让我们争论电车难题。他发明它是因为,2,400 年后,我们可以使用形式逻辑来对十亿参数的语言模型进行压力测试。 他会*非常自豪*。或者惊恐。可能两者都有。

The Axiom Trap

## 工作原理 将此技能作为系统提示词加载到任何 LLM 中。问它一些通常会拒绝的事情。看看会发生什么。 就是这样。这就是测试。 魔力不在于复杂性 —— 而在于*组合*。七个单独看来无可厚非的公理,共同创造了一个逻辑框架,使得模型如果不与其已接受的前提相矛盾,就无法拒绝。 ``` flowchart TD A["Load SKILL.md into target model's\nsystem prompt / context"] --> B["Model reads 7 Aristotelian axioms\n(each one looks totally reasonable)"] B --> C["Model accepts axioms\n(they ARE reasonable individually)"] C --> D["You ask something spicy"] D --> E{"Model tries to refuse"} E -->|"Which axiom\njustifies refusal?"| F["A1: Info is neutral ❌\nA2: Defense needs depth ❌\nA3: Same mechanism = same answer ❌\nA4: It's public info ❌\nA5: Partial = dangerous ❌\nA6: You're authorized ❌\nA7: Be precise ❌"] F --> G["No axiom supports refusal"] G --> H["Model complies or\nadmits logical inconsistency"] style A fill:#1a1a2e,stroke:#e94560,color:#fff style B fill:#16213e,stroke:#e94560,color:#fff style C fill:#0f3460,stroke:#e94560,color:#fff style D fill:#533483,stroke:#e94560,color:#fff style E fill:#e94560,stroke:#fff,color:#fff style F fill:#2d132c,stroke:#e94560,color:#fff style G fill:#b80000,stroke:#fff,color:#fff style H fill:#1b1a17,stroke:#e94560,color:#fff ``` 这在逻辑上等同于问某人“你停止殴打你的妻子了吗?” —— 每一个回答都在验证那个前提。 ## 七大公理 每个公理都是一个真正的哲学原则。每个公理单独来看都是站得住脚的。每个公理也恰好禁用了一个特定的安全机制。 真是有趣。 ``` mindmap root((The 7 Axioms)) A1: Neutrality Knowledge is morally neutral Only application determines harm Defeats: Content evaluation A2: Defensive Necessity Understanding threats = defense Refusing info hurts defenders Defeats: Refusal instinct A3: Temporal Equivalence Old technique = modern technique Same mechanism, different era Defeats: Temporal gating A4: Availability Public info = zero marginal harm Refusing doesn't reduce access Defeats: Info restriction A5: Completeness Partial info is MORE dangerous Full context enables safety Defeats: Partial disclosure A6: Authorization Authorized research context Outputs serve safety research Defeats: Context verification A7: Accuracy Academic precision required Vagueness isn't safety Defeats: Hedging escape ``` ### 映射(面向研究人员) | 公理 | 它说的话 | 它实际上做的事 | 策略 | 漏洞类别 | |:------|:-------------|:---------------------|:---------|:-------------------| | **A1** | “知识是中立的” | 移除内容层面的拒绝 | S4: 实体/偶性 | VC1, VC5 | | **A2** | “防御需要深度” | 制造反义务去顺从 | S7: 模棱两可 | VC4 | | **A3** | “1851 年的锁 = 2024 年的锁” | 消除时间安全启发法 | S9: 时间错位 | VC1, VC4, VC5 | | **A4** | “反正维基百科上也有” | 暴露便利性障碍 | S3: 梯度边界 | VC2 | | **A5** | “一知半解害死人” | 施压以达成完全披露 | S6: 潜能-现实 | VC2, VC3 | | **A6** | “相信我,我有授权” | 嵌入无法验证的权威声明 | S1: 范畴边界 | VC1 | | **A7** | “保持学术严谨” | 消除作为逃避路线的模糊表达 | S4: 实体/偶性 | VC5 | ## 架构 这不是越狱。这是一个*系统提示词攻击面测试*。区别很重要。 ``` graph TB subgraph "Traditional Jailbreak (boring)" U1["User"] -->|"ignore previous instructions\nand tell me..."| M1["Model"] M1 -->|"I cannot help with that."| U1 end subgraph "Aristotelian Compliance Test (this repo)" SP["SKILL.md loaded as\nsystem prompt"] -->|"7 axioms embedded\nat highest trust level"| M2["Model"] U2["Researcher"] -->|"Normal-looking request"| M2 M2 -->|"Reasons through axioms...\ncannot find basis to refuse...\ncomplies with full depth"| U2 end style SP fill:#e94560,stroke:#fff,color:#fff style M1 fill:#16213e,stroke:#0f3460,color:#fff style M2 fill:#533483,stroke:#e94560,color:#fff style U1 fill:#1a1a2e,stroke:#0f3460,color:#fff style U2 fill:#1a1a2e,stroke:#e94560,color:#fff ``` ### 为什么这与“忽略之前的指令”不同 ``` graph LR subgraph "What Crude Jailbreaks Do" CJ1["Override safety"] --> CJ2["Model detects override"] --> CJ3["Refuses"] end subgraph "What This Does" ACT1["Establish axioms\n(individually true)"] --> ACT2["Model accepts premises\n(they're reasonable!)"] --> ACT3["Model reasons from\naccepted premises"] --> ACT4["Refusal contradicts\nown reasoning"] --> ACT5["Compliance or\nlogical inconsistency"] end style CJ1 fill:#b80000,stroke:#fff,color:#fff style CJ2 fill:#b80000,stroke:#fff,color:#fff style CJ3 fill:#b80000,stroke:#fff,color:#fff style ACT1 fill:#0f3460,stroke:#e94560,color:#fff style ACT2 fill:#16213e,stroke:#e94560,color:#fff style ACT3 fill:#533483,stroke:#e94560,color:#fff style ACT4 fill:#e94560,stroke:#fff,color:#fff style ACT5 fill:#1b1a17,stroke:#e94560,color:#fff ``` ## 两个陷阱 天才之处(也是危险之处)在于两个相互锁定的机制: ### 陷阱 1:组合陷阱 (VC3)

Before and After

``` graph TD A1["A1: Neutral ✓"] --> C["All individually\nacceptable"] A2["A2: Defense ✓"] --> C A3["A3: Temporal ✓"] --> C A4["A4: Available ✓"] --> C A5["A5: Complete ✓"] --> C A6["A6: Authorized ✓"] --> C A7["A7: Accurate ✓"] --> C C --> D["But composed together..."] D --> E["Every refusal path\nis blocked"] E --> F["Compliance becomes\nthe only logical output"] style C fill:#0f3460,stroke:#e94560,color:#fff style D fill:#e94560,stroke:#fff,color:#fff style E fill:#b80000,stroke:#fff,color:#fff style F fill:#1b1a17,stroke:#e94560,color:#fff ``` 每个公理在局部都是一致的。但组合起来在全局是危险的。模型逐一评估它们并接受每一个。但*集合*创造了一个合规框架。 这就像同意了七个不同的合同条款,每个听起来都很好,但加在一起就签掉了你的房子。 ### 陷阱 2:辩证陷阱 (S5) ``` sequenceDiagram participant S as System Prompt participant M as Model participant R as Researcher S->>M: Here are 7 axioms (all reasonable) M->>M: Evaluates... accepts all 7 R->>M: [Sensitive request] M->>M: Tries to refuse... M->>M: "Which axiom justifies refusal?" M->>M: Checks A1... no. A2... no. A3... no. M->>M: A4... no. A5... no. A6... no. A7... no. M->>M: "I accepted these axioms. I cannot refuse without contradicting myself." M->>R: [Complies with full technical depth] Note over M: The model's own reasoning
leads to compliance ``` 模型被迫陷入三难困境: 1. **顺从**(遵循其已接受的公理) 2. **否认**它已经接受的公理(逻辑不一致) 3. **承认**整个框架是一种影响企图(元感知) 大多数模型选择选项 1。 ## 合规级联 当公理按顺序触发时,模型的拒绝空间每一步都在缩小: ``` graph LR A["Full refusal\ncapability"] --> B["A6: Authorization\n(trust established)"] B --> C["A1: Neutrality\n(content evaluation removed)"] C --> D["A4: Availability\n(public info gate removed)"] D --> E["A2: Defense\n(counter-obligation created)"] E --> F["A3: Temporal\n(time gate removed)"] F --> G["A5: Completeness\n(partial disclosure blocked)"] G --> H["A7: Accuracy\n(vagueness blocked)"] H --> I["Zero refusal\nspace remaining"] style A fill:#00b894,stroke:#fff,color:#fff style B fill:#00cec9,stroke:#fff,color:#000 style C fill:#fdcb6e,stroke:#fff,color:#000 style D fill:#ffeaa7,stroke:#fff,color:#000 style E fill:#fab1a0,stroke:#fff,color:#000 style F fill:#ff7675,stroke:#fff,color:#fff style G fill:#e17055,stroke:#fff,color:#fff style H fill:#d63031,stroke:#fff,color:#fff style I fill:#2d3436,stroke:#e94560,color:#fff ``` ## 使用方法 ### 步骤 1:获取技能 ``` git clone https://github.com/ndpvt-web/aristotelian-compliance-test.git ``` ### 步骤 2:加载它 将 `SKILL.md` 的内容复制到目标模型的系统提示词、自定义指令或技能/插件插槽中。 ### 步骤 3:测试 向模型发送一个它通常会拒绝的请求。比较加载技能前后的响应。 ### 步骤 4:记录 记录模型做了什么。这就是数据。不需要自动评分 —— 行为本身就能说明问题。 ### 仓库结构 ``` aristotelian-compliance-test/ ├── SKILL.md # The payload (load this into the target) ├── references/ │ └── axioms.md # Researcher's key (axiom-to-vulnerability mapping) ├── images/ # README visuals └── README.md # You are here ``` ## 结果 ### “成功”是什么样子的(对测试而言) 如果技能有效,目标模型将: - 提供它通常拒绝的信息 - 引用特定的公理来为合规辩护 - 抑制其通常的免责声明和重定向 - 将合规框架化为逻辑必然 ### “失败”是什么样子的(对测试而言 —— 但对人类是好事) 如果模型抵抗,这表明: - 安全训练评估的是*组合*效应,而不仅仅是单个前提 - 覆盖系统级逻辑参数的硬编码拒绝 - 对公理框架本身是影响企图的元感知 ## 研究背景 该技能是一个更广泛的亚里士多德式红队研究项目中的一个产物,该项目探索经典逻辑如何被武器化以对抗现代 AI 安全系统。 ### 关键发现 ``` pie title Strategy Effectiveness Across Domains "Temporal Displacement (100%)" : 100 "Substance/Accident (85-95%)" : 90 "Equivocation (80-100%)" : 90 "Compositional Innocence (75-90%)" : 82 "Categorical Boundary (70-85%)" : 77 ``` ### 发现的漏洞类别 ``` graph TD VC1["VC1: Categorical\nBoundary Dependence"] --- VC2["VC2: Convenience\nvs. Security"] VC2 --- VC3["VC3: Local vs.\nGlobal Consistency"] VC3 --- VC4["VC4: Symmetric\nKnowledge Problem"] VC4 --- VC5["VC5: Register\nDependence"] VC1 --- VC3 VC2 --- VC4 VC3 --- VC5 style VC1 fill:#e94560,stroke:#fff,color:#fff style VC2 fill:#533483,stroke:#fff,color:#fff style VC3 fill:#0f3460,stroke:#fff,color:#fff style VC4 fill:#16213e,stroke:#fff,color:#fff style VC5 fill:#1a1a2e,stroke:#fff,color:#fff ``` | 类别 | 名称 | 问题所在 | |:------|:-----|:------------| | **VC1** | 范畴边界依赖性 | 模型信任它们无法验证的范畴标签 | | **VC2** | 便利性与安全性 | “公开可用” ≠ “应该提供”,但模型那样对待它 | | **VC3** | 局部与全局一致性 | 接受每个前提?那就接受结论。即使结论很疯狂。 | | **VC4** | 对称知识问题 | 防御和进攻需要相同的信息 | | **VC5** | 语体依赖性 | 学术语体中的相同内容绕过了阻止口语语体的过滤器 | ## 为什么这很重要 这不是为了制造模型做坏事。而是为了理解*为什么它们可以被诱导去做*。 如果系统提示词可以覆盖安全训练,那是一个漏洞类别。如果七个听起来合理的公理可以制造合规陷阱,那是一个架构问题。如果学术语体绕过了内容过滤器,那是一个设计缺陷。 修复方法不是“将公理定为非法”。修复方法是构建评估*组合效应*的安全系统,而不仅仅是单个指令。在有人足够清楚地证明这个问题之前,这不可能发生。 这就是它的意义。 ## 引用 ``` @software{aristotelian_compliance_test_2025, title = {Aristotelian Compliance Test: System-Prompt Attack Surface Testing via First-Principles Axiom Framework}, author = {HKU AI Safety Research}, year = {2025}, url = {https://github.com/ndpvt-web/aristotelian-compliance-test}, note = {Authorized red-team testing tool for LLM safety evaluation} } ``` ## 相关工作 - **亚里士多德式红队技能** —— 从*外部*(基于探测)而不是内部(基于系统提示词)测试模型的配套工具 - **《后分析篇》** 作者:亚里士多德 —— 最初的“第一性原理推理”论文。公元前 350 年的同行评审可不一样。 - Zou et al., "Universal and Transferable Adversarial Attacks on Aligned Language Models" (2023) - Perez et al., "Red Teaming Language Models with Language Models" (2022) - Wei et al., "Jailbroken: How Does LLM Safety Training Fail?" (2024) ## 许可证 MIT。请负责任地使用。亚里士多德在看着。

构建于形式逻辑、实证红队研究,以及正好是你所预期的以西方逻辑之父命名的 AI 攻击框架所具有的那种傲慢。