quick_test_methods.py 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. # -*- coding: utf-8 -*-
  2. """
  3. 简单测试 BidiRag 的几种无需 embedding 的方法
  4. """
  5. import sys
  6. import os
  7. import time
  8. sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
  9. from bdirag.bidi_rag import BidiRag
  10. # 测试文档
  11. TEST_DOCS = [
  12. """XX市第一人民医院医疗设备招标公告
  13. 项目名称:XX市第一人民医院彩色多普勒超声诊断仪采购项目
  14. 项目编号:XX-ZB-2024-001
  15. 预算金额:500万元
  16. 采购内容:彩色多普勒超声诊断仪 1台
  17. 投标人资格要求:
  18. 1. 具有独立承担民事责任的能力
  19. 2. 具有有效的医疗器械经营许可证
  20. 3. 近三年内无不良经营记录
  21. 4. 投标保证金:人民币5万元整
  22. 技术需求:
  23. 1. 彩色多普勒超声诊断仪技术参数
  24. - 探头配置:腹部凸阵探头、高频线阵探头、心脏相控阵探头
  25. - 显示屏:≥19英寸高清液晶显示器
  26. - 质保期:整机质保三年
  27. 2. 交货时间:合同签订后60天内交货
  28. 3. 交货地点:XX市第一人民医院设备科
  29. 评标方法:采用综合评分法
  30. - 技术部分:60分
  31. - 商务部分:30分
  32. - 价格部分:10分
  33. 付款方式:合同签订后支付30%,交货验收合格后支付65%,质保期满后支付5%
  34. 投标截止时间:2024年12月31日上午9:30""",
  35. """XX市智慧交通系统建设项目招标公告
  36. 项目名称:XX市智慧交通系统建设项目
  37. 项目编号:XX-ZB-2024-002
  38. 招标人:XX市交通运输局
  39. 预算金额:5000万元
  40. 项目内容:
  41. 1. 交通信号控制系统
  42. 2. 视频监控系统
  43. 3. 交通流量监测系统
  44. 4. 数据分析平台
  45. 资质要求:
  46. 1. 电子与智能化工程专业承包二级以上资质
  47. 2. 近三年至少完成2个类似项目业绩
  48. 评标方法:综合评分法
  49. - 技术部分:60分
  50. - 商务部分:40分
  51. 交货时间:合同签订后180天内
  52. 质保期:3年"""
  53. ]
  54. def test_method(method_name):
  55. """测试单个方法"""
  56. print("\n" + "=" * 80)
  57. print("测试方法: " + method_name)
  58. print("=" * 80)
  59. try:
  60. # 初始化
  61. t0 = time.time()
  62. rag = BidiRag(rag_method=method_name)
  63. init_time = time.time() - t0
  64. # 添加文档
  65. t0 = time.time()
  66. rag.add_texts(TEST_DOCS)
  67. add_time = time.time() - t0
  68. # 检索
  69. t0 = time.time()
  70. results = rag.retrieve(query="预算金额", top_k=3, keywords=["预算"])
  71. retrieve_time = time.time() - t0
  72. # 评估
  73. relevant = sum(1 for doc, _ in results if "预算" in doc.page_content)
  74. precision = relevant / len(results) if results else 0
  75. print("初始化时间: {:.2f}s".format(init_time))
  76. print("索引构建时间: {:.2f}s".format(add_time))
  77. print("检索时间: {:.4f}s".format(retrieve_time))
  78. print("召回数量: {}".format(len(results)))
  79. print("精确度: {:.1%}".format(precision))
  80. if results:
  81. print("\n结果预览:")
  82. for i, (doc, score) in enumerate(results[:2], 1):
  83. preview = doc.page_content[:80].replace("\n", " ")
  84. print(" [{}] Score={:.4f} | {}".format(i, score, preview))
  85. return True
  86. except Exception as e:
  87. print("失败: " + str(e))
  88. return False
  89. if __name__ == "__main__":
  90. print("=" * 80)
  91. print("BidiRag - RAG 方法快速测试")
  92. print("=" * 80)
  93. methods = ['bm25', 'tfidf', 'keyword', 'bm25_html_tree']
  94. success_count = 0
  95. for i, method in enumerate(methods, 1):
  96. print("\n[{}/{}] ".format(i, len(methods)), end="")
  97. if test_method(method):
  98. success_count += 1
  99. print("\n\n" + "=" * 80)
  100. print("测试完成! 成功: {}/{}".format(success_count, len(methods)))
  101. print("=" * 80)