settings.py 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. import os
  2. from pathlib import Path
  3. # 基础配置
  4. class Settings:
  5. def __init__(self):
  6. # 1. 检测环境
  7. self.is_development = Path(".env.development").exists()
  8. self.env = "development" if self.is_development else "production"
  9. print(f"🎯 当前环境: {self.env}")
  10. # 2. 加载配置文件
  11. self._load_env_file()
  12. # API配置
  13. self.DEEPSEEK_API_KEY = self._get_api_key()
  14. self.DEEPSEEK_BASE_URL = os.getenv(
  15. "DEEPSEEK_BASE_URL", "https://api.deepseek.com/v1"
  16. )
  17. # KMS配置
  18. self.KMS_LIST_URL = os.getenv(
  19. "KMS_LIST_URL", "http://kms.longjoe.com:82/KMS/api/common/DocListAi"
  20. )
  21. self.KMS_VIEW_URL = os.getenv(
  22. "KMS_VIEW_URL", "http://kms.longjoe.com:82/KMS/api/common/DocViewAi"
  23. )
  24. # 其他配置
  25. self.LLM_MODEL = "deepseek-chat"
  26. self.LLM_TEMPERATURE = 0.7
  27. self.LLM_MAX_TOKENS = 2048
  28. def _load_env_file(self):
  29. """加载对应的.env文件"""
  30. from dotenv import load_dotenv
  31. env_file = ".env.development" if self.is_development else ".env"
  32. if Path(env_file).exists():
  33. load_dotenv(env_file, override=True)
  34. print(f"📁 加载配置文件: {env_file}")
  35. else:
  36. print(f"⚠️ 配置文件 {env_file} 不存在")
  37. def _get_api_key(self) -> str:
  38. """根据环境获取API Key"""
  39. if self.is_development:
  40. # 开发环境:使用明文
  41. key = os.getenv("DEEPSEEK_API_KEY")
  42. if not key:
  43. print("\n⚠️ 开发环境提示:")
  44. print(" 请在 .env.development 中添加:")
  45. print(" DEEPSEEK_API_KEY=sk-your-key-here")
  46. print("=" * 40)
  47. return key or ""
  48. else:
  49. # 生产环境:必须使用加密
  50. encrypted_key = os.getenv("ENCRYPTED_DEEPSEEK_KEY")
  51. if not encrypted_key:
  52. raise ValueError("生产环境需要 ENCRYPTED_DEEPSEEK_KEY")
  53. master_key = "ialwayslovelongjoe"
  54. return self._decrypt_key(encrypted_key, master_key)
  55. def _decrypt_key(self, encrypted_key: str, master_key: str) -> str:
  56. """解密API Key"""
  57. # 简单版AES解密
  58. from Crypto.Cipher import AES
  59. from Crypto.Util.Padding import unpad
  60. import base64
  61. import hashlib
  62. try:
  63. # 生成密钥
  64. aes_key = hashlib.sha256(master_key.encode()).digest()
  65. iv = hashlib.md5(master_key.encode()).digest()
  66. # 解密
  67. cipher = AES.new(aes_key, AES.MODE_CBC, iv)
  68. ct = base64.b64decode(encrypted_key)
  69. pt = unpad(cipher.decrypt(ct), AES.block_size)
  70. return pt.decode("utf-8")
  71. except Exception as e:
  72. raise ValueError(f"解密失败: {e}")
  73. # 创建全局实例
  74. settings = Settings()