命令行接口示例
()
| 851 | # ============= 命令行接口 ============= |
| 852 | |
| 853 | def main(): |
| 854 | """命令行接口示例""" |
| 855 | import argparse |
| 856 | |
| 857 | parser = argparse.ArgumentParser(description="数据后处理工具") |
| 858 | parser.add_argument("input", help="输入 jsonl 文件路径") |
| 859 | parser.add_argument("output", nargs='?', default=None, help="输出 jsonl 文件路径(可选,不提供则自动生成)") |
| 860 | parser.add_argument("--filter-success", action="store_true", help="只保留成功的样本") |
| 861 | parser.add_argument("--min-score", type=float, default=0.9, help="最小分数") |
| 862 | parser.add_argument("--max-score", type=float, default=1.0, help="最大分数") |
| 863 | parser.add_argument("--data-source", type=str, help="按数据源过滤") |
| 864 | parser.add_argument("--filter-design-end", action="store_true", help="只保留最后一条消息包含 <Design End> 的样本") |
| 865 | parser.add_argument("--extract-training", action="store_true", help="提取训练数据格式") |
| 866 | parser.add_argument("--extract-multimodal-training", action="store_true", help="提取多模态 SFT 训练格式") |
| 867 | parser.add_argument("--extract-xtuner-strict-training", action="store_true", help="提取 XTuner 严格字段训练格式") |
| 868 | parser.add_argument("--extract-messages", action="store_true", help="只提取消息") |
| 869 | parser.add_argument("--expand-messages-prefixes", action="store_true", help="将多轮对话展开为前缀集") |
| 870 | |
| 871 | args = parser.parse_args() |
| 872 | |
| 873 | # 创建处理器 |
| 874 | processor = DataPostProcessor() |
| 875 | |
| 876 | # 添加过滤器 |
| 877 | if args.filter_success: |
| 878 | processor.add_filter(filter_by_success, name="success") |
| 879 | |
| 880 | if args.min_score > 0.0 or args.max_score < 1.0: |
| 881 | processor.add_filter(filter_by_score(args.min_score, args.max_score), name="score") |
| 882 | |
| 883 | if args.data_source: |
| 884 | processor.add_filter(filter_by_data_source(args.data_source), name="data_source") |
| 885 | |
| 886 | if args.filter_design_end: |
| 887 | processor.add_filter(filter_by_design_end, name="design_end") |
| 888 | |
| 889 | # 添加转换器(需要按顺序添加,因为有些转换函数会修改数据) |
| 890 | if args.expand_messages_prefixes: |
| 891 | processor.add_transformer(expand_messages_prefixes, name="expand_messages_prefixes") |
| 892 | if args.extract_training: |
| 893 | processor.add_transformer(extract_for_training, name="training_format") |
| 894 | if args.extract_multimodal_training: |
| 895 | processor.add_transformer(extract_for_multimodal_training, name="multimodal_training_format") |
| 896 | if args.extract_xtuner_strict_training: |
| 897 | processor.add_transformer(extract_for_xtuner_strict_training, name="xtuner_strict_training_format") |
| 898 | if args.extract_messages: |
| 899 | processor.add_transformer(extract_messages_only, name="messages_only") |
| 900 | |
| 901 | |
| 902 | # 执行处理 |
| 903 | processor.process(args.input, args.output) |
| 904 | |
| 905 | |
| 906 | if __name__ == "__main__": |
no test coverage detected