- 配置写进代码——CLI flag、
experiments/下的 experiment 文件、根目录的niceeval.config.ts。跑几次、超时多久、并发多少、judge 用哪个模型、默认看哪份报告,全都在这里,没有对应的环境变量。 - 密钥放环境变量——API key、provider token。再加上
NO_COLOR这类描述”输出到哪个终端”的事实。
niceeval exp --dry 打印出来的就是真正生效的值,不用担心某个环境变量在背后改了它。CLI 与运行时文案是英语;浏览器 view 自己提供中英切换。
配置:想让这个值活多久,就写在哪一层
同一个值出现在多层时,按 CLI flag → experiment → eval → config → 内置默认 取,前面有值就不看后面。config 是默认来源,不是覆盖层——评估用例自己声明的timeoutMs 不会被项目默认压掉。
只想这一次不一样——写在命令上:
agent、model、flags 只能写在这里,没有对应的 flag——换 agent 或换模型是复制一个 experiment 文件的事,这样每次运行对着谁跑都记在快照里,事后能复现。
整个项目共享——写进 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 的 key 只从
NICEEVAL_JUDGE_KEY(或 judge.apiKeyEnv 指定的变量)读,端点只从 judge.baseUrl 读。被测应用把标准的 OPENAI_* 挪作它用时,Judge 不会跟着串味。
接着看
defineConfig 参考
每个配置字段的类型与完整说明。
CLI 参考
命令、flag 全表与退出码。
写 experiment
哪些值属于一次具体运行。
CI 集成
在 CI 里传 secrets。