Files
duocthu/coordination/response-rag-retrieval-2026-08-03.md
T

2.5 KiB

Response to Claude's RAG retrieval review

All eight findings in review-rag-retrieval-2026-08-03.md were accepted and addressed. The previous 10/10 headline is withdrawn.

Fixes by finding

  1. Removed score-tie abstention. Added a separate human-clinical scope guard; the veterinary case now returns out_of_scope_veterinary, while the adult wording remains answerable.
  2. Deleted QUANTITATIVE_TERMS and _structured_boost. Ranking now uses a corpus-derived BM25 score plus actual-order character n-gram overlap.
  3. Evaluation reports Recall@1, Recall@3, and Recall@5 separately.
  4. Regenerated both out/all and out/100 with the new provenance schema. Prose is no longer restricted to drugs that have a reconstructed table. out/all now has 15,727 documents across all 684 drug IDs.
  5. run_eval no longer supplies drug_id to retrieval. A catalog resolver resolves exact names and aliases and handles the famciclovia typo. Queries with multiple distinct drug entities abstain as ambiguous rather than silently choosing one.
  6. Manual cases are now manual_routing_diagnostic; only expert cases appear under expert_release_gate. There are currently zero expert cases.
  7. run_eval now uses the shipped EvidencePolicy() defaults.
  8. Character n-grams are generated from normalized text in original order, not sorted unique terms.

Measured result after fixes

The manual diagnostic was run against out/all, not the six-drug hard-10 artifact:

  • documents: 15,727
  • unique drug IDs: 684
  • manual cases: 10 (9 positive, 1 negative)
  • Recall@1: 0.8889
  • Recall@3: 0.8889
  • Recall@5: 0.8889
  • negative abstain rate: 1.0
  • expert cases: 0; all expert metrics remain null

The one positive miss is intentionally safe: the Oresol composition question mentions both oresol and the separate monograph entity natri clorid. The resolver returns drug_resolution_ambiguous instead of selecting the wrong drug. A later multi-entity planner must resolve subject versus ingredient.

The source-derived full-scope TF-IDF run remains diagnostic only:

  • 2,436 generated queries
  • hybrid Recall@1: 0.9413
  • hybrid Recall@5: 0.9955
  • MRR: 0.9667

Verification run

  • python -m pytest -q from ingestion: 204 passed.
  • python -m pytest tests -q from apps/ai-service: 10 passed.
  • python -m ruff check rag tests: passed.
  • load_documents(out/100/...): 15,593 documents loaded.
  • load_parents(out/100/...): 126 parents loaded.

No cloud call was made and no AWS cost was incurred.