danielneustadter/ach-workbench

GitHub: danielneustadter/ach-workbench

一款完全在浏览器中离线运行的竞争性假设分析(ACH)工作台,帮助分析师基于反驳逻辑对假设进行排序并生成标准化情报评估报告。

Stars: 0 | Forks: 0

# ACH Workbench **竞争性假设分析** 的浏览器端实现,这是由 Richards J. Heuer, Jr. 在 CIA 开发并在整个美国情报界推广的结构化分析技术。 它根据*反对*解释的证据而非*支持*解释的证据对解释进行排名,标记那些看似有说服力但缺乏区分度的情报报告,展示判断所依赖的基石,并使用 ICD 203 估计语言输出最终产品——将概率和信心作为两码事分别陈述。 完全在浏览器中运行。无后端,无遥测,无网络调用。 ![已加载示例案例的工作台](https://raw.githubusercontent.com/danielneustadter/ach-workbench/main/docs/screenshots/01-workbench.png) ## 为什么开发此工具 大多数分析错误并非计算错误。它们往往源于先为第一个看似合理的解释构建论点,然后将随后的每一份报告都视为对该论点的支持。ACH 是标准的应对措施:*首先*列出假设,针对*所有*假设评估每一项证据,并倾向于选择反对证据最少的假设。 这项技术足够简单,可以在纸上完成,但也足够繁琐,以至于人们常常跳过最关键的部分——诊断度和敏感度。这些部分正是此工具存在的原因。 ## 功能 **基于反驳的排名。** 假设按加权不一致性升序排列。支持性证据会被计算并显示,但绝不会驱动排序,因此你可以看出领先的假设是何时“躺赢”而非凭借实力胜出的。 **加权证据。** 每一项证据都带有 NATO Admiralty 可靠性等级(A–F)和分析师指定的相关性(1–5)。传言和取证结果对矩阵的影响程度是不同的。 **诊断度评分。** 在所有假设中评分完全相同的证据会被标记为非诊断性。这是 Heuer 最不直观却最有用的结论:一项证据可能是真实的、生动的、处于叙事核心的,但在选择解释时却毫无权重。示例案例中故意包含了一项此类证据。 **敏感度分析。** 对于每一项证据,工具都会在剔除该项后重新计算排名,并报告领先者是否发生改变,以及与第二名之间的差距缩小了多少。基于单一未经证实报告的判断会被识别出来。 **ICD 203 输出。** BLUF 使用七档估计概率词汇表(*几乎不可能* → *几乎肯定*)。按照标准要求,信心的评估与概率**分开进行**,并由消息源质量、诊断度、矩阵覆盖率以及差距在失去任何单一报告后的存续能力驱动。 **关键假设检查。** 假设与其自身的信心水平和明确的“在何种条件下失效”条件一起记录,随后这些内容会输入到报告的“关注指标”部分。 **Markdown 导出。** 一份完整的分析产品:BLUF、排名表、包含诊断度的证据、敏感度、信心驱动因素、假设、指标,以及陈述的方法与局限性部分。 ![假设与证据矩阵](https://static.pigsec.cn/wp-content/uploads/repos/cas/e1/e142e26c52a0f10a77e6f001f443ef2b61d6b74ecf62d0351a1d23e687dcf51c.png) ## 示例案例 内置案例——Meridian 港务局、Castellia 共和国及其中的所有消息源——**完全属于虚构**。它的设计初衷就是让显而易见的答案变成错误的。 41 台主机上留下了勒索信。直觉上的解读是犯罪分子的勒索软件。但是从未存在过可用的支付渠道,加密操作避开了财务系统并专门针对起重机控制系统,操作者在 31 天内查询了泊位日程却未窃取任何数据,且二进制文件中包含了与其伪装的病毒家族不符的特征。矩阵将犯罪勒索软件排在**四个假设中的第三位**。 该结果由一项测试断言,因此如果对评分模型的更改破坏了这一课程意义,构建也会随之失败: ``` the sample case > reaches the counter-intuitive conclusion the case is built to teach ``` 该案例还展示了诚实面对局限性的路径。工具报告的是**中等(moderate)**而非高信心,因为剔除掉单一项目——E1,即勒索信——会完全抹平排名前两位假设之间的差距。 ![生成的分析产品](https://static.pigsec.cn/wp-content/uploads/repos/cas/0b/0b9b56102eb7c383bc28248ec10b8f0d10044cd84e317adbf5099f045b826132.png) ## 方法论 评分采用 Heuer 的五分制量表——`CC` 非常一致 (+2)、`C` 一致 (+1)、`N` 中立 (0)、`I` 不一致 (−1)、`II` 非常不一致 (−2)——外加 `NA`,后者会被作为数据缺口进行跟踪,而不是默认视为中立。 每一项的权重计算公式为 `reliability × (relevance / 3)`,其中 reliability 从 A=1.0 递减至 E=0.3,而 F(“无法判断”)为 0.5。 假设的得分是其**不一致性** 评分的加权和。分数越低,论证越强。如果出现同分,则偏向支持度更高的一方,因此得到证实的假设会胜过仅仅未被反驳的假设。 诊断度是某一项证据在所有假设中评分的标准差;为零意味着它没有任何区分能力。 信心度的计算公式为 `basis × (0.35 + 0.65 × avg_reliability)`,其中 basis 综合了诊断份额、矩阵覆盖率以及在剔除单一项目下的**最坏情况** 差距。消息源质量是以乘法方式对结果进行门槛限制,而不是作为公式中的一项——一个完全建立在不靠谱报告基础上的、完整且内部一致的矩阵,本质上只是一个组织良好的猜测,其得分绝不该被表现成别的什么。 ### 局限性 **百分比不代表概率。** 它们是对取反后的不一致性应用 softmax 函数的结果:与排名单调相关且有利于可读性,但并非源自基准率或似然比,也不提供任何校准保证。排名本身才是结论。对于真正基于概率的研究,请使用带有明确先验的贝叶斯更新。 **权重是人为判断,而非客观测量。** 可靠性等级和相关性评分是分析师的输入。工具使这些判断变得明确且可审计;但它并不能保证这些判断一定正确。 **ACH 能够减轻确认偏误;但不能消除它。** 矩阵只能对你输入的假设进行排名。你未曾考虑到的假设是任何 ACH 产品中最大的残余风险,矩阵内的任何算术运算都无法将其挖掘出来。 **不能替代专业技能。** 这只是一个技术的计算器,它会忠实地根据一个糟糕的问题计算出格式严谨的答案。 ## 运行方式 ``` npm install npm run dev ``` 然后打开输出的 localhost URL。所有数据都会持久化到 `localStorage`——不会向任何地方传输数据,并且在存储不可用时,应用能够优雅降级。 构建静态包(它可以通过 `file://` 正常运行,因此适用于物理隔离环境): ``` npm run build ``` 运行测试套件: ``` npm test ``` 重新生成 README 截图——使用 2 倍设备比例的无头 Chrome,无需开发服务器: ``` npm run build && node scripts/screenshots.mjs ``` ### 查询参数 - `?sample=1` — 无论存储中有什么,加载演示案例 - `?report=1` — 直接打开生成的产品 ## 项目结构 | 路径 | 内容说明 | |---|---| | `src/scoring.ts` | 分析引擎——权重、排名、诊断度、敏感度、信心度 | | `src/report.ts` | Markdown 产品生成 | | `src/sample.ts` | 虚构的示例案例 | | `src/types.ts` | 数据模型、评分量表、Admiralty 等级 | | `src/scoring.test.ts` | 针对评分模型的 39 项测试 | | `scripts/screenshots.mjs` | 无头 Chrome 截图流水线 | ## 免责声明 这是一个独立的教育项目。它**不隶属于、未受到任何政府机构的认可或派生自**任何政府机构,且不包含任何非公开信息。所有示例数据均为虚构。ICD 203 估计词汇表和 NATO Admiralty Code 均为公开发布的标准。 ## 延伸阅读 - Richards J. Heuer, Jr., *Psychology of Intelligence Analysis* (CIA Center for the Study of Intelligence, 1999) — 第 8 章涵盖了 ACH - Heuer & Pherson, *Structured Analytic Techniques for Intelligence Analysis* - ODNI Intelligence Community Directive 203, *Analytic Standards* ## 许可证 MIT — 详见 [LICENSE](LICENSE)。
标签:ACH, URL枚举, 云安全态势管理, 代码示例, 前端应用, 情报分析, 数据分析, 暗色界面, 离线优先, 网络诊断, 自动化攻击