Files

1 line
22 KiB
JSON
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{"repo": "b1ueskye/robot-hong", "files": {"training/config.py": {"4c2d5d354184748252d3f59c1d69be31541f1f39": {"t": 1785746870.6185954, "n": 3513, "h": "15cde91981b4446a", "c": "\"\"\"\n训练配置\n\"\"\"\n\nimport os\nfrom pathlib import Path\nfrom dataclasses import dataclass, field\nfrom typing import List\n\n# 项目根目录\nTRAINING_ROOT = Path(__file__).parent\nDATA_DIR = TRAINING_ROOT / \"data\"\nOUTPUT_DIR = TRAINING_ROOT / \"output\"\n\n\n@dataclass\nclass DataConfig:\n \"\"\"数据配置\"\"\"\n # 蒸馏API配置\n api_base_url: str = \"https://dashscope.aliyuncs.com/compatible-mode/v1\"\n api_model: str = \"deepseek-v3.2\" # 阿里云百炼的 DeepSeek\n api_key_env: str = \"sk-ad84676a8bf64a87924f2da0a98942e8\"\n \n # 数据路径\n scenarios_file: str = str(DATA_DIR / \"scenarios.json\")\n raw_data_dir: str = str(DATA_DIR / \"raw\")\n processed_data_dir: str = str(DATA_DIR / \"processed\")\n \n # 数据生成参数\n num_samples: int = 20000 # 目标数据量\n samples_per_file: int = 500 # 每个文件保存的样本数\n max_retries: int = 3 # API调用失败重试次数\n temperature: float = 0.9 # 生成温度(高一点增加多样性)\n max_tokens: int = 1500 # 单次生成最大token\n \n # 并发配置\n concurrent_requests: int = 10 # 并发请求数\n request_delay: float = 0.2 # 请求间隔(秒)\n \n @property\n def api_key(self) -> str:\n return self.api_key_env\n\n\n@dataclass\nclass ModelConfig:\n \"\"\"模型配置\"\"\"\n # 基座模型\n base_model_name: str = \"Qwen/Qwen2.5-1.5B-Instruct\"\n base_model_local: str = str(OUTPUT_DIR / \"base_model\")\n \n # 下载源\n download_source: str = \"modelscope\" # modelscope 或 huggingface\n modelscope_model_id: str = \"Qwen/Qwen2.5-1.5B-Instruct\"\n \n # LoRA 配置\n lora_r: int = 16\n lora_alpha: int = 32\n lora_dropout: float = 0.05\n lora_target_modules: List[str] = field(default_factory=lambda: [\n \"q_proj\", \"k_proj\", \"v_proj\", \"o_proj\",\n \"gate_proj\", \"up_proj\", \"down_proj\"\n ])\n \n # 输出路径\n lora_output_dir: str = str(OUTPUT_DIR / \"lora_adapter\")\n merged_model_dir: str = str(OUTPUT_DIR / \"merged_model\")\n logs_dir: str = str(OUTPUT_DIR / \"logs\")\n\n\n@dataclass\nclass TrainingConfig:\n \"\"\"训练配置\"\"\"\n # 训练参数\n num_train_epochs: int = 2 # 防止过拟合\n per_device_train_batch_size: int = 1\n gradient_accumulation_steps: int = 16\n learning_rate: float = 2e-4\n warmup_ratio: float = 0.1\n lr_scheduler_type: str = \"cosine\"\n max_seq_length: int = 512\n \n # 优化配置(针对8GB显存)\n fp16: bool = True\n gradient_checkpointing: bool = True\n optim: str = \"paged_adamw_8bit\"\n \n # 量化配置\n load_in_4bit: bool = True\n bnb_4bit_quant_type: str = \"nf4\"\n bnb_4bit_use_double_quant: bool = True\n \n # 保存策略\n save_strategy: str = \"epoch\"\n logging_steps: int = 10\n \n # 数据\n train_file: str = str(DATA_DIR / \"processed\" / \"train.json\")\n val_file: str = str(DATA_DIR / \"processed\" / \"val.json\")\n val_ratio: float = 0.05 # 验证集比例\n\n\n@dataclass\nclass QualityFilterConfig:\n \"\"\"质量过滤配置\"\"\"\n # AI痕迹关键词(必须过滤)\n ai_patterns: List[str] = field(default_factory=lambda: [\n \"作为AI\", \"作为一个AI\", \"作为人工智能\",\n \"我是AI\", \"我是一个AI\", \"我是人工智能\",\n \"根据我的分析\", \"根据分析\", \n \"我理解您的感受\", \"我理解你的感受\",\n \"首先,其次\", \"第一,第二\",\n \"以下是\", \"以下建议\",\n \"请问您\", \"您可以考虑\",\n ])\n \n # 必须包含的情感词(至少一个)\n emotion_words: List[str] = field(default_factory=lambda: [\n \"哈哈\", \"嗯\", \"啊\", \"emmm\", \"呜呜\", \n \"唉\", \"诶\", \"噢\", \"嘛\", \"啦\", \"吧\",\n \"!\", \"~\", \"...\", \"?\",\n \"懂\", \"真的\", \"太\", \"好\", \"超\",\n ])\n \n # 最小对话轮次\n min_turns: int = 4 # 至少2轮(4条消息)\n \n # 反问比例上限\n max_question_ratio: float = 0.3 # assistant回复中问号结尾的比例\n\n\n# 全局配置实例\ndata_config = DataConfig()\nmodel_config = ModelConfig()\ntraining_config = TrainingConfig()\nquality_config = QualityFilterConfig()\n\n"}, "ba1387eb6994d635b360f41363dcdbeddc2bae89": {"t": 1785768303.0282798, "n": 3513, "h": "15cde91981b4446a", "c": "\"\"\"\n训练配置\n\"\"\"\n\nimport os\nfrom pathlib import Path\nfrom dataclasses import dataclass, field\nfrom typing import List\n\n# 项目根目录\nTRAINING_ROOT = Path(__file__).parent\nDATA_DIR = TRAINING_ROOT / \"data\"\nOUTPUT_DIR = TRAINING_ROOT / \"output\"\n\n\n@dataclass\nclass DataConfig:\n \"\"\"数据配置\"\"\"\n # 蒸馏API配置\n api_base_url: str = \"https://dashscope.aliyuncs.com/compatible-mode/v1\"\n api_model: str = \"deepseek-v3.2\" # 阿里云百炼的 DeepSeek\n api_key_env: str = \"sk-ad84676a8bf64a87924f2da0a98942e8\"\n \n # 数据路径\n scenarios_file: str = str(DATA_DIR / \"scenarios.json\")\n raw_data_dir: str = str(DATA_DIR / \"raw\")\n processed_data_dir: str = str(DATA_DIR / \"processed\")\n \n # 数据生成参数\n num_samples: int = 20000 # 目标数据量\n samples_per_file: int = 500 # 每个文件保存的样本数\n max_retries: int = 3 # API调用失败重试次数\n temperature: float = 0.9 # 生成温度(高一点增加多样性)\n max_tokens: int = 1500 # 单次生成最大token\n \n # 并发配置\n concurrent_requests: int = 10 # 并发请求数\n request_delay: float = 0.2 # 请求间隔(秒)\n \n @property\n def api_key(self) -> str:\n return self.api_key_env\n\n\n@dataclass\nclass ModelConfig:\n \"\"\"模型配置\"\"\"\n # 基座模型\n base_model_name: str = \"Qwen/Qwen2.5-1.5B-Instruct\"\n base_model_local: str = str(OUTPUT_DIR / \"base_model\")\n \n # 下载源\n download_source: str = \"modelscope\" # modelscope 或 huggingface\n modelscope_model_id: str = \"Qwen/Qwen2.5-1.5B-Instruct\"\n \n # LoRA 配置\n lora_r: int = 16\n lora_alpha: int = 32\n lora_dropout: float = 0.05\n lora_target_modules: List[str] = field(default_factory=lambda: [\n \"q_proj\", \"k_proj\", \"v_proj\", \"o_proj\",\n \"gate_proj\", \"up_proj\", \"down_proj\"\n ])\n \n # 输出路径\n lora_output_dir: str = str(OUTPUT_DIR / \"lora_adapter\")\n merged_model_dir: str = str(OUTPUT_DIR / \"merged_model\")\n logs_dir: str = str(OUTPUT_DIR / \"logs\")\n\n\n@dataclass\nclass TrainingConfig:\n \"\"\"训练配置\"\"\"\n # 训练参数\n num_train_epochs: int = 2 # 防止过拟合\n per_device_train_batch_size: int = 1\n gradient_accumulation_steps: int = 16\n learning_rate: float = 2e-4\n warmup_ratio: float = 0.1\n lr_scheduler_type: str = \"cosine\"\n max_seq_length: int = 512\n \n # 优化配置(针对8GB显存)\n fp16: bool = True\n gradient_checkpointing: bool = True\n optim: str = \"paged_adamw_8bit\"\n \n # 量化配置\n load_in_4bit: bool = True\n bnb_4bit_quant_type: str = \"nf4\"\n bnb_4bit_use_double_quant: bool = True\n \n # 保存策略\n save_strategy: str = \"epoch\"\n logging_steps: int = 10\n \n # 数据\n train_file: str = str(DATA_DIR / \"processed\" / \"train.json\")\n val_file: str = str(DATA_DIR / \"processed\" / \"val.json\")\n val_ratio: float = 0.05 # 验证集比例\n\n\n@dataclass\nclass QualityFilterConfig:\n \"\"\"质量过滤配置\"\"\"\n # AI痕迹关键词(必须过滤)\n ai_patterns: List[str] = field(default_factory=lambda: [\n \"作为AI\", \"作为一个AI\", \"作为人工智能\",\n \"我是AI\", \"我是一个AI\", \"我是人工智能\",\n \"根据我的分析\", \"根据分析\", \n \"我理解您的感受\", \"我理解你的感受\",\n \"首先,其次\", \"第一,第二\",\n \"以下是\", \"以下建议\",\n \"请问您\", \"您可以考虑\",\n ])\n \n # 必须包含的情感词(至少一个)\n emotion_words: List[str] = field(default_factory=lambda: [\n \"哈哈\", \"嗯\", \"啊\", \"emmm\", \"呜呜\", \n \"唉\", \"诶\", \"噢\", \"嘛\", \"啦\", \"吧\",\n \"!\", \"~\", \"...\", \"?\",\n \"懂\", \"真的\", \"太\", \"好\", \"超\",\n ])\n \n # 最小对话轮次\n min_turns: int = 4 # 至少2轮(4条消息)\n \n # 反问比例上限\n max_question_ratio: float = 0.3 # assistant回复中问号结尾的比例\n\n\n# 全局配置实例\ndata_config = DataConfig()\nmodel_config = ModelConfig()\ntraining_config = TrainingConfig()\nquality_config = QualityFilterConfig()\n\n"}, "693faa7902b9d1e53f8ff39c7d89e5503ce3572a": {"t": 1785768304.2606597, "n": 3505, "h": "8c8f5b504cfea717", "c": "\"\"\"\n训练配置\n\"\"\"\n\nimport os\nfrom pathlib import Path\nfrom dataclasses import dataclass, field\nfrom typing import List\n\n# 项目根目录\nTRAINING_ROOT = Path(__file__).parent\nDATA_DIR = TRAINING_ROOT / \"data\"\nOUTPUT_DIR = TRAINING_ROOT / \"output\"\n\n\n@dataclass\nclass DataConfig:\n \"\"\"数据配置\"\"\"\n # 蒸馏API配置\n api_base_url: str = \"https://dashscope.aliyuncs.com/compatible-mode/v1\"\n api_model: str = \"deepseek-v3.2\" # 阿里云百炼的 DeepSeek\n api_key_env: str = \"sk-ad84676a8bf64a87924f2da0a98942e8\"\n \n # 数据路径\n scenarios_file: str = str(DATA_DIR / \"scenarios.json\")\n raw_data_dir: str = str(DATA_DIR / \"raw\")\n processed_data_dir: str = str(DATA_DIR / \"processed\")\n \n # 数据生成参数\n num_samples: int = 20000 # 目标数据量\n samples_per_file: int = 500 # 每个文件保存的样本数\n max_retries: int = 3 # API调用失败重试次数\n temperature: float = 0.9 # 生成温度(高一点增加多样性)\n max_tokens: int = 1500 # 单次生成最大token\n \n # 并发配置\n concurrent_requests: int = 10 # 并发请求数\n request_delay: float = 0.2 # 请求间隔(秒)\n \n @property\n def api_key(self) -> str:\n return self.api_key_env\n\n\n@dataclass\nclass ModelConfig:\n \"\"\"模型配置\"\"\"\n # 基座模型\n base_model_name: str = \"Qwen/Qwen2.5-1.5B-Instruct\"\n base_model_local: str = str(OUTPUT_DIR / \"base_model\")\n \n # 下载源\n download_source: str = \"modelscope\" # modelscope 或 huggingface\n modelscope_model_id: str = \"Qwen/Qwen2.5-1.5B-Instruct\"\n \n # LoRA 配置\n lora_r: int = 16\n lora_alpha: int = 32\n lora_dropout: float = 0.05\n lora_target_modules: List[str] = field(default_factory=lambda: [\n \"q_proj\", \"k_proj\", \"v_proj\", \"o_proj\",\n \"gate_proj\", \"up_proj\", \"down_proj\"\n ])\n \n # 输出路径\n lora_output_dir: str = str(OUTPUT_DIR / \"lora_adapter\")\n merged_model_dir: str = str(OUTPUT_DIR / \"merged_model\")\n logs_dir: str = str(OUTPUT_DIR / \"logs\")\n\n\n@dataclass\nclass TrainingConfig:\n \"\"\"训练配置\"\"\"\n # 训练参数\n num_train_epochs: int = 3\n per_device_train_batch_size: int = 1\n gradient_accumulation_steps: int = 16\n learning_rate: float = 2e-4\n warmup_ratio: float = 0.1\n lr_scheduler_type: str = \"cosine\"\n max_seq_length: int = 512\n \n # 优化配置(针对8GB显存)\n fp16: bool = True\n gradient_checkpointing: bool = True\n optim: str = \"paged_adamw_8bit\"\n \n # 量化配置\n load_in_4bit: bool = True\n bnb_4bit_quant_type: str = \"nf4\"\n bnb_4bit_use_double_quant: bool = True\n \n # 保存策略\n save_strategy: str = \"epoch\"\n logging_steps: int = 10\n \n # 数据\n train_file: str = str(DATA_DIR / \"processed\" / \"train.json\")\n val_file: str = str(DATA_DIR / \"processed\" / \"val.json\")\n val_ratio: float = 0.05 # 验证集比例\n\n\n@dataclass\nclass QualityFilterConfig:\n \"\"\"质量过滤配置\"\"\"\n # AI痕迹关键词(必须过滤)\n ai_patterns: List[str] = field(default_factory=lambda: [\n \"作为AI\", \"作为一个AI\", \"作为人工智能\",\n \"我是AI\", \"我是一个AI\", \"我是人工智能\",\n \"根据我的分析\", \"根据分析\", \n \"我理解您的感受\", \"我理解你的感受\",\n \"首先,其次\", \"第一,第二\",\n \"以下是\", \"以下建议\",\n \"请问您\", \"您可以考虑\",\n ])\n \n # 必须包含的情感词(至少一个)\n emotion_words: List[str] = field(default_factory=lambda: [\n \"哈哈\", \"嗯\", \"啊\", \"emmm\", \"呜呜\", \n \"唉\", \"诶\", \"噢\", \"嘛\", \"啦\", \"吧\",\n \"!\", \"~\", \"...\", \"?\",\n \"懂\", \"真的\", \"太\", \"好\", \"超\",\n ])\n \n # 最小对话轮次\n min_turns: int = 4 # 至少2轮(4条消息)\n \n # 反问比例上限\n max_question_ratio: float = 0.3 # assistant回复中问号结尾的比例\n\n\n# 全局配置实例\ndata_config = DataConfig()\nmodel_config = ModelConfig()\ntraining_config = TrainingConfig()\nquality_config = QualityFilterConfig()\n\n"}, "a2b4cb62e926b75385ff70f3edeb927e1707201a": {"t": 1785768305.4490323, "n": 3478, "h": "e1c89e52040e993e", "c": "\"\"\"\n训练配置\n\"\"\"\n\nimport os\nfrom pathlib import Path\nfrom dataclasses import dataclass, field\nfrom typing import List\n\n# 项目根目录\nTRAINING_ROOT = Path(__file__).parent\nDATA_DIR = TRAINING_ROOT / \"data\"\nOUTPUT_DIR = TRAINING_ROOT / \"output\"\n\n\n@dataclass\nclass DataConfig:\n \"\"\"数据配置\"\"\"\n # 蒸馏API配置\n api_base_url: str = \"https://dashscope.aliyuncs.com/compatible-mode/v1\"\n api_model: str = \"deepseek-v3.2\" # 阿里云百炼的 DeepSeek\n api_key_env: str = \"sk-x x x\"\n \n # 数据路径\n scenarios_file: str = str(DATA_DIR / \"scenarios.json\")\n raw_data_dir: str = str(DATA_DIR / \"raw\")\n processed_data_dir: str = str(DATA_DIR / \"processed\")\n \n # 数据生成参数\n num_samples: int = 20000 # 目标数据量\n samples_per_file: int = 500 # 每个文件保存的样本数\n max_retries: int = 3 # API调用失败重试次数\n temperature: float = 0.9 # 生成温度(高一点增加多样性)\n max_tokens: int = 1500 # 单次生成最大token\n \n # 并发配置\n concurrent_requests: int = 10 # 并发请求数\n request_delay: float = 0.2 # 请求间隔(秒)\n \n @property\n def api_key(self) -> str:\n return self.api_key_env\n\n\n@dataclass\nclass ModelConfig:\n \"\"\"模型配置\"\"\"\n # 基座模型\n base_model_name: str = \"Qwen/Qwen2.5-1.5B-Instruct\"\n base_model_local: str = str(OUTPUT_DIR / \"base_model\")\n \n # 下载源\n download_source: str = \"modelscope\" # modelscope 或 huggingface\n modelscope_model_id: str = \"Qwen/Qwen2.5-1.5B-Instruct\"\n \n # LoRA 配置\n lora_r: int = 16\n lora_alpha: int = 32\n lora_dropout: float = 0.05\n lora_target_modules: List[str] = field(default_factory=lambda: [\n \"q_proj\", \"k_proj\", \"v_proj\", \"o_proj\",\n \"gate_proj\", \"up_proj\", \"down_proj\"\n ])\n \n # 输出路径\n lora_output_dir: str = str(OUTPUT_DIR / \"lora_adapter\")\n merged_model_dir: str = str(OUTPUT_DIR / \"merged_model\")\n logs_dir: str = str(OUTPUT_DIR / \"logs\")\n\n\n@dataclass\nclass TrainingConfig:\n \"\"\"训练配置\"\"\"\n # 训练参数\n num_train_epochs: int = 3\n per_device_train_batch_size: int = 1\n gradient_accumulation_steps: int = 16\n learning_rate: float = 2e-4\n warmup_ratio: float = 0.1\n lr_scheduler_type: str = \"cosine\"\n max_seq_length: int = 512\n \n # 优化配置(针对8GB显存)\n fp16: bool = True\n gradient_checkpointing: bool = True\n optim: str = \"paged_adamw_8bit\"\n \n # 量化配置\n load_in_4bit: bool = True\n bnb_4bit_quant_type: str = \"nf4\"\n bnb_4bit_use_double_quant: bool = True\n \n # 保存策略\n save_strategy: str = \"epoch\"\n logging_steps: int = 10\n \n # 数据\n train_file: str = str(DATA_DIR / \"processed\" / \"train.json\")\n val_file: str = str(DATA_DIR / \"processed\" / \"val.json\")\n val_ratio: float = 0.05 # 验证集比例\n\n\n@dataclass\nclass QualityFilterConfig:\n \"\"\"质量过滤配置\"\"\"\n # AI痕迹关键词(必须过滤)\n ai_patterns: List[str] = field(default_factory=lambda: [\n \"作为AI\", \"作为一个AI\", \"作为人工智能\",\n \"我是AI\", \"我是一个AI\", \"我是人工智能\",\n \"根据我的分析\", \"根据分析\", \n \"我理解您的感受\", \"我理解你的感受\",\n \"首先,其次\", \"第一,第二\",\n \"以下是\", \"以下建议\",\n \"请问您\", \"您可以考虑\",\n ])\n \n # 必须包含的情感词(至少一个)\n emotion_words: List[str] = field(default_factory=lambda: [\n \"哈哈\", \"嗯\", \"啊\", \"emmm\", \"呜呜\", \n \"唉\", \"诶\", \"噢\", \"嘛\", \"啦\", \"吧\",\n \"!\", \"~\", \"...\", \"?\",\n \"懂\", \"真的\", \"太\", \"好\", \"超\",\n ])\n \n # 最小对话轮次\n min_turns: int = 4 # 至少2轮(4条消息)\n \n # 反问比例上限\n max_question_ratio: float = 0.3 # assistant回复中问号结尾的比例\n\n\n# 全局配置实例\ndata_config = DataConfig()\nmodel_config = ModelConfig()\ntraining_config = TrainingConfig()\nquality_config = QualityFilterConfig()\n\n"}, "6c86018d16475279f8cb0338fba0b713645aa3e3": {"t": 1785768306.6207538, "n": 3505, "h": "8c8f5b504cfea717", "c": "\"\"\"\n训练配置\n\"\"\"\n\nimport os\nfrom pathlib import Path\nfrom dataclasses import dataclass, field\nfrom typing import List\n\n# 项目根目录\nTRAINING_ROOT = Path(__file__).parent\nDATA_DIR = TRAINING_ROOT / \"data\"\nOUTPUT_DIR = TRAINING_ROOT / \"output\"\n\n\n@dataclass\nclass DataConfig:\n \"\"\"数据配置\"\"\"\n # 蒸馏API配置\n api_base_url: str = \"https://dashscope.aliyuncs.com/compatible-mode/v1\"\n api_model: str = \"deepseek-v3.2\" # 阿里云百炼的 DeepSeek\n api_key_env: str = \"sk-ad84676a8bf64a87924f2da0a98942e8\"\n \n # 数据路径\n scenarios_file: str = str(DATA_DIR / \"scenarios.json\")\n raw_data_dir: str = str(DATA_DIR / \"raw\")\n processed_data_dir: str = str(DATA_DIR / \"processed\")\n \n # 数据生成参数\n num_samples: int = 20000 # 目标数据量\n samples_per_file: int = 500 # 每个文件保存的样本数\n max_retries: int = 3 # API调用失败重试次数\n temperature: float = 0.9 # 生成温度(高一点增加多样性)\n max_tokens: int = 1500 # 单次生成最大token\n \n # 并发配置\n concurrent_requests: int = 10 # 并发请求数\n request_delay: float = 0.2 # 请求间隔(秒)\n \n @property\n def api_key(self) -> str:\n return self.api_key_env\n\n\n@dataclass\nclass ModelConfig:\n \"\"\"模型配置\"\"\"\n # 基座模型\n base_model_name: str = \"Qwen/Qwen2.5-1.5B-Instruct\"\n base_model_local: str = str(OUTPUT_DIR / \"base_model\")\n \n # 下载源\n download_source: str = \"modelscope\" # modelscope 或 huggingface\n modelscope_model_id: str = \"Qwen/Qwen2.5-1.5B-Instruct\"\n \n # LoRA 配置\n lora_r: int = 16\n lora_alpha: int = 32\n lora_dropout: float = 0.05\n lora_target_modules: List[str] = field(default_factory=lambda: [\n \"q_proj\", \"k_proj\", \"v_proj\", \"o_proj\",\n \"gate_proj\", \"up_proj\", \"down_proj\"\n ])\n \n # 输出路径\n lora_output_dir: str = str(OUTPUT_DIR / \"lora_adapter\")\n merged_model_dir: str = str(OUTPUT_DIR / \"merged_model\")\n logs_dir: str = str(OUTPUT_DIR / \"logs\")\n\n\n@dataclass\nclass TrainingConfig:\n \"\"\"训练配置\"\"\"\n # 训练参数\n num_train_epochs: int = 3\n per_device_train_batch_size: int = 1\n gradient_accumulation_steps: int = 16\n learning_rate: float = 2e-4\n warmup_ratio: float = 0.1\n lr_scheduler_type: str = \"cosine\"\n max_seq_length: int = 512\n \n # 优化配置(针对8GB显存)\n fp16: bool = True\n gradient_checkpointing: bool = True\n optim: str = \"paged_adamw_8bit\"\n \n # 量化配置\n load_in_4bit: bool = True\n bnb_4bit_quant_type: str = \"nf4\"\n bnb_4bit_use_double_quant: bool = True\n \n # 保存策略\n save_strategy: str = \"epoch\"\n logging_steps: int = 10\n \n # 数据\n train_file: str = str(DATA_DIR / \"processed\" / \"train.json\")\n val_file: str = str(DATA_DIR / \"processed\" / \"val.json\")\n val_ratio: float = 0.05 # 验证集比例\n\n\n@dataclass\nclass QualityFilterConfig:\n \"\"\"质量过滤配置\"\"\"\n # AI痕迹关键词(必须过滤)\n ai_patterns: List[str] = field(default_factory=lambda: [\n \"作为AI\", \"作为一个AI\", \"作为人工智能\",\n \"我是AI\", \"我是一个AI\", \"我是人工智能\",\n \"根据我的分析\", \"根据分析\", \n \"我理解您的感受\", \"我理解你的感受\",\n \"首先,其次\", \"第一,第二\",\n \"以下是\", \"以下建议\",\n \"请问您\", \"您可以考虑\",\n ])\n \n # 必须包含的情感词(至少一个)\n emotion_words: List[str] = field(default_factory=lambda: [\n \"哈哈\", \"嗯\", \"啊\", \"emmm\", \"呜呜\", \n \"唉\", \"诶\", \"噢\", \"嘛\", \"啦\", \"吧\",\n \"!\", \"~\", \"...\", \"?\",\n \"懂\", \"真的\", \"太\", \"好\", \"超\",\n ])\n \n # 最小对话轮次\n min_turns: int = 4 # 至少2轮(4条消息)\n \n # 反问比例上限\n max_question_ratio: float = 0.3 # assistant回复中问号结尾的比例\n\n\n# 全局配置实例\ndata_config = DataConfig()\nmodel_config = ModelConfig()\ntraining_config = TrainingConfig()\nquality_config = QualityFilterConfig()\n\n"}}}}