跳到主要内容

指南

配置参考

oloproof.yaml 和 release.yaml 的每个字段,附带其类型、默认值、可接受的取值和示例,均取自读取这些文件的模型。用它来查找某个字段;要学习工作流程,请阅读快速入门和门禁页面。

两个文件都会在任何东西运行之前被校验。未知字段、拼错的字段或类型错误的值都属于配置错误,命令以 2 退出,不执行任何用例。两个文件都有 JSON Schema,能读取 JSON Schema 的编辑器可以用它们进行补全。已安装的软件包会把它们连同结果模式一起写入当前目录下的 schemas/v1/:python -m oloproof_core.models.schema_export(这两个文件是 project_config.schema.json 和 release_policy.schema.json)。

在下面的表格中,“必需”表示缺少该字段时文件会被拒绝;其他字段显示的是省略时所使用的值。

oloproof.yaml 概览

一个小而完整的项目。它在本地运行一个 Python 函数,不需要网络,也不需要密钥,正是 oloproof init 生成的骨架结构。

# oloproof.yaml
version: 1
project: support-bot
dataset: datasets/support.jsonl
system:
  name: support-bot
  callable: app.bot:answer
evaluators:
  - type: exact_match
    criterion: correct_label
    field: label

顶层字段

字段类型默认值它是什么
version11文件格式版本。只有 1。
project字符串必需项目名称,显示在报告中,并在推送时使用。
dataset路径必需测试套件文件,JSONL 格式,相对于项目。它的行在测试套件中有说明。
system映射必需被测系统。见下文。
concurrency映射system: 8、judge: 4同时运行多少个系统调用和评判调用。
evaluators列表必需,至少一个在每个用例上度量什么。每个条目都有一个 type。
metrics列表空在每个评估器判据本身已构成的指标之外的额外指标。
predictive映射无分类器的标签、分数和真实值在哪里。见预测模型。
slices字符串列表空探索性切片:metadata.<key>、relevant_position 或 context_truncated。它们从不进入门禁。见切片。
min_slice_support整数,至少为 130符合条件的用例少于这个数时,切片显示其估计值,但没有区间。
replicates整数,至少为 11每个用例度量这么多次。用例仍然是单位:在计算任何区间之前,重复会在用例内部聚合。
pricing列表空你按模型为每百万 token 支付的费用。没有它时,成本以 token 报告,从不以美元报告。
egress字符串列表空oloproof push 可以把哪些原始内容发送到托管工作区。见结果与执行。

concurrency

字段类型默认值
system整数,至少为 18
judge整数,至少为 14

pricing 条目

Oloproof 不附带价格表。每个条目指定的模型名称必须与评估器的 model: 完全一致。

字段类型默认值
model字符串必需
input_per_mtok数字,0 或以上必需
output_per_mtok数字,0 或以上必需
# oloproof.yaml
version: 1
project: support-bot
dataset: datasets/support.jsonl
system:
  name: support-bot
  callable: app.bot:answer
evaluators:
  - type: exact_match
    criterion: correct_label
    field: label
pricing:
  - model: my-judge-model
    input_per_mtok: 0.15
    output_per_mtok: 0.6
egress: [raw_outputs]

system

系统需要且只需要 callable、http 或 rag 中的一个。

字段类型默认值它是什么
name字符串必需系统的名称。是其版本身份的一部分。
version字符串无你为这个版本取的标签。HTTP 系统必需。它是身份的一部分,所以修改它会使缓存的执行失效。
callablemodule:attribute无一个 Python 函数,同步或异步均可。它接收用例的 input 并返回输出。
http映射无对每个用例调用一次的端点。见下文。
rag映射无用 @rag_system 声明的分阶段 RAG 类。见下文。
config映射空与系统版本一同记录的自由格式设置。修改它们会改变版本。
code_pathsglob 模式列表空其内容计入可调用对象系统版本的源文件。没有它时,只对可调用对象自身的模块计算哈希。
timeout_s大于 0 的数字120可调用对象系统每次调用的时限。HTTP 系统改用 http.timeout_s。
records产物类型列表空可调用对象系统记录的产物类型,例如 retrieval/v1。在 HTTP 或 RAG 系统上会被拒绝。

system.http

