main.py 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. # 在项目根目录运行:python -m mysql_qa.main
  2. # 也支持直接运行:python mysql_qa/main.py
  3. import sys
  4. import time
  5. from pathlib import Path
  6. if __package__ in (None, ""):
  7. sys.path.insert(0, str(Path(__file__).resolve().parent.parent))
  8. # 导入 MySQL 客户端
  9. from mysql_qa.db.mysql_client import MySQLClient
  10. # 导入 Redis 客户端
  11. from mysql_qa.cache.redis_client import RedisClient
  12. # 导入 BM25 搜索
  13. from mysql_qa.retrieval.bm25_search import BM25Search
  14. # 导入日志
  15. from base import logger
  16. class MySQLQASystem:
  17. def __init__(self):
  18. self.logger = logger
  19. self.mysql_client = MySQLClient()
  20. self.redis_client = RedisClient()
  21. self.bm25_search = BM25Search(self.redis_client, self.mysql_client)
  22. def query(self, query):
  23. start_time = time.time()
  24. self.logger.info(f"处理查询: '{query}'")
  25. answer, _ = self.bm25_search.search(query, threshold=0.85)
  26. if answer:
  27. self.logger.info(f"MySQL 答案: {answer}")
  28. else:
  29. self.logger.info("SQL 中未找到答案,需要调用 RAG 系统")
  30. answer = "SQL未找到答案"
  31. processing_time = time.time() - start_time
  32. self.logger.info(f"查询处理耗时 {processing_time:.2f}秒")
  33. return answer
  34. def main():
  35. mysql_system = MySQLQASystem()
  36. try:
  37. print("\n欢迎使用 MySQL 问答系统!")
  38. print("输入查询进行问答,输入 'exit' 退出。")
  39. while True:
  40. query = input("\n输入查询: ").strip()
  41. if query.lower() == "exit":
  42. logger.info("退出 MySQL 系统")
  43. print("再见!")
  44. break
  45. answer = mysql_system.query(query)
  46. print(f"\n答案: {answer}")
  47. except Exception as exc:
  48. logger.error(f"系统错误: {exc}")
  49. print(f"发生错误: {exc}")
  50. finally:
  51. mysql_system.mysql_client.close()
  52. if __name__ == "__main__":
  53. main()