- 配置写进代码:CLI flag、
experiments/下的 Experiment 文件、根目录的niceeval.config.ts。跑几次、超时多久、并发多少和 Judge 用哪个模型都在这里,没有对应的环境变量。 - 密钥放环境变量:API key、Provider token,再加上
NO_COLOR这类描述当前终端的设置。
niceeval exp --dry 打印出来的就是真正生效的值,不会有环境变量在背后改掉它。CLI 与运行时文案是英语;浏览器里的 niceeval view 可以切换中英文。
配置:想让这个值活多久,就写在哪一层
先想清楚这个值要在多大范围内生效,再决定写在哪一层。同一个值出现在多层时,按 CLI flag → Experiment → 评估用例 → config → 内置默认 取,前面有值就不看后面。config 只提供默认值,不会覆盖别的层:评估用例自己声明的timeoutMs 不会被项目默认值替换。
只想这一次不一样:写在命令上。
agent、model、flags 只能写在这里,没有对应的 CLI flag。要换 Agent 或换模型,就复制一个 Experiment 文件。这样每次运行用的是哪个 Agent 和模型都记在结果里,事后能复现。
整个项目共享:写进 niceeval.config.ts。
niceeval.config.ts 能放什么
每个字段的类型和完整说明在 defineConfig 参考。flag 全表在 CLI 参考。
环境变量:只有密钥和终端两类
把密钥放进下面这些环境变量。这就是 NiceEval 会读的全部环境变量;每个 Agent、Sandbox 和 Judge 只认自己那几个名字,不会去读别的 key。
想让 Judge 从别的变量名读 key,在配置里写明变量名:
.env 已经加载完:
.env。CLI 启动时会自动加载它,不会覆盖已经存在的环境变量,你不用每次 export:
.env 只用来放密钥,不是第二个配置文件。往里写 NICEEVAL_TIMEOUT 这类变量不会有任何效果。CI 里同样只传密钥:
想调这些值时写到哪一层
配置项没有环境变量层,所以下面每一项都只有这几个位置可写:
每个 Judge Provider 只读自己的默认 key 变量,或工厂
apiKeyEnv 显式指定的变量。
它不会借用其它 Provider 或被测应用的 key。
接着看
defineConfig 参考
每个配置字段的类型与完整说明。
CLI 参考
命令、flag 全表与退出码。
写 experiment
哪些值属于一次具体运行。
CI 集成
在 CI 里传 secrets。