字段类型默认值它是什么
url字符串必需每个用例发送到哪里。
methodGET、POST 或 PUTPOSTHTTP 方法。
output_path点分路径无JSON 响应中的哪个字段是输出,例如 result.answer。没有时表示整个响应体。
artifacts类型到点分路径的映射空作为产物记录的响应字段,例如 retrieval/v1: debug.retrieval。
version字符串无当没有 system.version 时用作系统的版本。HTTP 系统需要两者之一。
timeout_s大于 0 的数字30每个请求的时限。
# oloproof.yaml
version: 1
project: support-api
dataset: datasets/support.jsonl
system:
  name: support-api
  version: "2026-10-08"
  http:
    url: http://localhost:8000/answer
    output_path: answer
    artifacts:
      retrieval/v1: debug.retrieval
evaluators:
  - type: hit_rate
    k: 5

请求和响应的契约,以及超时和 HTTP 错误时会发生什么,见结果与执行。

system.rag

字段类型默认值它是什么
objectmodule:attribute必需用 @rag_system 声明的类,或它的一个实例。
depth整数,至少为 1类中的值检索返回多少个段落。
top_k整数,至少为 1类中的值其中有多少个进入生成。
token_budget整数,至少为 1类中的值上下文的 token 上限。需要类的 count_tokens(passage)。
index_version字符串类中的值检索身份的一部分。每当重建索引时修改它。

这里给出的设置会覆盖类所声明的设置。分阶段系统自己记录 retrieval/v1、context/v1 和 citations/v1 产物,所以与它同时出现的 records 会被拒绝。见 RAG。

evaluators

每个条目都接受一个 type 以及以下两个通用字段:

字段类型默认值它是什么
criterion字符串必需,除非该类型有默认值被度量对象的名称。每个判据都是一个指标,规则的 metric: 指的就是它。
on_execution_errormissing 或 failmissing系统调用失败的用例在这个判据上计为什么。missing 把它作为未观测保留在分母中;fail 把它计为失败。

fail 只适用于通过/失败型评估器;在分数评估器上使用它属于配置错误。on_execution_error 是 YAML 字段;SDK 评估器类不接受这样的参数,出错的用例计为缺失。

评估器类型

“读取”列出评估器的结论所依赖的内容,这也是其缓存的评判结果所用的键。“SDK”指明 oloproof.evaluators 中的类。

YAML type读取SDK是否需要网络或密钥
exact_matchoutput、expectedExactMatch否
containsoutput、expectedContains否
regexoutputRegex否
json_schemaoutputJsonSchema否
rubric_judgeinput、output、expectedRubricJudge是,一个模型提供方
model_classifieroutput(或 text 指定的字段),可选 premise仅限 YAML是,一个兼容 TEI 的服务器
probability_judge用例和输出仅限 YAML是,一个返回对数概率的、兼容 OpenAI 的提供方
cascade与它的两个阶段相同仅限 YAML是
hit_rate、recall、mrr、ndcgartifacts.retrieval、expectedHitRate、Recall、MRR、NDCG否
citation_validityartifacts.citations、artifacts.contextCitationValidity否
groundedness_judgeinput、output、artifacts.contextGroundedness是
citation_support_judgeinput、output、artifacts.context、artifacts.citationsCitationSupport是
agent_max_stepsartifacts.agent_trajectoryAgentMaxSteps否
agent_tool_calledartifacts.agent_trajectoryAgentToolCalled否
agent_no_tool_loopartifacts.agent_trajectoryAgentNoToolLoop否
agent_tool_sequenceartifacts.agent_trajectory、expectedAgentToolSequence否
agent_no_undeclared_toolartifacts.agent_trajectory、expectedAgentNoUndeclaredTool否
agent_constraints_satisfiedartifacts.agent_trajectoryAgentConstraintsSatisfied否
agent_routeartifacts.agent_trajectoryAgentRoute否
agent_tool_permissionsartifacts.agent_trajectoryAgentToolPermissions否
agent_max_handoffsartifacts.agent_trajectoryAgentMaxHandoffs否
predictive_correctoutput 和 expected 的标签字段PredictiveCorrect否
predictive_recall同上PredictiveRecall否
predictive_precision同上PredictivePrecision否
predictive_absolute_error同上,数值型AbsoluteError否
predictive_brieroutput 的分数字段,expected 的标签Brier否
predictive_log_loss同上LogLoss否
predictive_ranking同上PredictiveRanking否
没有 YAML 类型artifacts.conversationConversationCompleted(仅限 SDK)否
没有 YAML 类型expected、artifacts.conversationConversationJudge(仅限 SDK)是
没有 YAML 类型你所声明的内容@evaluator 和 CustomEvaluator(仅限 SDK)由你决定

