()
| 179 | |
| 180 | |
| 181 | def main(): |
| 182 | parser = argparse.ArgumentParser( |
| 183 | description="通用命令行评测脚本", |
| 184 | formatter_class=argparse.RawDescriptionHelpFormatter, |
| 185 | epilog=""" |
| 186 | 使用示例: verl/Bootcampv2/example_bootcamp/examples/run_example_evaluation.sh |
| 187 | """ |
| 188 | ) |
| 189 | |
| 190 | parser.add_argument('--dataset-path', type=str, help='数据集文件路径 (.json, .jsonl, .parquet)') |
| 191 | parser.add_argument('--output-dir', type=str, help='评测结果输出目录') |
| 192 | parser.add_argument('--api-key', type=str, help='API 密钥') |
| 193 | parser.add_argument('--api-url', type=str, default=None, help='API URL (如果不指定则使用默认的OpenAI API)') |
| 194 | parser.add_argument('--api-model', type=str, default='gpt-3.5-turbo', help='模型名称 (默认: gpt-3.5-turbo)') |
| 195 | parser.add_argument('--api-proxy', type=str, default='', help='代理url') |
| 196 | parser.add_argument('--api-extra-headers', type=str, default=None, help='额外的API头部,格式: "key1:value1,key2:value2"') |
| 197 | parser.add_argument('--api-start-url', type=str, default=None, help='Start阶段的API URL (用于Bayesian Agent评测器)') |
| 198 | parser.add_argument('--api-start-key', type=str, default=None, help='Start阶段的API 密钥 (默认使用--api-key)') |
| 199 | parser.add_argument('--api-start-headers', type=str, default=None, help='Start阶段的额外API头部 (默认使用--api-extra-headers)') |
| 200 | parser.add_argument('--api-start-model', type=str, default=None, help='Start阶段的模型名称 (默认使用--api-model)') |
| 201 | parser.add_argument('--api-loop-url', type=str, default=None, help='Loop阶段的API URL (用于Bayesian Agent评测器)') |
| 202 | parser.add_argument('--api-loop-key', type=str, default=None, help='Loop阶段的API 密钥 (默认使用--api-key)') |
| 203 | parser.add_argument('--api-loop-headers', type=str, default=None, help='Loop阶段的额外API头部 (默认使用--api-extra-headers)') |
| 204 | parser.add_argument('--api-loop-model', type=str, default=None, help='Loop阶段的模型名称 (默认使用--api-model)') |
| 205 | parser.add_argument('--api-extra-params', type=str, default=None, help='额外的模型参数;支持 JSON 字符串或 @文件(JSON)。示例:\n 1) JSON 字符串:\n --api-extra-params \'{"temperature":0.7, "max_completion_tokens":65536, "extra_body": {"enable_thinking": true}}\'\n 2) 从文件读取(以 @ 开头):\n --api-extra-params @/path/to/params.json\n 3) 回退兼容旧格式:"temperature:0.7,max_tokens:2048,top_p:0.9"') |
| 206 | parser.add_argument('--verify-correction-kwargs', type=str, default=None, help='额外的奖励计算函数参数;支持格式同api-extra-params(该参数解包传递给reward calculator的verify correction方法)') |
| 207 | parser.add_argument('--evaluator-class', type=str, default=None, help='评测器类路径 (如: verl.Bootcampv2.example_bootcamp.example_evaluator.ExampleEvaluator)') |
| 208 | parser.add_argument('--reward-calculator-class', type=str, default=None, help='奖励计算器类路径(可选,优先级低于 --reward-config)') |
| 209 | parser.add_argument('--reward-config', type=str, default=None, help='reward配置YAML文件路径') |
| 210 | parser.add_argument('--tool-config', type=str, default=None, help='工具配置YAML文件路径') |
| 211 | parser.add_argument('--interaction-config', type=str, default=None, help='交互配置YAML文件路径') |
| 212 | parser.add_argument('--max-tool-turns-per-interaction', type=int, default=None, help='每次交互的最大工具调用轮次 (已弃用)') |
| 213 | parser.add_argument('--max-interaction-turns', type=int, default=None, help='最大交互轮次 (已弃用)') |
| 214 | parser.add_argument('--max-assistant-turns', type=int, default=None, help='assistant响应的最大轮次 (默认: None,无限制)') |
| 215 | parser.add_argument('--max-user-turns', type=int, default=None, help='user输入的最大轮次(包括tool response, interaction response) (默认: None,无限制)') |
| 216 | parser.add_argument('--max-concurrent', type=int, default=1, help='最大并发数 (默认: 1)') |
| 217 | parser.add_argument('--verbose', action='store_true', help='输出详细信息') |
| 218 | parser.add_argument('--dry-run', action='store_true', help='只验证配置,不实际运行评测') |
| 219 | parser.add_argument('--tokenizer-path', type=str, default=None, nargs='?', const=None, help='tokenizer路径(可选, apply template时使用)') |
| 220 | parser.add_argument('--bootcamp-registry', type=str, default=None, help='bootcamp注册表路径(可选, 用于批量评测)') |
| 221 | parser.add_argument('--resume-from-result-path', type=str, default=None, help='断点重试模式:指定要恢复的结果文件路径(.jsonl)') |
| 222 | parser.add_argument('--max-iterations', type=int, default=None, help='单轮数据最大迭代次数(用于单轮评测)') |
| 223 | parser.add_argument('--use-retrieval', action='store_true', help='是否启用参数检索') |
| 224 | parser.add_argument('--retrieval-db-path', type=str, default=None, help='参数检索数据库路径(文件或目录)') |
| 225 | parser.add_argument('--retrieval-top-n', type=int, default=5, help='参数检索返回的近邻数量') |
| 226 | parser.add_argument('--max-loops', type=int, default=None, help='单轮数据最大迭代次数(用于单轮评测)') |
| 227 | parser.add_argument('--bayesian-n-workers', type=int, default=None, help='贝叶斯优化工人数量') |
| 228 | parser.add_argument('--bayesian-init-points', type=int, default=None, help='贝叶斯优化初始点数量') |
| 229 | parser.add_argument('--bayesian-n-iter', type=int, default=None, help='贝叶斯优化迭代次数') |
| 230 | parser.add_argument('--cold-start-type', type=str, default=None, help='冷启动类型') |
| 231 | args = parser.parse_args() |
| 232 | |
| 233 | # 验证输入文件 |
| 234 | if not os.path.exists(args.dataset_path): |
| 235 | print(f"❌ 错误: 数据集文件不存在: {args.dataset_path}") |
| 236 | sys.exit(1) |
| 237 | |
| 238 | # 验证断点重试文件 |
no test coverage detected