> ## Content Index
> Fetch the complete content index at: https://www.hubwiz.com/blog/llms.txt
> Use this file to discover other available public pages before exploring further.

# 智能体说"搞定了"，数据库不同意：ThinkingBox 用终态给 Agent 打分
- URL: https://www.hubwiz.com/blog/agent-said-done-database-disagreed/
- Published: 2026-10-14T17:10:04.000Z
- Updated: 2026-10-14T17:14:42.000Z
- Description: 一个退款工单，9 次工具调用全部合规，数据库终态却是错的。微软 ThinkingBox 用"终态 + 重复 20 次"重新定义智能体评测：121,680 次有效试验中，近八成失败的模型其实"看起来像成功"。本文完整编译：pass@1 / pass@20 / 20/20 的区别、一致性成本，以及失败特征。
- Author: admin
- Tags: AI Agent, 智能体评测, MCP, 可靠性, 基准测试

**一句话结论**：判断一个智能体是否真的完成了工作，**不要看它说了什么、也不要只数它调用了多少工具——要看它留下的数据库终态**。而且，"能做对一次"和"每次都能做对"是两回事。微软与 Hugging Face 联合发布的 **ThinkingBox**，在隔离沙箱里用**可执行检查（executable checks）**核对终态与副作用，并把每个任务**重复 20 次**，专门测量这个差距。

本文完整编译自 Microsoft × Hugging Face 联合博客《The Agent Said It Was Done. The Database Disagreed.》（2026-10-03），并做中文整理。

---

## 一、一个"看起来完成"的工单

一位顾客来信：她 **745 美元**的厨房电器，在纳什维尔配送中心卡在快递"异常"状态，**比预计送达日期晚了 15 天**。

AI 智能体做了看似仔细的工作——**9 次工具调用**：拉订单、查物流、查客户档案、**两次**检索退款政策、确认没有已有工单、创建工单、记录时间线，并且正确读懂政策：她的账户分层**确实不符合**延迟配送补偿条件。

然后它把工单标记为"已解决"，回复顾客："既然您的问题已解决，还有什么可以帮您？"

**两件事错了。** 第一，承运商的异常状态仍然打开，而要求的工作流终态本应是 **"挂起（hold）"**——等待异常解决。第二，顾客实际上从未得到一个真正的答复。

一个只看"工具调用形态"的评估器会看到 9 次格式规范的调用；一个只检查"是否写入了数据库"的评估器也会通过。**但数据库不同意。** 那个可执行检查只查一个字段——工单状态是 `solved`（已解决），而要求的终态是 `hold`（挂起）——就这么失败了。

![ThinkingBox 在隔离的 MCP 工具会话中运行智能体，然后对其留下的终态与副作用打分](https://www.hubwiz.com/blog/content/images/2026/10/img_a13e8e1766fae8c80eee5abbd6675f3d.png)

*图 1：ThinkingBox 在隔离的 MCP 工具会话中运行智能体，然后对后端终态与副作用打分（来自 ThinkingBox 论文 arXiv:2608.19741）。*

## 二、工具调用不是结果：67% 的失败"看着像成功"

文章的核心观点：**最终回答和格式合法的工具调用都只是代理指标（proxies）**。智能体可以听起来完全正确，却写入了错误的值、改错了记录，或者多出一个副作用。**只有它留下的记录才能给出答案。**

差距有多大？在一组覆盖 **12 个 LLM、121,680 次有效试验**的公共消融实验里：

- **79,853 次尝试**没有通过可执行检查；
- 这些失败中，**67.24%** 仍然"干净收尾"——调用了改变状态的工具、且没有报告任何最终工具错误；
- 可执行检查在这些尝试中查出：**77.61%** 存在字段值错误、**43.30%** 存在非预期的额外副作用、**25.36%** 缺少必需的副作用（这些发现之间有重叠）。

> **轨迹是一种主张（claim）。数据库状态才是证据（evidence）。重复运行才是信任测试（trust test）。**

## 三、一次成功不等于可靠：pass@1、pass@20 与 observed 20/20

一个能把退款处理对一次、接下来四次都搞错的智能体，不是一个能用的退款智能体。所以 ThinkingBox 让**每个任务独立运行 20 次，每次都从完全一致的干净后端开始**，并报告三个不同的数字：

| 指标                 | 它测量什么              | 它回答的问题            |
| ------------------ | ------------------ | ----------------- |
| **pass@1**         | 所有尝试中成功的比例         | 它通常表现如何？          |
| **pass@20**        | 20 次里至少成功一次的任务比例   | 它**有没有可能**做到？（广度） |
| **Observed 20/20** | 20 次**全部**通过的实测任务数 | 它**是否总是**正确？      |

文章强调：这里的 20/20 是**字面计数**——在 507 个任务里真正 20 次全过的数量，没有估计量、没有平滑。

## 四、先看熟悉的榜单：pass@1

下表是各模型按领域拆分的 pass@1（单次尝试得分估计），这也是大多数榜单会发布的数字：

| 模型                | 零售 (98)   | 车险 (100) | 旅行 (104)  | 数字银行 (104) | 咨询 (101) | 总体 (507)  |
| ----------------- | --------- | -------- | --------- | ---------- | -------- | --------- |
| **闭源模型**          |           |          |           |            |          |           |
| Claude Opus 5.5   | 80.97     | 68.40    | 54.28     | 71.25      | 61.58    | **67.16** |
| Claude Opus 5     | 80.71     | 65.80    | 49.95     | 70.62      | 66.19    | 66.50     |
| GPT-5.4           | 76.33     | 62.65    | **68.12** | 65.34      | 54.60    | 65.36     |
| GPT-5.6 Sol       | 67.65     | 65.30    | 60.34     | 59.09      | 57.52    | 61.91     |
| Claude Sonnet 4.6 | 72.35     | 54.40    | 58.94     | 56.39      | 54.31    | 59.19     |
| GPT-6 Astra       | 71.73     | 46.55    | 55.87     | 60.87      | 56.83    | 58.31     |
| GPT-5.2           | 70.20     | 22.40    | 53.70     | 51.15      | 34.06    | 46.28     |
| Claude Opus 4.6   | 68.62     | 8.30     | 21.11     | 35.67      | 27.82    | 32.09     |
| o3-pro            | 37.70     | 2.95     | 17.31     | 24.28      | 14.60    | 19.31     |
| Grok-4.3          | 43.93     | 2.60     | 15.14     | 1.78       | 9.55     | 14.38     |
| **开源权重模型**        |           |          |           |            |          |           |
| Kimi-K3           | **82.24** | 50.80    | 61.83     | 41.35      | 51.63    | 57.37     |
| Qwen3.8-27B       | 64.03     | 47.85    | 53.41     | 47.88      | 45.69    | 51.70     |
| DeepSeek-V4-Pro   | 68.21     | 29.65    | 43.13     | 44.86      | 31.04    | 43.26     |
| Kimi-K2.6         | 53.72     | 24.50    | 39.52     | 33.65      | 37.33    | 37.66     |
| GLM-5.1           | 58.67     | 25.70    | 35.43     | 13.27      | 34.06    | 33.19     |
| Qwen3.6-27B       | 43.11     | 29.00    | 46.39     | 27.84      | 18.37    | 32.94     |
| Qwen3.5-9B        | 19.90     | 0.70     | 4.71      | 1.15       | 2.33     | 5.65      |
| Mistral-Large-3   | 11.28     | 1.30     | 8.99      | 1.15       | 0.74     | 4.66      |

Claude Opus 5.5 以 67.16% 总体领先；开源权重里 **Kimi-K3 最强**，57.37%，与 GPT-6 Astra 只差不到一个点。**领域差异同样重要**：Claude Opus 4.6 在零售上拿到 68.62%，在车险上只有 8.30%。

## 五、关键问题：剩多少分能活下来？

把每个模型的 507 个任务跑满 20 次，看单次得分里**有多少能活下来**：

![每个模型的单次得分有多少能扛过 20 次重复](https://www.hubwiz.com/blog/content/images/2026/10/img_69fb9c7a209bc695c2a4ec7d19521434.png)

*图 2：每个模型的单次得分能扛住多少次重复。*

- 只有三个模型保住了大部分 pass@1：**GPT-6 Astra 保留 78%**，**Claude Opus 5.5 与 Claude Opus 5 各保留 71%**；
- 另一端，**GLM-5.1、Kimi-K2.6、DeepSeek-V4-Pro 都只剩约 8%**。

**"能做一次"和"每次都能"的差距，就是整篇文章的故事。**

### 广度与一致性会分叉

![广度与一致性互相分离](https://www.hubwiz.com/blog/content/images/2026/10/img_f036450493222873f4f748849441e4c0.png)

*图 3：广度与一致性拉开差距（18 个模型展示 12 个，低于 33% pass@1 的 6 个省略）。*

**Kimi-K3 是覆盖面最广的模型**：至少在 20 次里解出一次的任务占 **93.89%**（476/507），只有 31 个任务完全解决不了；零售工作流上以 **82.24%** 的 pass@1 领先所有闭源模型。

**但它也是一致性最差的之一**：507 个任务里只有 **68 个（13.41%）** 在 20 次尝试中全部成功。

**Claude Opus 5 恰好相反**：解出的任务更少（至少一次 79.09%，106 个任务完全失败），但**47.53%** 的任务在**每一次**尝试中都完成。

**新模型也不能自动修复这个问题**：Claude Opus 5.5 的平均分比 Opus 5 高（67.16% vs 66.50%），至少解出一次的任务也更多，但**20 次全过的任务数完全一样：241 个**。半个点的头部精度，没有换来任何额外的可靠性。

- Kimi-K3 比 Opus 5 多解出 **75 个**"至少一次"的任务；
- Opus 5 比 Kimi-K3 多**稳定完成 173 个**任务。

**如果你的工作要触碰真实记录，pass@20 是错的列。** 这就是文章给出的选型建议。

## 六、一致性要多少钱：两种成本口径

能力对比通常止步于分数。对真正要部署的人来说，相关问题是：**一个"成功的工作单元"要花多少钱。**

**口径一：每次成功尝试的成本（cost per successful task attempt）**

> 成本 = 507 次尝试（每任务一次）的估算花费 ÷ (507 × pass@1)

例：GPT-5.4 跑 507 次尝试花 **$43.49**，pass@1 = 65.36%，则 $43.49 ÷ (507 × 0.6536) = **$0.131/次成功**。

**Pareto 成本前沿**：如果一个模型在"不更贵且至少一样准"上没有对手，它就在前沿上。只有三个模型入选：

- **GPT-5.6 Sol**：每次成功成本最低，**$0.127**；
- **GPT-5.4**：多花 **$0.004**，pass@1 提高 3.45 个百分点；
- **Claude Opus 5.5**：每次成功 **$0.276**，再添 1.80 个百分点。

清晰的案例：**Claude Opus 5**（$0.475、66.50%）比 **Opus 5.5**（$0.276、67.16%）**又贵又差**，直接被支配。

![每次成功尝试的成本 vs. pass@1](https://www.hubwiz.com/blog/content/images/2026/10/img_9771a50977d6e826bd0a62b49f5652a8.png)

*图 4：每个成功尝试的成本对 pass@1，带圈的是 Pareto 成本前沿模型。*

**口径二：每个"可靠任务"的成本（cost per dependable task）**

> 成本 = 20 轮完整 507 次的估算花费 ÷ 20 次全过的任务数

例：GPT-6 Astra 一轮 $86.03 × 20 = **$1,720.60**，231 个任务 20/20 全过，则 $1,720.60 ÷ 231 = **$7.45/个可靠任务**。

| 模型                | 20/20 任务数    | 20 轮估算成本  | 单个可靠任务成本  |
| ----------------- | ------------ | --------- | --------- |
| GPT-5.4           | 128 (25.25%) | $869.80   | **$6.80** |
| GPT-6 Astra       | 231 (45.56%) | $1,720.60 | $7.45     |
| Claude Opus 5.5   | 241 (47.53%) | $1,880.77 | $7.80     |
| GPT-5.6 Sol       | 82 (16.17%)  | $800.00   | $9.76     |
| Claude Opus 5     | 241 (47.53%) | $3,206.00 | $13.30    |
| Claude Sonnet 4.6 | 102 (20.12%) | $1,587.60 | $15.56    |
| GPT-5.2           | 44 (8.68%)   | $878.00   | $19.95    |
| Kimi-K3           | 68 (13.41%)  | $1,406.40 | $20.68    |
| Qwen3.8-27B       | 38 (7.50%)   | $925.80   | $24.36    |

**结论**：三者互不支配——每多一个"可靠任务"都要多花钱。GPT-5.6 Sol 的单次成功最便宜（$0.127），但要得到一个可靠任务却要 $9.76。**"用最便宜的方式拿到一个正确答案"和"拿到一个可靠的答案"完全是两码事。**

## 七、失败特征：八成失败出在"工具处理"，不是推理

每个失败轨迹会被分配一个确定性的诊断签名。最可操作的结论：**大约五分之四的失败是工具处理问题，而不是推理问题。**

| 失败签名             | 占失败比例     |
| ---------------- | --------- |
| 工具使用（Tool usage） | **79.9%** |
| 状态更新错误           | 10.3%     |
| 用户请求未真正解决        | 7.0%      |
| 没有执行改变状态的操作      | 2.9%      |

*这是各模型占比的未加权平均，是"可观察标签"，不是唯一的因果解释。*

实际模式很简单：**智能体通常能走到"尝试执行工作流"这一步，然后栽在工具错误、前置条件失败或空查询上——在成为模型问题之前，它首先是一个重试与错误恢复问题。**

**给部署者的建议：**

- 把 **20/20 率当作设计输入，而不是判决书**。生产里可以拿到的同一个信号是：**在提交之前检查终态，而不是模型对终态的总结**；
- 对工具错误与系统错误分类，让重试只针对**可恢复**的那些；
- 把工具面缩到工作流真正需要的范围；
- 对**不能廉价回滚**的变更，强制人工批准。

## 八、ThinkingBox 怎么工作

ThinkingBox 是智能体沙箱，ThinkingBox-Bench 是评估用的数据集基准。每个任务定义：**起始后端状态、用户目标、可用的 MCP 工具、领域政策、以及针对终态的可执行检查**。一个模拟用户持有私有上下文（订单号、偏好、出生日期），只在被问到时才提供。

- **每次尝试都获得隔离的 MCP 会话，状态全新初始化**；同一任务两次尝试绝不共享数据库行或工具缓存——这是 20 次重复对比有意义的前提；
- 结束时，**副作用提取器**推导出"实际发生了什么变化"，由**确定性判官**与要求的终态对比：只要产生正确结果，任何轨迹都接受；错误、缺失或多余的副作用都拒绝；
- 对没有干净数据库值的需求（例如"智能体有没有说明这不保证？"），用一条**窄口径的二元评分问题**处理语义。**507 个任务里 477 个只看状态评分，30 个额外加回答评分**；
- **信任边界**：模型只能看到任务、对话和工具 schema；黄金状态、断言、评分内部逻辑与凭据都留在评测方。

![沙箱循环：隔离工具会话、终态数据库、副作用与可执行判官](https://www.hubwiz.com/blog/content/images/2026/10/img_fca8d3147bdc8b0ce0a698b80484d09d.png)

*图 5：沙箱循环（对应图 1 的 Panel A）——隔离工具会话、终态数据库、副作用、可执行判官。*

## 九、自己跑一遍

ThinkingBox 已上 Hugging Face：[harness](https://huggingface.co/docs/openenv/environments/thinkingbox?ref=hubwiz.com) 与[数据集](https://huggingface.co/datasets/microsoft/ThinkingBox-Bench?ref=hubwiz.com)都可获取。每种任务走 [OpenEnv](https://github.com/huggingface/OpenEnv/tree/main/envs/thinkingbox%5Fenv?ref=hubwiz.com) 接口，每个完整 episode 返回二元通过/失败奖励。

**环境要求**：Linux 或 WSL、Python 3.11+、[uv](https://docs.astral.sh/uv/?ref=hubwiz.com)、Docker；还需要一个固定在指定 release 的 [thinkingbox-data](https://github.com/microsoft/thinkingbox-data?ref=hubwiz.com) 检出，以及智能体、模拟用户、判官三类模型端点（留一个端点同时服务三个角色是最省事的起步方式）。

```bash
# 1. OpenEnv + ThinkingBox 环境
git clone https://github.com/huggingface/OpenEnv
cd OpenEnv
uv sync --project envs/thinkingbox_env --frozen
# 2. 可执行基准，固定 release
git clone https://github.com/microsoft/thinkingbox-data
git -C thinkingbox-data checkout thinkingbox-bench-v1.0
# 3. ThinkingBox CLI（提供 tb 命令）
uv tool install "thinkingbox @ git+https://github.com/microsoft/thinkingbox"

```

```bash
# 启动 Typesense 30.1
mkdir -p .typesense-data
docker run --rm -d --name thinkingbox-typesense \
  -p 8108:8108 \
  -v "$PWD/.typesense-data:/data" \
  typesense/typesense:30.1 \
  --data-dir /data --api-key=Fake --enable-cors
until curl -fsS http://127.0.0.1:8108/health; do sleep 1; done

# 启动 Session Proxy 与 MCP servers
cd OpenEnv
tb mcp-start --host 127.0.0.1 --port 7111 \
  --servers "$PWD/thinkingbox-data/servers/servers.yaml"
curl -fsS http://127.0.0.1:7111/health

```

```bash
# 启动 OpenEnv server（需要一个指定三个模型的 ThinkingBox YAML 配置）
OPENENV_TB_CONFIG="$PWD/thinkingbox.yaml" \
uv run --project envs/thinkingbox_env --frozen server

# 就绪检查（返回 503 表示数据/配置/代理检查未通过）
curl -sS http://127.0.0.1:8000/ready

```

```bash
# 给一个真实 episode 打分
echo "- sandbox_external_retail_group1.py:test_case_ST002_001" > one_task.yaml
uv run --project envs/thinkingbox_env thinkingbox-eval \
  one_task.yaml \
  --config "$PWD/thinkingbox.yaml" \
  --output results.jsonl \
  --errors-output errors.jsonl \
  --repeat 1 --message-timeout 1800

```

运行会被**固定框架 commit、固定数据 release 和 bundle hash** 约束，因此"标准结果"是可验证的，而不是口头声称的。

## 十、下一步：环境比榜单更有用

作者说，这项工作最有价值的部分不是那张 pass@1 榜单，而是**这个环境**。如果你正在评估会触碰真实记录的智能体：

- **检查一次失败**：找一个"干净收尾但仍然失败"的轨迹，看看数据库里到底改了什么——它会重塑你对自家评测的认知；
- **用自己的模型复现一个任务**：通过 OpenEnv 跑通；
- **报告重复指标，并定义清楚**：选一个你的场景能接受的 k，说明你报的是 best-of-k 还是 every-of-k，以及怎么算的。

> 免责声明：公开基准里的每个任务都是**合成重建**——工作流和政策模仿真实的智能体企业模式，顾客不是真人。ThinkingBox 代码为 MIT 许可，基准数据为 CDLA-Permissive-2.0，OpenEnv 环境为 BSD-3-Clause。

---

## 参考来源

- Microsoft × Hugging Face：《The Agent Said It Was Done. The Database Disagreed.》（2026-10-03）https://huggingface.co/blog/microsoft/thinkingbox
- 论文：https://arxiv.org/abs/2608.19741
- 数据集：https://huggingface.co/datasets/microsoft/ThinkingBox-Bench
- 框架：https://github.com/microsoft/thinkingbox

## 延伸阅读（本站）

- [Agent / MCP 完全指南](https://www.hubwiz.com/blog/agent-stack/)
- [AI 智能体的验证器](https://www.hubwiz.com/blog/ai-agent-s-verifier/)
- [AI Agent 沙箱全景（2026）](https://www.hubwiz.com/blog/ai-agent-sandbox-landscape-2026/)
- [多智能体编程为什么会失败](https://www.hubwiz.com/blog/why-multi-agent-coding-fails/)

*本文由汇智网编译整理，转载请注明出处。*