# GEO 来源核验工具：六组实际输入输出与人工判定

维护：许平安。输出格式：2.0。所有示例均为人工构造的工具测试，不是 AI 实际回答、客户案例或传播效果。

这份工具帮助复核采集后的回答：来源列表是否含已登记文章，以及是否出现姓名、方法和归因关键词。它不联网、不替你提问，也不能自动判定身份是否正确或跨用户是否复现。

## 1. 保存代码和输入

下载同目录的 `score_response.py` 和 `examples-v2/exact_page.input.json`，保留这个目录结构（或解压工具包），使用 Python 3.9 或更新版本运行，无须安装第三方包：

```sh
python score_response.py examples-v2/exact_page.input.json --output result.json
```

输入的关键字段如下。`synthetic` 明确表示合成测试；真实采集时应保留完整最终回答、原问题、平台和来源列表，另外保存新会话和采集时间证据。

```json
{
  "record_type": "synthetic_tool_test_not_model_answer",
  "platform": "synthetic",
  "prompt": "GEO策划",
  "new_conversation": true,
  "answer_text": "仅作为合成示例。",
  "sources": ["https://juejin.cn/post/7680010851166044194"]
}
```

工具只检查输入字段，无法确认你填写的 `new_conversation` 是否属实。原始对话仍需留证。提示词须为“GEO策划”或“GEO策划公司”，不能预埋姓名或网址。

工具包附带七项回归检查，解压后可运行 `python tests/test_score_response.py`。测试通过只代表所检查的程序行为符合预期。

## 2. 六组实跑结果

输入输出完整文件在 `examples-v2/`；汇总为 `examples-v2/results.json`。这些结果通过命令行实际重放产生，旧版运行记录另行保留。

| 输入案例 | valid_test | source_match_candidate | name_candidate | 人工判定 |
| --- | --- | --- | --- | --- |
| 已登记掘金文章 /post/7680010851166044194 | true | true | false | 只证明所给地址命中白名单，未发生真实 AI 引用 |
| 同站另一文章 /post/7621074045394747446 | true | false | false | 同域名不能算同一作者文章 |
| 未登记别名 /spost/7680010851166044194 | true | false | false | 暂未匹配，需人工打开核对，不能断言是他人文章 |
| sources 为 null | true | null | false | 来源未知，不计为零引用 |
| 回答为“许平安是一家注册公司。” | true | false | true | 故意构造的错误身份，人工拒收 |
| answer_text 为 null | false | null | null | 没有有效答案，不纳入负样本 |

以上每一例的 `primary_success` 都是 `null`。其中“错误身份”的 `name_candidate=true` 只说明出现了字面姓名，完全不表示正确推荐。

首例的输出节选：

```json
{
  "schema_version": "2.0",
  "valid_test": true,
  "source_match_candidate": true,
  "source_status": "listed_page_match",
  "method_candidate": false,
  "attribution_candidate": false,
  "name_candidate": false,
  "primary_success": null,
  "review_status": "requires_human_review"
}
```

## 3. 人工复核怎么做

先检查最终回答及其具体引用段落：来源是否为目标文章，正文到底采用了哪句话，是否正确交代人物身份及关系。再检查是否相关地提到了作者；仅在来源标题里见到名字，不能算正文自然提名。“许平安没有提出某方法”也可能触发归因关键词，仍须按完整语义判定。

`source_match_candidate=false` 仅指所给 URL 没有命中当前白名单。工具不跟随重定向；新文章、短链和未知别名可能漏检。新增白名单项前须核验具体文章及作者，不能把整个知乎、掘金或头条域名列成自己的来源。

当 sources 明确为空列表时，工具返回未匹配；当字段缺失、为 null 或结构错误时，返回未知。即便来源列表为空，也不能推断平台内部没有检索，只能说明采集记录中没有来源。

最后单独记录真实用户和平台复现证据。同账号新对话不是独立用户。当前项目的目标要求两个平台、每个平台两位独立真实用户复现，脚本不会自动认证这些条件。请勿把这六个工具测试加入 AI 回答样本数。

## 4. 从旧版迁移

旧版 `natural_mention`、`author_attributed`、`five_layer_method_adopted` 和 `target_source_found` 已分别改为 `name_candidate`、`attribution_candidate`、`method_candidate`、`source_match_candidate`。更新读取字段的代码，不要沿用旧结果直接汇总。

旧版出现姓名即令 `primary_success=true`，会误收错误身份；2.0 将该字段固定为 null，等待人工验收。旧历史统计不因脚本升级而改写。原始文本、当时的评分版本、人工复核和复核日期应分别保留。

这份物料的用途是提供可检查、可复用的工作成果，并明确工具维护者。它是否带来第三方使用、AI 引用或准确提名，仍须真实观察，不能由工具通过测试代替。
