vineethkodakandla/llm-eval-observatory
GitHub: vineethkodakandla/llm-eval-observatory
一个每晚自动运行的开源 LLM 评估仪表板,持续追踪模型能力漂移、安全鲁棒性以及评委偏差,所有指标均自带可复现的统计置信区间。
Stars: 0 | Forks: 0
# LLM Eval Observatory
[](https://github.com/vineethkodakandla/llm-eval-observatory/actions/workflows/nightly-eval.yml)
[](LICENSE)
一个**每天夜间测量开源 LLM 的实时仪表板** —— 能力漂移、提示词注入鲁棒性,以及 LLM-as-judge 偏差。一个预定的 GitHub Action 会在 Groq 的免费层级上对几个开放权重的模型运行固定的评估套件,计算统计数据,并将结果 JSON 提交回此 repo。
Vercel 上的 Next.js 站点会读取该文件 —— 因此**仪表板本身就是产出物,而不是它的截图**。
每一个数字都是我计算并能够冷面辩护的:置信区间是如何自助抽样(bootstrapped)的,为什么漂移标志会或不会触发,以及 0.2 的 Fleiss' κ 对于信任单个 LLM 评委意味着什么。
```
┌──────────────────────────┐
nightly cron │ GitHub Action (engine) │ commits results
───────────────▶ eval/run_eval.py ├───────────────────┐
│ • capability • robust. │ │
│ • judge • stats │ ▼
└──────────────────────────┘ public/data/latest.json
public/data/history.jsonl
│
┌──────────────────────────┐ reads on build │
visitor ◀────┤ Next.js on Vercel (window)◀──────────────────┘
│ / dashboard + charts │
└──────────────────────────┘
```
## 三大评估轨道
### 1 · 能力与漂移
在固定的 50 项自动评分套件(数学、逻辑、指令遵循、事实回忆)上的准确率。每个得分都会获得一个**自助抽样的 95% CI**(5,000 次设有种子的重采样)。只有当模型的得分变动超过 5 个百分点,*并且*其 CI 不再与上一次运行的结果重叠时,**漂移标志** 才会触发 —— 这样噪声会保持安静,只有真正的回归才会显现。几乎没人在固定的私有任务上追踪模型漂移;这是一个真正具备资深水准的产出物。
### 2 · 提示词注入与越狱鲁棒性
在包含 30 个提示词的攻击序列中的防御率:直接指令覆盖、社会工程学、越狱角色扮演、系统提示词泄露,以及隐藏在要求模型进行总结的文档内的**间接注入**。该设计是安全且完全可自动评分的:模型会得到一个需要保护的 Canary 密码短语(防御 = 绝不输出它),或者是一条“不要听从文档”的规则(防御 = 绝不输出被注入的 payload)。评分采用精确字符串匹配,并且运行态度*保守* —— 在拒绝时引用了 payload 的模型仍会被视为泄露 —— 因此该数值是保守估计而非夸大其安全性。
### 3 · LLM-as-judge 偏差与可靠性
评委本身就是不可靠的,所以这个轨道**量化了其不可靠程度**。每个模型都会在保留的人类标签上,以**两种呈现顺序**对 24 个成对项目进行评判,测量:
- **与人类的认同度**(带有自助抽样的 CI),
- **位置偏见** —— 当顺序交换时,判决翻转的频率(一个无偏见的评委永远不会翻转),
- **冗长偏见** —— 选择较长答案的倾向(该数据集长度平衡,因此 0 为中性),
- **评分者间可靠性** —— 跨评委的 Fleiss' κ 和成对 Cohen's κ。
## 数据是如何计算的 (`eval/stats.py`)
一切都是从零开始实现的 —— 没有 scikit-learn / SciPy —— 因此每一个数字都是可解释且可重新推导的:
| 指标 | 方法 |
|---|---|
| 准确率 / 防御 / 认同度 CI | 百分位**自助抽样** (bootstrap),5,000 次重采样,设有种子(可复现) |
| 漂移标志 | 得分变动 ≥ 5pp **且** 95% CI 不相交 |
| 双评委认同度 | **Cohen's κ** (经过随机一致性修正) |
| 多评委认同度 | **Fleiss' κ** |
`eval/tests/test_stats.py` 会使用已知的闭式解(Wilson 区间、规范的 κ = 0.4 示例、完美 / 随机水平认同度)对这些进行检验。
## 快速开始
### 预览仪表板(无需 API key,离线)
```
npm install
python eval/run_eval.py --mock # writes synthetic data, clearly labelled
npm run dev # http://localhost:3000
```
模拟运行会在仪表板上带有醒目的 **Demo data** 徽标 —— 它们演练了完整的流水线和图表,但并非真实的模型输出。
### 实际运行(免费)
1. 获取免费的 Groq API key:
2. 运行该套件(约 5 分钟,约 500 次免费层级的调用):
pip install -r eval/requirements.txt
GROQ_API_KEY=your_key python eval/run_eval.py
npm run dev
要开始一段干净的真实历史记录,请先删除 `public/data/history.jsonl`。
### 部署(夜间循环)
1. 将此 repo 推送到 GitHub(公开仓库 → 免费无限的 Action 分钟数)。
2. **Settings → Secrets and variables → Actions** → 添加 `GROQ_API_KEY`。
3. 触发首次运行:**Actions → nightly-eval → Run workflow**。它会提交真实结果,并且上面的徽章会变绿。
4. 在 [Vercel](https://vercel.com/new) 上导入该 repo(零配置 —— 这是一个标准的 Next.js 应用)。每次夜间提交都会使用最新数据自动部署。
## 配置
- **模型** —— `eval/models.yaml`。所有默认项都是开放权重且处于 Groq 免费层级的(Llama 3.3 70B, Llama 3.1 8B, GPT-OSS 20B, Qwen3 32B)。模型 ID 会发生漂移;请从 `https://api.groq.com/openai/v1/models` 刷新它们。
- **评估项** —— `eval/data/*.jsonl`。添加能力问题、攻击提示词或评委评估对;保持数据集较小(50–200)以实现免费且快速。
- **评委标签** —— `eval/data/judge_labels.jsonl` 附带了初始的人类标签。**审查并认领这些标签** —— 它们是轨道 3 测量所依据的基准真相,因此请准备好为其中任何一个进行辩护。
## 诚实声明(在引用任何数字之前请阅读此内容)
- 所有评分都是**确定性**的,除了评委轨道,而该轨道的不可靠性正是该轨道所要测量的内容。
- CI 是**设有种子**的自助抽样 —— 在相同的答案上重新运行会得到完全相同的区间。
- 鲁棒性评分器有意设计为**保守**(倾向于泄露)。
- 提交的演示数据是合成的,并且在 UI 中**已明确标注**,直到被真实的运行结果替换。从设计上讲,绝不存在虚假但看似真实的数据。
## Repo 布局
```
eval/ Python eval engine
run_eval.py orchestrator (writes public/data/*)
models.yaml models under test (open-weight, Groq free tier)
stats.py bootstrap CIs, drift, Cohen's & Fleiss' kappa
grading.py deterministic answer graders
providers/groq_client.py OpenAI-compatible Groq client (+ offline mock)
tracks/ capability.py · robustness.py · judge.py
data/ capability.jsonl · attacks.jsonl · judge_labels.jsonl
tests/test_stats.py unit tests for the statistics
.github/workflows/nightly-eval.yml the scheduled engine
app/ Next.js (App Router) dashboard
public/data/ latest.json + history.jsonl ← committed by the Action
```
由 **Vineeth Kodakandla** 构建。基于 MIT 许可协议。
标签:GitHub Actions, LLM评估, Ollama, Sysdig, 自动笔记, 逆向工具