调用托管模型的评判模型会把用例内容发送给该提供方,并由其计费。密钥从 api_key_env 中指定的环境变量读取;Oloproof 从不把它们存储在这些文件中。

确定性评估器

类型字段类型默认值
exact_matchfield输出中的点分路径无:整个输出
exact_matchexpected_fieldexpected 中的点分路径无:与 field 相同
exact_matchstrip布尔值true
exact_matchcasefold布尔值false
containsfield、expected_field与 exact_match 相同无
regexpattern正则表达式必需
regexfield点分路径无
regexpass_ifmatch 或 no_matchmatch
json_schemaschema内联的 JSON Schema,或相对于项目的 JSON 文件路径必需
json_schemafield点分路径无

模型评判器

rubric_judge、groundedness_judge 和 citation_support_judge 共享这些字段。rubric_judge 需要且只需要 rubric_file 或 rubric_text 中的一个;两个 RAG 评判器最多接受一个,否则使用内置的评分细则。它们的 criterion 默认分别为 groundedness 和 citation_support。

字段类型默认值
provideranthropic、openai 或 openai_compatible必需
model字符串必需
rubric_file路径无
rubric_text字符串无
api_key_env环境变量名ANTHROPIC_API_KEY 或 OPENAI_API_KEY
base_urlURL提供方的默认地址
temperature数字0
max_tokens整数,至少为 1512
timeout_s大于 0 的数字60

probability_judge 提出一个有类型的问题,并读取模型的概率:

字段类型默认值
provideropenai 或 openai_compatible必需
model字符串必需
question字符串必需
formyes_no、choice 或 score必需
min_probability(0, 1] 中的数字必需
options回答到描述的映射用于 choice
pass_options回答列表用于 choice
levels等级到描述的映射,最低的在前用于 score
pass_at_least一个等级用于 score
calibrationslope(大于 0)、intercept、from_version无
api_key_env、base_url同上无
timeout_s大于 0 的数字60

cascade 先运行一个低成本的评判模型,并把不确定的用例升级处理:

字段类型默认值
first一个 probability_judge 条目必需
then一个 rubric_judge 或 probability_judge 条目必需
escalate_between两个概率必需

各阶段评判的是级联自己的 criterion;指定了不同判据的阶段会被拒绝。

model_classifier 用兼容 TEI 的服务器上的训练好的模型为文本打分:

字段类型默认值
model字符串必需
base_urlURL必需
label要读取的分类器标签必需
min_score 或 max_score[0, 1] 中的数字,恰好一个必需
text对哪个字段进行分类output
premise第二段文本,用于句对分类器无
api_key_env环境变量名无
timeout_s大于 0 的数字30

RAG 评估器

类型字段类型默认值
hit_rate、recall、mrr、ndcgk整数,至少为 1hit_rate 和 recall 为 5,mrr 和 ndcg 为 10
hit_rate、recall、mrr、ndcgrelevance_unitdoc 或 chunkdoc
hit_rate、recall、mrr、ndcgcriterion字符串<type>_at_<k>,例如 hit_rate_at_5
citation_validityrequire_citations布尔值false
citation_validitycriterion字符串citations_valid

智能体评估器

类型字段类型默认值
agent_max_stepsmax_steps整数,至少为 1必需
agent_tool_calledtool_name字符串必需
agent_tool_calledmin_calls整数,至少为 11
agent_no_tool_loopmax_repeats整数,至少为 12
agent_tool_sequenceordered布尔值true
agent_constraints_satisfiedconstraints约束名称列表空
agent_tool_permissionspermissions智能体到允许工具的映射必需
agent_max_handoffsmax_handoffs整数,0 或以上必需

每种智能体类型都有默认的 criterion,所以可以省略:它自己的类型名称,或由其设置构建的名称(agent_steps_le_8、agent_tool_lookup_called、agent_handoffs_le_2)。见智能体。

预测评估器

