import os import sys # When running as a PyInstaller bundle: # sys._MEIPASS → read-only bundle dir (templates, static, prompts) # sys.executable dir → writable dir next to the .exe (data, settings, db) if getattr(sys, 'frozen', False): _BUNDLE_DIR = sys._MEIPASS # bundled app files BASE_DIR = os.path.dirname(sys.executable) # writable runtime dir else: _BUNDLE_DIR = os.path.dirname(os.path.abspath(__file__)) BASE_DIR = _BUNDLE_DIR DATA_DIR = os.path.join(BASE_DIR, 'data') UPLOAD_DIR = os.path.join(DATA_DIR, 'uploads') EXPORT_DIR = os.path.join(DATA_DIR, 'exports') KNOWLEDGE_DIR= os.path.join(DATA_DIR, 'knowledge') DB_PATH = os.path.join(DATA_DIR, 'projects.db') CHROMA_DIR = os.path.join(DATA_DIR, 'chroma') PROMPTS_DIR = os.path.join(_BUNDLE_DIR, 'prompts') # ==================== AI 模型配置 ==================== # 模型选择:'openai' | 'qwen' | 'deepseek' | 'ollama' MODEL_PROVIDER = os.environ.get('MODEL_PROVIDER', 'qwen') # OpenAI OPENAI_API_KEY = os.environ.get('OPENAI_API_KEY', 'sk-your-openai-key') OPENAI_MODEL = os.environ.get('OPENAI_MODEL', 'gpt-4.1') OPENAI_BASE_URL = os.environ.get('OPENAI_BASE_URL', 'https://api.openai.com/v1') # 阿里云通义千问 QWEN_API_KEY = os.environ.get('QWEN_API_KEY', 'sk-your-qwen-key') QWEN_MODEL = os.environ.get('QWEN_MODEL', 'qwen-max') QWEN_BASE_URL = os.environ.get('QWEN_BASE_URL', 'https://dashscope.aliyuncs.com/compatible-mode/v1') # DeepSeek DEEPSEEK_API_KEY = os.environ.get('DEEPSEEK_API_KEY', 'sk-your-deepseek-key') DEEPSEEK_MODEL = os.environ.get('DEEPSEEK_MODEL', 'deepseek-chat') DEEPSEEK_BASE_URL = os.environ.get('DEEPSEEK_BASE_URL', 'https://api.deepseek.com/v1') # Ollama 本地(OpenAI 兼容接口) OLLAMA_BASE_URL = os.environ.get('OLLAMA_BASE_URL', 'http://localhost:11434/v1') OLLAMA_MODEL = os.environ.get('OLLAMA_MODEL', 'qwen3:8b') # 豆包 / 火山引擎(字节跳动,OpenAI 兼容接口) DOUBAO_API_KEY = os.environ.get('DOUBAO_API_KEY', 'sk-your-doubao-key') DOUBAO_MODEL = os.environ.get('DOUBAO_MODEL', 'doubao-1-5-pro-32k') DOUBAO_BASE_URL = os.environ.get('DOUBAO_BASE_URL', 'https://ark.cn-beijing.volces.com/api/v3') # Kimi / Moonshot AI(OpenAI 兼容接口,支持 Embedding) KIMI_API_KEY = os.environ.get('KIMI_API_KEY', 'sk-your-kimi-key') KIMI_MODEL = os.environ.get('KIMI_MODEL', 'moonshot-v1-32k') KIMI_BASE_URL = os.environ.get('KIMI_BASE_URL', 'https://api.moonshot.cn/v1') # Embedding 模型 OPENAI_EMBEDDING_MODEL = 'text-embedding-3-small' QWEN_EMBEDDING_MODEL = 'text-embedding-v3' KIMI_EMBEDDING_MODEL = 'moonshot-v1-embedding' # ==================== 应用配置 ==================== MAX_FILE_SIZE_MB = 50 ALLOWED_EXTENSIONS = {'pdf', 'doc', 'docx'} SECRET_KEY = 'bidhuo-partner-secret-2024' # ==================== 生成配置 ==================== MAX_RETRIES = 3 REQUEST_TIMEOUT = 180 CHUNK_SIZE = 2000 # 知识库文本分块大小(字符数) CHUNK_OVERLAP = 200 # 分块重叠大小 TOP_K_KNOWLEDGE = 3 # 知识库检索数量 MAX_CONCURRENT_SECTIONS = int(os.environ.get('MAX_CONCURRENT_SECTIONS', '5')) # 并发生成章节数 CONTENT_VOLUME = os.environ.get('CONTENT_VOLUME', 'standard') # 篇幅档位: concise / standard / detailed / full