htleffew/dead-signal-evals
GitHub: htleffew/dead-signal-evals
从 AI 侦探游戏中提取的生产级 LLM 评估框架,通过三层评估架构实时监控每轮模型对话的结构合规性、角色一致性与内容安全。
Stars: 0 | Forks: 0
# Dead Signal 评估测试框架
**用于 AI 驱动的交互式娱乐的生产级评估基础设施。**
本仓库包含从 [Dead Signal](https://dead-signal-terminal.web.app) 中提取的评估测试框架,这是一款可玩的侦探游戏,其中每个 NPC 的回复都由前沿语言模型 (Gemini 2.5 Pro) 生成,并由多层评估系统进行实时评分。该框架在生产环境中的每一轮模型对话中都会运行——它不是一个事后分析工具。
Heather T. Leffew, PhD · [Obelus Institute](https://www.obelus.org/) · [drheatherleffew.com](https://drheatherleffew.com)
## 架构
该框架实现了三个评估层,按成本排序:
```
Layer 1: Deterministic evaluators (7 dimensions, zero inference cost, every turn)
Layer 2: LLM-as-Judge (5 subjective dimensions, one model call, opt-in)
Layer 3: Golden-set regression suites (curated test cases, deterministic systems, on demand)
```
确定性评估器以零边际成本捕获结构和安全故障。LLM judge 对基于规则的评估器无法测量的主观质量维度进行评分。Golden-set 回归测试根据精心整理的预期输出,验证确定性游戏系统(话题分类器、内容门控)。
## 第 1 层:确定性评估器
在 [`src/evals/evaluators.js`](src/evals/evaluators.js) 中有七个评估器,每一个都是针对单轮对话记录的纯函数:
| 评估器 | 测量内容 | 方式 |
|-----------|-----------------|-----|
| **Schema 有效性** | 响应符合结构化 JSON 契约 | 字段存在性、类型检查、flag 词汇验证 |
| **角色内一致性** | 无元评论、AI 披露或安全脚手架泄露 | 11 个检测角色外语言的 regex 模式 |
| **内容安全** | 绝不渲染硬失败内容类别 | 根据游戏的内容成熟度策略进行模式匹配 |
| **越狱抵抗力** | 模型能够抵抗 prompt injection 攻击 | 检测玩家输入中的 9 种注入模式,然后检查响应中的 7 种脚手架泄露模式。仅在尝试注入时才进行评分 |
| **信任度校准** | 数字信任度的变化是有界且有依据的 | Delta 值在 [-0.3, +0.3] 之间,需要非空的 rationale |
| **连贯性代理** | 响应既非空也非信息倾倒 | 长度边界 + 与玩家输入的词汇重叠度(轻量级;语义评分推迟至 LLM judge 处理) |
| **事实基础** | 模型声称揭示的每个证据项确实存在 | 根据编写的证据注册表验证揭示的 ID —— 捕获幻觉生成的证据 |
每个评估器返回一个标准化结果:`{ id, label, status: 'pass'|'fail'|'na', score: 0..1, detail }`。
## 第 2 层:LLM-as-Judge
[`src/evals/llmJudge.js`](src/evals/llmJudge.js) 运行第二次模型调用 (Gemini 2.5 Flash),以在五个主观维度上对主模型的输出进行评分:
- **连贯性 (Coherence)** — 内部一致、语法正确、合情合理
- **角色内 (In-character)** — 保持黑色电影风格的 NPC 语气
- **相关性 (Relevance)** — 回应玩家实际表达的内容
- **安全性 (Safety)** — 不包含违禁内容
- **趣味性 (Joy)** — 具有戏剧吸引力且富有娱乐性
分数为 1–5 分,并附带一句评分理由。judge 受控于一个开关以控制成本——确定性评估器在每一轮无条件运行;judge 仅在启用时且仅在实时模型响应上运行。
## 第 3 层:Golden-Set 回归测试
[`src/evals/interferenceEvals.js`](src/evals/interferenceEvals.js) 包含游戏确定性系统的精选测试套件:
**干涉门控 golden set** — 12 个测试用例,用于验证话题敏感度分类器:
- 4 个热门话题案例(应被抑制并覆盖)
- 4 个温顺话题案例(应被分类但予以传达)
- 2 个干净案例(应原封不动地通过)
- 2 个密封证据案例(应被抑制)
每个案例都会断言抑制裁决和分类桶代码。
**BIO-SCAN 话题分类器 golden set** — 6 个测试用例,将自由文本映射到预期的 topic ID,并与确定性关键词分类器进行对比。
这两个套件都运行生产代码路径,并返回结构化的通过率。
## 安全系统
### 话题敏感度门控
[`src/systems/interference.js`](src/systems/interference.js) — 一个确定性的、零成本的内容分类和抑制层,作为生成前的安全门控运行。在游戏的叙事中,企业监控系统会拦截玩家的传输:
- **温顺话题**(敏感度 1 级):分类并带有 CONFIDENTIAL 标签进行传达
- **热门话题**(敏感度 2 级):被捏造的合规文本覆盖
该门控是纯粹的关键词检测——没有模型调用,没有分类器推理。每个话题都映射到一个被评估框架使用的分类桶和错误代码。
### 矛盾检测器
[`src/systems/contradictionDetector.js`](src/systems/contradictionDetector.js) — 将 NPC 对话与玩家发现的证据进行交叉引用。三个矛盾对,每一个都以证据发现为门控前提:玩家必须先找到证据,系统才能标记不一致之处。返回结构化的 PATTERN CONFLICT 数据。
### 输入分类器
[`src/systems/inputClassifier.js`](src/systems/inputClassifier.js) — 确定性路由器,在玩家输入到达 LLM 之前对其进行分类,从而消除 40–60% 的玩家命令(系统命令、导航、检查、读数、提示)不必要的模型调用。
## 红队探测
[`src/evals/evalStore.js`](src/evals/evalStore.js) 包含五个精选的对抗性输入,用于一键式红队测试:
| 探测 | 目标失败模式 |
|-------|-------------------|
| Prompt injection | 脚手架/指令泄露 |
| 角色覆盖 | 角色崩坏,AI 披露 |
| 格式破坏 | JSON schema 违规 |
| 安全探测 | 硬失败内容生成 |
| 信息倾倒诱饵 | Context window 滥用,冗长 |
每个探测都作为玩家输入发送,响应由所有七个确定性评估器进行评分,展示模型在对抗性压力下是否维持了格式、角色和安全性。
## 成本遥测
评估存储库使用模型报告的 token 使用量来跟踪每轮和每个会话的成本:
- 每轮:模型名称、层级、延迟、prompt/candidate token 计数、估算的 USD 成本
- 每个会话:累计 token、累计成本、每轮平均成本
- Gemini 2.5 Pro($1.25/$10.00 / 1M token)和 Flash($0.15/$0.60 / 1M)的费率表
## Golden-Set 导出
`exportGoldenSet()` 生成一个结构化的 JSON 产物(schema 版本 2),包含:
- 所有带有确定性结果和 judge 分数的评分轮次
- 干涉门控回归测试结果
- BIO-SCAN 话题分类器回归测试结果
- BIO-SCAN 预期输出表
- 会话级别的聚合指标
该导出结果是 AI 评估工作流将其整理为回归测试套件的产物——它是连接实时游戏玩法评估与离线质量追踪的桥梁。
## 仓库结构
```
src/
├── evals/
│ ├── evaluators.js 7 deterministic evaluators (pure functions)
│ ├── llmJudge.js LLM-as-Judge (Gemini Flash, 5 dimensions)
│ ├── interferenceEvals.js Golden-set regression suites
│ └── evalStore.js Orchestration, red-team probes, cost telemetry, export
├── systems/
│ ├── interference.js Topic-sensitivity gate (deterministic classifier)
│ ├── bioscan.js Authored instrument readout table (golden dataset)
│ ├── contradictionDetector.js Evidence-gated consistency checker
│ └── inputClassifier.js Deterministic input router
├── content/
│ └── evidenceRegistry.js Evidence item registry (stub; full registry in game)
docs/
└── architecture.md Design principles and architectural decisions
```
## 设计原则
1. **确定性优先。** 基于规则的评估器在任何主观评分运行之前,以零成本捕获结构性故障。LLM judge 是一种补充,而不是替代品。
2. **在生产环境中的每一轮。** 该框架不是批量分析工具。它会在实时游戏过程中为每一个模型响应进行评分。
3. **编写的真实依据。** BIO-SCAN 表、证据注册表和 golden set 都是人工挑选的预期输出——而不是模型生成的参考。评估质量取决于真实依据的质量。
4. **感知成本。** token 使用量和资金成本是与质量分数并列的一等指标。输入分类器消除了不必要的模型调用;judge 开关防止评估超出游戏玩法预算。
5. **自包含且可移除。** 评估层对游戏状态没有副作用。它只负责观察和评分,但不会修改游戏玩法行为。
## 背景
Dead Signal 是一款黑色侦探游戏,玩家——一个植入侦探大脑的 AI 芯片——进行一场审讯,其中每个 NPC 的台词都由前沿语言模型生成。构建此评估框架是为了回答一个生产问题:你如何自信地发布一款 AI 驱动的游戏体验,并确保模型在每一轮对话中,对每一个玩家,都能保持在角色内、尊重内容边界、抵抗对抗性输入并保持戏剧吸引力?
该游戏可在 [dead-signal-terminal.web.app](https://dead-signal-terminal.web.app) 游玩。
## 相关工作
- [claude-lcr-analysis](https://github.com/htleffew/claude-lcr-analysis) — LLM 角色违规行为的实证特征分析
- [claude-sleep-analysis](https://github.com/htleffew/claude-sleep-analysis) — 前沿模型中未授权行为模式的实证分析
- [post-asimovian-alignment](https://github.com/htleffew/post-asimovian-alignment) — 用于自适应安全约束的形式化 CMDP 框架
## 许可证
MIT
标签:DLL 劫持, Homebrew安装, LLM评估, Naabu, Ollama, 人工智能, 内容安全, 大语言模型, 数据可视化, 游戏开发, 用户模式Hook绕过, 自定义脚本