# Haystack AutoMergingRetriever：多个子段命中后返回父章节，检查阈值与来源归属

已运行真实Haystack AutoMergingRetriever：0.5返回P-A/B1，0.8保留四个子段，threshold=1被拒绝；使用原创内存Document，未调用embedding或生成模型。

## 运行

在本目录使用独立虚拟环境并安装requirements.txt；脚本结果写入results。

```sh
python reference/audit.py
python reference/run_sdk.py
```

fixtures是原创输入与故意失败样本；作者真值、离线合成provider和实际SDK记录各自标明，不是模型正确率。需要真实模型/账号/GPU的步骤按正文另行授权运行。

## 1. 建立清楚的父子ID

P-A与P-B各有4个子段，命中A1/A2/A3/B1。先画清楚属于哪份父文档，不能把跨文档命中数相加。

## 2. 复算命中占比

audit.py得到P-A为3/4、P-B为1/4，并比较0.5与0.8阈值。该表是作者参考，等于阈值时的行为还应以安装版Haystack代码核对。

## 3. 保存父文档及层级元数据

使用HierarchicalDocumentSplitter或明确的__parent_id/__children_ids元数据，把完整父段写入DocumentStore。只索引子段而没存父段会无法回取。

## 4. 执行AutoMergingRetriever

将实际子段检索结果传给AutoMergingRetriever，记录其返回父段或子段的真实ID。不要把作者比率表当Retriever输出。

## 5. 改变阈值重跑同一命中集

固定hits，分别设置0.5和0.8。比较是否把A系列替换成P-A，B1应仍保留自身，不凭空带入P-B全部内容。

## 6. 检查层级边界与引用

从每个返回段回读原parent/source，不允许跨文档串接。negative中的A1/B1/B2不能共同达到P-A合并条件。

## 7. 交付检索前后映射

保存原命中、阈值、真实返回ID与内容，以及父子元数据。模型生成答案是后续环节，合并成功不证明答案引用正确。

## 官方依据

- Haystack 官方文档或源码：https://docs.haystack.deepset.ai/docs/automergingretriever
