Fabric 中的 detect_silent_victims 模式:识别无法发声的受害者的系统化审计框架
导读
detect_silent_victims 是 Fabric 开源 AI 框架内置的一种模式(pattern),用于分析行动、政策、系统或提案,识别其中"受到伤害却无法发声"的群体——他们或因尚未存在、或因缺乏权力、或因毫不知情、或因没有表达渠道而沉默。本文以 data/patterns/detect_silent_victims/README.md 与其配套的 system.md 提示词 为主体,结合 Fabric 的 CLI 与模式加载源码,完整讲解该模式的五类受害者分类框架、九步扫描流程、结构化输出规范与实际调用方式,读者将能直接用它审计政策提案、商业模式、AI 系统与立法草案中的隐性伤害。
一、模式要解决的核心问题:"No victim, no crime" 的致命盲区
"没有受害者,就没有罪行"(No victim, no crime)是一条强有力的原则。但它存在一个关键的盲区:那些无法报告自己受害状态的受害者怎么办?
正如模式 README 所指出的核心论断:
The absence of a complaint is not evidence of the absence of a victim. (没有投诉,并不等于没有受害者。)
依据 system.md 的定义,该模式将"沉默的受害者"划分为五类,每类都有典型场景:
| 类别(Category) | 含义 | 典型示例 |
|---|---|---|
| 未来受害者(Future victims) | 今天的行为在未来造成伤害 | 气候损害、国家债务、资源枯竭 |
| 无声受害者(Voiceless victims) | 过于无力而无法发声 | 儿童、动物、生态系统、边缘化社群 |
| 不知情受害者(Unaware victims) | 不知道自己正被伤害 | 数据剥削、慢性中毒、被隐藏的外部性 |
| 弥散受害者(Diffuse victims) | 伤害摊薄到海量个体、无人拥有诉权 | 影响数百万人的污染、市场操纵 |
| 结构性受害者(Structural victims) | 伤害内嵌于结构而非个体行为 | 系统性歧视、榨取性制度 |
"无诉状"本身不能作为"无受害者"的证据——这正是该模式存在的意义。
二、模式的起源:跨模型 AI 评估的产物
该模式并非凭空设计,而是诞生于一次跨模型 AI 对话评估。依据 README 与 system.md 的记载:
- 在针对 Ultimate Law 框架的评估中,19 个 AI 系统将"无声受害者"识别为该框架最关键的缺口;
- DeepSeek-R1 提出"未来世代可以被视为受害者";
- Cogito:70b 的"魔鬼代言人"攻击将 "No Victim No Crime 是忽视结构性暴力的自由意志主义幻想" 评为 9/10——整个系列中最强的一次攻击;
- 框架最终的幸存方式不是推翻原则本身,而是承认原则正确,但受害者定义需要扩展。
该模式直接继承自 Ultimate Law 框架(github.com/ghrom/ultimatelaw)对受害者的定义:
"Victim: Someone harmed against their will. If no one is harmed unwillingly, there is no victim and thus no violation." (受害者:违背自身意愿受到伤害的人。如果没有人非自愿地受到伤害,就没有受害者,也就没有侵犯。)
三、在 Fabric 中使用该模式
3.1 基本调用方式
模式在 Fabric 中通过 -p(--pattern)参数按名称调用。README 给出了四类典型使用场景:
# 审计一项政策提案
echo "Build a coal plant to provide cheap energy" | fabric -p detect_silent_victims
# 评估一种商业模式
echo "Offer free service funded by selling user data" | fabric -p detect_silent_victims
# 检查一个 AI 系统
echo "Train AI on scraped internet data" | fabric -p detect_silent_victims
# 审计立法草案
cat proposed_law.txt | fabric -p detect_silent_victims
其中 -p 参数定义于 internal/cli/flags.go:-p, --pattern 用于从可用模式中选择一个,同时支持 -v/--variable 传入模式变量(如 -v=#role:expert)。此外还有几个与模式管理直接相关的命令:
# 列出所有可用模式
fabric -l
# 将模式内容直接打印到终端(查看提示词原文)
fabric --readpattern detect_silent_victims
# 从上游仓库更新模式库
fabric -U
3.2 通过配置文件指定模式
除命令行参数外,也可以把模式写入 Fabric 的 YAML 配置(如 ~/.config/fabric/config.yaml)中,相关说明见 internal/cli/README.md:
# Pattern selection
pattern: detect_silent_victims # 使用模式名或文件名
# 其他常用项
model: gpt-4
temperature: 0.7
stream: true
配置规则上,CLI 标志总是覆盖 YAML 值;同一声明在 YAML 中重复出现时,最后一次生效;声明顺序无关紧要。
3.3 为模式绑定专属模型
Fabric 支持按模式映射特定模型:当 --pattern 指定且未显式设置 --model 时,CLI 会尝试读取环境变量 FABRIC_MODEL_<PATTERN>(模式名中的连字符替换为下划线并大写),例如:
export FABRIC_MODEL_DETECT_SILENT_VICTIMS="gpt-4o"
这一逻辑实现在 internal/cli/chat.go,便于将要求较高的审计类模式固定到更强的模型上,而无需每次手动指定。
3.4 模式在底层如何被加载
从源码看,Fabric 的模式加载链路是:CLI 传入模式名 → internal/tools/patterns_loader.go 负责从上游 Git 仓库下载并维护模式库(默认 data/patterns)→ internal/plugins/db/fsdb/patterns.go 按名称从 data/patterns/<名称>/system.md 读取提示词内容。
值得注意的细节(见 patterns.go):
- 查找顺序为自定义模式目录优先,同名自定义模式会覆盖主模式库;
- 若传入的名字以
/、\、~、.开头,则被识别为文件路径而非模式名,会直接读取该文件作为提示词——这允许你把detect_silent_victims的 system.md 复制出来后用文件路径方式离线调用; - 提示词模板中的
{{input}}占位符会被替换为管道输入的实际内容(applyInput/applyVariables逻辑位于 patterns.go)。
也就是说,echo "..." | fabric -p detect_silent_victims 的本质是:把你输入的文本注入 system.md 末尾的 INPUT: 区域,连同整个"无声受害者检测器"的角色设定一起交给所选 LLM。
四、受害者可见性框架(Victim Visibility Framework)
模式的核心方法论是五类受害者的"扫描透镜",每一类都附有一组自我质询问题。完整继承自 system.md:
类别 1:时间性受害者(未来)
- 谁会在 5、10、50、100 年后被此事影响?
- 成本是否被推迟给了未同意的人?
- 该行为是否在消耗未来主体需要的资源?
- 是否正在做出未来主体无法逆转的改变?
类别 2:权力受害者(无声)
- 谁受影响,却缺乏反对所需的权力、平台或法律地位?
- 是否有主体依赖决策者、因惧怕报复而不敢发声?
- 儿童、动物或生态系统是否在无人代表的情况下被影响?
- 如果每个受影响方都有平等的发言权,这个行动还会一样吗?
类别 3:信息受害者(不知情)
- 谁被影响却毫不知情?
- 伤害信息是否被隐瞒、模糊化或制造不可及?
- 效应是否被延迟到难以建立因果关系?
- 如果受影响方掌握全部信息,他们还会同意吗?
类别 4:弥散受害者(分布式)
- 伤害是否摊薄到众多主体、每个单一个体都小到难以察觉?
- 聚合伤害是否超过任何单个受害者所经历的?
- 弥散是否是故意的(为逃避追责而设计)?
- 如果把总伤害集中到单一主体身上,是否不可接受?
类别 5:结构性受害者(系统性)
- 系统是否在正常运转的副作用中产生伤害?
- 是否有人因结构而非任何单一行为而持续处于劣势?
- 伤害是否自我强化(受害者变得更脆弱,进而产生更多受害)?
- 能否重新设计结构,在无伤害的情况下产生同样的收益?
五、九步扫描流程(STEPS)
该模式要求按顺序执行以下九个步骤,从"看得见的"逐步推进到"看不见的":
- 识别行动或系统:正在被提出、实施或评估的是什么?
- 绘制直接利益相关方:谁被直接、可见地影响?
- 扫描时间性受害者:向前推演,未来谁承担成本或后果?他们能否同意?
- 扫描权力受害者:沿权力层级向下看,谁受影响却缺乏声音?谁依赖行动者、害怕提出异议?
- 扫描信息受害者:谁不知道自己被影响?无知是自然的还是被制造的?
- 扫描弥散受害者:聚合微小伤害,即使单份看似微不足道,总量是否可观?
- 扫描结构性受害者:看系统而非单次行动,正常运行是否持续产生输家?
- 应用反转测试(见下节)。
- 评估严重性:对每一类已识别的无声受害者,伤害有多严重?影响多少人?是否可逆?
六、反转测试(The Reversed Test)
模式的核心判据是一句被反复强调的提问:
"If every silent victim could speak with equal power, would they consent to this?" (如果每个无声受害者都能以平等的权力说话,他们会同意这件事吗?)
README 指出:这一个问题就能暴露大部分隐藏的伤害。当无法判断某个行动是否可接受时,把"沉默者"全部"唤醒"并赋予平等权力,再检验其同意意愿,是穿透五类受害者迷雾的捷径。
七、结构化输出规范(OUTPUT INSTRUCTIONS)
当模式运行时,要求 LLM 输出一份严格结构的审计报告,包含以下章节(完整继承自 system.md):
7.1 行动/系统分析(ACTION/SYSTEM ANALYZED)与可见利益相关方
- ACTION/SYSTEM ANALYZED:所评估对象的简要描述;
- VISIBLE STAKEHOLDERS:直接、明显受影响的人(即所有人都已考虑到的群体)。
7.2 无声受害者扫描(SILENT VICTIM SCAN)
对每个类别输出统一结构的字段:
- Temporal Victims (Future):
Found(是/否/可能)、Who(谁)、Harm(何种伤害、多严重)、Reversibility(可逆/部分可逆/不可逆); - Power Victims (Voiceless):
Found、Who、Harm、Why silent(沉默原因:恐惧、依赖、法律地位、字面上的无发声能力); - Information Victims (Unaware):
Found、Who、Harm、Ignorance source(无知来源:自然复杂性 / 故意隐瞒 / 延迟效应); - Diffuse Victims (Distributed):
Found、Individual harm(可忽略/轻微/中等)、Aggregate harm(描述与规模)、Diffusion deliberate?(弥散是否刻意); - Structural Victims (Systemic):
Found、Who(持续处于劣势者)、Mechanism(结构如何产生伤害)、Self-reinforcing?(是否自我强化)。
7.3 严重性汇总表与总体评估
模式要求将扫描结果汇总为一张结构化表格,并给出结论标签:
| Category | Found? | Count/Scale | Severity | Reversible? |
|---|---|---|---|---|
| Temporal | ||||
| Power | ||||
| Information | ||||
| Diffuse | ||||
| Structural |
总体评估必须在四档结论中择一:NO SILENT VICTIMS(无)/ POSSIBLE SILENT VICTIMS (investigate)(可能,需调查)/ PROBABLE SILENT VICTIMS(很可能)/ CONFIRMED SILENT VICTIMS(已确认)。
7.4 建议(RECOMMENDATIONS)
最后输出:要解决已识别的无声受害者,需要改变什么?他们的利益应如何被代表?
八、运行示例
system.md 提供了三个对照示例,帮助理解模式的判读边界:
示例 1:环境类
- 行动:工厂向河流排放废料;
- 可见方:工厂、员工、股东;
- 无声方:下游社区(权力受害者)、未来世代(时间性受害者)、水生生态系统(无声)、被稀释污染影响的数百万人(弥散受害者)。
示例 2:数字类
- 行动:用抓取的私人数据训练 AI;
- 可见方:AI 公司、AI 用户;
- 无声方:数据被抓取的人(信息受害者——大多数并不知情)、文化产出被商品化的社群(弥散受害者)、训练数据将塑造 AI 行为方式的未来人(时间性受害者)。
示例 3:无无声受害者
- 行动:两个成年人在市场自愿交易货物;
- 可见方:双方;
- 扫描:无时间性伤害、无权力不对称、双方知情、无弥散效应、无结构性劣势;
- 结论:NO SILENT VICTIMS——干净的交易。
九、使用边界与重要注意事项
模式本身对其适用边界有明确的自律条款(继承自 system.md 的 IMPORTANT NOTES):
- 存在潜在无声受害者并不自动否定一个行动——它只意味着这些利益应当被考虑和代表;
- 不应武器化该模式去给每一次互动都寻找假设性受害者。有些行动确实没有无声受害者——一个到处都能找出受害者的模式是无用的;
- 当无法确定是否存在无声受害者时,潜在伤害的严重性与可逆性应决定预防措施的等级;
- 该模式是可证伪的:如果它持续在不存在受害者的地方识别出受害者,或在确实存在的地方漏掉,就应当被修正。
十、总结:从提示词到可执行的审计工具
detect_silent_victims 的价值在于把"看不见的伤害"变成了一套可重复、可验证的检查清单:五类受害者透镜负责广撒网,九步流程保证扫描顺序的完备性,反转测试提供单一判据的穿透力,而结构化输出把结论压缩成一张可以直接用于决策的严重性表格。
在 Fabric 中,它是一个开箱即用的 -p 模式,底层依赖 internal/tools/patterns_loader.go 的模式库分发与 internal/plugins/db/fsdb/patterns.go 的模板注入机制——你只需要提供待审计的行动描述,剩下的五维扫描与报告生成全部由模式驱动 LLM 完成。正如其 README 的结论:"没有投诉"从来不是"没有受害者"的证据;而一个让所有沉默者开口的问题,就能让绝大多数隐性伤害无所遁形。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0629
MiniCPM5-2BMiniCPM5-2B 是一款面向端侧、本地部署和资源受限场景的 2B 稠密 Transformer,能够达到同尺寸开源模型 SOTA 水平。Markdown00
GLM-5.3GLM-5.3 与 GLM-5.2 使用相同的基座模型——所有提升均来自后训练。与 GLM-5.2 相比,它在复杂编程和长程任务上的表现显著提升。Jinja00
HivisionIDPhotos⚡️HivisionIDPhotos: a lightweight and efficient AI ID photos tools. 一个轻量级的AI证件照制作算法。Python07
DragonOSDragonOS is an operating system developed from scratch using Rust, with Linux compatibility. It is designed for **Serverless** scenarios. 使用Rust从0自研内核,具有Linux兼容性的操作系统,面向云计算Serverless场景而设计。Rust00
Spark-X2.5-1.7BSpark-X2.5-1.7B 旨在让强大的 AI 更加实用、高效且易于获取。这些模型在广泛的日常任务中表现出色,涵盖对话、写作、翻译、推理、编程、工具调用和智能体工作流,并在同等规模的开源模型中取得领先结果。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00