vanna_llm_factory.py 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. """
  2. Vanna LLM 工厂文件,专注于 ChromaDB 并简化配置。
  3. """
  4. from vanna.chromadb import ChromaDB_VectorStore # 从 Vanna 系统获取
  5. from customqianwen.Custom_QianwenAI_chat import QianWenAI_Chat
  6. from customdeepseek.custom_deepseek_chat import DeepSeekChat
  7. import app_config
  8. from embedding_function import get_embedding_function
  9. import os
  10. class Vanna_Qwen_ChromaDB(ChromaDB_VectorStore, QianWenAI_Chat):
  11. def __init__(self, config=None):
  12. ChromaDB_VectorStore.__init__(self, config=config)
  13. QianWenAI_Chat.__init__(self, config=config)
  14. class Vanna_DeepSeek_ChromaDB(ChromaDB_VectorStore, DeepSeekChat):
  15. def __init__(self, config=None):
  16. ChromaDB_VectorStore.__init__(self, config=config)
  17. DeepSeekChat.__init__(self, config=config)
  18. def create_vanna_instance(config_module=None):
  19. """
  20. 工厂函数:创建并初始化一个Vanna实例 (LLM 和 ChromaDB 特定版本)
  21. Args:
  22. config_module: 配置模块,默认为None时使用 app_config
  23. Returns:
  24. 初始化后的Vanna实例
  25. """
  26. if config_module is None:
  27. config_module = app_config
  28. model_type = config_module.MODEL_TYPE.lower()
  29. config = {}
  30. if model_type == "deepseek":
  31. config = config_module.DEEPSEEK_CONFIG.copy()
  32. print(f"创建DeepSeek模型实例,使用模型: {config['model']}")
  33. # 检查API密钥
  34. if not config.get("api_key"):
  35. print(f"\n错误: DeepSeek API密钥未设置或为空")
  36. print(f"请在.env文件中设置DEEPSEEK_API_KEY环境变量")
  37. print(f"无法继续执行,程序退出\n")
  38. import sys
  39. sys.exit(1)
  40. elif model_type == "qwen":
  41. config = config_module.QWEN_CONFIG.copy()
  42. print(f"创建Qwen模型实例,使用模型: {config['model']}")
  43. # 检查API密钥
  44. if not config.get("api_key"):
  45. print(f"\n错误: Qwen API密钥未设置或为空")
  46. print(f"请在.env文件中设置QWEN_API_KEY环境变量")
  47. print(f"无法继续执行,程序退出\n")
  48. import sys
  49. sys.exit(1)
  50. else:
  51. raise ValueError(f"不支持的模型类型: {model_type}")
  52. embedding_function = get_embedding_function()
  53. config["embedding_function"] = embedding_function
  54. print(f"已配置使用 EMBEDDING_CONFIG 中的嵌入模型: {config_module.EMBEDDING_CONFIG['model_name']}, 维度: {config_module.EMBEDDING_CONFIG['embedding_dimension']}")
  55. # 设置ChromaDB路径为项目根目录
  56. project_root = os.path.dirname(os.path.abspath(__file__))
  57. config["path"] = project_root
  58. print(f"已配置使用ChromaDB作为向量数据库,路径:{project_root}")
  59. vn = None
  60. if model_type == "deepseek":
  61. vn = Vanna_DeepSeek_ChromaDB(config=config)
  62. print("创建DeepSeek+ChromaDB实例")
  63. elif model_type == "qwen":
  64. vn = Vanna_Qwen_ChromaDB(config=config)
  65. print("创建Qwen+ChromaDB实例")
  66. if vn is None:
  67. raise ValueError(f"未能成功创建Vanna实例,不支持的模型类型: {model_type}")
  68. vn.connect_to_postgres(**config_module.APP_DB_CONFIG)
  69. print(f"已连接到业务数据库: "
  70. f"{config_module.APP_DB_CONFIG['host']}:"
  71. f"{config_module.APP_DB_CONFIG['port']}/"
  72. f"{config_module.APP_DB_CONFIG['dbname']}")
  73. return vn