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绕过, 自定义脚本