muse-agent-example/tests/单元/test_评测数据集.py
zizi d909d1bd1b 后端实现与用例身份:19 包集成落地并修复收尾缺陷
实现侧:
- 上下文:任务范围拆分为 范围校验/范围授权;索引按可发现口径重建、索引新鲜度改对称差;依赖校验统一快照漂移说明。
- 知识方法:方法与材料读取口径统一;超限方法材料按可选省略,核对路径不再二次计费;删除无合同的读时重算。
- 任务运行:新增 context.usage/tool.denied 事件类型;连接池常驻并在装配生命周期内开关;调用结算与核对分列。
- 效果评测/审校修订/交付连载/作者经验/作品规划:凭据冻结、标定消费、导出补证、事实引文核对等收尾修复。
- 资源加载:能力正文不再夹带索引用的导航注记(该注记此前进入角色与技能的模型提示)。
- 元数据:受保护骨架与代码保护属性对齐;字段校验与内置结构口径同步。
- 基础设施:环境预检进入装配生命周期;数据库连接运行期字段不参与相等比较;索引指纹归一化 jsonb 浮点。
- 删除被替代实现:7 份旧提示词模板与空壳 资料来源 读取器。

用例侧:
- 用例身份与导航元信息迁移;夹具补生命周期、同库暴露与模板封存;
- 本轮定向修复:方法材料省略、事实引文、迁移回执、额度与暂停用例、慢用例超时预算等。
2026-09-18 01:15:00 +08:00

146 lines
5.7 KiB
Python

"""数据集的来源泄漏、版本和公开输入合同,不认证真实模型效果。"""
import json
import pytest
from pydantic import ValidationError
from muse.效果评测.接口 import 公开评测输入, 冻结数据集, 数据样本, 数据集发布, 评测错误
def _sample(id_="sample-1", split="holdout", group="book-1", text="我的公开合成正文。"):
return 数据样本(
sample_id=id_,
source_ref="synthetic:sample",
license_ref="synthetic:许可",
source_groups=(group,),
split=split,
input=公开评测输入(instruction="保持原意改写。", original=text),
answer={"private": "只属于oracle的金标准"},
)
@pytest.mark.case_id(
"NC-w25-252001",
environment="离线纯合同",
given="含私有答案与可变输入的数据集",
when="冻结后修改原请求容器",
then=["公开输入与答案分开、封存副本不随请求变化"],
contract="docs/系统架构/新版设计/模块设计/B10-效果评测.md",
)
def test_封存输入和答案分开且不受原请求容器修改影响__252001():
s = _sample()
request = 数据集发布(dataset_id="synthetic", revision=1, samples=(s,))
frozen = 冻结数据集(request)
assert "只属于oracle" not in json.dumps(frozen["public"], ensure_ascii=False)
assert frozen["answers"][0]["answer"] == s.answer
s.answer["private"] = "后来改变的值"
s.input.context["nested"] = {"change": 1}
assert frozen["answers"][0]["answer"]["private"] == "只属于oracle的金标准"
assert frozen["public"]["samples"][0]["input"]["context"] == {}
changed = 冻结数据集(request)
assert frozen["version_id"] == changed["version_id"]
assert frozen["public_hash"] != changed["public_hash"]
assert frozen["answer_hash"] != changed["answer_hash"]
@pytest.mark.case_id(
"NC-w25-252002",
environment="离线纯合同",
given="重复样本或跨分割的同源及变体",
when="发布前核对分割",
then=["重复身份、同源跨分割及空来源许可被拒绝"],
contract="docs/系统架构/新版设计/模块设计/B10-效果评测.md",
)
@pytest.mark.parametrize(
"bad",
[
"duplicate_id",
"same_group",
"same_text",
"instruction_variant",
"duplicate_group",
"blank_source",
"blank_license",
],
)
def test_样本重复和跨分割来源泄漏被拒绝__252002(bad):
a = _sample()
b = _sample("sample-2", "calibration", "book-2", "另一段不同正文。")
if bad == "duplicate_id":
b = b.model_copy(update={"sample_id": a.sample_id})
elif bad == "same_group":
b = b.model_copy(update={"source_groups": a.source_groups})
elif bad in {"same_text", "instruction_variant"}:
b = b.model_copy(
update={
"input": a.input.model_copy(
update={"instruction": "改变任务要求"} if bad == "instruction_variant" else {}
)
}
)
elif bad == "duplicate_group":
b = b.model_copy(update={"source_groups": ("book-2", "book-2")})
elif bad == "blank_source":
b = b.model_copy(update={"source_ref": " "})
else:
b = b.model_copy(update={"license_ref": " "})
with pytest.raises(评测错误):
冻结数据集(数据集发布(dataset_id="synthetic", revision=1, samples=(a, b)))
@pytest.mark.case_id(
"NC-w25-252003",
environment="离线纯合同",
given="没有正文与背景的纯指令任务",
when="比较任务内容分组",
then=["不同任务可分割,相同指令不能跨分割"],
contract="docs/系统架构/新版设计/模块设计/B10-效果评测.md",
)
def test_只有指令的样本按实际任务内容识别而非都视为空文本__252003():
a = _sample(split="discovery", text="").model_copy(
update={"input": 公开评测输入(instruction="提出关于雨天的故事。")}
)
b = _sample("sample-2", "holdout", "book-2", text="").model_copy(
update={"input": 公开评测输入(instruction="提出关于沙漠的故事。")}
)
result = 冻结数据集(数据集发布(dataset_id="synthetic", revision=1, samples=(a, b)))
assert len(result["public"]["samples"]) == 2
with pytest.raises(评测错误):
冻结数据集(
数据集发布(
dataset_id="synthetic",
revision=1,
samples=(a, b.model_copy(update={"input": a.input})),
)
)
@pytest.mark.case_id(
"NC-w25-252004",
environment="离线纯合同",
given="含答案、臂或模型字段的生成输入",
when="输入合同校验",
then=["拒绝内部元信息,不自动合并进生成材料"],
contract="docs/系统架构/新版设计/模块设计/B10-效果评测.md",
)
@pytest.mark.parametrize("field", ["answer", "oracle", "blind_mapping", "arm", "model_id"])
def test_模型输入外壳不接受评测内部字段__252004(field):
with pytest.raises(ValidationError):
公开评测输入.model_validate({"instruction": "公开任务", field: {"secret": "不得合并"}})
@pytest.mark.case_id(
"NC-w25-252005",
environment="离线纯合同",
given="相同样本按不同顺序提交",
when="冻结数据集",
then=["版本身份及公开与私有哈希不变"],
contract="docs/系统架构/新版设计/模块设计/B10-效果评测.md",
)
def test_样本顺序不改变数据集身份及封存哈希__252005():
a, b = _sample(), _sample("sample-2", "calibration", "book-2", "另一段正文。")
one = 冻结数据集(数据集发布(dataset_id="synthetic", revision=1, samples=(a, b)))
two = 冻结数据集(数据集发布(dataset_id="synthetic", revision=1, samples=(b, a)))
assert one == two