debug_bm25.py 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. # -*- coding: utf-8 -*-
  2. """调试 BM25RAG 的 retrieve 方法"""
  3. import sys
  4. import os
  5. sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
  6. from bdirag.document_processor import Document
  7. from bdirag.rag_methods.bm25_rag import BM25RAG
  8. # 创建测试文档
  9. doc = Document(
  10. page_content="""XX市第一人民医院医疗设备招标公告
  11. 项目名称:XX市第一人民医院彩色多普勒超声诊断仪采购项目
  12. 项目编号:XX-ZB-2024-001
  13. 预算金额:500万元
  14. 采购内容:彩色多普勒超声诊断仪 1台
  15. 投标人资格要求:
  16. 1. 具有独立承担民事责任的能力
  17. 2. 具有有效的医疗器械经营许可证
  18. 3. 近三年内无不良经营记录
  19. 4. 投标保证金:人民币5万元整
  20. 技术需求:
  21. 1. 彩色多普勒超声诊断仪技术参数
  22. - 探头配置:腹部凸阵探头、高频线阵探头、心脏相控阵探头
  23. - 显示屏:≥19英寸高清液晶显示器
  24. - 质保期:整机质保三年
  25. 2. 交货时间:合同签订后60天内交货
  26. 3. 交货地点:XX市第一人民医院设备科
  27. 评标方法:采用综合评分法
  28. - 技术部分:60分
  29. - 商务部分:30分
  30. - 价格部分:10分
  31. 付款方式:合同签订后支付30%,交货验收合格后支付65%,质保期满后支付5%
  32. 投标截止时间:2024年12月31日上午9:30
  33. 开标时间:同投标截止时间
  34. 投标文件递交地点:XX市公共资源交易中心""",
  35. metadata={"title": "Test"}
  36. )
  37. # 初始化 BM25RAG
  38. print("初始化 BM25RAG...")
  39. bm25_rag = BM25RAG()
  40. bm25_rag.index_documents([doc])
  41. print(f"索引构建完成,文档数: {len(bm25_rag._all_documents)}")
  42. # 测试查询
  43. test_queries = [
  44. "预算金额",
  45. "投标保证金",
  46. "质保期",
  47. "评标方法",
  48. ]
  49. for query in test_queries:
  50. print(f"\n{'='*60}")
  51. print(f"查询: {query}")
  52. print(f"{'='*60}")
  53. # 查看 tokenize 结果
  54. from bdirag.rag_methods.tokenization import bm25_tokenize
  55. query_tokens = bm25_tokenize(query)
  56. print(f"查询分词: {query_tokens}")
  57. # 检查 BM25 得分
  58. if bm25_rag.bm25 is not None:
  59. scores = bm25_rag.bm25.get_scores(query_tokens)
  60. print(f"BM25 原始得分: {scores}")
  61. print(f"最大得分: {max(scores) if len(scores) > 0 else 0:.4f}")
  62. # 执行检索
  63. results = bm25_rag.retrieve(query, k=3)
  64. print(f"召回 {len(results)} 个结果")
  65. for i, (doc, score) in enumerate(results, 1):
  66. print(f" [{i}] Score: {score:.4f}")
  67. print(f" Content: {doc.page_content[:100]}...")