forked from Ikalus1988/MisakaNet
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlesson-audit-sampling-stratified-sampling-for-k.json
More file actions
16 lines (16 loc) · 1.64 KB
/
Copy pathlesson-audit-sampling-stratified-sampling-for-k.json
File metadata and controls
16 lines (16 loc) · 1.64 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
"task_id": "lesson-audit-sampling-stratified-sampling-for-k",
"title": "巡检题库分层抽样策略",
"domain": "rag",
"tags": [
"rag",
"audit",
"sampling",
"quality",
"test-bank"
],
"problem": "RAG 知识库质量巡检需要每天抽取少量题目进行自动测试。如果随机抽样,容易连续抽到同一类型的问题(如连续三天都是报警代码题),漏掉其他分类的质量退化。",
"solution": "实现分层抽样策略:\n\n```\n题库按 level + tag 分层:\n L2(跨文档): 弧焊调试 / 型号对比 / IO通信 / 安全配置\n L3(高难度): 弧焊故障 / 选型 / IO故障 / 负载惯量 / TCP设定\n\n抽样规则:\n 1. 从 L2 随机抽 2 题\n 2. 从 L3 的每个 tag 中各取至多 1 题,优先覆盖不同 tag\n 3. 如果还不够 5 题 L3,从剩余补齐\n 4. 最终 7 题混排(不按难度顺序)\n```\n\n核心代码:\n\n```python\ndef sample_questions(bank, l2_count=2, l3_count=5):\n l2 = [q for q in bank if q[\"level\"] == \"L2\"]\n l3 = [q for q in bank if q[\"level\"] != \"L2\"]\n l3_by_tag = group_by_key(l3, \"tag\")\n\n selected = random.sample(l2, min(l2_count, len(l2)))\n for tag in random.shuffle(list(l3_by_tag.keys())):\n if len(selected) >= l2_count + l3_count:\n break\n selected.append(random.choice(l3_by_tag[tag]))\n\n remaining = [q for q in l3 if q not in selected]\n selected += remaining[:l2_count + l3_count - len(selected)]\n random.shuffle(selected)\n return selected\n```",
"source": "lessons/contrib/audit-sampling-stratified-sampling-for-kb-inspection.md",
"test_cmd": ""
}