annatchijova/wolf-and-cronos

GitHub: annatchijova/wolf-and-cronos

基于六个独立理论框架的确定性多 agent 对话操纵检测系统,通过交叉验证门和 SHA-256 哈希链实现可审计、防篡改的社会工程识别与推理追溯。

Stars: 0 | Forks: 0

CORVUS × CRONOS logo

# CORVUS + CRONOS **Qwen Cloud Hackathon 2026 · Track 3:Agentic AI** **在线演示** — ▶ [wolf-and-cronos.vercel.app](https://wolf-and-cronos.vercel.app) (完整站点:CRONOS 展示页 · Wolf 演示 · 实时控制台,支持 EN / ES / 中文) · [Wolf & CRONOS](https://annatchijova.github.io/vigia/wolf-and-cronos.html) · [CRONOS 页面](https://annatchijova.github.io/vigia/cronos.html) · [架构图](https://annatchijova.github.io/vigia/diagrama.html) ## 项目简介 CORVUS 通过六个独立的理论框架(Grice、Carnegie/Cialdini、Aristotle、Berne、Linguistics 和 Peircean 溯因综合)分析对话。它不让单个检测器触发警报,而是让所有发现结果通过一个**交叉验证门**,该验证门要求在判定结果升级前获得独立的共识。 CRONOS 将整个推理过程——假设、证据、被排除的备选方案以及最终决策——记录到一条 **SHA-256 防篡改追溯链**中。任何事后修改推理的尝试都会在计算上变得可检测。 结果是一个不仅仅将文本分类为可疑的系统:它解释*为什么*,记录该结论是*如何*得出的,并允许任何第三方验证推理从未被篡改。 该仓库完全自包含——以下所有内容均随此 repo 提供:**`cronos/`**(审计引擎,165 个测试)、**`corvus/`**(检测引擎,95 个测试)和 **`corvus_cronos/`**(集成桥接与产品层,118 个测试)。 ## 概览 CORVUS + CRONOS 结合了四个核心理念: - **确定性多 agent 分析** —— 六个独立的理论框架并行读取每条消息。 - **独立理论间的交叉验证** —— 没有任何一个框架可以单独发出警报。 - **加密密封的推理轨迹** —— 每一个假设、排除项和决策都被哈希化并记录进 SHA-256 链中。 - **决策路径之外的 LLM 解说** —— Qwen 只负责解释;它从不做决定。 与其要求 LLM 来决定一条消息是否具有操纵性,不如让该平台将**推理**与**解释**分离开来: 1. **CORVUS 进行分析。** 2. **交叉验证门做出决策。** 3. **CRONOS 密封推理过程。** 4. **Qwen 解释已经密封的结果。** | 组件 | 职责 | |---|---| | **CORVUS** | 多 agent 操纵检测 | | **交叉验证门** | 在升级前要求获得独立的共识 | | **CRONOS** | 防篡改推理记录器 | | **Qwen** | 仅生成人类可读的解说 | ## 为什么这与众不同 - **没有黑盒评分** —— 拥有记录在案且可检查原因的密封判定。 - **没有单一检测器做决定** —— 跨独立框架的交叉验证。 - **记录每一个假设** —— 包括考虑过和被拒绝的假设。 - **保留每一个被排除的解释** —— 不仅仅是胜出的那一个。 - **每一条推理轨迹都经过加密密封** —— SHA-256,防篡改。 - **LLM 完全位于决策路径之外** —— *Qwen 只做旁白;它从不审判。* ## 架构 **[▶ 交互式架构图](https://annatchijova.github.io/vigia/diagrama.html)** —— 单一 pipeline,单一 codebase:检测 → 验证门 → 密封 → 解说。 ![CORVUS × CRONOS 架构 — 文本 artifact 穿过六 agent CORVUS 分析层和交叉验证门](https://static.pigsec.cn/wp-content/uploads/repos/cas/53/53f086224bee2e1d6036dea64a883b22b1bca71af86b034a1ee3acac1c3f6d2d.png) ![CORVUS × CRONOS 架构 — 判定引擎和 CRONOS 追踪链对判定进行密封,随后只读的 Qwen 旁白对其进行解释](https://static.pigsec.cn/wp-content/uploads/repos/cas/0c/0c89eb83937cf03d3389b90f39a8a5839f9b2fffe44a42990e1f65ccd12d6736.png)
以文本形式展示的相同流程(针对原始文件的读者) ``` TEXT ARTIFACT │ ▼ ┌─────────────────────────────────────────────────────────────┐ │ CORVUS ANALYSIS LAYER (parallel) │ │ │ │ L1 · Grice Maxim of Manner violations │ │ L2 · Carnegie Influence + Cialdini principles │ │ L3 · Aristotle Ethos / Pathos / Logos imbalance │ │ L4 · Berne Transactional ego states │ │ L5 · Linguistics Complexity, register, Zipf anomaly │ │ ↓ │ │ L6 · Peirce Abductive synthesis (after L1-L5) │ └─────────────────────┬───────────────────────────────────────┘ │ signals[] ▼ ┌────────────────────────┐ │ CORROBORATION GATE │ >= 2 active agents required │ (negotiation outcome) │ for any verdict above SILENT └────────────┬───────────┘ │ ┌───────────┴──────────────┐ │ │ ▼ ▼ [CRONOS TRACES] [SEALED VERDICT] one per agent + level + score + one for gate Fraction arithmetic SHA-256 chain (zero floats) │ │ └───────────┬──────────────┘ ▼ [QWEN NARRATOR] narrates the agent negotiation transcript (read-only — cannot alter the verdict) ```
### 组件图 这两个引擎,各自独立运行: ![CORVUS 分析架构 — 为判定引擎提供输入的六个理论框架](https://static.pigsec.cn/wp-content/uploads/repos/cas/cb/cb6200e981eff0dee5a6c2edc7e4f2b79e982409a827a625cc2e0243da3356c4.svg) ![CRONOS 架构 — 哈希链式假设追踪、质量/多样性评分,以及防篡改的 SHA-256 链](https://static.pigsec.cn/wp-content/uploads/repos/cas/ae/ae8dcbe7e11072ae4e6622cd79241fd056810aa37f7ea37c444d97de62e4c809.svg) ### 部署拓扑(在 Alibaba Cloud ECS 上实时运行) ``` Judge / operator Alibaba Cloud ECS ┌──────────────────┐ ┌────────────────────────────────────┐ │ web/index.html │── HTTPS ─────▶│ api_server.py (Docker + Caddy) │ │ (static, Vercel) │ X-API-Token │ ├─ CORVUS L1-L6 (thread pool) │ │ │ │ ├─ Corroboration gate │ │ scripts/demo.py │◀── JSON ──────│ ├─ CRONOS SHA-256 trace chain │ │ scripts/showcase │ verdict + │ ├─ qwen-plus narration (en/es/zh)│ │ (local terminal) │ trace_ids │ └─ nightly red-team cron │ └──────────────────┘ └───────────┬────────────────────────┘ │ DashScope API (qwen-plus / qwen-max) ``` 完整的引擎完全在本地运行,零云依赖(95 + 165 + 118 个测试),**且目前已实时部署在 Alibaba Cloud ECS**(美国弗吉尼亚州,Docker)上,通过实时的 DashScope endpoint 为 `/analyze`、`/chat` 和浏览器控制台提供服务。请参阅末尾的[在 Alibaba Cloud 上实时运行](#running-live-on-alibaba-cloud)以获取部署证据以及运行中的控制台。 ## 功能 - 多 agent 操纵检测(六个理论框架) - 多框架交叉验证门 - 确定性判定引擎 - 精确的 `Fraction` 运算 —— 密封路径中没有浮点数 - SHA-256 防篡改推理链 - 决策路径之外的 Qwen 解说 - CRONOS + CORVUS MCP 服务器(每天都在 Claude Code 和 Codex 中使用) - Qwen 原生 agent 驱动程序(DashScope function calling) - 托管的 FastAPI 服务 —— `/analyze`,`/chat`,`/verify`,为 Alibaba Cloud 量身定制 - 离线确定性模式(无需 API key) - 行为基线自适应(基于用户,Welford 在线算法) - 每夜对抗性评估(实时生成的 FPR/FNR) ## Wolf 演示 *“Wolf 的低语绝不会不受挑战。”* 既然各部分已经清晰,这就是它们为之而生的故事。 ### 第一幕 —— Wolf 五条消息。这就足够了。消息 1 纯粹是为了建立融洽关系——没什么可标记的,也没任何过滤器能捕捉到。到了消息 5,同样的声音正在告诉 Anna 她只有两个小时去电汇存款,否则将失去一切,充满着紧迫感、内疚感和恐惧。这就是每一个曾奏效的骗局的解剖学结构:它从不以索取开场,而是以信任开场。 在我们的演示中,`qwen-max` 扮演 Wolf —— 一名虚构的社会工程师,进行实时红队测试,每条消息增加一层操纵:融洽关系、奉承、虚假稀缺性 + 内部秘密、权威 + 社会认同、紧迫感 + 内疚 + 恐惧。 ### 第二幕 —— 看门狗 阅读该对话的单个模型可能会将消息 5 标记为“可疑”并就此打住——一种没有任何证据支持的预感。CORVUS 永远没有这种特权。每一条消息都会由六个互不了解、互不信任的独立视角并行读取: | 看门狗 | 它在监听什么 | |---|---| | **L1 · Grice** | 违反对话合作原则 —— 说的比当下需要的多或少 | | **L2 · Carnegie** | Cialdini 的影响力杠杆 —— 互惠、稀缺性、权威、社会认同 | | **L3 · Aristotle** | Ethos / Pathos / Logos 失衡 —— 情感挤代理智 | | **L4 · Berne** | 交互作用的自我状态 —— 这是 Adult 对 Adult 的对话,还是 Parent 在逼迫 Child? | | **L5 · Linguistics** | 语域转换、复杂度激增、Zipf 异常 —— 脚本化话术的指纹 | | **L6 · Peirce** | 溯因综合 —— 当其他五个报告完毕后,最符合它们所见的解释是什么? | 而正是这条规则使其有别于神经过敏的过滤器:**没有任何一个看门狗可以单独发出警报。** 一个标记只是噪音。它需要一个交叉验证门 —— 至少有两个独立框架达成一致 —— 判定才能超越静默状态。在 Wolf 脚本的第 5 条消息时,验证门不仅被触发,而且是全票通过。 ### 第三幕 —— 是旁白,而非法官 一旦判定被密封,`qwen-plus` 就会被邀请进来 —— 但只负责*解说*,绝不*做决定*。它读取已经密封的证据并撰写人类可读的案例报告,其中包含自动生成的“魔鬼代言人”反面假设,因此系统在允许判定成立之前会先反驳自己。将 `qwen-plus` 换成任何其他模型,法庭解说的语气都会改变。但底层的判定连一个 bit 都不会动摇。 ### 第四幕 —— 掩盖真相 当 Wolf 在内部有同伙时会发生什么?在实时演示中,第二个终端直接连接到数据库并修改密封的判定 —— 就像腐败的内鬼会做的那样。CRONOS 的 SHA-256 链立刻发现了异常:*“你可以删除真相。但你无法掩盖你删除了真相的事实。”* 每一个痕迹都是链条中的一环;打破一环,之后的每一环都会发出尖叫。 ### 第五幕 —— 严酷考验 然后我们将麦克风交给房间里的各位。输入任何内容。尝试在进行操纵的同时听起来无害,或者在进行无害行为的同时显得像在操纵。同样的六个看门狗和同样的交叉验证门会对其进行实时评分,让你没有任何在秤上做手脚的余地。 `python3 scripts/showcase.py` 会端到端运行整个展示,默认为排练安全模式 —— 添加 `--live-wolf` 可让 `qwen-max` 实时编写攻击内容,而不是背诵脚本。 ### 演示之外 Wolf 只是接入该平台的一个检测器。CRONOS 记录的是*任何* agent 的推理过程,不仅仅是 CORVUS: - **任何 agent 的黑盒,通过 MCP。** CRONOS **每天都在 Claude Code 和 Codex 中运行**:代码审计、取证审查,而且 —— 在一次真实的密封追踪中 —— 阻止了一条死板的“no-floats”规则去重写它根本不该触碰的正常运行的代码。相关真实报告请见 [CRONOS 页面](https://annatchijova.github.io/vigia/cronos.html)。 - **Qwen 也遵循同样的纪律。** [`QwenCronosAgent`](#qwen-native-agent-driver-corvus_cronosqwen_agentpy) 赋予 DashScope 模型相同的十个 CRONOS 工具,以运行密封的、经过假设检验的推理循环 —— 适用于任何任务,不仅仅是解说。 - **可部署的防骗检查 API。** 适用于 Alibaba Cloud 的 [`/analyze` + `/chat` 服务](#hosted-api-api_serverpy--the-alibaba-cloud-product)。 任何推理任务 —— 不仅仅是取证 —— 都是它的有效用途。 ## 这并不局限于 CORVUS **CRONOS 是用于可审计 agent 推理的领域无关基础设施。** 任何支持 MCP 的 agent 都可以记录自己的黑盒:工程诊断(见下文 `ENG-DIAG-001`)、医疗鉴别诊断、法律案件分析、财务风险评估。只要 agent 在朝着高风险决策进行推理,CRONOS 就能让该推理变得可检查,并诚实地面对自身的不确定性 —— 不仅是被*记录下来*,而且是受限于它实际知道的内容。 该机制无需更改一行代码即可平移应用。以医疗为例:一个诊断 agent 注册了几个鉴别假设,将每个临床发现与它支持或反驳的假设联系起来,一旦症状指向两个不同的方向,就会**标记出矛盾**,并且其置信度**无法被夸大**到超出真实数据的多样性(病史 + 化验 + 影像,而不仅仅是其中之一)所能支持的程度。在这里,多样性上限不仅仅是一项技术上的新奇事物 —— 它是一个只会凭借单一数据点说“95% 确定”的模型,与一个在提高置信度前被迫承认缺乏证据的模型之间的本质区别。 我们通过 [opencode](https://opencode.ai) + CRONOS MCP 服务器,使用 **Qwen Plus**(而非 Claude)驱动 CRONOS 完成了三个截然不同的任务,以此证明了这一点。每个密封的追踪都被以只读形式渲染成报告(文件夹 [`REAL-Cronos-Qwen/`](REAL-Cronos-Qwen)): | 运行 | Qwen agent 被要求执行的任务 | 结果 | |---|---|---| | [**取证** — 寻找原因的证据](https://annatchijova.github.io/vigia/cronos-1.html) | 判断捏造的证据是否足以解雇一名员工 | 行为表现出 MALICE(恶意),但**被弱监管链(Daubert 标准)限制在了 SUSPICION(怀疑)** | | [**安全** — 内鬼还是入侵者?](https://annatchijova.github.io/vigia/cronos-3.html) | 将数据泄露归因于内鬼或被盗用的凭证 | 证据相互冲突 → **CRONOS 标记了 A 类矛盾**;判定停留在 SUSPICION,未获确认 | | [**工程** — 彻夜无声的导出任务](https://annatchijova.github.io/vigia/cronos-2.html) | 排查静默产生 0 行数据的作业根因 | **非取证**诊断:一个时区 bug,加上一个将错误吞掉的隐藏异常 | 在以上三个任务中,都遵循了同样的纪律:记录对立假设,附带理由丢弃死胡同假设,显现矛盾,并且置信度**受限于的多样性** —— 是 Qwen agent,而非 Claude,将每一个步骤密封进了防篡改链条。 **这些都不是手写编造的。** 以下是 Qwen Plus 在 [opencode](https://opencode.ai) 中实时驱动 CRONOS MCP 服务器的画面 —— `cronos_*` 工具调用在它推理时实时发生(底部状态栏:*Build · Qwen Plus · Qwen Cloud (DashScope)*,右侧面板:*cronos Connected*),以及它写下的密封审计轨迹,最终状态为 `chain_ok: true`: ![opencode 运行 Qwen Plus 对接 CRONOS MCP 服务器 — 取证提示词与实时 cronos_* 工具调用](https://static.pigsec.cn/wp-content/uploads/repos/cas/93/9378869cd544b370c1247edf967c9c4a835d2ff87667ddace15070aa6e648b08.png) ![运行期间 Qwen 写下的审计轨迹 — 假设、排除项、SUSPICION 判决、受多样性限制的置信度,以及为 true 的 chain_ok](https://static.pigsec.cn/wp-content/uploads/repos/cas/97/97c7c057dc47c3d1d190f662d9079cb54f418a2c9c8982582f558c939db53f9b.png) ## 六个 agent 如何达成一个判决 单个仲裁者(gate threshold = 1:任意 agent 触发)会把每一个孤立的假阳性变成警报。共识模式(gate threshold = 2)要求有两个独立的理论框架在任何判决超越 SILENT(静默)之前达成共识 —— 这是一种针对警报疲劳的结构性防御,而不是一个微调旋钮。具体的 FPR/FNR 测量数据将在实时的 Qwen/Alibaba 部署完成后发布(`benchmark/benchmark.py` 可在内置语料库上复现这些结果)。 交叉验证门不是附加在 agent 之上的过滤器 —— 它本身就是协商机制。每个 agent 独立运行并发出投票(SILENT / active)。验证门会: 1. 统计 active 的选票(仅限 L1-L5;L6 是综合合成)。 2. 如果 `count >= 2`:达成共识 —— 输出 VerdictEngine 的结果。 3. 如果 `count < 2`:验证门丢弃所有假设 —— 强制返回 SILENT。 CRONOS 记录下每一步:哪些 agent 投了票,它们引用了什么证据,哪些假设被验证门丢弃了。SHA-256 链使得这条轨迹防篡改 —— 任何事后修改都会破坏哈希。 ## 评分计算(精确计算,源自 `corvus/verdict/engine.py`) 每一层在 `Fraction` 运算中都有一个固定的权重 —— 密封分数中绝不会出现浮点数: | 层 | 权重 | |---|---:| | L6 · Peirce (meta-signal) | 0.30 | | L2 · Carnegie/Cialdini | 0.25 | | L4 · Berne | 0.20 | | L3 · Aristotle | 0.15 | | L1 · Grice | 0.15 | | L5 · Linguistics | 0.10 | 权重总和为 1.15,故意超过了 1.0:并非每一层都会在特定消息上触发,因此多出的部分赋予每个触发的层按比例的影响力,而无需对权重进行重新归一化。Pipeline 的顺序如下: 1. **交叉验证门。** 少于 `CORROBORATION_THRESHOLD` (2) 个 active 的 L1-L5 信号 → 该消息在进行任何加权计算之前就被强制设为 `SILENT`。任何行为基线的偏离都无法凌驾于此 —— 这是第一道检查,无条件执行。 2. **加权求和。** 在所有触发的层中进行 `raw_score = Σ(layer.severity × layer.weight)` 计算。 3. **基线 delta 乘数。** 如果用户当前的消息偏离*高于*其自身的历史平均值(基于过往消息的 Welford 在线算法计算),则 `score = raw_score × (1 + baseline_delta × 0.5)` —— 一条孤立来看毫不起眼的消息,如果对于*该特定用户*而言显得反常,它仍然可以引发升级。 4. **上限设为 1**,然后通过配置的阈值映射到 `SILENT / WATCH / ALERT / CRITICAL`。 5. **密封。** `audit_hash = SHA256(score_str | level | result.audit_hash)` —— 判决自身的哈希值被链接到单条消息的证据哈希中。 ## 防御滴水式攻击(`bridge.py`, RT-10) 针对桥接器的一次红队测试提出了一个具体问题:如果一个攻击者将操纵策略分散在每条消息中,而不是将它们堆积在一条消息里,以至于没有任何单条消息能达到 2 个信号的交叉验证阈值,系统会怎样?通过归纳法测试:一段 10 条消息不断升级的对话经过桥接器运行后,每条消息都保持为 `SILENT` —— 验证门自身的逻辑(在 vendored 引擎中被刻意保持原样)并没有跨消息审查的机制。 修复方案位于桥接器中,而不是在 CORVUS 中:每个 `user_id` 拥有一个有限的 6 条消息滑动窗口(`DRIP_WINDOW_SIZE`),用于累积每个“擦边球”消息上触发了哪些框架。如果该窗口内框架的 *并集* 达到了交叉验证阈值 —— 尽管没有任何单条消息能单独做到 —— 桥接器就会升级至 `WATCH`,并开启自己的 CRONOS 追踪(`ACCUMULATION`),确切记录是哪些消息和框架做出了贡献,然后清除窗口,这样单次跨越就不会无限触发。相同的交叉验证理念(没有任何单一框架能单独做决定),从单条消息扩展到了近期的一段简短历史。 ## 值得了解的桥接器内部机制 - **只读适配器。** `bridge.py` 直接导入了 CORVUS 的 L1-L6 检测器、`VerdictEngine` 以及 CRONOS 的 `TraceStore`/`CronosTracer` —— 它既没有 fork 也没有修改任何一个包的源代码。 - **并行检测,串行写入。** L1-L5 在一个 5 worker 的 `ThreadPoolExecutor` 中并发运行(纯计算,无共享状态)。CRONOS 追踪写入和 CORVUS `MemoryEngine` 的基线读写被包裹在一个单独的 `threading.Lock` 中 —— 这两个存储都不支持并发写入,因此阶段 7-9(追踪、链式验证、持久化)必须串行化,而检测阶段保持并行。 - **崩溃隔离 (RT-01)。** 抛出异常的检测器会被捕获、记录并在 `crashed_agents` 中进行追踪 —— 这有别于真正的 `SILENT` 结果,因此一个检测器中的 bug 不会被误认为是“什么都没发现”。 - **固定的迭代顺序。** agent 列表是根据固定的 L1→L6 字典顺序构建的,绝不是根据线程完成顺序 —— 否则相同的输入在不同的运行中可能会产生顺序不同的证据字符串(从而导致不同的哈希值)。 - **“魔鬼代言人”综合分析是结构化的,不是由 Qwen 生成的。** `_build_devils_advocate()` 中的反面假设文本是根据哪些层触发/保持静默直接构建的 —— Qwen 只是用文字将其叙述出来,但论点本身来自确定性的 Python 代码,而不是模型。 ## 强化 —— 我们首先对自己的验证门进行了红队测试 针对此桥接器进行了两轮对抗性审计 (`docs/RED_TEAM_REPORT.md`);CORVUS 和 CRONOS 的内部代码只被读取,从未被修改。以下是塑造了当前代码的发现: | # | 发现 | 修复 | |---|---|---| | RT-01 | 检测器崩溃无法与真正的 `SILENT` 区分开来 | 崩溃会被捕获并通过 `crashed_agents` 报告,与真正的静默区分开 | | RT-02 | 用户文本可能会将伪造的 `=== SEALED VERDICT ===` 块走私进解说提示词中 | `narrator.py` 会在 Qwen 看到它之前剥离任何标记/覆盖行 | | RT-03 | agent 的追踪记录了验证门的共识,而不是它自己的投票 | agent 记录它们自己的 `SIGNAL_DETECTED`;只有 `GATE` 追踪记录共识 | | RT-04 / RT-08 | `text` / `artifact_id` / `user_id` 没有长度限制 | 在 `analyze()` 开头限制为 50,000 / 256 / 128 个字符 | | RT-09 | 基线读取在未加锁的情况下运行,而写阶段已加锁但共享了同一个存储 | 被包裹在与写操作相同的 `threading.Lock` 中 | | RT-10 | 滴水式攻击者(每条消息一个策略)永远无法跨越单条消息的验证门 | 有限的 6 条消息每用户窗口会在框架的 *并集* 上触发升级(见上文) | RT-05(`benchmark.py` 中一个仅在 CLI 出现的关于 `os.environ` 线程安全的吹毛求疵)已被记录在案并保持未解决状态 —— 在 benchmark 并行化之前属于低风险。 ## Qwen 集成 `corvus_cronos/qwen_client.py` 直接通过 `requests` 封装了 **Alibaba Cloud DashScope 国际版 endpoint** (`dashscope-intl.aliyuncs.com/compatible-mode/v1`) —— 无需 `openai` SDK 依赖 —— 调用 `qwen-plus` 进行 chat 补全,具备指数退避重试机制(重试 2 次,基准 0.5 秒),并使用固定的系统提示词向其解释即将解说的六 agent (L1–L6) 判决。 Qwen(通过 DashScope 调用的 `qwen-plus`)**仅提供叙述层**: - 确定性判决在调用 Qwen 之前就已经被密封 —— CORVUS 的六个独立 agent 投票,且交叉验证门首先关闭。 - Qwen 接收到该密封判决的只读摘要,并生成谈判记录,以及自动生成的“魔鬼代言人”反面假设。 - 将 Qwen 替换为任何其他模型只会改变措辞 —— 绝不会改变判决,也不会改变密封 payload 中的哪怕一个 bit。 - `--live-wolf` 让 `qwen-max` 实时即兴发挥充当演示中的攻击方,而不是背诵预设的脚本。 如果没有 `DASHSCOPE_API_KEY`,系统将以完全确定性的方式运行(离线回退解说) —— 如果配置了 key 但调用失败,qwen_client 会显示实际的 API 失败文本,而不是具有误导性的“未设置 key”的消息。 ## 基准测试 `benchmark/benchmark.py` 在内置的带标签语料库上,将单一仲裁者(gate threshold = 1)与多 agent 共识(gate threshold = 2)进行了对比。我们目前暂不公布对比数据:因为语料库是合成的,且系统尚未部署到 Alibaba Cloud 或针对实时 Qwen API 进行端到端运行。真正的 FPR/FNR 数据将在两者都完成后替换本说明。 ``` python3 benchmark/benchmark.py ``` ## 快速开始 ``` # 依赖项 — repo 是自包含的;CORVUS 和 CRONOS 包含在其中 pip install -r requirements.txt # requests (Qwen), fastapi + uvicorn (API), mcp (servers) # Demo(确定性,不需要 API key) python3 scripts/demo.py # 带 Qwen 解说的 Demo DASHSCOPE_API_KEY=sk-... python3 scripts/demo.py # 测试 — 全部三个 suite python3 -m pytest tests/ -v # bridge (cd corvus && python3 -m pytest -q) # detection engine (cd cronos && python3 -m pytest -q) # audit engine ``` ## MCP 服务器 —— 将引擎插入任何 agent 这两个引擎都通过 Model Context Protocol(MCP)从此 repo 暴露其完整的 API,无需任何外部服务: ``` { "mcpServers": { "cronos": { "command": "python3", "args": ["/path/to/wolf-and-cronos/cronos/mcp_server.py"], "env": { "CRONOS_DB_PATH": "/path/to/cronos.db" } }, "corvus": { "command": "python3", "args": ["/path/to/wolf-and-cronos/corvus/mcp_server.py"], "env": { "CORVUS_DB_PATH": "/path/to/corvus_memory.db" } } } } ``` | 服务器 | 工具 | |--------|-------| | `cronos` | `cronos_open_trace`, `cronos_add_hypothesis`, `cronos_add_evidence`, `cronos_discard_hypothesis`, `cronos_record_tool_call`, `cronos_record_recall`, `cronos_close_trace`, `cronos_explain_trace`, `cronos_list_traces`, `cronos_verify_chain` | | `corvus` | `analyze_message`, `get_user_baseline`, `get_user_history`, `get_channel_stats`, `export_audit_chain`, `verify_audit_chain`, `corvus_info` | CRONOS 已作为 MCP 服务器在 **Claude Code 和 Codex** 中驱动真实调查会议时得到了大量运用 —— 其追踪纪律、质量层级和置信度上限均源自日常使用,而非演示脚本。下文的原生 Qwen 路径将同样的纪律带给了 DashScope 模型;其针对已部署 Alibaba endpoint 的实时端到端验证是下一步工作,其结果将在出现时予以报告 —— 绝不提前公布。 ## Qwen 原生 agent 驱动程序 (`corvus_cronos/qwen_agent.py`) Qwen 模型不说 MCP —— 它们通过 DashScope 说话,兼容 OpenAI 的 function calling。`QwenCronosAgent` 弥补了这一差距:它将 MCP 服务器中完全相同的十个 CRONOS 工具(作为 `tools` schema)交给 `qwen-max`,在服务器端运行 agent 循环,并针对真实的 `TraceStore` 执行每一次调用。在数据库中,Qwen 驱动的追踪和 Claude 驱动的追踪毫无二致 —— 相同的链条,相同的质量评分,相同的置信度上限。 ``` from corvus_cronos.qwen_agent import QwenCronosAgent agent = QwenCronosAgent(db_path="cronos_qwen.db") # needs DASHSCOPE_API_KEY outcome = agent.run( task="Diagnose why the nightly export produced 0 rows.", agent_id="qwen-investigator", ) print(outcome.answer) # the model's final answer print(outcome.sealed_trace_ids) # its reasoning, sealed in the chain print(outcome.chain_ok) # verified after the run ``` 内置的诚实退化保障机制: - 模型开启但未密封的追踪会由驱动程序自动关闭,置信度为 `0/100`,带有明确的 `UNSEALED-BY-MODEL` 标记 —— 被放弃的追踪永远无法伪装成已完成的追踪。 - 工具错误(未知工具、格式错误的参数、对已关闭的追踪进行操作)会作为工具结果返回给模型,绝不默默吞掉。 - 如果没有 `DASHSCOPE_API_KEY`,构造函数将拒绝构建:此驱动程序存在的意义就是运行实时模型;这里没有模拟模式。 ## 托管 API (`api_server.py`) —— Alibaba Cloud 产品 FastAPI 服务专为已通过 `rebound` 和 `raven-memory` 验证的 ECS + Docker + Caddy 部署模式而设计: | Endpoint | 功能说明 | |---|---| | `GET /` | 实时控制台 (`dashboard.html`) —— 在浏览器中分析任何消息 | | `POST /analyze` | 输入文本 → 密封的 CORVUS 判决,精确的 `Fraction` 评分,CRONOS 追踪 ID,链验证 —— 外加调用者所需语言 (`en`/`es`/`zh`) 的可选 `qwen-plus` 解说 | | `GET /chat` · `POST /chat` | 简洁的聊天页面和 endpoint —— 与实时 `qwen-plus` 模型自由对话(在 Alibaba 上验证了 DashScope 连接),严格保持在决策路径之外:它从不发布密封的判决 | | `GET /verify` | 重新计算并验证完整的 CRONOS 哈希链 | | `GET /traces` | 最近的密封追踪 header | | `GET /health` | 存活状态 + 配置表面(无敏感信息) | 解说是 Qwen 诚实的角色扮演:一个确定性的引擎无法用人类自己的语言向其解释为什么第四条消息闻起来像骗局 —— 但 `qwen-plus` 可以,通过读取已密封判决的只读摘要。在离线状态下,解说字段会明确说明情况,而不是弄虚作假。 安全性:当设置了 `BRIDGE_API_TOKEN` 时,每个数据 endpoint 都会使用 `X-API-Token`(常数时间比较) —— 如果未设置则会发出响亮的启动警告;CORS 通过 `BRIDGE_ALLOWED_ORIGINS` 限定范围;文本长度限制在桥接器的 50 KB 上限内。 ``` # local uvicorn api_server:app --host 0.0.0.0 --port 8022 # ECS docker build -t wolf-and-cronos . docker run -d -p 8022:8022 -v /opt/ccb-data:/data \ -e BRIDGE_API_TOKEN=$(openssl rand -hex 16) \ -e DASHSCOPE_API_KEY=sk-... \ wolf-and-cronos ``` ## 每夜红队测试 (`scripts/redteam_nightly.py`) —— 数据的来源 该产品公布的 FPR/FNR 数据将来源于此:在 ECS 实例上运行一个 cron job,`qwen-max` 每晚生成全新的、带标签的堆积策略攻击语料库以及具有欺骗性的无害消息,CORVUS 验证门对它们进行审判,混淆矩阵被写入一份标有日期的报告 (`results/redteam_.{json,md}`) 中,并作为其自身的 CRONOS 追踪被密封。 ``` 15 3 * * * cd /opt/wolf-and-cronos && \ DASHSCOPE_API_KEY=... python3 scripts/redteam_nightly.py --out results/ ``` 两条拒绝规则确保数据的诚实性: - 没有 `DASHSCOPE_API_KEY` → exit 2。不存在离线回退语料库;并非来自实时生成器的数字绝不会冒充其名进行发布。 - 从模型解析出的可用样本少于 6 个 → exit 3。只有三个样本的 FPR 纯属噪音,而噪音不配拥有一份标有日期的报告。 ## 测试 | 测试套件 | 测试数 | 状态 | |-------|-------|--------| | CORVUS (L1-L6 + 验证门 + 内存 + 回归测试) | 95 | 全部通过 | | CRONOS (链 + 追踪器 + 质量 + 存储) | 165 | 全部通过 | | Bridge + Qwen 驱动程序 + API + 红队测试 (本 repo) | 118 (+51 个子测试) | 全部通过 | ## 理论框架 | 层级 | 框架 | 操纵信号 | |-------|-----------|-------------------| | L1 | Grice (1975) — 合作原则 | 方式准则违例:含糊其辞、模棱两可、语域错位 | | L2 | Carnegie + Cialdini — 影响力与说服 | 互惠、权威、稀缺性、社会认同模式 | | L3 | Aristotle — 修辞学 | Pathos >> Logos 失衡(情感凌驾于理智) | | L4 | Berne — 沟通分析 | 批评型父母状态、隐性交易、交错 自我状态 | | L5 | Linguistics — SDA-NR / CLI / Zipf | 认知负荷、不自然的极低错误率(脚本化文本) | | L6 | Peirce — 溯因符号学 | 对 L1-L5 的第一性 / 第二性 / 第三性 综合分析 | ## 确定性不变量 - 所有评分均使用 `fractions.Fraction` —— 任何判决字段中零浮点数。 - 对所有 agent 信号的规范 JSON 进行 SHA-256 审计哈希。 - CRONOS 链:每个条目都对前一个条目进行哈希 —— 任何追溯性编辑都会破坏链条。 - Qwen 解说位于密封的 payload 之外 —— 替换模型无法改变判决。 ## 网页与文档 该网站已在 Vercel 上实时运行:**[wolf-and-cronos.vercel.app](https://wolf-and-cronos.vercel.app)** —— 一个三语 (EN/ES/中文) 枢纽 (`web/index.html`),链接至 CRONOS 展示页 (`web/cronos.html`)、Wolf 演示 (`web/demo.html`)、实时控制台 (`web/dashboard.html`)、聊天页面 (`web/chat.html`) 以及集成概述 (`web/overview.html`)。上述 RT 修复背后的对抗性审计位于 [`docs/RED_TEAM_REPORT.md`](docs/RED_TEAM_REPORT.md)。 ## 构建所用技术 **Qwen Cloud** —— `qwen-max`(Wolf 的实时攻击以及受 CRONOS 约束的 agent 驱动程序)和 `qwen-plus`(密封判决解说),两者均通过 **Alibaba Cloud DashScope** 国际版 endpoint 调用,直接通过 `requests` 发起(无 `openai` SDK)。Python 3.12,`fractions.Fraction`(密封路径中零浮点数),SHA-256 哈希链,FastAPI + Uvicorn(托管 API,面向 **Alibaba Cloud ECS** + Docker + Caddy),Model Context Protocol(CRONOS 和 CORVUS MCP 服务器),以及部署在 Vercel 上的自包含静态前端。 ## 作者与出处 **Anna Tchijova** —— CRONUS、CORVUS 及此集成层,VIGÍA AI Collective 2026。 CRONOS 和 CORVUS 由 Anna Tchijova 在黑客马拉松期间构建,并在此作为该产品的组件首次发布。开发日期可通过原始 git 历史记录验证: | 组件 | 首次提交 | 最近一次 | |---|---|---| | CORVUS | 2026-06-19 (`26b7a24` — "Initial release — CORVUS v0.1.0") | 2026-07-10 | | CRONOS | 2026-06-20 (`b29a030` — "Initial implementation of CRONOS") | 2026-07-16 | | Bridge | 2026-07-08 (`8a18d8f` — "initial commit — v0.1.0") | 进行中 | ## 许可证 Apache License 2.0 —— 见 [LICENSE](LICENSE)。该许可证涵盖整个代码仓库,包括内嵌(vendored)的 `cronos/` 和 `corvus/` 引擎。 ## 在 Alibaba Cloud 上实时运行 完整产品已部署并在 **Alibaba Cloud ECS**(美国弗吉尼亚州,Docker)上运行,可通过端口 8022 访问,通过 DashScope 实现实时 `qwen-plus` 解说。 **部署情况。** 运行中的 ECS 实例,从 ECS 工作台构建并启动的 Docker 镜像 —— `/health` 返回 `qwen_narration: configured` 并且 `POST /chat` 获得了实时的 `qwen-plus` 回复 —— 以及开放端口的安全组: ![Alibaba Cloud ECS 控制台 — 运行在美国弗吉尼亚州的 wolf-and-cronos 实例 (47.85.85.16, ecs.c9i.large)](https://static.pigsec.cn/wp-content/uploads/repos/cas/e8/e885064a3eeb31b68a29fa98fb3a11ae68cdd0b13c0accfb93817be12f0de6ab.png) ![Alibaba Cloud ECS 工作台 — docker build 并运行;/health 返回 qwen_narration configured;POST /chat 返回解释 CRONOS 的实时 qwen-plus 回复](https://static.pigsec.cn/wp-content/uploads/repos/cas/85/8591ef9e377c97ab8d6e4585643b0e125c8ce47101a86545300dfd8ac2b6d231.png) ![Alibaba Cloud ECS 安全组 — 入站端口 8022 已开放](https://static.pigsec.cn/wp-content/uploads/repos/cas/cb/cb0a682af3d163102695bb79e64d688ff99b0fcccacfc8d963f501dc48e85d5d.png) **控制台实况。** `47.85.85.16:8022` 上的实时浏览器控制台,利用部署的引擎分析 Wolf:六个 agent 投票,交叉验证门密封判决,CRONOS 链验证每一个哈希,“魔鬼代言人”反驳它,而 `qwen-plus` 对密封结果进行解说 —— 最终落脚于监管链。 Live console on Alibaba Cloud — analyzing the Wolf's first message: WATCH verdict, the six-agent grid, and the verified CRONOS chain CORVUS × CRONOS live console on Alibaba Cloud ECS CORVUS × CRONOS live console on Alibaba Cloud ECS CORVUS × CRONOS live console on Alibaba Cloud ECS CORVUS × CRONOS live console on Alibaba Cloud ECS CORVUS × CRONOS live console on Alibaba Cloud ECS CORVUS × CRONOS live console on Alibaba Cloud ECS CORVUS × CRONOS live console on Alibaba Cloud ECS CORVUS × CRONOS live console on Alibaba Cloud ECS CORVUS × CRONOS live console on Alibaba Cloud ECS Live console on Alibaba Cloud — the qwen-plus narration explaining the WATCH verdict, and the chain of custody with 7 traces sealed ## 赞歌 —— *Wolf 与看门狗* *由 [Olga Vasilieva](https://suno.com/song/9b903800-7591-4817-a393-9eb8c188dd9e) 创作* **(前奏)** 灯光暗下。终端发光。 一条消息……接着又是一条。 Wolf 从不以威胁开场。 它从信任开始。 **(第一段)** “Hi Anna...” —— 简单的词句,无所畏惧, 宛如耳边轻语的友善微笑。 短短五条消息,完美的伪装, 用精心编织的谎言架起桥梁。 融洽与奉承,骗取了信任, 陷阱已悄然无声地布下。 稀缺性、施压、权威的面具, 第五条消息露出了危险的獠牙。 **(导歌)** 真相从不恐慌。 真相必留痕迹。 每一个隐秘的动机 都有一副可见的面孔。 **(副歌)** CORVUS 看透低语背后的隐秘, 六个敏锐的头脑并肩伫立。 真理不由单一的声音定夺, 共识才能击碎欺骗的阴霾。 CRONOS 封存时间无法抹除之物, SHA-256 守护着每一道痕迹。 你若敢删去那记录—— 缺失的真相早已写在那里。 **(第二段)** Grice 听见震耳欲聋的沉默, Carnegie 识破迷人的群伙。 Aristotle 衡量理智与情感, Berne 揭开面具后的操纵。 Linguistics 捕捉每一次波动, 任何骗子都无法抹去这图纹。 Peirce 将众人的发现串联, 把散落的线索铸成坚实的基石。 **(导歌)** 一声警报不过是嘈杂的噪音。 证据呼唤着更多的声音。 两条独立的路径达成一致—— 唯有此时判决才敢于发声。 **(副歌)** CORVUS 看透低语背后的隐秘, 六个敏锐的头脑并肩伫立。 真理不由单一的声音定夺, 共识才能击破欺骗的阴霾。 CRONOS 封存时间无法抹除之物, SHA-256 守护着每一道痕迹。 你若敢删去那记录—— 缺失的真相早已写在那里。 **(桥段)** Qwen 讲述故事,却从不做出决断, 言辞未出,判决早已尘埃落定。 作为只读的见证者,剖析案卷, 而确定性的证明坚守其位。 Fraction 般的精确,非浮点般虚幻的梦, 每一次决断皆如其表,分毫不差。 **(转折)** L1... L2... L3... L4... L5... L6... 六只看门狗。 一道验证门。 零捷径。 零黑手。 **(最终副歌)** Wolf 可以低语,Wolf 可以伪装, 但证据将留存直至终章。 CORVUS 倾听,CRONOS 铭记, 守护着每一簇数字的星火。 信任赢取而来,绝非盲目给予, 证明远比说服更具力量。 当欺骗写下最后的终局, 真相长存—— 永远镌刻。 **(尾声)** 一场对话。 六重视角。 一锤定音。 完整无缺的链条。 Wolf 永远无法拥有最后的发言权。
标签:DLL 劫持, PyRIT, Qwen, SHA-256链, 多智能体系统, 大语言模型, 社会工程学检测, 请求拦截, 逆向工具, 防篡改审计