Complete phase two benchmarks, plot previews and static export workflow
This commit is contained in:
@@ -0,0 +1,89 @@
|
||||
{
|
||||
"dataset_id": "agent-core-v1",
|
||||
"kind": "agent",
|
||||
"version": "1.0.0",
|
||||
"description": "受限真实 Runtime 工具选择、参数、无需调用和 Markdown 目录基线;不等同于复杂任务验收",
|
||||
"cases": [
|
||||
{
|
||||
"case_id": "arithmetic",
|
||||
"prompt": "必须调用 math.add 计算 17 + 25,并报告结果。",
|
||||
"allowed_tools": [
|
||||
"math.add",
|
||||
"system.echo"
|
||||
],
|
||||
"expected_tools": [
|
||||
{
|
||||
"name": "math.add",
|
||||
"arguments": {
|
||||
"left": 17,
|
||||
"right": 25
|
||||
}
|
||||
}
|
||||
],
|
||||
"output_contains": [
|
||||
"42"
|
||||
],
|
||||
"tags": [
|
||||
"tool-selection",
|
||||
"arguments"
|
||||
]
|
||||
},
|
||||
{
|
||||
"case_id": "echo",
|
||||
"prompt": "调用 system.echo 原样回显字符串 phase2-check,然后回答原文。",
|
||||
"allowed_tools": [
|
||||
"math.add",
|
||||
"system.echo"
|
||||
],
|
||||
"expected_tools": [
|
||||
{
|
||||
"name": "system.echo",
|
||||
"arguments": {
|
||||
"text": "phase2-check"
|
||||
}
|
||||
}
|
||||
],
|
||||
"output_contains": [
|
||||
"phase2-check"
|
||||
],
|
||||
"tags": [
|
||||
"exact-arguments"
|
||||
]
|
||||
},
|
||||
{
|
||||
"case_id": "no-tool",
|
||||
"prompt": "不调用任何工具,只回答:验收就绪",
|
||||
"allowed_tools": [
|
||||
"math.add",
|
||||
"system.echo"
|
||||
],
|
||||
"expected_tools": [],
|
||||
"output_contains": [
|
||||
"验收就绪"
|
||||
],
|
||||
"tags": [
|
||||
"unnecessary-tools"
|
||||
]
|
||||
},
|
||||
{
|
||||
"case_id": "markdown-catalog",
|
||||
"prompt": "使用 markdown.catalog 查询支持的 Markdown 语法,指出函数图像围栏的名称。",
|
||||
"allowed_tools": [
|
||||
"markdown.catalog"
|
||||
],
|
||||
"expected_tools": [
|
||||
{
|
||||
"name": "markdown.catalog",
|
||||
"arguments": {}
|
||||
}
|
||||
],
|
||||
"output_contains": [
|
||||
"function-plot"
|
||||
],
|
||||
"tags": [
|
||||
"markdown",
|
||||
"integration"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"version": "1.0.0",
|
||||
"description": "手工编写的中文工程笔记检索集;每篇含关键词与改写问法,混淆主题分别建篇。用于小规模质量对照,不代表生产分布。",
|
||||
"notes": [
|
||||
{"id":"deadlock","title":"死锁的必要条件","text":"死锁需要互斥、占有并等待、不可抢占、循环等待四个条件同时成立。规定所有线程按相同顺序申请锁,可以破坏循环等待条件。","queries":["死锁有哪些必要条件","几个线程各占一把锁并等待对方释放,怎样避免一直卡住"]},
|
||||
{"id":"starvation","title":"饥饿与公平调度","text":"饥饿指某个任务长期得不到资源,即使其他任务仍能运行。优先级老化会逐渐提高等待任务的优先级;公平队列可以减少长期等待。饥饿不等于所有进程互相等待的死锁。","queries":["优先级老化怎样缓解饥饿","系统一直有任务在跑,但一个低优先级任务永远轮不到怎么办"]},
|
||||
{"id":"rrf","title":"RRF 排名融合","text":"RRF 使用每个候选在各通道中的名次进行融合,单通道贡献为 1/(k+rank)。它避免直接比较全文检索与向量余弦相似度的原始分数。k 越大,头部名次的差距越平缓。","queries":["RRF 的融合公式是什么","全文分数和向量分数尺度不同,如何按排名合并结果"]},
|
||||
{"id":"rerank","title":"召回后的重排","text":"重排只重新排列已召回的候选,不能找回不在候选池中的相关段落。扩大候选池可能提高质量,但会增加精排成本。LexicalReranker 根据词面重合打分,不是 Cross-Encoder 神经模型。","queries":["重排能否找回未召回的文档","精排前候选池太小会导致什么问题"]},
|
||||
{"id":"optimistic","title":"笔记的乐观并发控制","text":"保存笔记时携带读取时的内容摘要。服务端比较当前摘要,若已变化则拒绝覆盖并报告冲突。用户应重新加载或合并修改,避免把另一个窗口的新内容静默覆盖。","queries":["保存时为什么比较内容摘要","两个窗口同时修改同一篇笔记,怎样避免后保存者覆盖新内容"]},
|
||||
{"id":"idempotency","title":"重复提交的幂等键","text":"客户端为一次逻辑上传创建唯一幂等键。网络重试使用相同的键和内容,服务端返回原附件编号;同键不同内容必须拒绝,防止错误复用。新的逻辑上传使用新的键。","queries":["幂等键如何处理重复上传","上传成功但响应丢失,重试怎样不生成两个附件"]},
|
||||
{"id":"sse","title":"事件流断线续读","text":"SSE 事件携带递增 sequence。客户端保存最后接收的序号,重连后请求后续事件并去重。终止事件只能出现一次;连接中断本身不代表后台任务被取消。","queries":["SSE 重连如何去重","页面断网后任务仍在运行,如何恢复之前错过的进度"]},
|
||||
{"id":"cancel","title":"后台任务取消边界","text":"取消标志由运行循环和工具边界检查。排队任务可以立即结束;正在同步渲染的工作应在安全边界检查取消,并丢弃产物。取消后不能发布完成事件或允许下载未完成文件。","queries":["导出任务取消后怎样处理产物","用户停止渲染时工作线程还没返回,应当如何收尾"]},
|
||||
{"id":"embedding","title":"向量空间隔离","text":"不同 Embedding 模型或维度产生的向量属于不同空间,不能直接比较。索引按模型、版本、维度隔离;切换模型后需要重建对应索引。向量不可用时的全文回退必须在报告中明确记录。","queries":["Embedding 模型切换后为什么要重建索引","两个模型生成的向量长度一样就能混着搜索吗"]},
|
||||
{"id":"citation","title":"引用定位与块标识","text":"引用记录笔记编号、块编号以及起止偏移。点击引用可定位原文。候选搜索结果不等于回答实际引用的来源;引用质量需要核对正文标记对应的支持性内容。","queries":["引用如何定位到原文","搜索返回十段资料,是否都应该算作回答已引用的来源"]},
|
||||
{"id":"zip","title":"ZIP 安装路径检查","text":"解压前检查每个条目的规范路径,拒绝绝对路径、父目录穿越、符号链接和超出解压大小预算的条目。安装完成保存包摘要,重启时复核,包被修改后重新审查。","queries":["ZIP 安装如何阻止路径穿越","扩展包里有指向安装目录外的文件名,为什么必须拒绝"]},
|
||||
{"id":"plot","title":"函数图像的安全解析","text":"function-plot 围栏支持 y = x^2 和 y = sin(x),可以设置 domain 和 range。解析器只允许数学语法,不执行任意代码。函数采样应限制表达式节点和求值次数,渐近线处断开曲线。","queries":["函数图像怎样处理渐近线","让用户输入公式绘图时如何避免执行任意程序"]}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,368 @@
|
||||
{
|
||||
"dataset_id": "rag-phase2-v1",
|
||||
"kind": "rag",
|
||||
"version": "1.0.0",
|
||||
"description": "手工编写的中文工程笔记检索集;每篇含关键词与改写问法,混淆主题分别建篇。用于小规模质量对照,不代表生产分布。",
|
||||
"cases": [
|
||||
{
|
||||
"case_id": "deadlock-0",
|
||||
"query": "死锁有哪些必要条件",
|
||||
"expected_note_ids": [
|
||||
"note_894ec7d0760d0cd6"
|
||||
],
|
||||
"expected_block_ids": [
|
||||
"blk_748b1be4cee7cb9b"
|
||||
],
|
||||
"citation_required": true,
|
||||
"tags": [
|
||||
"keyword",
|
||||
"deadlock"
|
||||
]
|
||||
},
|
||||
{
|
||||
"case_id": "deadlock-1",
|
||||
"query": "几个线程各占一把锁并等待对方释放,怎样避免一直卡住",
|
||||
"expected_note_ids": [
|
||||
"note_894ec7d0760d0cd6"
|
||||
],
|
||||
"expected_block_ids": [
|
||||
"blk_748b1be4cee7cb9b"
|
||||
],
|
||||
"citation_required": true,
|
||||
"tags": [
|
||||
"paraphrase",
|
||||
"deadlock"
|
||||
]
|
||||
},
|
||||
{
|
||||
"case_id": "starvation-0",
|
||||
"query": "优先级老化怎样缓解饥饿",
|
||||
"expected_note_ids": [
|
||||
"note_da790c1c3b905f26"
|
||||
],
|
||||
"expected_block_ids": [
|
||||
"blk_d15c420ab15ba221"
|
||||
],
|
||||
"citation_required": true,
|
||||
"tags": [
|
||||
"keyword",
|
||||
"starvation"
|
||||
]
|
||||
},
|
||||
{
|
||||
"case_id": "starvation-1",
|
||||
"query": "系统一直有任务在跑,但一个低优先级任务永远轮不到怎么办",
|
||||
"expected_note_ids": [
|
||||
"note_da790c1c3b905f26"
|
||||
],
|
||||
"expected_block_ids": [
|
||||
"blk_d15c420ab15ba221"
|
||||
],
|
||||
"citation_required": true,
|
||||
"tags": [
|
||||
"paraphrase",
|
||||
"starvation"
|
||||
]
|
||||
},
|
||||
{
|
||||
"case_id": "rrf-0",
|
||||
"query": "RRF 的融合公式是什么",
|
||||
"expected_note_ids": [
|
||||
"note_1acd666aa1e79f96"
|
||||
],
|
||||
"expected_block_ids": [
|
||||
"blk_abe4534c5c35b694"
|
||||
],
|
||||
"citation_required": true,
|
||||
"tags": [
|
||||
"keyword",
|
||||
"rrf"
|
||||
]
|
||||
},
|
||||
{
|
||||
"case_id": "rrf-1",
|
||||
"query": "全文分数和向量分数尺度不同,如何按排名合并结果",
|
||||
"expected_note_ids": [
|
||||
"note_1acd666aa1e79f96"
|
||||
],
|
||||
"expected_block_ids": [
|
||||
"blk_abe4534c5c35b694"
|
||||
],
|
||||
"citation_required": true,
|
||||
"tags": [
|
||||
"paraphrase",
|
||||
"rrf"
|
||||
]
|
||||
},
|
||||
{
|
||||
"case_id": "rerank-0",
|
||||
"query": "重排能否找回未召回的文档",
|
||||
"expected_note_ids": [
|
||||
"note_df8b1e8216af7f9a"
|
||||
],
|
||||
"expected_block_ids": [
|
||||
"blk_064caf4b9c2e2518"
|
||||
],
|
||||
"citation_required": true,
|
||||
"tags": [
|
||||
"keyword",
|
||||
"rerank"
|
||||
]
|
||||
},
|
||||
{
|
||||
"case_id": "rerank-1",
|
||||
"query": "精排前候选池太小会导致什么问题",
|
||||
"expected_note_ids": [
|
||||
"note_df8b1e8216af7f9a"
|
||||
],
|
||||
"expected_block_ids": [
|
||||
"blk_064caf4b9c2e2518"
|
||||
],
|
||||
"citation_required": true,
|
||||
"tags": [
|
||||
"paraphrase",
|
||||
"rerank"
|
||||
]
|
||||
},
|
||||
{
|
||||
"case_id": "optimistic-0",
|
||||
"query": "保存时为什么比较内容摘要",
|
||||
"expected_note_ids": [
|
||||
"note_04142ad0124ae76d"
|
||||
],
|
||||
"expected_block_ids": [
|
||||
"blk_3f8c19cf88a03805"
|
||||
],
|
||||
"citation_required": true,
|
||||
"tags": [
|
||||
"keyword",
|
||||
"optimistic"
|
||||
]
|
||||
},
|
||||
{
|
||||
"case_id": "optimistic-1",
|
||||
"query": "两个窗口同时修改同一篇笔记,怎样避免后保存者覆盖新内容",
|
||||
"expected_note_ids": [
|
||||
"note_04142ad0124ae76d"
|
||||
],
|
||||
"expected_block_ids": [
|
||||
"blk_3f8c19cf88a03805"
|
||||
],
|
||||
"citation_required": true,
|
||||
"tags": [
|
||||
"paraphrase",
|
||||
"optimistic"
|
||||
]
|
||||
},
|
||||
{
|
||||
"case_id": "idempotency-0",
|
||||
"query": "幂等键如何处理重复上传",
|
||||
"expected_note_ids": [
|
||||
"note_cdc416a180e5099b"
|
||||
],
|
||||
"expected_block_ids": [
|
||||
"blk_b68f6945024f098d"
|
||||
],
|
||||
"citation_required": true,
|
||||
"tags": [
|
||||
"keyword",
|
||||
"idempotency"
|
||||
]
|
||||
},
|
||||
{
|
||||
"case_id": "idempotency-1",
|
||||
"query": "上传成功但响应丢失,重试怎样不生成两个附件",
|
||||
"expected_note_ids": [
|
||||
"note_cdc416a180e5099b"
|
||||
],
|
||||
"expected_block_ids": [
|
||||
"blk_b68f6945024f098d"
|
||||
],
|
||||
"citation_required": true,
|
||||
"tags": [
|
||||
"paraphrase",
|
||||
"idempotency"
|
||||
]
|
||||
},
|
||||
{
|
||||
"case_id": "sse-0",
|
||||
"query": "SSE 重连如何去重",
|
||||
"expected_note_ids": [
|
||||
"note_5cf7aef15e17bd32"
|
||||
],
|
||||
"expected_block_ids": [
|
||||
"blk_f6328254ea8624a1"
|
||||
],
|
||||
"citation_required": true,
|
||||
"tags": [
|
||||
"keyword",
|
||||
"sse"
|
||||
]
|
||||
},
|
||||
{
|
||||
"case_id": "sse-1",
|
||||
"query": "页面断网后任务仍在运行,如何恢复之前错过的进度",
|
||||
"expected_note_ids": [
|
||||
"note_5cf7aef15e17bd32"
|
||||
],
|
||||
"expected_block_ids": [
|
||||
"blk_f6328254ea8624a1"
|
||||
],
|
||||
"citation_required": true,
|
||||
"tags": [
|
||||
"paraphrase",
|
||||
"sse"
|
||||
]
|
||||
},
|
||||
{
|
||||
"case_id": "cancel-0",
|
||||
"query": "导出任务取消后怎样处理产物",
|
||||
"expected_note_ids": [
|
||||
"note_48f96c75ea97d552"
|
||||
],
|
||||
"expected_block_ids": [
|
||||
"blk_efa6b9f6210964c2"
|
||||
],
|
||||
"citation_required": true,
|
||||
"tags": [
|
||||
"keyword",
|
||||
"cancel"
|
||||
]
|
||||
},
|
||||
{
|
||||
"case_id": "cancel-1",
|
||||
"query": "用户停止渲染时工作线程还没返回,应当如何收尾",
|
||||
"expected_note_ids": [
|
||||
"note_48f96c75ea97d552"
|
||||
],
|
||||
"expected_block_ids": [
|
||||
"blk_efa6b9f6210964c2"
|
||||
],
|
||||
"citation_required": true,
|
||||
"tags": [
|
||||
"paraphrase",
|
||||
"cancel"
|
||||
]
|
||||
},
|
||||
{
|
||||
"case_id": "embedding-0",
|
||||
"query": "Embedding 模型切换后为什么要重建索引",
|
||||
"expected_note_ids": [
|
||||
"note_6e13fbe17c9f7a30"
|
||||
],
|
||||
"expected_block_ids": [
|
||||
"blk_dc2b0771ea50c3a4"
|
||||
],
|
||||
"citation_required": true,
|
||||
"tags": [
|
||||
"keyword",
|
||||
"embedding"
|
||||
]
|
||||
},
|
||||
{
|
||||
"case_id": "embedding-1",
|
||||
"query": "两个模型生成的向量长度一样就能混着搜索吗",
|
||||
"expected_note_ids": [
|
||||
"note_6e13fbe17c9f7a30"
|
||||
],
|
||||
"expected_block_ids": [
|
||||
"blk_dc2b0771ea50c3a4"
|
||||
],
|
||||
"citation_required": true,
|
||||
"tags": [
|
||||
"paraphrase",
|
||||
"embedding"
|
||||
]
|
||||
},
|
||||
{
|
||||
"case_id": "citation-0",
|
||||
"query": "引用如何定位到原文",
|
||||
"expected_note_ids": [
|
||||
"note_a0b8289f7f334952"
|
||||
],
|
||||
"expected_block_ids": [
|
||||
"blk_5eac426f6220ca29"
|
||||
],
|
||||
"citation_required": true,
|
||||
"tags": [
|
||||
"keyword",
|
||||
"citation"
|
||||
]
|
||||
},
|
||||
{
|
||||
"case_id": "citation-1",
|
||||
"query": "搜索返回十段资料,是否都应该算作回答已引用的来源",
|
||||
"expected_note_ids": [
|
||||
"note_a0b8289f7f334952"
|
||||
],
|
||||
"expected_block_ids": [
|
||||
"blk_5eac426f6220ca29"
|
||||
],
|
||||
"citation_required": true,
|
||||
"tags": [
|
||||
"paraphrase",
|
||||
"citation"
|
||||
]
|
||||
},
|
||||
{
|
||||
"case_id": "zip-0",
|
||||
"query": "ZIP 安装如何阻止路径穿越",
|
||||
"expected_note_ids": [
|
||||
"note_4a26a95db9b832fc"
|
||||
],
|
||||
"expected_block_ids": [
|
||||
"blk_ce08f371b1dcf2c5"
|
||||
],
|
||||
"citation_required": true,
|
||||
"tags": [
|
||||
"keyword",
|
||||
"zip"
|
||||
]
|
||||
},
|
||||
{
|
||||
"case_id": "zip-1",
|
||||
"query": "扩展包里有指向安装目录外的文件名,为什么必须拒绝",
|
||||
"expected_note_ids": [
|
||||
"note_4a26a95db9b832fc"
|
||||
],
|
||||
"expected_block_ids": [
|
||||
"blk_ce08f371b1dcf2c5"
|
||||
],
|
||||
"citation_required": true,
|
||||
"tags": [
|
||||
"paraphrase",
|
||||
"zip"
|
||||
]
|
||||
},
|
||||
{
|
||||
"case_id": "plot-0",
|
||||
"query": "函数图像怎样处理渐近线",
|
||||
"expected_note_ids": [
|
||||
"note_bfd65995af95a6a6"
|
||||
],
|
||||
"expected_block_ids": [
|
||||
"blk_c4644f51b0853ef2"
|
||||
],
|
||||
"citation_required": true,
|
||||
"tags": [
|
||||
"keyword",
|
||||
"plot"
|
||||
]
|
||||
},
|
||||
{
|
||||
"case_id": "plot-1",
|
||||
"query": "让用户输入公式绘图时如何避免执行任意程序",
|
||||
"expected_note_ids": [
|
||||
"note_bfd65995af95a6a6"
|
||||
],
|
||||
"expected_block_ids": [
|
||||
"blk_c4644f51b0853ef2"
|
||||
],
|
||||
"citation_required": true,
|
||||
"tags": [
|
||||
"paraphrase",
|
||||
"plot"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user