MultiHop-RAG
MultiHopRagBenchmark 接入官方 MultiHop-RAG benchmark。
MultiHop-RAG 适合评估需要跨多个证据片段回答的问题。它可以用来比较 vector-only recipe、Heta graph recipe、rewrite recipe 和 multihop recipe 在复杂问题上的差异。
Data Layout
MultiHop-RAG 是 corpus-level benchmark:
因此它只需要建一次 KB:
Usage
使用本地文件:
from heta_framework.evaluation import BenchmarkRunner, MultiHopRagBenchmark
benchmark = MultiHopRagBenchmark(
corpus_path="corpus.json",
queries_path="MultiHopRAG.json",
)
result = await BenchmarkRunner().run(
benchmark=benchmark,
recipe=recipe,
knowledge_base_name="multihop_rag_graph_v1",
query_modes=("heta_multihop_search",),
)
也可以允许 adapter 下载官方文件:
下载文件会放在 BenchmarkWorkspace.cache_dir / "multihop_rag" 下。
Document Mapping
corpus.json 中每篇文章会变成一个 BenchmarkDocument:
文档内容会包含:
Runner 写入 ObjectStore 后的 raw key:
Case Mapping
MultiHopRAG.json 中每条 query 会变成一个 BenchmarkCase:
case_id
multihop_rag_{index}
query
row["query"]
expected.answers
row["answer"]
labels.question_type
row["question_type"]
evidence_list 中每条 evidence 会变成 BenchmarkEvidence。
Heta query result 的 source.document_id 是解析后的内容 ID,不一定等于 benchmark article id。因此 MultiHop-RAG adapter 使用 raw source_key 做 evidence locator:
BenchmarkEvidence(
reference_id=document_id,
locator={
"source_key": "raw/benchmarks/multihop_rag/all/...txt",
},
text=fact,
metadata={
"document_id": document_id,
"title": title,
"source": source,
"url": url,
},
)
这样 EvidenceRecallAtK 可以通过 query result 的 source.object_key 或 source.source_key 判断是否命中证据来源。
Default Evaluators
默认 evaluators:
推荐对比的 query modes:
也可以用同一个 benchmark 对比不同 recipe:
Sources
官方资源: