"""配置管理模块,使用 pydantic-settings 从.env文件加载环境变量""" from pydantic_settings import BaseSettings, SettingsConfigDict from pydantic import Field from typing import List class AppSettings(BaseSettings): """应用配置类""" log_level: str = Field(default="INFO", alias="LOG_LEVEL") model_config = SettingsConfigDict( env_file=".env", env_file_encoding="utf-8", case_sensitive=False, extra="ignore" ) class ModelSettings(BaseSettings): """模型配置类""" model_provider: str = Field(default="openai", alias="MODEL_PROVIDER") model_name: str = Field(default="Qwen/Qwen3-VL-8B-Instruct", alias="MODEL_NAME") chat_model_name: str = Field(default="deepseek-ai/DeepSeek-V3.2", alias="CHAT_MODEL_NAME") embedding_model_name: str = Field(default="Qwen/Qwen3-Embedding-0.6B", alias="EMBEDDING_MODEL_NAME") base_url: str = Field(default="https://api.openai.com/v1", alias="BASE_URL") api_key: str = Field(default="", alias="API_KEY") rank_model_name: str = Field(default="Qwen/Qwen3-Reranker-0.6B", alias="RANK_MODEL_NAME") multimodal_embedding_model_name: str = Field(default="qwen2.5-vl-embedding", alias="MULTIMODAL_EMBEDDING_MODEL_NAME") dashscope_api_key: str = Field(default="", alias="DASHSCOPE_API_KEY") model_config = SettingsConfigDict( env_file=".env", env_file_encoding="utf-8", case_sensitive=False, extra="ignore" ) class RagflowSettings(BaseSettings): """RAGFLOW配置类""" ragflow_api_url: str = Field(default="http://192.168.16.134/", alias="RAGFLOW_API_URL") ragflow_api_key: str = Field(default="", alias="RAGFLOW_API_KEY") dataset_id: str = Field(default="", alias="DATASET_ID") ragflow_user_name: str = Field(default="", alias="RAGFLOW_USER_NAME") ragflow_passwd: str = Field(default="", alias="RAGFLOW_PASSWD") model_config = SettingsConfigDict( env_file=".env", env_file_encoding="utf-8", case_sensitive=False, extra="ignore" ) class MinioSettings(BaseSettings): """MinIO配置类""" minio_endpoint: str = Field(default="http://localhost:9000", alias="MINIO_ENDPOINT") minio_access_key: str = Field(default="minioadmin", alias="MINIO_ACCESS_KEY") minio_secret_key: str = Field(default="minioadmin", alias="MINIO_SECRET_KEY") minio_bucket_name: str = Field(default="ragflow", alias="MINIO_BUCKET_NAME") minio_secure: bool = Field(default=False, alias="MINIO_SECURE") model_config = SettingsConfigDict( env_file=".env", env_file_encoding="utf-8", case_sensitive=False, extra="ignore" ) class VectorDBSettings(BaseSettings): """向量数据库配置类""" vector_db_type: str = Field(default="es", alias="VECTOR_DB_TYPE") infinity_host: str = Field(default="192.168.16.134", alias="INFINITY_HOST") infinity_port: int = Field(default=23820, alias="INFINITY_PORT") infinity_sdk_port: int = Field(default=23817, alias="INFINITY_SDK_PORT") infinity_user: str = Field(default="admin", alias="INFINITY_USER") infinity_password: str = Field(default="admin", alias="INFINITY_PASSWORD") infinity_database: str = Field(default="test", alias="INFINITY_DATABASE") infinity_table_name: str = Field(default="test", alias="INFINITY_TABLE_NAME") infinity_page_dataset_id: str = Field(default="", alias="INFINITY_PAGE_DATASET_ID") infinity_page_table_name: str = Field(default="", alias="INFINITY_PAGE_TABLE_NAME") infinity_ragflow_database: str = Field(default="default_db", alias="INFINITY_RAGFLOW_DATABASE") infinity_dataset_prefix: str = Field(default="ragbook_", alias="INFINITY_DATASET_PREFIX") model_config = SettingsConfigDict( env_file=".env", env_file_encoding="utf-8", case_sensitive=False, extra="ignore" ) class MysqlSettings(BaseSettings): """MySQL配置类""" mysql_host: str = Field(default="localhost", alias="MYSQL_HOST") mysql_port: int = Field(default=3306, alias="MYSQL_PORT") mysql_user: str = Field(default="root", alias="MYSQL_USER") mysql_password: str = Field(default="", alias="MYSQL_PASSWORD") mysql_database: str = Field(default="", alias="MYSQL_DATABASE") mysql_charset: str = Field(default="utf8mb4", alias="MYSQL_CHARSET") mysql_pool_size: int = Field(default=10, alias="MYSQL_POOL_SIZE") model_config = SettingsConfigDict( env_file=".env", env_file_encoding="utf-8", case_sensitive=False, extra="ignore" ) class TagSearchSettings(BaseSettings): """标签搜索配置类""" tag_db_name: str = Field(default="tag_db", alias="TAG_DB_NAME") tag_table_name: str = Field(default="tag_table", alias="TAG_TABLE_NAME") tag_document_id: str = Field(default="", alias="TAG_DOCUMENT_ID") tag_dataset_id: str = Field(default="", alias="TAG_DATASET_ID") model_config = SettingsConfigDict( env_file=".env", env_file_encoding="utf-8", case_sensitive=False, extra="ignore" ) class EsSettings(BaseSettings): """Elasticsearch配置类""" es_nodes: List[str] = Field(default=["http://localhost:9200"], alias="ES_NODES") es_username: str = Field(default="", alias="ES_USERNAME") es_password: str = Field(default="", alias="ES_PASSWORD") es_index_name: str = Field(default="rag_documents", alias="ES_INDEX_NAME") es_connections_per_node: int = Field(default=20, alias="ES_CONNECTIONS_PER_NODE") es_max_retries: int = Field(default=3, alias="ES_MAX_RETRIES") es_retry_on_timeout: bool = Field(default=True, alias="ES_RETRY_ON_TIMEOUT") es_timeout: int = Field(default=30, alias="ES_TIMEOUT") es_verify_certs: bool = Field(default=False, alias="ES_VERIFY_CERTS") model_config = SettingsConfigDict( env_file=".env", env_file_encoding="utf-8", case_sensitive=False, extra="ignore" ) # 创建配置实例 model_settings = ModelSettings() ragflow_settings = RagflowSettings() app_settings = AppSettings() minio_settings = MinioSettings() vector_db_settings = VectorDBSettings() mysql_settings = MysqlSettings() tag_search_settings = TagSearchSettings() es_settings = EsSettings()