test_query_extract_integration.py 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. """
  4. 集成测试QueryRewriteManager.query_extract方法
  5. """
  6. import sys
  7. import os
  8. import time
  9. sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
  10. from foundation.ai.rag.retrieval.query_rewrite import QueryRewriteManager
  11. from foundation.observability.logger.loggering import server_logger as logger
  12. def test_query_extract_with_construction_content():
  13. """
  14. 测试使用施工方案内容的query_extract
  15. """
  16. print("="*60)
  17. print("测试QueryRewriteManager.query_extract方法")
  18. print("="*60)
  19. query_rewrite_manager = QueryRewriteManager()
  20. # 测试数据: 基坑工程
  21. review_content = """(1)应将架桥机随机文件和有关技术资料准备齐全,认真组织安装人员学习阅
  22. 读本方案,并以此为依据结合实际工况及地貌拟定有关安装施工方案。
  23. (2)安装前,应对设备散件进行全面检查、清理,如发现有损伤、腐蚀或其它
  24. 缺陷,应在安装前予以处理,合格后方可安装。
  25. (3)应对架桥机运梁轨道进行如下检查:
  26. 1)架桥机运梁轨道基础应有足够的承压能力,应能满足架桥机运梁平车载重安
  27. 全运行。轨道下部如有支垫是否具有强大的刚性和一定的密度,特殊端部的支垫必
  28. 须采用刚性支垫,严禁使用腐蚀的枕木。
  29. 2)轨道钢轨正面、侧面的不平度不应大于1/1500,全长范围内不应大于10毫
  30. 米。
  31. 3)轨道安装的允许偏差:
  32. ①轨道实际中心线对轨道设计中心线的位置偏移允许偏差为3毫米。
  33. ②轨距允许偏差为±5毫米。
  34. ③轨道纵向不平度应小于 1/1500,且全行程不超过10毫米。
  35. ④同一断面上两轨道的标高相对偏差不超过5毫米。
  36. 4)轨道接头应符合下列要求:
  37. ①接头左、右、上三面错位不应大于2毫米。
  38. ②两平行轨道接口的位置应错开,其错开距离不应等于架桥机运梁平车前后车
  39. 轮的轮距。
  40. 第19页
  41. 四川公路桥梁建设集团有限公司 镇广C4项目经理部JQ220t-40m架桥机安装及拆除专项施工方案
  42. ③接头间隙应为1~2毫米,伸缩缝接头间隙应符合设计要求,其偏差不应大于
  43. ±1毫米。
  44. ④轨道的悬空部位是否得到了加强。
  45. 5)施工期间的基本要求及安全规定
  46. ①架桥机安装属于高空作业,施工前技术员及现场指挥员向参加施工的所有人
  47. 员详细介绍安装工序、技术要求和指挥信号。
  48. ②严禁在施工的架桥机下面逗留通过,与安装施工无关人员不准擅自进入施工
  49. 现场。
  50. ③现场施工人员必须按有关安全规定佩戴好安全用品(安全带、安全帽、绝缘
  51. 鞋等)。
  52. ④施工现场使用的氧气瓶、乙炔瓶必须保证立放并固定好,两瓶之间距离不得
  53. 小于5m。
  54. 6)架桥机组装
  55. ①安装原则:按从下至上的顺序进行安装,且必须在下部结构安装固定牢固以
  56. 后,才能进行上部结构的安装。同时,在安装过程中,在运输及吊装能力允许的情
  57. 况下,尽量保持设备各部件的整体性,一方面能有效减少危险作业点,另一方面有
  58. 利于提高设备现场安装工效。
  59. ②安装场地:架桥拼装在桥台台背后路基上,拼装场地选址位于路基上,拼装
  60. 场地面积宽15m,长 100m,架桥机主体最大宽度为9m(移动轨道 18m),路基宽度
  61. 满足安装场地所需,路基及便道顶面承载力满足接卸拼装所需的承载要求。
  62. ③辅助机械设备:根据施工现场实际情况,选择1台25T汽车吊作为主要安装
  63. 设备,架桥机主梁拼装采用分节进行吊装,整机重量最大的组件为三节主梁同时起
  64. 吊,总重18t,采用2 台50t汽车吊满足吊装要求。"""
  65. print(f"输入内容: {review_content}")
  66. print(f"内容长度: {len(review_content)}")
  67. try:
  68. start_time = time.time()
  69. result = query_rewrite_manager.query_extract(review_content)
  70. end_time = time.time()
  71. elapsed_time = end_time - start_time
  72. print(f"\n[OK] 提取完成,耗时: {elapsed_time:.2f}秒")
  73. print(f"返回结果类型: {type(result)}")
  74. print(f"返回结果长度: {len(str(result))}")
  75. print(f"返回结果: {result}")
  76. if result:
  77. print("[OK] 成功提取到查询信息")
  78. # 尝试解析JSON响应
  79. try:
  80. import json
  81. if isinstance(result, str):
  82. # 提取JSON部分
  83. if '```json' in result:
  84. start = result.find('```json') + 7
  85. end = result.find('```', start)
  86. if end != -1:
  87. json_str = result[start:end].strip()
  88. else:
  89. json_str = result[start:].strip()
  90. else:
  91. json_str = result.strip()
  92. parsed_result = json.loads(json_str)
  93. print(f"[OK] JSON解析成功,提取到 {len(parsed_result)} 个实体")
  94. for i, entity in enumerate(parsed_result):
  95. entity_name = entity.get('entity', 'N/A')
  96. keywords = entity.get('search_keywords', [])
  97. background = entity.get('background', 'N/A')
  98. parameter = entity.get('parameter', 'N/A')
  99. print(f" 实体{i+1}: {entity_name}")
  100. print(f" 关键词: {keywords}")
  101. print(f" 背景: {background}")
  102. print(f" 参数: {parameter}")
  103. print()
  104. except Exception as e:
  105. print(f"[WARN] JSON解析失败: {e}")
  106. else:
  107. print("[ERROR] 未返回有效结果")
  108. except Exception as e:
  109. print(f"[ERROR] 测试失败: {str(e)}")
  110. logger.error(f"测试失败: {str(e)}")
  111. import traceback
  112. traceback.print_exc()
  113. def main():
  114. """
  115. 主测试函数
  116. """
  117. print("开始集成测试 QueryRewriteManager.query_extract 方法")
  118. # 执行核心测试
  119. test_query_extract_with_construction_content()
  120. print("\n集成测试完成")
  121. if __name__ == "__main__":
  122. main()