app_config.py 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. from dotenv import load_dotenv
  2. import os
  3. # 加载.env文件中的环境变量
  4. # 使用 override=True 确保能够重新加载更新的环境变量
  5. load_dotenv(override=True)
  6. # ===== 模型提供商类型配置 =====
  7. # LLM模型提供商类型:api 或 ollama
  8. LLM_MODEL_TYPE = "api" # api, ollama
  9. # Embedding模型提供商类型:api 或 ollama
  10. EMBEDDING_MODEL_TYPE = "api" # api, ollama
  11. # =====API 模型名称配置 =====
  12. # API LLM模型名称(当LLM_MODEL_TYPE="api"时使用:qianwen 或 deepseek )
  13. API_LLM_MODEL = "qianwen"
  14. # 向量数据库类型:chromadb 或 pgvector
  15. VECTOR_DB_TYPE = "pgvector"
  16. # ===== API LLM模型配置 =====
  17. # DeepSeek模型配置
  18. API_DEEPSEEK_CONFIG = {
  19. "api_key": os.getenv("DEEPSEEK_API_KEY"), # 从环境变量读取API密钥
  20. "base_url": "https://api.deepseek.com", # DeepSeek API地址
  21. "model": "deepseek-reasoner", # deepseek-chat, deepseek-reasoner
  22. "allow_llm_to_see_data": True,
  23. "temperature": 0.6,
  24. "n_results": 6,
  25. "language": "Chinese",
  26. "stream": True, # 是否使用流式模式
  27. "enable_thinking": True # 自定义,是否支持流模式
  28. }
  29. # Qwen模型配置
  30. API_QIANWEN_CONFIG = {
  31. "api_key": os.getenv("QWEN_API_KEY"), # 从环境变量读取API密钥
  32. "base_url": "https://dashscope.aliyuncs.com/compatible-mode/v1", # 千问API地址
  33. "model": "qwen3-235b-a22b",
  34. "allow_llm_to_see_data": True,
  35. "temperature": 0.6,
  36. "n_results": 6,
  37. "language": "Chinese",
  38. "stream": True, # 是否使用流式模式
  39. "enable_thinking": False # 是否启用思考功能(要求stream=True)
  40. }
  41. #qwen3-30b-a3b
  42. #qwen3-235b-a22b
  43. #qwen-plus-latest
  44. #qwen-plus
  45. # ===== API Embedding模型配置 =====
  46. API_EMBEDDING_CONFIG = {
  47. "model_name": "text-embedding-v4",
  48. "api_key": os.getenv("EMBEDDING_API_KEY"),
  49. "base_url": os.getenv("EMBEDDING_BASE_URL"),
  50. "embedding_dimension": 1024
  51. }
  52. # BAAI/bge-m3
  53. # text-embedding-v4
  54. # ===== Ollama LLM模型配置 =====
  55. OLLAMA_LLM_CONFIG = {
  56. "base_url": "http://192.168.3.204:11434", # Ollama服务地址
  57. "model": "qwen3:32b", # Ollama模型名称,如:qwen3:32b, deepseek-r1:32b
  58. "allow_llm_to_see_data": True,
  59. "temperature": 0.7,
  60. "n_results": 6,
  61. "language": "Chinese",
  62. "timeout": 60, # Ollama可能需要更长超时时间
  63. "stream": True, # 是否使用流式模式
  64. "enable_thinking": True, # 是否启用思考功能(推理模型支持)
  65. # Ollama 特定参数
  66. #"num_ctx": 8192, # 上下文长度
  67. #"num_predict": 2048, # 预测token数量,-1表示无限制
  68. #"repeat_penalty": 1.1, # 重复惩罚
  69. #"auto_check_connection": True # 是否自动检查连接
  70. }
  71. # ===== Ollama Embedding模型配置 =====
  72. OLLAMA_EMBEDDING_CONFIG = {
  73. "base_url": "http://192.168.3.204:11434", # Ollama服务地址
  74. "model_name": "bge-m3:567m", # Ollama embedding模型名称
  75. "embedding_dimension": 1024 # 根据实际模型调整
  76. }
  77. # 应用数据库连接配置 (业务数据库)
  78. APP_DB_CONFIG = {
  79. "host": "192.168.67.1",
  80. "port": 6432,
  81. "dbname": "highway_db",
  82. "user": os.getenv("APP_DB_USER"),
  83. "password": os.getenv("APP_DB_PASSWORD")
  84. }
  85. # ChromaDB配置
  86. # CHROMADB_PATH = "."
  87. # PgVector数据库连接配置 (向量数据库,独立于业务数据库)
  88. PGVECTOR_CONFIG = {
  89. "host": "192.168.67.1",
  90. "port": 5432,
  91. "dbname": "highway_pgvector_db",
  92. "user": os.getenv("PGVECTOR_DB_USER"),
  93. "password": os.getenv("PGVECTOR_DB_PASSWORD")
  94. }
  95. # 训练脚本批处理配置
  96. # 这些配置仅用于 training/run_training.py 训练脚本的批处理优化
  97. # 注意:当使用阿里云等API服务时,建议关闭批处理或设置单线程以避免并发连接错误
  98. TRAINING_BATCH_PROCESSING_ENABLED = False # 是否启用训练数据批处理(关闭以避免并发问题)
  99. TRAINING_BATCH_SIZE = 10 # 每批处理的训练项目数量
  100. TRAINING_MAX_WORKERS = 1 # 训练批处理的最大工作线程数(设置为1确保单线程)
  101. # 训练数据路径配置
  102. # 支持以下格式:
  103. # 1. 相对路径(以 . 开头):
  104. # "./training/data" - 项目根目录下的training/data
  105. # "../data" - 项目根目录上级的data目录
  106. # 2. 绝对路径:
  107. # "/home/user/data" - Linux绝对路径
  108. # "C:/data" - Windows绝对路径
  109. # "D:\\training\\data" - Windows绝对路径(转义反斜杠)
  110. # 3. 相对路径(不以.开头):
  111. # "training/data" - 相对于项目根目录
  112. # "my_data" - 项目根目录下的my_data文件夹
  113. TRAINING_DATA_PATH = "./training/data"
  114. # 是否启用问题重写功能,也就是上下文问题合并。
  115. REWRITE_QUESTION_ENABLED = False
  116. # 是否启用数据库查询结果摘要生成
  117. # True: 执行完SQL后生成摘要(默认)
  118. # False: 只返回SQL执行结果,跳过摘要生成,节省LLM调用
  119. ENABLE_RESULT_SUMMARY = True
  120. # 是否在返回结果中显示thinking过程
  121. # True: 显示 <think></think> 内容
  122. # False: 隐藏 <think></think> 内容,只显示最终答案
  123. # 此参数影响:摘要生成、SQL生成解释性文本、API返回结果等所有输出内容
  124. DISPLAY_RESULT_THINKING = False
  125. # 是否启用向量查询结果得分阈值过滤
  126. # result = max((n + 1) // 2, 1)
  127. ENABLE_RESULT_VECTOR_SCORE_THRESHOLD = True
  128. # 向量查询结果得分阈值
  129. RESULT_VECTOR_SQL_SCORE_THRESHOLD = 0.65
  130. RESULT_VECTOR_DDL_SCORE_THRESHOLD = 0.5
  131. RESULT_VECTOR_DOC_SCORE_THRESHOLD = 0.5
  132. ENABLE_ERROR_SQL_PROMPT = True
  133. RESULT_VECTOR_ERROR_SQL_SCORE_THRESHOLD = 0.8
  134. # 接口返回查询记录的最大行数
  135. API_MAX_RETURN_ROWS = 1000
  136. # 仅LLM分类:"llm_only", 直接数据库查询:"database_direct", 直接聊天对话: "chat_direct", 混合模式: "hybrid"
  137. # 混合模式 hybrid(推荐)
  138. QUESTION_ROUTING_MODE = "hybrid"
  139. # ==================== Redis对话管理配置 ====================
  140. # 对话上下文配置
  141. CONVERSATION_CONTEXT_COUNT = 2 # 传递给LLM的上下文消息条数
  142. CONVERSATION_MAX_LENGTH = 20 # 单个对话最大消息数
  143. USER_MAX_CONVERSATIONS = 5 # 用户最大对话数
  144. # 用户管理配置
  145. DEFAULT_ANONYMOUS_USER = "guest" # 匿名用户统一ID
  146. # Redis配置
  147. REDIS_HOST = "localhost"
  148. REDIS_PORT = 6379
  149. REDIS_DB = 0
  150. REDIS_PASSWORD = None
  151. # 缓存开关配置
  152. ENABLE_CONVERSATION_CONTEXT = True # 是否启用对话上下文
  153. ENABLE_QUESTION_ANSWER_CACHE = True # 是否启用问答结果缓存
  154. ENABLE_EMBEDDING_CACHE = True # 是否启用embedding向量缓存
  155. # TTL配置(单位:秒)
  156. CONVERSATION_TTL = 7 * 24 * 3600 # 对话保存7天
  157. USER_CONVERSATIONS_TTL = 7 * 24 * 3600 # 用户对话列表保存7天(所有用户统一)
  158. QUESTION_ANSWER_TTL = 24 * 3600 # 问答结果缓存24小时
  159. EMBEDDING_CACHE_TTL = 30 * 24 * 3600 # embedding向量缓存30天
  160. # Embedding缓存管理配置
  161. EMBEDDING_CACHE_MAX_SIZE = 5000 # 最大缓存问题数量