类型字段类型默认值
predictive_correct、predictive_recall、predictive_precisionpositive任意 JSON 值true,或 predictive: 块中的值
同上field输出字段label,或 predictive.label_field
同上expected_field预期字段label,或 predictive.expected_field
predictive_absolute_errortarget_range两个数字必需
predictive_absolute_errorfield、expected_field同上label
predictive_brier、predictive_log_loss、predictive_rankingpositive任意 JSON 值true,或块中的值
同上field输出字段score,或 predictive.score_field
同上expected_field预期字段label,或块中的值
predictive_log_lossclip(0, 0.5) 中的数字必需

预测评估器如果没有写出 positive、field 或 expected_field,就从 predictive: 块中取值;它自己写出的值会被保留。

predictive

字段类型默认值
label_field字符串label
score_field字符串score
expected_field字符串label
positive任意 JSON 值true
calibration_bins整数,至少为 110
thresholds数字列表空
averagemacro 或 micro无:不聚合

metrics

每个评估器判据本身已经是一个指标。一个 metrics: 条目再增加一个,以 type 区分。

type字段它是什么
quantileid、source、(0, 1) 中的 quantilelatency_ms、input_tokens、output_tokens、cost_usd、agent_steps 或 agent_tool_calls 的一个分位数。
rankingid、criterion、statistic:roc_auc 或 average_precision基于某个排序判据分数顺序的统计量。
human_score、human_preferenceid被拒绝:目前还没有已认可的方法读取这些标签。
cost_per_acceptedid、criterion、cost_ceiling_usd、cost_ceiling_source在其接线通过审计认可之前被拒绝。
# oloproof.yaml
version: 1
project: support-bot
dataset: datasets/support.jsonl
system:
  name: support-bot
  callable: app.bot:answer
evaluators:
  - type: exact_match
    criterion: correct_label
    field: label
metrics:
  - id: latency_p95
    type: quantile
    source: latency_ms
    quantile: 0.95

release.yaml

发布策略:哪些规则作出决策,哪些决策会阻止发布。省略的设置保持默认值,所以只指定了规则的策略仍会在 FAIL、INSUFFICIENT_EVIDENCE 和 MANUAL_REVIEW 时阻止。

# release.yaml
version: 1
rules:
  - id: label_accuracy
    metric: correct_label
    min: 0.8
字段类型默认值它是什么
version11文件格式版本。
confidence_level概率0.95规则读取的每个区间的置信水平。
block_on决策状态列表FAIL、INSUFFICIENT_EVIDENCE、MANUAL_REVIEW让门禁阻止并设定退出码的状态。
warn_on决策状态列表空只警告而不阻止的状态。不能与 block_on 重叠。
block_on_partial_run布尔值true没有完成的运行是否以退出码 5 阻止。
require_validated_evaluators布尔值true基于模型评判器的规则是否在评判模型对照人工标签验证之前暂缓决策。确定性评估器不受此限。
minimum_evaluator_agreement[0, 1] 中的数字无评判模型在获准验证之前,与人工标签的一致性按其下界必须达到的水平。
maximum_evaluator_bias(0, 1] 中的数字无评判模型在获准验证之前,其通过率与人工通过率之间允许的最大差距。
allow_approximate_methods布尔值false规则是否可以依据引擎标记为近似的区间(聚类二值区间)作出决策。否则它显示 MANUAL_REVIEW。
min_clusters整数,至少为 1020聚类少于这个数时,聚类规则显示 INSUFFICIENT_EVIDENCE。
difference_methodbounded_paired_difference@1 或 conditional_exact_paired_difference@1无:使用第一个由哪种已认可的方法为配对二值比率差异设界。
early_stopping布尔值false分批运行用例,一旦每条规则都已决策就停止。见门禁。
early_stopping_seed整数,0 或以上无用例顺序的种子。
early_stopping_batch_size整数,至少为 125每批的用例数。
rules列表必需,至少一条规则。见下文。
families列表空其错误 FAIL 被共同控制的规则。
review_rule映射无被拒绝:其接线尚未获得认可。

rules

一个列表同时容纳两种规则。运行规则需要且只需要 min、max 或 max_failures 中的一个。比较规则指明它的 kind,并对两次运行之间的差异作出决策;见比较规则。

