sql_main.py 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. # 导入 MySQL 客户端
  2. from db.mysql_client import MySQLClient
  3. # 导入 Redis 客户端
  4. from cache.redis_client import RedisClient
  5. # 导入 BM25 搜索
  6. from retrieval.bm25_search import BM25Search
  7. # 导入日志
  8. from base import logger
  9. # 导入时间库
  10. import time
  11. class MySQLQASystem:
  12. def __init__(self):
  13. # 初始化日志
  14. self.logger = logger
  15. # 初始化 MySQL 客户端
  16. self.mysql_client = MySQLClient()
  17. # 初始化 Redis 客户端
  18. self.redis_client = RedisClient()
  19. # 初始化 BM25 搜索
  20. self.bm25_search = BM25Search(self.redis_client, self.mysql_client)
  21. def query(self, query):
  22. # 查询 MySQL 系统
  23. start_time = time.time()
  24. # 记录查询信息
  25. self.logger.info(f"处理查询: '{query}'")
  26. # 执行 BM25 搜索
  27. answer, _ = self.bm25_search.search(query, threshold=0.85)
  28. if answer:
  29. # 记录 MySQL 答案
  30. self.logger.info(f"MySQL 答案: {answer}")
  31. else:
  32. # 记录无答案
  33. self.logger.info("SQL中未找到答案, 需要调用RAG系统")
  34. # 设置默认答案
  35. answer = "MYSQL未找到答案"
  36. # 计算处理时间
  37. processing_time = time.time() - start_time
  38. # 记录处理时间
  39. self.logger.info(f"查询处理耗时 {processing_time:.2f}秒")
  40. # 返回答案
  41. return answer
  42. def main():
  43. # 初始化 MySQL 系统
  44. mysql_system = MySQLQASystem()
  45. try:
  46. # 打印欢迎信息
  47. print("\n欢迎使用 MySQL 问答系统!")
  48. print("输入查询进行问答,输入 'exit' 退出。")
  49. while True:
  50. # 获取用户输入
  51. query = input("\n输入查询: ").strip()
  52. if query.lower() == "exit":
  53. # 记录退出日志
  54. logger.info("退出 MySQL 系统")
  55. # 打印退出信息
  56. print("再见!")
  57. break
  58. # 执行查询
  59. answer = mysql_system.query(query)
  60. # 打印答案
  61. print(f"\n答案: {answer}")
  62. except Exception as e:
  63. # 记录系统错误
  64. logger.error(f"系统错误: {e}")
  65. # 打印错误信息
  66. print(f"发生错误: {e}")
  67. finally:
  68. # 关闭 MySQL 连接
  69. mysql_system.mysql_client.close()
  70. if __name__ == "__main__":
  71. # 运行主程序
  72. main()