-
Notifications
You must be signed in to change notification settings - Fork 37
Expand file tree
/
Copy pathquiz.json
More file actions
78 lines (78 loc) · 4.11 KB
/
Copy pathquiz.json
File metadata and controls
78 lines (78 loc) · 4.11 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
{
"lesson": "phase-19/25-verification-gates-observation-budget",
"title": "顶点课 25 —— 验证门与观测预算",
"questions": [
{
"stage": "pre",
"question": "在阅读本课之前:为什么驱动层需要确定性的 gate chain 而不是用模型当裁判?",
"options": [
"模型在生产环境中当裁判太慢了。",
"确定性使得拒绝原因可审计,整个链路可回放。",
"模型裁判总是会产生幻觉式的 allow 判定。",
"Gate chain 允许模型自己编写策略。"
],
"correct": 1,
"explanation": "审计记录和可复现性是实际收益。模型裁判也可以接入,但结构化的 gate 必须是确定性的,这样判定才能被复现和审查。"
},
{
"stage": "check",
"question": "为什么本课把 WhitelistGate 放在 BudgetGate 前面?",
"options": [
"白名单拒绝更便宜,短路后可以避免代价更高的 ledger 求和。",
"BudgetGate 要等至少调用过一次工具之后才能运行。",
"按照惯例白名单必须是最后一个 gate。",
"顺序无所谓,因为 GateChain 会随机化评估顺序。"
],
"correct": 0,
"explanation": "便宜的拒绝先跑。WhitelistGate 是 O(1) 哈希查找,BudgetGate 需要对 ledger 求和。在白名单上短路可以在调用结构性非法时省掉那部分计算。"
},
{
"stage": "check",
"question": "ObservationLedger 已经记录了一条 read_file 的 60 token 观测。随后驱动层拒绝了一个调用。Ledger 对拒绝记录了什么?",
"options": [
"一行 token 为零、标记为 refused 的 Observation 记录。",
"什么也不记。Ledger 只记录成功的观测。",
"一行负 token 的 Observation,代表拒绝开销。",
"拒绝被当作以拒绝者名字命名的合成 Observation 追加进来。"
],
"correct": 1,
"explanation": "Ledger 记录的是模型已经看到的观测。拒绝产生的是 GateDecision,不是 Observation。拒绝计数和 ledger 并列存放,不混在里面。"
},
{
"stage": "check",
"question": "RecencyGate.window 设为 3。Ledger 最近一次记录在 turn 5。一个新的 ToolCall 在 turn 10 到来。会怎样?",
"options": [
"Gate 放行:该调用在最新的 turn 上。",
"Gate 拒绝:间隔 5 超过了窗口值 3。",
"Gate 放行:window 作用于 ledger 大小而非 turn 间隔。",
"Gate 抛异常,因为 ledger 过期了。"
],
"correct": 1,
"explanation": "RecencyGate 比较 (call.turn - ledger.latest_turn) 和 window。10 - 5 = 5,大于 3,所以拒绝。"
},
{
"stage": "post",
"question": "你想加一个单次调用输出上限(单条观测不超过 8000 token)。这个 gate 在链路中该放在哪里?",
"options": [
"放在 WhitelistGate 前面,因为大小是最便宜的检查属性。",
"放在 BudgetGate 后面,因为累积预算总是占主导。",
"它不能作为 gate,因为输出大小只有在工具执行后才知道。",
"放在 BudgetGate 内部,让两个限制组合起来。"
],
"correct": 2,
"explanation": "在 gate 评估时输出大小还不可知。驱动层在工具执行之后、模型看到之前截断观测。Gate 评估的是输入,不是输出。"
},
{
"stage": "post",
"question": "审阅者要求你证明 agent 在整个会话中从未执行过被拒绝的工具调用。你应该给他看哪个产物?",
"options": [
"ObservationLedger 快照,里面只有成功的观测。",
"ChainOutcome 记录列表,包含每次调用的判定和拒绝原因。",
"pytest 的输出,记录了测试通过/失败。",
"模型的聊天记录,包含它的自我报告。"
],
"correct": 1,
"explanation": "ChainOutcome 记录带有每次调用的判定和拒绝原因。Ledger 和聊天记录可以辅助佐证,但可审计的产物是 chain 的判定记录。"
}
]
}