> ## Documentation Index
> Fetch the complete documentation index at: https://niceeval.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# 比较两次运行：基线和候选谁更好

> 固定两次运行的 Run ID，在浏览器里并排审阅，或用 runs.compare 让脚本和 CI 得到逐题配对的比较结果。

你在周一跑了一次基线，周三改了 prompt 又跑了一次，想知道这次改动到底让哪些题变好、哪些题变差。

比较之前先固定两边各是哪一次运行。“最新的结果”会随着下一次运行而变化，拿它当比较对象，今天和明天得出的结论可能不一样。每次 `niceeval exp` 结束时，终端的 `NEXT` 面板都会列出这次新建的 Run ID，把基线和候选的 ID 记下来。

## 在浏览器里并排看

```sh theme={null}
pnpm exec niceeval view --run <baseline-run-id> --run <candidate-run-id>
```

View 会同时打开两个 Run，你可以逐题对照通过与否、分数、耗时和成本，再点进具体某一次运行看对话和工具调用。

## 让脚本和 CI 读比较结果

自动化流程需要结构化的比较结果时，用 `runs.compare` 请求：

```sh theme={null}
pnpm --silent exec niceeval query run --request - <<'JSON'
{
  "protocol": "niceeval.query/v1",
  "operation": {
    "kind": "runs.compare",
    "mode": "paired",
    "leftRunIds": ["<baseline-run-id>"],
    "rightRunIds": ["<candidate-run-id>"]
  }
}
JSON
```

`mode` 决定怎样对齐两边：

| `mode` | 用在什么时候 |
| - | - |
| `side-by-side` | 两边各自给出结果，不算差值。两次运行的题目集合不同、只想并排看时用。 |
| `exact` | 要求两边的题目集合完全相同，不同就返回具名问题。发布门禁这类必须同口径比较的场景用。 |
| `paired` | 按同一道题配对，逐题比较。最常用于“这次改动让哪些题变了”。 |

比较结果会如实给出两边各自的分母，以及没配上对的题、被排除的题和缺失的结果。缺失不会被当成零分或失败。条件不满足时，你会得到一个说明原因的具名错误，而不是一个看起来正常的数字。

先用 `query explain` 检查请求是否合法，再正式运行：

```sh theme={null}
pnpm --silent exec niceeval query explain --request compare.json
```

## 比较结果靠得住的前提

* 两边跑的是同一批评估用例，每条跑的次数也相近。
* 两边只差你想比较的那一个变量，写法见[编写实验](/docs/zh/tutorials/write-experiment#比较两个模型)。
* 看通过率的同时看成本和耗时。通过率高一点、成本却翻倍，不一定值得换。

单次运行结果的读法见[查看运行结果](/docs/zh/tutorials/viewing-results)。


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.