字段类型默认值适用于
id字符串必需全部
metric指标 id 或判据必需全部
kindinterval_threshold、observed_count、superiority、non_inferiority、equivalence运行规则可推断全部
min数字无运行规则:当区间下界至少为该值时 PASS
max数字无运行规则:当区间上界至多为该值时 PASS
max_failures整数,0 或以上无observed_count:基于已执行测试套件的计数,没有区间
margin大于 0 的数字,以指标的单位计无non_inferiority 和 equivalence;在 superiority 上被拒绝
directionmin 或 maxmin仅 non_inferiority:越高越好还是越低越好
max_missing_fraction[0, 1] 中的数字无区间规则和比较规则
requires_manual_review布尔值false全部:该规则总是显示 MANUAL_REVIEW
scopeglobal 或一个切片global区间规则和比较规则
min_support整数,至少为 1无针对切片的比较规则

families

字段类型默认值
id字符串必需
correctionholmholm
rules规则 id 列表必需,至少一个
# release.yaml
version: 1
warn_on: [INSUFFICIENT_EVIDENCE]
block_on: [FAIL, MANUAL_REVIEW]
rules:
  - id: label_accuracy
    metric: correct_label
    min: 0.8
    max_missing_fraction: 0.05
  - id: no_regression
    metric: correct_label
    kind: non_inferiority
    margin: 0.02

产物类型

产物是系统在其输出旁边写下的有类型记录,例如它检索到了什么。类型是一个小写名称,可选带有版本,匹配 ^[a-z][a-z0-9_]*(/v[1-9][0-9]*)?$。需要某个产物的评估器会指明它,而如果系统没有声明某个必需的类型,运行会在开始之前被拒绝,而不是把每个用例都计为缺失。

类型由谁写入由谁需要
retrieval/v1current_case().retrieval(...)、一个 @rag_system 或 http.artifactshit_rate、recall、mrr、ndcg
context/v1current_case().context(...) 或一个 @rag_systemcitation_validity、groundedness_judge、citation_support_judge
citations/v1current_case().citations(...) 或一个 @rag_systemcitation_validity、citation_support_judge
agent_trajectory/v1current_case().agent_trajectory(...)每个 agent_* 评估器,以及 agent_steps 和 agent_tool_calls 来源
conversation/v1current_case().artifact(CONVERSATION, ...)ConversationCompleted、ConversationJudge
stage_timings/v1一个 @rag_system无;显示在延迟旁边

可调用对象系统在 records:(或 @system(records=...))中声明它记录的类型;HTTP 系统在 http.artifacts 中声明;分阶段 RAG 系统自己记录。

版本、缓存键与失效

Oloproof 复用输入没有变化的工作,并根据内容摘要来判定什么是“没有变化”。每个摘要都由引擎计算,并随运行一起记录。

记录当以下内容完全相同时被复用
系统版本name、version、config,以及一个代码摘要:可调用对象的模块源代码(或 code_paths 匹配到的每个文件),HTTP 系统的 url、method、output_path 和 artifacts
执行系统版本、用例的 input 和重复序号。只有成功的执行会被复用。
评判结果评估器版本(它的类型和每一项设置),以及它读取的每个字段的摘要,如评估器表中所列
分析分析计划、指标、置信水平、测试套件摘要以及它计入的每个输入
门禁每个分析、策略摘要、运行是否完成,以及决策所引用的每个评估器的有效状态

Oloproof 看不到的东西需要由你来声明:

  • HTTP 系统的行为在服务器上。每当 URL 背后的东西发生变化时,修改 system.version,否则旧的缓存输出会代表新的系统。
  • 可调用对象的辅助模块只有在被 code_paths 匹配时才会计算哈希。没有它时,编辑辅助模块不会改变版本。
  • 方法或可调用对象必须声明版本,并且当对象的状态改变时,版本也必须改变。
  • RAG 索引由 index_version 标识;重建索引时修改它。
  • 模型评判器的身份是它的设置,而不是提供方的权重。提供方在同一名称背后更新模型,缓存是察觉不到的。
  • 自定义 @evaluator 对定义它的模块文件计算哈希,并且只有在它声明 cacheable=True 时,它的评判结果才会在多次运行之间被复用。内置的评分细则评判器是可缓存的;确定性评估器会被重新计算,这成本很低。

缓存的工作保存在项目的本地存储中,即 oloproof.yaml 旁边的 .oloproof/store.sqlite(或 OLOPROOF_HOME 之下)。删除存储会丢弃所有缓存和所有运行。在托管工作区中,引擎不复用缓存的执行、评判结果或分析,因为推送可以写入它们;它会重新计算。