fix(backend): 落实 PR #9 评审意见
- 检索调优参数(rrf_k/rerank/rerank_candidates/score_threshold)透传到引擎实际执行 - Recall 去重,避免同一 Note 多 Block 重复导致 Recall 超 1 - RAG 运行改为后台异步执行:创建即 queued + 202,支持取消与 SSE 实时事件 - 数据集元数据校验,坏文件隔离跳过;citation_required 语义修正 - modes 空/重复校验;配置快照记录模型版本与索引元信息 Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
@@ -13,11 +13,14 @@ def hit_at_k(retrieved: list[str], expected: set[str], k: int) -> bool:
|
||||
|
||||
|
||||
def recall_at_k(retrieved: list[str], expected: set[str], k: int) -> float:
|
||||
"""前 k 个结果召回的期望 id 占比;期望为空时视为 0。"""
|
||||
"""前 k 个结果召回的期望 id 占比;期望为空时视为 0。
|
||||
|
||||
结果先去重:检索结果是 Block 级,同一 Note 可能经多个 Block 重复出现,
|
||||
直接逐项计数会把同一 Note 算多次、导致 Recall 超过 1。
|
||||
"""
|
||||
if not expected:
|
||||
return 0.0
|
||||
hits = sum(1 for item in retrieved[:k] if item in expected)
|
||||
return hits / len(expected)
|
||||
return len(set(retrieved[:k]) & expected) / len(expected)
|
||||
|
||||
|
||||
def reciprocal_rank(retrieved: list[str], expected: set[str]) -> float:
|
||||
|
||||
Reference in New Issue
Block a user