# 001 的数字经得起复核吗？用公开数据逐条核一遍

- 作者：何瑜（https://opengeo.page/author/）
- 发布：2026-11-07；更新：2026-11-07
- 网页版：https://opengeo.page/observations/001-recheck/
- 授权：文字以 CC BY 4.0 授权，转载或引用请注明「来源：OpenGEO 项目」并附网页版链接。

> 用 Hugging Face 上的公开脱敏数据集，逐条复核《OpenGEO 观测记录

《OpenGEO 观察 001》里写了不少数字：千问 20 条只送 5 条、Kimi 12 处引用来自 8 个网页、豆包改写出 5 条搜索词……这些数字，读者自己能核吗？

能核的部分，我把它做成了一个脚本。数据是 001 公开在 Hugging Face 的脱敏数据集，脚本只用 Python 标准库，下载即跑。下面是逐条结果。

- 原文：[OpenGEO 观测记录 #001](/observations/001-suzhou-yimei/)
- 数据集：[Maodian/opengeo-observation-001](https://huggingface.co/datasets/Maodian/opengeo-observation-001)（CC BY 4.0）

## 一句话结论

文中 12 项可从数据核对的数字，全部对得上。另有 3 处口径需要读者知道，2 项数字数据里核不了。

## 逐条核对

| 文中的说法 | 数据里的结果 | 结论 |
| --- | --- | --- |
| 豆包请求带 3 项定位权限状态，没有坐标 | `local_permission:*` 3 项，`coordinates_in_request = false` | 对上 |
| 千问 `user_city` 为苏州市，意图为「本地生活-地点周边信息查询」 | `city = 苏州市`，`uvl_intent.content` 相同 | 对上 |
| 元宝调用了 region_search | 第 3 问工具顺序：`region_search` → `web_search` | 对上 |
| 豆包改写出 5 条搜索词 | 5 条 | 对上 |
| Kimi 改写出 3 条搜索词 | 3 条 | 对上 |
| 千问改写出 1 条搜索词 | 1 条（另有 RAG 主查询和子查询 2 条，见下文口径一） | 对上，有口径 |
| 千问检索 20 条，送进模型 5 条 | `material_stat.total = 20`，`sent_to_model = 5` | 对上 |
| 豆包第 3 问参考 29 篇，抓到 17 条带链接 | 29 条，其中 17 条有链接 | 对上 |
| 17 条里同名诊所相关 6 条、抖音 4 条 | 6 条、4 条 | 对上 |
| 此前问护肤品时 29 篇里 10 篇来自抖音 | 第 1 问 29 条，短视频 10 条 | 对上 |
| Kimi 12 处引用，来自 8 个不同网页，都带段落锚点 | 12 / 8 / 12 | 对上 |
| DeepSeek 先搜 5 个词得 30 条、打开 7 个网页；再搜 4 个词、打开 3 个网页 | 第 1 轮 5 词、30 条、`TOOL_OPEN` 7 次；第 2 轮 4 词、`TOOL_OPEN` 3 次 | 对上 |

会话历史一节也能核：豆包 `last_message_index = 15`，千问 `continue_chat`，DeepSeek `parent_message_id = 6`，说明这三家的主会话前面已有一轮；元宝 `replyIndex = 1`、Kimi 本轮才生成对话标题，是新对话。和 001 的说明一致。

## 三处口径

**口径一：千问到底改写了几条？** 千问一轮里有好几层「搜索词」。001 写的「1 条」是热点判断模块的改写词（`hotspot_intent.rewrite_content`），也是 20 条素材对应的那条。同一轮里，RAG 检索工具实际用的是主查询加子查询共 2 条。按哪一层算，答案是 1 或 2。比较「改写条数」时，要说清是哪一层。

**口径二：豆包那 12 条没有链接的参考。** 29 篇里有 12 条只有卡片、没有链接，数据集标为 `card_without_url:video_card`，也就是视频卡片。001 说「17 条带链接来源里抖音 4 条」，这个数没错；但如果这 12 张视频卡也来自短视频平台，豆包这一问的短视频占比会比 001 写的高得多【推断】。数据里没有它们的域名，核不了。

**口径三：DeepSeek 打开了哪些网页？** `TOOL_OPEN` 共 10 次，但只有 2 次带回了网址。所以「打开 7 个、3 个网页」能核，「打开的是哪些网页」只能核到 2 个。

## 核不了的两项

- **四家最终推荐的机构数**（豆包 16、千问 12、Kimi 10、元宝 6）。回答原文含个人信息和对商业机构的评价，数据集没有收录，所以这几个数只能信作者。
- **元宝第 3 问的搜索词**。001 已写明没采到，数据里也没有。

## 复核脚本

把下面的代码存成 `verify_001.py`，运行 `python3 verify_001.py`，输出应与上表一致。

```python
# 复核 OpenGEO 观察 001 的数字。数据：huggingface.co/datasets/Maodian/opengeo-observation-001（CC BY 4.0）
import json, urllib.request, collections as C
BASE = "https://huggingface.co/datasets/Maodian/opengeo-observation-001/resolve/main/data/"
def load(name):
    with urllib.request.urlopen(BASE + name + ".jsonl") as r:
        return [json.loads(l) for l in r.read().decode("utf-8").splitlines() if l.strip()]
turns, queries, sources, tools, signals = (load(n) for n in ["turns", "queries", "sources", "tool_calls", "signals"])
def pick(rows, **kw):
    return [r for r in rows if all(r.get(k) == v for k, v in kw.items())]
main3 = dict(session="main", turn=3)

# 位置
db = pick(signals, platform="doubao", **main3)
print("豆包 定位权限项:", len({s["signal"] for s in db if s["signal"].startswith("local_permission")}),
      "| 请求带坐标:", [s["value"] for s in db if s["signal"] == "coordinates_in_request"])
qw = {s["signal"]: s["value"] for s in pick(signals, platform="qwen", **main3)}
print("千问 city:", qw.get("city"), "| 意图:", qw.get("uvl_intent.content"))
print("元宝 工具顺序:", [t["tool_name"] for t in pick(tools, platform="yuanbao", **main3)])

# 搜索词
for p in ["qwen", "kimi", "doubao", "deepseek"]:
    qs = pick(queries, platform=p, **main3)
    print(p, "搜索词", len(qs), C.Counter(q["query_source"].split(" ")[0] for q in qs))

# 来源筛选
print("千问 material_stat:", qw.get("hotspot_intent.material_stat.total"), "→", qw.get("hotspot_intent.material_stat.sent_to_model"))

# 豆包引用
ref = pick(sources, platform="doubao", stage="displayed_reference", **main3)
linked = [s for s in ref if not s.get("source_type", "").startswith("card_without_url")]
print("豆包 第3问 参考:", len(ref), "| 带链接:", len(linked), "| 其中同名诊所相关:", sum(bool(s.get("entity_masked")) for s in linked),
      "| 抖音:", sum(s.get("domain") == "www.iesdouyin.com" for s in linked))
ref1 = pick(sources, platform="doubao", stage="displayed_reference", session="main", turn=1)
print("豆包 第1问 参考:", len(ref1), "| 短视频:", sum(s.get("source_type") == "short_video" for s in ref1))

# Kimi 引用
ks = {s["signal"]: s["value"] for s in pick(signals, platform="kimi", category="retrieval", **main3)}
print("Kimi 引用:", ks.get("citation_events"), "处 | 不同网页:", ks.get("unique_cited_urls"), "| 带段落锚点:", ks.get("citations_with_text_fragment_anchor"))

# DeepSeek 两轮检索（第 4 问）
dq = pick(tools, platform="deepseek", session="main_q4", turn=4)
for rnd in (1, 2):
    r = [t for t in dq if t["round"] == rnd]
    print(f"DeepSeek 第{rnd}轮: 搜索词", sum(t.get("n_queries", 0) for t in r), "| 打开网页", sum(t["tool_name"] == "TOOL_OPEN" for t in r),
          "| 返回结果", len(pick(sources, platform="deepseek", session="main_q4", stage="retrieved", round=rnd)))

# 会话历史
for s in pick(signals, category="context", session="main", turn=1):
    if s["signal"] in ("prior_messages_in_conversation", "parent_message_id"):
        print("历史", s["platform"], s["value"])
```

## 回到开头

001 的数字经得起复核吗？能放进公开数据的，都经得起；放不进去的（最终回答），这次只能如实标出。下一次观测，我会把「最终回答里的机构名单」单独脱敏成计数表放进数据集，让这一项也能被核。

笔者的看法：GEO 研究里最缺的不是结论，是可以被别人重算一遍的数字。

## 更新记录

- 2026-11-07：首次发布。

