{
 "cards": {
  "M01-001": {
   "q": "Token 是什么?为什么它对架构师重要?",
   "a": "模型处理文本的最小单位;API 计费(billing)与速率限制(rate limiting)都按 token 计量,直接决定成本/延迟/限额设计",
   "cat": "foundations",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0,
   "last": "2026-08-30"
  },
  "M01-002": {
   "q": "1M token 大约等于多少英文单词(当前 tokenizer,随 Opus 4.7 引入)?",
   "a": "约 55.5 万英文单词或 250 万 Unicode 字符;旧 tokenizer 约 75 万单词/1M token",
   "cat": "foundations",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0,
   "last": "2026-08-30"
  },
  "M01-003": {
   "q": "中文与英文的 token 效率有何差异?",
   "a": "中文常见汉字约 1 字 1-2 token;同等信息量下中文 token 成本更高;预算必须按 token 而非字符做",
   "cat": "foundations",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M01-004": {
   "q": "一张 1000x1000 图片消耗多少视觉 token?计算公式?",
   "a": "约 1296 个;公式 ⌈宽/28⌉ × ⌈高/28⌉,每个 28x28 像素 patch 是一个视觉 token",
   "cat": "foundations",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M01-005": {
   "q": "官方对 Context Window 的定义(一句话)?",
   "a": "模型生成响应时可引用的全部文本(含响应本身),相当于模型的 working memory(工作记忆)",
   "cat": "foundations",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M01-006": {
   "q": "哪些内容计入 Context Window?",
   "a": "一切:system prompt、messages 全部历史(含 tool_result/图片/文档)、工具定义 tools、本轮输出(含 thinking tokens)",
   "cat": "foundations",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M01-007": {
   "q": "Context Rot 是什么?",
   "a": "As token count grows, accuracy and recall degrade——上下文越长,准确率与召回越降;所以装得下不等于记得准",
   "cat": "foundations",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M01-008": {
   "q": "Attention 机制对架构设计的两个含义?",
   "a": "1) 上下文开头/结尾记得牢、中部易弱化;2) 每个输出 token 都重读整个上下文,长上下文的成本延迟随长度增长",
   "cat": "foundations",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M01-009": {
   "q": "Next-token prediction 带来的三个架构含义?",
   "a": "1) 输出长度不可精确预知(只能设 max_tokens 上限);2) 逐 token 生成是 streaming 的基础;3) 同输入可有多种合理输出,确定性格式要靠应用层校验",
   "cat": "foundations",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M01-010": {
   "q": "temperature 参数截至 2026-08-30 的状态?",
   "a": "仍在 API 文档但 Claude Opus 4.7 及之后模型上已弃用:非默认值返回 400;官方建议省略并用 prompting 引导行为",
   "cat": "foundations",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M01-011": {
   "q": "幻觉 (Hallucination) 的机制根源?",
   "a": "next-token prediction 只优化统计上像不像真的,不校验是不是真的;是概率系统固有属性,不是 bug",
   "cat": "foundations",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M01-012": {
   "q": "缓解幻觉的架构手段有哪些?",
   "a": "接地 Grounding(RAG/引用)、工具取实时事实、评估集测幻觉率、提示层允许说不确定;不能只靠 prompt 要求不出错",
   "cat": "foundations",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M01-013": {
   "q": "Adaptive thinking 是什么?哪些模型支持?",
   "a": "模型自行决定思考多少,由 effort 参数调节(默认 high);Opus 5/Sonnet 5/Fable 5 均为 adaptive;Haiku 4.5 仍是手动 extended thinking",
   "cat": "foundations",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M01-014": {
   "q": "Thinking tokens 的计费与限额归属?",
   "a": "计入 max_tokens、按输出 token 计费、占用上下文窗口、计入 OTPM 速率限制",
   "cat": "foundations",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M01-015": {
   "q": "Training vs Inference 的区别?",
   "a": "训练在 Anthropic 侧预发布时更新权重;推理时权重冻结,你只能控制 prompt/上下文/工具/参数",
   "cat": "foundations",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M01-016": {
   "q": "Reliable knowledge cutoff 之后的事实怎么办?",
   "a": "必须靠工具(web search/数据库查询)或检索获取;参数知识不可依赖——这是 Tool Use 的第一性理由",
   "cat": "foundations",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M01-017": {
   "q": "上下文满了的三种管理策略及权衡?",
   "a": "截断历史(丢信息但简单)/摘要压缩 compaction(官方推荐主策略)/检索式注入(需检索系统);权衡是完整性 vs 成本延迟",
   "cat": "foundations",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M01-018": {
   "q": "超上下文窗口时返回什么 stop_reason?",
   "a": "model_context_window_exceeded——应视为响应被截断处理",
   "cat": "foundations",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M02-001": {
   "q": "截至 2026-08-30 四款现役 Claude 模型及定位?",
   "a": "Fable 5(最高智能/长时 agent)·Opus 5(复杂 agentic coding/企业级默认)·Sonnet 5(速度智能平衡)·Haiku 4.5(最快/接近前沿)",
   "cat": "models",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M02-002": {
   "q": "四款现役模型的价格 (input/output per MTok)?",
   "a": "Fable $10/$50 · Opus $5/$25 · Sonnet $2/$10 · Haiku $1/$5;输出通常 5x 于输入",
   "cat": "models",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M02-003": {
   "q": "四款模型的上下文窗口与最大输出?",
   "a": "Fable/Opus/Sonnet 5:1M/128K;Haiku 4.5:200K/64K(截至 2026-08-30)",
   "cat": "models",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M02-004": {
   "q": "system prompt 在 Messages API 怎么传?",
   "a": "顶层 system 参数(字符串或 block 数组);不存在 system role 的输入消息",
   "cat": "messaging",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M02-005": {
   "q": "连续两条 user 消息会被怎样处理?",
   "a": "合并为单一轮次(模型按 user/assistant 交替轮次训练)",
   "cat": "messaging",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M02-006": {
   "q": "若最后一条消息是 assistant 会发生什么?",
   "a": "响应从该内容续写(可约束开头);注意 prefill 在 4.6+/Mythos Preview 已弃用返回 400",
   "cat": "messaging",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M02-007": {
   "q": "图片输入的三种 source 类型?",
   "a": "base64(嵌请求体)·url(在线图)·file_id(Files API 上传后引用,多轮推荐避免重发字节)",
   "cat": "multimodal",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M02-008": {
   "q": "图片大小/数量限制(截至 2026-08-30)?",
   "a": "单图最大 8000x8000;单请求 200K 窗口模型 100 张/其余 600 张;超 20 张触发更严尺寸限制;base64 最大 10MB",
   "cat": "multimodal",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M02-009": {
   "q": "两档图片分辨率的上限?",
   "a": "高分辨率档(Claude 4.7+):长边 2576px/最多 4784 视觉 token;标准档:长边 1568px/最多 1568 token;超档自动缩放",
   "cat": "multimodal",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M02-010": {
   "q": "PDF 输入的页数与大小限制?",
   "a": "600 页/上下文<1M 时 100 页;请求体 32MB;每页按文本+图像双通道处理;密排 PDF 常先撞窗口",
   "cat": "multimodal",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M02-011": {
   "q": "usage 字段四个 token 计量是什么?",
   "a": "input_tokens(最后断点之后的未缓存输入)·cache_creation_input_tokens(写缓存 1.25x)·cache_read_input_tokens(读缓存 0.1x)·output_tokens(含 thinking)",
   "cat": "usage",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M02-012": {
   "q": "总输入 token 怎么算?",
   "a": "total_input = cache_read_input_tokens + cache_creation_input_tokens + input_tokens",
   "cat": "usage",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M02-013": {
   "q": "7 种 stop_reason 及含义?",
   "a": "end_turn(自然结束)·max_tokens(达上限)·stop_sequence(命中停止序列)·tool_use(要调工具)·pause_turn(服务端工具循环达限)·refusal(拒答)·model_context_window_exceeded(填满窗口)",
   "cat": "stop-reasons",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M02-014": {
   "q": "tool_result 之后追加 text block 的坑?",
   "a": "易诱发空响应 end_turn(模型学到 tool_result 后用户会说话的模式);tool_result 必须在前、紧随对应 tool_use",
   "cat": "stop-reasons",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M02-015": {
   "q": "streaming 的事件流顺序?",
   "a": "message_start → 每个 block(content_block_start→content_block_delta×n→content_block_stop) → message_delta(含最终 stop_reason,usage 为累计值) → message_stop;间有 ping/error",
   "cat": "streaming",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M02-016": {
   "q": "流式响应 200 之后还可能出错吗?",
   "a": "可能:流中 error 事件(如 529 overloaded_error);错误处理必须覆盖流内事件;未知事件类型也要优雅处理",
   "cat": "streaming",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M02-017": {
   "q": "ITPM/OTPM/RPM 三维限流如何工作?",
   "a": "令牌桶算法连续回补;按模型类分别计量;短时突发也可能 429;多数模型 cache_read 不计入 ITPM(有效吞吐倍增器)",
   "cat": "rate-limits",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M02-018": {
   "q": "Start 档 Opus 5 的限流基线?",
   "a": "1000 RPM / 2M ITPM / 400K OTPM;Fable 5 更低:1000/500K/100K(Build/Scale 档递增)",
   "cat": "rate-limits",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M02-019": {
   "q": "月度 spend cap 触顶后的行为?",
   "a": "429 rate_limit_error 且无 retry-after,SDK 自动重试也无效,次月 1 日 00:00 UTC 恢复;error_code=enforced_spend_limit_reached",
   "cat": "rate-limits",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M02-020": {
   "q": "模型生命周期四状态?",
   "a": "Active(推荐)/Legacy(不再更新)/Deprecated(仍可用,有替换与退役日)/Retired(不可用);退役前至少 60 天通知(公开发布模型)",
   "cat": "lifecycle",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M03-001": {
   "q": "Claude API 请求的必需头部有哪些?",
   "a": "x-api-key 或 Authorization: Bearer(WIF 短期 token,二选一)·anthropic-version(如 2023-06-01)·content-type: application/json;多工作区 key 还需 anthropic-workspace-id",
   "cat": "auth",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M03-002": {
   "q": "Workload Identity Federation 怎么用?",
   "a": "无长期 key:POST /v1/oauth/token 换短期 access token,以 Authorization: Bearer 短期 access 令牌;token 交换时选定 workspace",
   "cat": "auth",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M03-003": {
   "q": "正式 API 面包含哪些端点?",
   "a": "Messages(/v1/messages)·Message Batches·Token Counting(/v1/messages/count_tokens)·Models(/v1/models)·Files·Skills;beta:Agents/Sessions/Environments",
   "cat": "api",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M03-004": {
   "q": "官方 SDK 内置了什么?",
   "a": "认证头管理·类型安全·默认 2 次指数退避重试(尊重 retry-after)·streaming·超时与 TCP keep-alive·非流式 10 分钟校验",
   "cat": "sdk",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M03-005": {
   "q": "11 个 HTTP 错误码及处理原则?",
   "a": "400 修请求·401 换凭据·402 账单·403 查权限·404 修路径·409 解决冲突后可重试·413 裁剪·429 退避·500 退避重试·504 换流式/批·529 退避重试",
   "cat": "errors",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M03-006": {
   "q": "哪些错误绝不该自动重试?",
   "a": "400/401/402/403/404/413(确定性错误:重试是浪费);504 换 streaming/Batches 而非原地重试;spend-cap 429 重试无效",
   "cat": "errors",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M03-007": {
   "q": "指数退避公式与 jitter 的作用?",
   "a": "delay = base×2^n ± jitter,cap 封顶;jitter 防多实例重试风暴同相共振;429 带 retry-after 时优先服从服务端",
   "cat": "errors",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M03-008": {
   "q": "spend-cap 429 与普通 429 的区别?",
   "a": "spend-cap:无 retry-after·error_code=enforced_spend_limit_reached·重试(含 SDK 自动重试)无效·次月 1 日恢复;普通:带 retry-after 可退避",
   "cat": "errors",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M03-009": {
   "q": "prompt caching 两种开启方式?",
   "a": "自动:请求顶层 cache_control,断点自动放最后可缓存块并随对话前移(多轮首选);显式:block 级 cache_control,可设 ttl 5m/1h,精细控制",
   "cat": "caching",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M03-010": {
   "q": "缓存的是什么?顺序?",
   "a": "完整前缀,按 tools → system → messages 顺序,直到并包含断点 block;断点前任何字节变化即 miss(hash 变)",
   "cat": "caching",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M03-011": {
   "q": "缓存断点与回看窗口规则?",
   "a": "最多 4 个断点;写入只发生在断点;读取从断点向前最多回看 20 个 block 找既有条目;自动+显式混用时自动占一槽",
   "cat": "caching",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M03-012": {
   "q": "缓存计价倍率?",
   "a": "5m 写 1.25x·1h 写 2x·读 0.1x·刷新免费;倍率与 Batch 5 折等修饰可叠加(stack)",
   "cat": "caching",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M03-013": {
   "q": "最小可缓存长度?",
   "a": "按模型 512-4096 token 不等(Fable 5/Opus 5=512,Sonnet 5=1024,Haiku 4.5=4096);低于下限静默不缓存不报错,验证看 cache_creation 与 cache_read 是否双 0",
   "cat": "caching",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M03-014": {
   "q": "TTL 计时起点与并发竞态?",
   "a": "从写入/读取该缓存的请求开始计时(长响应吃 TTL);缓存条目在第一个响应开始前,并发的相同前缀请求不命中",
   "cat": "caching",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M03-015": {
   "q": "tool_choice 变化对缓存的影响?",
   "a": "作废 messages 部分的缓存;tools 与 system 的缓存保留",
   "cat": "caching",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M03-016": {
   "q": "Message Batch 的结构与规模上限?",
   "a": "requests:[{custom_id,params}...];上限 100,000 项或 256MB 先到为准;多数批次<1h,24h 过期;结果保留 29 天",
   "cat": "batches",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M03-017": {
   "q": "Batch 结果四种类型?",
   "a": "succeeded/errored/canceled/expired;canceled 与 expired 不计费",
   "cat": "batches",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M03-018": {
   "q": "Batch params 不支持哪些参数?",
   "a": "stream·speed(Fast mode)·store/previous_thread_event_id(Threads)·cache_hint/context_hint·max_tokens:0·research preview",
   "cat": "batches",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M03-019": {
   "q": "长请求(>10min)的官方建议?",
   "a": "用 streaming(或 SDK get_final_message)或 Message Batches 轮询;SDK 会校验非流式请求不超 10 分钟并设 TCP keep-alive",
   "cat": "timeouts",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M03-020": {
   "q": "OTPM 与 max_tokens 的关系?",
   "a": "OTPM 只按实际生成的输出 token 计量;max_tokens 不参与 OTPM 计算,设大无速率惩罚",
   "cat": "rate-limits",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M04-001": {
   "q": "Tool use 的另一个官方名称?",
   "a": "Function calling(函数调用):Claude 基于用户请求与工具描述决定何时调用,返回结构化 tool_use 由应用执行",
   "cat": "tool-use",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M04-002": {
   "q": "Client tools 与 server tools 的区别?",
   "a": "执行位置:client tools(bash/text_editor/自定义等)在你的应用执行;server tools(web_search/code_execution 等)在 Anthropic 基础设施执行",
   "cat": "tool-use",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M04-003": {
   "q": "工具回路六步?",
   "a": "定义 tools → Claude 选择(auto) → 返回 tool_use(id/name/input) → 应用执行(权限门!) → 回传 tool_result(tool_use_id/content/is_error) → Claude 生成最终回答或再调用",
   "cat": "tool-use",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M04-004": {
   "q": "tool_use block 的三个关键字段?",
   "a": "id(与 tool_result.tool_use_id 配对对账)·name(应用分发)·input(符合 input_schema 的对象)",
   "cat": "tool-use",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M04-005": {
   "q": "tool_result 回传的三条格式硬约束?",
   "a": "1) 紧随对应 tool_use 不得插入其他消息;2) 同一 user 消息内排在最前,text 只能在后;3) 有未完成 server tool 时回传消息只能含 tool_result block;违反直接 400",
   "cat": "tool-use",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M04-006": {
   "q": "thinking block 回传规则?",
   "a": "必须原样、原序回传(signature 用于验证);修改会导致 400 invalid_request_error",
   "cat": "tool-use",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M04-007": {
   "q": "tool_choice 四个选项及默认?",
   "a": "auto(提供 tools 时默认,Claude 自主)·any(必须调某个)·tool(强制指定,需 name)·none(禁止,无 tools 时默认)",
   "cat": "tool-choice",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M04-008": {
   "q": "tool_choice any/tool 的副作用?",
   "a": "预填 assistant 消息:不输出自然语言解释直接产 tool_use;要解释+调用就用 auto+user 消息显式指令",
   "cat": "tool-choice",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M04-009": {
   "q": "disable_parallel_tool_use 作用?",
   "a": "true 时一轮最多一个工具调用;默认允许并行(一轮多个 tool_use,每个都要有对应 tool_result)",
   "cat": "tool-choice",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M04-010": {
   "q": "extended thinking 与强制工具调用兼容性?",
   "a": "手动 extended thinking 与 any/tool 不兼容会报错(仅 auto/none 可);adaptive thinking 模型(Opus 5/Sonnet 5/Fable 5)支持强制调用",
   "cat": "tool-choice",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M04-011": {
   "q": "工具定义最佳实践?",
   "a": "description 极详细(至少3-4句:何时用/不用/参数/限制,最重要因素)·相关操作合并带 action 参数·命名空间化命名·返回高信号字段而非全量数据",
   "cat": "tool-design",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M04-012": {
   "q": "工具 name 的正则约束?",
   "a": "^[a-zA-Z0-9_-]{1,64}$",
   "cat": "tool-design",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M04-013": {
   "q": "缺必填参数时 Claude 的行为?",
   "a": "Opus 更可能识别缺参并询问;Sonnet 可能推断合理值(不保证);回传 is_error 后 Claude 会重试 2-3 次自我修正再道歉;根治用 strict:true",
   "cat": "errors",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M04-014": {
   "q": "工具执行错误的正确回传?",
   "a": "is_error:true + 有指导性的错误消息(错在哪/下一步怎么办,如「Rate limit exceeded. Retry after 60 seconds.」),而非只回「failed」",
   "cat": "errors",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M04-015": {
   "q": "tool_result 内容的安全属性?",
   "a": "网页/邮件/上传/第三方 API 返回是不可信内容(间接 prompt injection 载体);留在 tool_result block,不要搬进 system prompt 或用户 text",
   "cat": "security",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M04-016": {
   "q": "什么由 Claude 决定 vs 代码决定?",
   "a": "Claude:调不调/调哪个/传什么参/结果综合(判断);代码:权限审批/参数校验/执行重试/结果裁剪/审计(强制);判断交概率组件,强制交确定性组件",
   "cat": "architecture",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M04-017": {
   "q": "何时需要 human approval?",
   "a": "不可逆(删除/支付/对外发送)·高代价·低可解释性×高影响·合规要求;审批门在应用执行器里,拒绝后以 is_error 回传让 Claude 向用户解释",
   "cat": "architecture",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M04-018": {
   "q": "为什么 LLM 指令不是授权机制?",
   "a": "prompt 约束是概率性的,可被 prompt injection/上下文漂移绕过;代码拒绝是确定性的;违反会出事故的规则必须落在代码(模块 11 主题)",
   "cat": "security",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M04-019": {
   "q": "agent loop 防无限循环的手段?",
   "a": "应用层最大步数与 token 预算(代码兜底);观察重复调用模式;system prompt 停止引导只是辅助;自然终点只有 end_turn/stop_sequence",
   "cat": "architecture",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M04-020": {
   "q": "为什么工具重试需要幂等设计?",
   "a": "重试发生在三层(SDK 自动重试/应用执行器退避/Claude is_error 后自我修正重发);写操作重复执行=副作用翻倍(重复扣款/发信/建单);读操作天然幂等,写操作必须设计",
   "cat": "tool-use",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M04-021": {
   "q": "幂等键去重的机制与正确来源?",
   "a": "调用方为每个逻辑操作生成唯一键(会话ID:意图:对象ID),执行器存键→结果,同键重复请求直接返回首次结果;键必须来自业务操作标识——tool_use id 不行(模型重发会产生新 id)",
   "cat": "tool-use",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M04-022": {
   "q": "重试风暴如何防护?",
   "a": "指数退避+抖动;尊重 retry-after;每客户端重试预算/并发闸+熔断;529 过载时平缓爬坡而非立即全量重试(官方);N 客户端×K 次重试=负载放大 N×K 倍",
   "cat": "tool-use",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M05-001": {
   "q": "Structured outputs 保证输出合法的底层机制是什么?",
   "a": "Constrained decoding:把 JSON schema 编译成 grammar,在解码期禁止非法 token 序列",
   "cat": "structured-output",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M05-002": {
   "q": "结构化输出的两个互补特性是什么?",
   "a": "JSON outputs (output_config.format) 控制回复格式;strict tool use (strict: true) 保证工具名与入参过 schema",
   "cat": "structured-output",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M05-003": {
   "q": "控制最终回复为合法 JSON 的 GA 参数(2026-08)是什么?",
   "a": "output_config.format = {type: json_schema, schema: ...}(旧 beta 名 output_format 已并入)",
   "cat": "structured-output",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M05-004": {
   "q": "strict tool use 不保证什么?",
   "a": "不保证工具一定被调用(tool_choice 的职责),不管执行超时与工具结果内容",
   "cat": "structured-output",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M05-005": {
   "q": "结构化输出的三个显式复杂度限制?",
   "a": "每请求最多 20 个 strict 工具;可选参数合计 24;union 类型(anyOf/类型数组)参数合计 16",
   "cat": "structured-output",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M05-006": {
   "q": "结构化输出中 enum 的已知坑是什么?",
   "a": "输出枚举值可能大小写不匹配且不报错;应大小写不敏感比较,避免仅大小写不同的枚举值",
   "cat": "structured-output",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M05-007": {
   "q": "结构化输出的属性排序行为?",
   "a": "required 属性总是排在 optional 属性前面,同组内保持 schema 顺序",
   "cat": "structured-output",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M05-008": {
   "q": "哪些 schema 特性不被结构化输出支持?",
   "a": "递归 schema;数值约束(minimum/maximum);字符串约束(minLength/maxLength);外部 $ref;复杂 {n,m} 正则",
   "cat": "structured-output",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M05-009": {
   "q": "结构化输出与哪些特性不兼容?",
   "a": "Citations(同时启用返回 400);与 Batch(50% 折扣)/streaming/token counting 兼容",
   "cat": "structured-output",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M05-010": {
   "q": "HIPAA 场景下 schema 定制的红线是什么?",
   "a": "PHI 不得出现在 schema 定义(属性名/enum/const/pattern)——schema 缓存最长 24h 且不享受 PHI 保护",
   "cat": "structured-output",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M05-011": {
   "q": "官方对 few-shot 示例的三条要求?",
   "a": "Relevant 贴近真实用例;Diverse 覆盖边界避免意外模式;Structured 用 <example>/<examples> 标签包裹",
   "cat": "prompt-engineering",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M05-012": {
   "q": "官方建议的 few-shot 示例数量?",
   "a": "3-5 个效果最好",
   "cat": "prompt-engineering",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M05-013": {
   "q": "长上下文 prompt 的官方排布原则?",
   "a": "长文档/数据放顶部,查询与指令放末尾(测试最多 +30% 质量);多文档用 <document index=n> 包裹",
   "cat": "prompt-engineering",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M05-014": {
   "q": "官方建议如何表述格式要求?",
   "a": "正向表述:告诉模型做什么(如 write in prose paragraphs)而非不做什么(do not use markdown)",
   "cat": "prompt-engineering",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M05-015": {
   "q": "Prefill 在 Claude 4.6+/Mythos Preview 上的状态?",
   "a": "不再支持,最后一条 assistant 消息 prefill 返回 400;迁移到 structured outputs 或直接指令",
   "cat": "prompt-engineering",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M05-016": {
   "q": "Extended thinking 手动模式的现状(截至 2026-08-30)?",
   "a": "4.6 系列弃用(仍可用);4.7+ 直接 400 拒绝;4.5 及更早模型上是唯一 thinking 模式",
   "cat": "thinking",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M05-017": {
   "q": "adaptive thinking 的配置方式?",
   "a": "thinking: {type: adaptive} + output_config.effort 控制深度;Fable 5/Mythos 5 上 thinking 永远开启",
   "cat": "thinking",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M05-018": {
   "q": "budget_tokens 的三条主要规则?",
   "a": "最小 1024;必须小于 max_tokens(interleaved 例外);是目标值非硬顶,max_tokens 才是总输出硬顶",
   "cat": "thinking",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M05-019": {
   "q": "什么是 interleaved thinking?",
   "a": "同一 assistant 回合内工具调用之间穿插 thinking 块,先消化 tool result 再决定下一步;agent 系统关键机制",
   "cat": "thinking",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M05-020": {
   "q": "改动 budget_tokens 对 prompt cache 的影响?",
   "a": "会使缓存断点失效(预算值渲染进 prompt);长对话应选定预算保持不变",
   "cat": "thinking",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M05-021": {
   "q": "格式错误与语义错误的处置差异?",
   "a": "格式错误(坏JSON/缺字段)可重试或修复式重问;语义错误(值内容错)重试无效,走评估/人审/降级",
   "cat": "architecture",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M05-022": {
   "q": "为什么思考预算 >32k 时建议用 Batch API?",
   "a": "长思考产生长时请求,易命中系统超时与开连接限制;Batch 离线处理规避",
   "cat": "thinking",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M05-023": {
   "q": "Prompt 版本管理『prompt 即代码』的核心做法?",
   "a": "prompt 进版本控制(禁止内联字符串散落);id+版本号不可变,改动=新版本;prompt×模型×参数三元组一起记(行为是联合函数);schema 与 prompt 同步版本化",
   "cat": "prompt-engineering",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M05-024": {
   "q": "Prompt 变更与回归评估如何联动?",
   "a": "官方 eval-first:先有评估再做提示工程;新版本必须跑同一金标集与上一版对比,不退化才发布;回滚=重新指向旧版本(部署动作而非手工改字符串)",
   "cat": "prompt-engineering",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M05-025": {
   "q": "Prompt 版本化与 prompt caching 的关系?",
   "a": "缓存按前缀匹配,prompt 任意改动使缓存失效;版本化让同一版本前缀稳定→命中率可控;版本切换=一次性缓存重建;易变内容(时间戳/个性化)隔离在断点后独立块",
   "cat": "prompt-engineering",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M06-001": {
   "q": "MCP 三方架构中 Host、Client、Server 各自的职责是什么?",
   "a": "Host=宿主 AI 应用(编排、权限、同意、上下文聚合)；Client=host 内连接器、与恰好一个 server 1:1 通信；Server=通过原语暴露能力且看不到完整对话与其他 server",
   "cat": "mcp-architecture",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M06-002": {
   "q": "三大 server 原语 Tools/Resources/Prompts 各由谁控制?",
   "a": "Tools=model-controlled(模型自主调用)；Resources=application-driven(host 决定取用)；Prompts=user-controlled(用户显式选择,内容由 server 定义)",
   "cat": "mcp-primitives",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M06-003": {
   "q": "Prompts 的 user-controlled 指什么?",
   "a": "指由用户决定何时使用(如斜杠命令触发);prompt 内容仍由 server 定义,不是用户编写",
   "cat": "mcp-primitives",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M06-004": {
   "q": "MCP Resource Template 是什么?",
   "a": "用 RFC 6570 URI 模板暴露的参数化资源,如 catalog://{section};client 传参后 resources/read 取回内容",
   "cat": "mcp-primitives",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M06-005": {
   "q": "MCP 的消息编码格式是什么?",
   "a": "JSON-RPC 2.0;所有消息 UTF-8 编码,协议语义与传输层无关",
   "cat": "mcp-architecture",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M06-006": {
   "q": "截至 2026-08-30 MCP 规范的两种标准 Transport 是什么?",
   "a": "stdio(子进程标准流上的换行分隔 JSON-RPC)与 Streamable HTTP(单端点 POST,响应为 JSON 或请求级 SSE)",
   "cat": "mcp-transport",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M06-007": {
   "q": "Streamable HTTP 在 2026-07-28 版的两项重大变化是什么?",
   "a": "删除 GET 流端点;删除协议级会话(session id 退出核心协议)",
   "cat": "mcp-transport",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M06-008": {
   "q": "Modern 与 Legacy MCP 规范时代的划分是什么?",
   "a": "Modern=2026-07-28 及以后:无握手、每请求 _meta 携带版本与能力;Legacy=2025-11-25 及以前:initialize 握手建立连接级会话",
   "cat": "mcp-architecture",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M06-009": {
   "q": "MCP 授权模型按传输如何区分?",
   "a": "HTTP 传输实现 OAuth 2.1 子集(server 作为 resource server);stdio 传输从环境取凭证、不应走 OAuth 流程;Authorization 整体是 OPTIONAL",
   "cat": "mcp-security",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M06-010": {
   "q": "tools/call 结果中 isError=true 表示什么?",
   "a": "工具业务错误:错误文本在 content 里、模型可读并可据此自我修正重试;不是协议崩溃也不是传输断开",
   "cat": "mcp-primitives",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M06-011": {
   "q": "Token passthrough 为什么被禁止?",
   "a": "server 不校验 token 是否发给本服务就转发下游,会绕过基于 audience 的限流/审计等安全控制并破坏问责链;授权规范明文禁止",
   "cat": "mcp-security",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M06-012": {
   "q": "Confused Deputy 攻击针对什么形态的 MCP server?",
   "a": "proxy 型 server:静态 client ID+动态客户端注册+第三方授权服务器的 consent cookie,让恶意方跳过用户同意拿到授权码;缓解是 per-client consent",
   "cat": "mcp-security",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M06-013": {
   "q": "为什么 MCP server 的工具描述/注解应视为不可信?",
   "a": "描述与注解可被恶意 server 篡改(藏指令诱导模型);规范明确除非来自可信 server 否则视为不可信输入",
   "cat": "mcp-security",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M06-014": {
   "q": "全量注入工具定义的两大问题是什么?官方数据点?",
   "a": "上下文膨胀(上百工具约 150k tokens)与工具选择准确率下降(30-50 个以上明显);progressive discovery 只需约 2k tokens",
   "cat": "mcp-scaling",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M06-015": {
   "q": "Progressive discovery 的切换阈值与三层模式是什么?",
   "a": "工具定义占上下文窗口 1%-5% 时切换;三层=Catalog(search_tools 元工具)->Inspect(按需看单个 schema)->Execute(调用)",
   "cat": "mcp-scaling",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M06-016": {
   "q": "Anthropic 原生 tool search tool 怎么用?",
   "a": "全部工具定义照常放 tools 数组、不需预载的标 defer_loading:true;变体 tool_search_tool_regex_20251119 与 tool_search_tool_bm25_20251119",
   "cat": "mcp-scaling",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M06-017": {
   "q": "MCP connector 的能力边界?",
   "a": "Messages API 内置 MCP client(beta header mcp-client-2025-11-20);仅支持公网 HTTP server 的工具调用,不支持 stdio/resources/prompts",
   "cat": "mcp-integration",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M06-018": {
   "q": "MCP vs 直接 API 集成的三个核心判据?",
   "a": "消费方数量(单应用还是多 host 复用)、工具规模(少量还是几十上百需发现治理)、延迟与控制要求(毫秒敏感/需精细可靠性基建还是可接受协议层开销)",
   "cat": "mcp-vs-api",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M06-019": {
   "q": "为什么说 MCP 工具与 REST SDK 的本质区别在上下文?",
   "a": "工具定义会被注入模型上下文窗口(要按窗口占比治理);REST SDK 只是代码依赖、不进上下文",
   "cat": "mcp-vs-api",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M06-020": {
   "q": "MCP 规范的三大安全原则是什么?",
   "a": "用户同意与控制(数据访问与操作需显式同意)、数据隐私(未经同意不外传用户数据)、工具安全(工具=任意代码执行路径、应有人类在回路)",
   "cat": "mcp-security",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M06-021": {
   "q": "Elicitation 是什么?",
   "a": "server 向用户征询额外信息的能力(如弹表单);Modern 规范中经结果内的 InputRequiredResult(MRTR 模式)实现,server 不再主动发 JSON-RPC 请求",
   "cat": "mcp-architecture",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M06-022": {
   "q": "Capability Negotiation 在 Modern 规范中如何进行?",
   "a": "客户端把能力放进每请求的 _meta.io.modelcontextprotocol/clientCapabilities;server 在 server/discover 响应宣告 tools/resources/prompts 等能力;双方必须尊重声明",
   "cat": "mcp-architecture",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M06-023": {
   "q": "本地 Streamable HTTP server 的两个 MUST/SHOULD 安全动作?",
   "a": "必须校验 Origin 头防 DNS rebinding(无效返回 403);本地运行应只绑定 127.0.0.1 而非 0.0.0.0",
   "cat": "mcp-security",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M07-001": {
   "q": "把外部知识接入 Claude 的三条基本路径是什么?",
   "a": "1) 直接塞进上下文 (stuff the context, 小库) 2) RAG (大库按需检索片段) 3) Agentic search (给模型搜索工具自己按需检索)",
   "cat": "rag",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M07-002": {
   "q": "Embeddings (嵌入向量) 的强弱项各是什么?",
   "a": "强: 语义泛化, 换说法也能命中 (怎么退货→退换货流程); 弱: 精确匹配差, 错误码/型号等罕见 token 会被稀释 (官方 TS-999 例子)",
   "cat": "rag",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M07-003": {
   "q": "BM25 是什么?它管 RAG 里哪类查询?",
   "a": "基于 TF-IDF 的词法排名函数 (词频饱和+逆文档频率+文档长度归一);管精确词匹配——错误码/SKU/法条编号/函数名/人名这类没有语义分布的 token",
   "cat": "rag",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M07-004": {
   "q": "为什么 Hybrid Retrieval (混合检索) 是官方默认姿势?",
   "a": "官方实验结论 Embeddings+BM25 好于单独 embeddings: 语义路管意思像不像, 词法路管字面有没有, 双路召回+融合消除单路系统性盲区",
   "cat": "rag",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M07-005": {
   "q": "Hybrid retrieval 的官方五步流程是什么?",
   "a": "1) 语料切块 2) 每块同时生成 embedding 与 TF-IDF/BM25 编码 3) BM25 取精确匹配 Top 块 4) 向量取语义相似 Top 块 5) rank fusion (如 RRF) 合并去重后取 Top-K 进 prompt",
   "cat": "rag",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M07-006": {
   "q": "RRF (Reciprocal Rank Fusion) 做什么?公式?",
   "a": "合并多路检索排名: score = Σ 1/(k + rank_i), k 常取 60;只看排名不看原始分, 天然兼容两路不同的分数量纲",
   "cat": "rag",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M07-007": {
   "q": "官方对「知识库多大以内不用 RAG」的判断标准?",
   "a": "小于 200,000 token (约 500 页) 就整个塞进 prompt, 配合 prompt caching 在延迟与成本上很有竞争力;1M 窗口时代阈值可等比放大, 但 context rot 仍在, 塞得下≠塞得好",
   "cat": "rag",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M07-008": {
   "q": "Context rot (上下文腐烂) 是什么?",
   "a": "随 token 数增长, 模型的准确率与召回率退化的现象;官方文档原文术语;物理原因: transformer 每 token attend 所有 token (n²), 注意力被摊薄 (attention budget 有限)",
   "cat": "rag",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M07-009": {
   "q": "四种主流 chunking 策略及各自适用场景?",
   "a": "固定 (均质长文本/基线, 风险切断句子);重叠 (缓解边界丢失, 代价索引膨胀);语义 (按话题边界切, 适合 FAQ/叙述文档, 成本高);结构化 (按标题/函数/表格行切并保留层级, 适合 Markdown/代码/合同)",
   "cat": "rag",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M07-010": {
   "q": "传统 RAG 的「上下文丢失」核心病是什么?官方例子?",
   "a": "块被切出文档后失去归属信息;官方 SEC 例子: 问题问 ACME 2023 Q2 收入增长, 块内容只有 The company's revenue grew by 3%——不含公司名也不含季度, 检索器排不上来, 模型拿到也无法确认归属",
   "cat": "rag",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M07-011": {
   "q": "Contextual Retrieval 的做法与效果?",
   "a": "索引前用廉价模型 (原文 Claude 3 Haiku) 为每块生成 50–100 token 情境前缀再做嵌入与 BM25;上下文嵌入单独降检索失败率 35%, +上下文 BM25 达 49%, 再加 reranking 累计 67% (5.7%→1.9%)",
   "cat": "rag",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M07-012": {
   "q": "Contextual Retrieval 的成本为什么可以接受?",
   "a": "整篇文档进 prompt caching 一次, 逐块生成前缀, 官方估算 $1.02/百万文档 token (800 token 块);一次性索引期计算换运行期检索精度",
   "cat": "rag",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M07-013": {
   "q": "Metadata filtering 在 RAG 里同时解决哪三个问题?",
   "a": "1) 安全: 多租户/权限隔离, 用户看不到的文档不进候选集 2) 新鲜度: updated_at 过滤防止作废政策被引用 3) 精度: 候选空间更小检索更准;权限必须在 pre-filter 层由应用强制, 不能靠提示词",
   "cat": "rag",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M07-014": {
   "q": "Top-K 的官方实验结论?K 的本质是什么?",
   "a": "官方在 5/10/20 块之间实测 20 块效果最好, 但有收益递减 (更多信息对模型是干扰);K 的本质是上下文预算分配: K×平均块长+系统提示+历史+预留输出 ≤ 窗口, 且越小越好 (context rot)",
   "cat": "rag",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M07-015": {
   "q": "Reranking (重排序) 的两阶段架构?官方参数?",
   "a": "宽进严出: hybrid 双路召回 Top-150 (官方值) → cross-encoder reranker 精排 → Top-20 进 prompt;收益: 更好回答+更低成本延迟 (无关信息更少);代价: 运行期多一跳延迟",
   "cat": "rag",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M07-016": {
   "q": "Bi-encoder 与 cross-encoder 的区别?为什么检索要两个都用?",
   "a": "Bi-encoder (双塔): query/chunk 分别独立编码再比距离, 快但粗 (可预计算);Cross-encoder: query+chunk 拼接一起过模型, 能捕捉细粒度交互, 准但慢→只对 Top-N 做;这就是召回+精排两阶段的原理",
   "cat": "rag",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M07-017": {
   "q": "Recall@k 与 Precision@k 各回答什么问题?RAG 里为何 recall 优先?",
   "a": "Recall@k=该找到的找到了多少 (查全);Precision@k=找回的有多少是真的 (查准);RAG 里 recall 优先: 块没检索到生成模型再强也变不出来;但 recall 可靠加大 K 作弊 (全库塞入=100%), 必须与 precision/nDCG 同看",
   "cat": "rag",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M07-018": {
   "q": "MRR 与 nDCG 各适合什么场景?",
   "a": "MRR: 首个相关结果排名倒数的平均, 适合单正确答案问答; nDCG: 位置对数折损加权的相关度增益, 适合分级相关度与列表排序质量",
   "cat": "rag",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M07-019": {
   "q": "Groundedness 与 accuracy 为什么是两个维度?",
   "a": "有据≠正确 (引用了原文但原文本身过时/错误);正确≠有据 (碰巧答对但无引用);groundedness 度量回答主张被检索证据支撑的比例, 防幻觉;两者必须分开评估",
   "cat": "rag",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M07-020": {
   "q": "Citations 功能的三个官方优势与两条约束?",
   "a": "优势: 引用保证指向你提供的文档 (可靠), 更可能引用最相关段落 (质量), cited_text 不计入输出 token (省钱);约束: 请求内所有文档要么全开要么全不开 citations, 当前仅支持文本引用;开启方式: document 块上 citations.enabled=true",
   "cat": "rag",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M07-021": {
   "q": "Golden dataset (金标数据集) 在 RAG 评估里的角色?",
   "a": "人工标注的问题-答案/块对;检索层指标 (recall/precision/MRR/nDCG/Pass@k) 都以金标块为参照;没有金标集=盲调, 换嵌入模型/调 chunk 大小/加 reranker 都没有数字背书;官方上下文检索 cookbook 用 248 条带 golden chunk 的评测查询",
   "cat": "rag",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M07-022": {
   "q": "检索层指标与端到端指标应该先看哪个?为什么?",
   "a": "先检索层后端到端: 管线是因果链, 检索层崩了端到端怎么调 prompt 都没用;官方 RAG cookbook 评估分两层: 检索到的块好不好 + 最终回答对不对 (Claude 当评分员)",
   "cat": "rag",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M07-023": {
   "q": "Agentic search (just-in-time retrieval) 的定位与代价?",
   "a": "把搜索工具交给模型按需检索, 适合多轮探索/来源异构/查询不可预知;渐进式披露但运行期慢且可能乱逛;Claude Code 是混合策略样板: 固定资料预先入上下文+grep/glob 按需拉取, 规避陈旧索引",
   "cat": "rag",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M07-024": {
   "q": "「上下文窗口是工作内存不是硬盘」对 RAG 选型意味着什么?",
   "a": "窗口=working memory, RAG=外接硬盘+图书管理员, 每次只把真正相关的几页搬进内存;所以大窗口降低 RAG 的必要性但永不消除 context rot;官方: 可预见的未来里任何尺寸窗口都受上下文污染与相关性问题困扰",
   "cat": "rag",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M07-025": {
   "q": "查询改写 (query rewriting) 的三种基本手法?",
   "a": "改写: 口语→检索友好(补主语/时间/限定词);扩展: 同义词/缩写/术语展开;分解: 多意图问题拆成多个子查询分别检索再合并(交给 rerank)",
   "cat": "rag",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M07-026": {
   "q": "HyDE 的思路与原理?",
   "a": "Hypothetical Document Embeddings: 先让 LLM 生成假设性答案文档, 用它的 embedding(而非原 query)检索;假设答案与真实文档同为陈述句形态, 向量距离更紧;代价是多一次调用且幻觉可能带偏检索(arXiv 2212.10496)",
   "cat": "rag",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M07-027": {
   "q": "查询改写与 contextual retrieval 的对称关系?",
   "a": "都在消除 query 与文档的形态差: 索引侧 contextual retrieval 给块加上下文前缀(官方有实验背书);查询侧改写把口语 query 变成接近文档的形态(需自行 A/B 验证);两者正交可叠加",
   "cat": "rag",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M07-028": {
   "q": "Lost in the Middle 现象是什么?",
   "a": "多文档 QA 中模型对上下文信息的利用呈 U 形: 开头与结尾利用好, 中部信息系统性被忽视(arXiv 2307.03172, TACL 2024);与 context rot 互补——一个讲位置性衰减, 一个讲总量性衰减",
   "cat": "rag",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M07-029": {
   "q": "缓解 Lost in the Middle 的三类手段?",
   "a": "重排摆放: rerank 后把最相关块放最前/首尾, 陪跑块放中部;结构化: 分节编号+长文档放前查询放末尾(官方排布);分段处理: map-reduce 分批/多 agent 独立上下文, 消灭中部位置本身",
   "cat": "rag",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M07-030": {
   "q": "为什么 rerank 之后『顺序也是一种资源』?",
   "a": "LitM 表明位置影响信息利用率;rerank 不仅筛选哪些块进上下文, 还决定它们的位置分布——无脑按检索分数罗列会把高相关块浪费在中部",
   "cat": "rag",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M07-031": {
   "q": "五路选型中数据库直查 vs 工具查询怎么分?",
   "a": "都是查结构化数据;工具查询(tool query)由模型即席构造查询, 适合不可预知的运行时需求;数据库直查由应用代码设计期固定, 适合可枚举的已知需求;本质是模块 04 的 Claude decides vs application decides 在数据获取上的投影",
   "cat": "rag",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M07-032": {
   "q": "微调 (fine-tuning) 在知识接入五路对比中的结构性劣势?",
   "a": "知识烧进权重: 更新知识=重新训练, 时效性最差;适合稳定任务分布的行为/风格/格式塑造, 不适合私有知识注入(知识新鲜需求高时 RAG 重建索引即可完胜)",
   "cat": "rag",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M08-001": {
   "q": "Building Effective Agents 对 workflow 的官方定义是什么?",
   "a": "LLM 和工具通过预定义代码路径 (predefined code paths) 编排的系统;控制流由开发者写的代码决定",
   "cat": "workflow-vs-agent",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M08-002": {
   "q": "Building Effective Agents 对 agent 的官方定义是什么?",
   "a": "LLM 动态指挥自己的流程和工具使用、对如何完成任务保持控制的系统;控制流由模型运行时生成",
   "cat": "workflow-vs-agent",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M08-003": {
   "q": "workflow 与 agent 的本质区别一句话概括?",
   "a": "『下一步做什么』由谁决定:workflow=开发者预定义代码路径,agent=模型动态决策;两者统称 agentic systems",
   "cat": "workflow-vs-agent",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M08-004": {
   "q": "Anthropic 官方的极简 agent 定义(后续工程文口径)是什么?",
   "a": "LLMs autonomously using tools in a loop(在循环中自主使用工具的 LLM)",
   "cat": "agent-loop",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M08-005": {
   "q": "agent loop 五要素是什么?",
   "a": "目标 Goal / 推理 Reasoning / 规划 Planning / 行动 Action(tool_use) / 观察 Observation(tool_result)",
   "cat": "agent-loop",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M08-006": {
   "q": "官方点名的 agent 停止条件例子是什么?",
   "a": "最大迭代次数 (maximum number of iterations);架构上还应配预算上限/人工检查点/阻塞升级",
   "cat": "agent-loop",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M08-007": {
   "q": "agent 每一步靠什么评估进展?",
   "a": "从环境获取 ground truth(工具调用结果/代码执行结果),而不是模型自我判断",
   "cat": "agent-loop",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M08-008": {
   "q": "agent = 工具回路 + 什么?",
   "a": "+ 控制权转移:模块 04 的工具回路不变,但循环圈数/方向/停止时机由模型决定;应用层保留工具执行/权限门/停止条件三样确定性职责",
   "cat": "agent-loop",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M08-009": {
   "q": "agentic 系统的基础积木 (building block) 是什么?",
   "a": "增强型 LLM (augmented LLM):LLM + 检索/工具/记忆;官方要求把增强能力裁剪到用例并给模型清晰接口",
   "cat": "orchestration-patterns",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M08-010": {
   "q": "Routing 模式的定义与官方例子?",
   "a": "对输入分类并导向专门后续任务;例:客服查询分流(咨询/退款/技术支持),简单问题路由给更便宜的模型",
   "cat": "orchestration-patterns",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M08-011": {
   "q": "Prompt chaining 的核心交易是什么?",
   "a": "用延迟换准确率 (trade latency for higher accuracy):任务分解为固定序列,每步更简单,可加程序化 gate",
   "cat": "orchestration-patterns",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M08-012": {
   "q": "Parallelization 的两个变体是什么?",
   "a": "分段 (sectioning):独立子任务并行;投票 (voting):同一任务多次运行取多样化输出/多数结果",
   "cat": "orchestration-patterns",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M08-013": {
   "q": "Evaluator-optimizer 的两个适用信号是什么?",
   "a": "①有清晰的评估标准;②人类 articulate 的反馈能显著改进输出且 LLM 能给出这种反馈(迭代精修有可测收益)",
   "cat": "orchestration-patterns",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M08-014": {
   "q": "Orchestrator-workers 与 parallelization 的关键区别?",
   "a": "子任务是否预定义:parallelization 的子任务预先确定,orchestrator-workers 由编排器按输入动态分解再综合",
   "cat": "orchestration-patterns",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M08-015": {
   "q": "Planner-executor 与 orchestrator-workers 的区分判据?",
   "a": "计划是静态契约还是动态:planner-executor 先产出计划照单执行(通常不改),orchestrator-workers 随环境反馈可再分解;BEA 未单列 planner-executor",
   "cat": "orchestration-patterns",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M08-016": {
   "q": "多智能体系统为什么有效(官方解释)?",
   "a": "subagent 各带独立上下文并行探索,本质是对搜索的压缩:把海量语料蒸馏成高信号 token 回传主 agent,同时实现关注点分离",
   "cat": "multi-agent",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M08-017": {
   "q": "多智能体相对单 agent 的官方性能数据是多少?",
   "a": "Opus 4 主 agent + Sonnet 4 subagents 比单 agent Opus 4 在内部研究评估中高 90.2%",
   "cat": "multi-agent",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M08-018": {
   "q": "agent/multi-agent 的 token 成本倍数(官方数据)?",
   "a": "agent 约为 chat 的 4 倍,multi-agent 约 15 倍;token 用量一项解释了 BrowseComp 评估中 80% 的性能方差",
   "cat": "multi-agent",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M08-019": {
   "q": "哪些领域不适合 multi-agent(官方口径)?",
   "a": "需要所有 agent 共享同一上下文或 agent 间强依赖的任务;如多数编码任务真正可并行的部分少于研究任务",
   "cat": "multi-agent",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M08-020": {
   "q": "给 subagent 的委派指令必须包含什么?",
   "a": "目标(objective)/输出格式(output format)/工具与信源指引/清晰任务边界,否则重复劳动或漏查",
   "cat": "multi-agent",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M08-021": {
   "q": "平台 memory tool 的启用写法与执行方?",
   "a": "tools 里加 {type: memory_20250818, name: memory};client-side 执行:Claude 只发起请求,存储由你的应用控制,须做路径穿越防护,限 /memories 目录",
   "cat": "memory",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M08-022": {
   "q": "长时程任务的官方上下文三件套是什么?",
   "a": "压缩 (compaction,含旧工具结果清理)/结构化笔记 (structured note-taking, agentic memory)/子代理架构 (sub-agent architectures)",
   "cat": "memory",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M08-023": {
   "q": "官方决策阶梯的三步顺序?",
   "a": "①先找最简单方案(单次调用+检索+示例往往够) ②well-defined 任务用 workflow ③规模上需要灵活性与模型决策才上 agent",
   "cat": "decision-framework",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M08-024": {
   "q": "官方对 agent 框架的建议是什么?",
   "a": "先用 API 直起步(许多模式几行代码可实现);用框架必须理解底层代码,错误假设是客户错误的常见来源",
   "cat": "decision-framework",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M08-025": {
   "q": "ACI 是什么?官方在 SWE-bench agent 上的经验?",
   "a": "agent-computer interface,对标 HCI 投入;官方优化工具花的时间超过优化 prompt;例:改强制绝对路径后模型零失误",
   "cat": "tool-design",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M08-026": {
   "q": "Managed Agents 的三接口是什么(2026 新源)?",
   "a": "session(只追加事件日志,不是上下文窗口)/harness(调用 Claude 并路由工具调用的循环)/sandbox(执行环境);brain 与 hands 解耦",
   "cat": "production-agents",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M08-027": {
   "q": "Messages API 与 Managed Agents 的官方选型口径?",
   "a": "Messages API=自定义 agent loop/细粒度控制;Managed Agents=长时程异步任务/不自建 loop 与沙箱(beta)",
   "cat": "production-agents",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M09-001": {
   "q": "官方对 Claude Code 的产品定位是什么?",
   "a": "Agentic coding tool(智能体式编码工具):读取代码库/编辑文件/运行命令/集成开发工具,运行完整 agent loop 而非仅补全",
   "cat": "claude-code",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M09-002": {
   "q": "Claude Code 的 agent loop 三阶段(官方定义)?",
   "a": "gather context → take action → verify results;三阶段相互交织,每次工具调用结果回喂模型影响下一步,用户可随时打断",
   "cat": "claude-code",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M09-003": {
   "q": "agentic harness(智能体脚手架)指什么?",
   "a": "让模型能作为 agent 行动的执行系统:处理输入/编排工具调用/返回结果;官方在 evals 工程博文中称 Claude Code 为 a flexible agent harness",
   "cat": "claude-code",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M09-004": {
   "q": "CLAUDE.md 的四个层级(从宽到窄)?",
   "a": "Managed policy(组织级,如 /etc/claude-code/CLAUDE.md) → User(~/.claude/CLAUDE.md) → Project(./CLAUDE.md,入库) → Local(./CLAUDE.local.md,不入库)",
   "cat": "memory",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M09-005": {
   "q": "auto memory(MEMORY.md)每次会话加载多少?",
   "a": "前 200 行或 25 KB,取先到者",
   "cat": "memory",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M09-006": {
   "q": "官方建议每个 CLAUDE.md 保持多少行以内?为什么?",
   "a": "200 行以内;更长消耗更多上下文且可能降低遵从度。事实放 CLAUDE.md,多步流程放 skill,局部规则放 .claude/rules/",
   "cat": "memory",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M09-007": {
   "q": ".claude/rules/ 的 paths 机制是什么?",
   "a": "带 paths: 前置元数据的规则文件,只在 Claude 读到匹配路径的文件时自动加载——把大 CLAUDE.md 按目录拆小的官方机制",
   "cat": "memory",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M09-008": {
   "q": "为什么 CLAUDE.md 不能当授权机制?官方替代方案?",
   "a": "CLAUDE.md 是 context 不是 enforced configuration;要无论模型怎么决定都阻断某行为,用 deny 权限规则或 PreToolUse hook",
   "cat": "permissions",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M09-009": {
   "q": "截至 2026-08 的六种 permission modes?",
   "a": "default(Manual)/acceptEdits/plan/auto/dontAsk/bypassPermissions",
   "cat": "permissions",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M09-010": {
   "q": "auto 模式如何工作?哪些计划默认用它?",
   "a": "第二个模型(classifier)代替人工审查动作;Pro/Max/Team 计划默认起始模式为 auto,解决 Manual 的提示疲劳问题",
   "cat": "permissions",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M09-011": {
   "q": "deny 规则在哪些模式下生效?",
   "a": "所有模式,包括 bypassPermissions;受保护路径任何模式都不自动批准(bypass 除外),rm/rmdir 针对关键路径永不自动批准",
   "cat": "permissions",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M09-012": {
   "q": "settings 配置优先级(高到低)?",
   "a": "managed settings → 命令行 → 项目 .claude/settings.local.json → 项目 .claude/settings.json → 用户 ~/.claude/settings.json",
   "cat": "permissions",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M09-013": {
   "q": "bypassPermissions 的使用红线?",
   "a": "只能在不可逃逸的隔离环境(一次性容器/VM)使用;开发者本机使用等于把 shell 交给概率系统",
   "cat": "permissions",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M09-014": {
   "q": "PreToolUse hook 的架构意义?",
   "a": "唯一无论模型怎么决定都会执行的强制点:检查工具入参,返回 deny(exit code 2 或 JSON decision)即可阻断——LLM 指令 ≠ 应用层强制的具体体现",
   "cat": "hooks",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M09-015": {
   "q": "hooks 的三种事件节奏?",
   "a": "每会话一次(SessionStart/SessionEnd);每轮一次(UserPromptSubmit/Stop/StopFailure);每次工具调用(PreToolUse/PostToolUse;另有 PermissionRequest/PreCompact/PostCompact/Notification 等)",
   "cat": "hooks",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M09-016": {
   "q": "hook 可以是哪些形态?",
   "a": "shell 命令/HTTP 请求/MCP 工具调用/LLM prompt/subagent",
   "cat": "hooks",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M09-017": {
   "q": "hook 的 exit code 2 表示什么?",
   "a": "阻止(block)触发该事件的工具调用",
   "cat": "hooks",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M09-018": {
   "q": "Skills 正文何时载入上下文?",
   "a": "只在被使用时才载入(上下文常驻仅一行描述)——官方称长参考资料几乎零成本;遵循 Agent Skills 开放标准(agentskills.io)",
   "cat": "skills",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M09-019": {
   "q": "custom commands 的现状(2026-08)?",
   "a": "已并入 skills:.claude/commands/deploy.md 与 .claude/skills/deploy/SKILL.md 都注册 /deploy 且行为一致;旧文件继续兼容",
   "cat": "skills",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M09-020": {
   "q": "skill 的 disable-model-invocation: true 作用?",
   "a": "禁止模型自动调用,只能用户手动 /skill-name 调用",
   "cat": "skills",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M09-021": {
   "q": "命令识别位置与 skill 链式调用上限?",
   "a": "命令只在消息开头识别;skill 是例外,最多可链式调用 6 个",
   "cat": "skills",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M09-022": {
   "q": "subagent 的三大价值?",
   "a": "保留主上下文(独立窗口只回摘要)/强制约束(受限工具集+独立权限)/成本控制(低价值任务路由到更便宜模型如 Haiku)",
   "cat": "subagents",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M09-023": {
   "q": "内置的 Explore 与 Plan subagent?",
   "a": "Explore:只读探索,禁 Write/Edit,模型继承主会话;Plan:plan mode 下的只读研究代理",
   "cat": "subagents",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M09-024": {
   "q": "subagent description 合计 token 超多少会启动告警?",
   "a": "15,000 tokens;细节应移入各 subagent 的 system prompt",
   "cat": "subagents",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M09-025": {
   "q": "会话启动时 200K 窗口的自动加载顺序?",
   "a": "system prompt → auto memory(200行/25KB) → 环境信息 → MCP 工具名(延迟) → skill 一行描述 → user CLAUDE.md → project CLAUDE.md(rules 按路径触发)",
   "cat": "context",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M09-026": {
   "q": "/context、/compact、/clear 各做什么?",
   "a": "/context 看什么占满窗口;/compact 把历史摘要压缩(skill 描述列表不重新注入,只用过的保留);/clear 清空对话但保留项目记忆",
   "cat": "context",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M09-027": {
   "q": "tool search(deferred tools)解决什么?",
   "a": "MCP 工具默认延迟加载:上下文常驻仅工具名列表,schema 按需载入(ENABLE_TOOL_SEARCH 可调),避免几十个 server 的 schema 挤爆上下文",
   "cat": "mcp",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M09-028": {
   "q": "项目级 MCP 配置文件与 token 原则?",
   "a": ".mcp.json 入版本控制保证团队/CI 一致;token 一律走环境变量/密管,绝不入库;远程 server 推荐 HTTP transport",
   "cat": "mcp",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M09-029": {
   "q": "官方对 MCP server 的安全警告?",
   "a": "会抓取外部内容的服务器可能带来 prompt injection 风险,连接前必须信任该服务器;组织可设 allow/ask 控制,单工具可标 requiresUserInteraction",
   "cat": "mcp",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M09-030": {
   "q": "模型切换与 CLAUDE.md 修改对 prompt caching 的影响?",
   "a": "切换模型触发一次无缓存的慢轮次;CLAUDE.md 修改不会在会话中途生效",
   "cat": "context",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M09-031": {
   "q": "checkpointing(/rewind)是什么?",
   "a": "把代码与对话回滚到检查点的机制",
   "cat": "claude-code",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M09-032": {
   "q": "plugins 与 standalone 配置的关系?",
   "a": "plugin 把 skills+hooks+subagents+MCP servers 打包(manifest 在 .claude-plugin/plugin.json)经 marketplace 分发;官方建议先 .claude/ standalone 快速迭代,跨仓库复用时再打包",
   "cat": "plugins",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M09-033": {
   "q": "headless/CI 场景的推荐权限配置?",
   "a": "claude -p 非交互模式 + dontAsk(只放预批准工具)+ 最小 allow + deny 列表 + PreToolUse hook 兜底;bypassPermissions 仅限隔离容器",
   "cat": "permissions",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M10-001": {
   "q": "生产环境应优先使用哪种认证方式来消除静态 API key?",
   "a": "Workload Identity Federation(工作负载身份联合):用云平台身份换短时效 token;官方定位为生产负载/CI/CD/Kubernetes 场景下消除静态密钥",
   "cat": "secrets",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M10-002": {
   "q": "三种官方认证方式及适用场景?",
   "a": "API key(本地开发/脚本,静态 sk-ant- 密钥走 x-api-key 头);Workload Identity Federation(生产云负载);App Attest(iOS/macOS 应用直连)",
   "cat": "secrets",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M10-003": {
   "q": "identity-backed key(personal/service account key)的核心特性?",
   "a": "密钥绑定身份:身份被移除组织时 key 即失效——'密钥不会比它的主人活得更久';workspace key 是 legacy 不推荐",
   "cat": "secrets",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M10-004": {
   "q": "secrets 管理三原则?",
   "a": "绝不入库/不进日志/不进 prompt;运行时经环境变量或密钥管理器注入;能用短时效凭证就不用静态密钥(可轮换可撤销可审计)",
   "cat": "secrets",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M10-005": {
   "q": "每个 Claude API 响应都自带哪个调试标识?",
   "a": "request-id 头(形如 req_018EeWyX...);报障与跨系统对账必带;Python/TS SDK 暴露为 _request_id 属性",
   "cat": "observability",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M10-006": {
   "q": "可观测性三支柱在 LLM 应用中的最小充分集?",
   "a": "Logs(结构化 JSON:trace_id/request_id/usage/错误类型);Metrics(p95 延迟/错误率/成本/缓存命中率);Traces(OpenTelemetry spans:路由→检索→每次 Claude 调用→工具)",
   "cat": "observability",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M10-007": {
   "q": "生产日志里什么不能记?",
   "a": "PII(姓名/邮箱/证件号须脱敏或加密限存)、密钥与凭证、完整 prompt/response 体(内容级日志须独立开关+审计)、受协议约束的第三方数据",
   "cat": "observability",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M10-008": {
   "q": "官方如何区分「限流 429」与「spend cap 429」?",
   "a": "限流 429 带 retry-after 头;spend cap 429 无 retry-after 且 details.error_code 为 enforced_spend_limit_reached——重试无效,需升 tier 或等下月",
   "cat": "errors",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M10-009": {
   "q": "自设 spend limit 触顶返回什么?组织 tier 月上限触顶呢?",
   "a": "自设限额:HTTP 400 invalid_request_error(可自行提额恢复);tier 月上限:429 rate_limit_error 且无 retry-after,持续失败到下月 00:00 UTC",
   "cat": "errors",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M10-010": {
   "q": "官方 SDK 默认自动重试策略?",
   "a": "瞬时故障(连接错误/限流/5xx)指数退避重试,默认 2 次,尊重 retry-after 头;可用 max-retries 配置或关闭",
   "cat": "errors",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M10-011": {
   "q": "哪些 HTTP 错误值得重试,哪些不值得?",
   "a": "值得:429(限流型)/500/502/529/连接错误(瞬时);不值得:400/401/403/404(确定性错误,重试烧钱不解决问题)",
   "cat": "errors",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M10-012": {
   "q": "529 overloaded_error 的含义与系统性应对?",
   "a": "API 全平台过载;应对=指数退避重试;系统性含义=流量要平缓爬坡保持平稳,避免触发加速度限制,而不是加并发硬刚",
   "cat": "errors",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M10-013": {
   "q": "超时预算的设计目的?",
   "a": "把请求级总时限显式化并向下分配给每次尝试与退避等待,防止多层超时叠加放大(如三层各 30s 变 90s);预算耗尽即降级不再重试",
   "cat": "resilience",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M10-014": {
   "q": "熔断器三态及转换条件?",
   "a": "closed(正常)→open(连续失败达阈值,快速失败走降级不再打上游)→half-open(冷却期后放单探测,成功回 closed,失败再 open)",
   "cat": "resilience",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M10-015": {
   "q": "降级必须满足的三件事?",
   "a": "显式声明(响应标注 degraded)、可观测(metrics 单独计数)、可恢复(主路径恢复后自动切回,常配半开探测)",
   "cat": "resilience",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M10-016": {
   "q": "哪四类情况必须人工升级?",
   "a": "置信度低(校验失败/groundedness 不过)、后果不可逆(退款/删数据/对外发送)、降级链打穿、合规要求的人工复核点",
   "cat": "resilience",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M10-017": {
   "q": "人工升级时应携带什么?",
   "a": "结构化上下文:原始请求+已尝试路径+失败原因+trace_id;升级事件进审计日志;升级率本身是监控指标",
   "cat": "resilience",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M10-018": {
   "q": "prompt caching 的官方计价倍率?",
   "a": "5 分钟缓存写入=基础输入价×1.25;1 小时写入=×2;缓存读取=×0.1(一折);命中即免费续期",
   "cat": "cost",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M10-019": {
   "q": "cache_control 断点放置的经典陷阱?",
   "a": "放在每次变化的块(时间戳/当次消息)上:20 块回看窗口找不到先前写入→永远全款写入永不命中;正解=放在跨请求保持不变的最后一个块",
   "cat": "cost",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M10-020": {
   "q": "Message Batches API 的关键数字?",
   "a": "全量半价(50%);多数批次 1 小时内完成;单批上限 100,000 请求或 256MB;结果保留 29 天;超 24h 未完成即过期",
   "cat": "cost",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M10-021": {
   "q": "Batches 里不支持哪些参数?",
   "a": "stream:true、fast mode(speed)、Threads(store/previous_thread_event_id)、cache_hint/context_hint、max_tokens:0(缓存预热)",
   "cat": "cost",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M10-022": {
   "q": "缓存读取 token 对 ITPM 限流的影响?",
   "a": "多数模型下缓存读取不计入 ITPM——只有未缓存输入+缓存写入计数;等于变相扩容吞吐,2M ITPM+80% 命中率可处理约 10M 总输入",
   "cat": "cost",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M10-023": {
   "q": "模型生命周期四阶段?",
   "a": "Active(完全支持)→Legacy(不再更新,可能被弃用)→Deprecated(仍可用但不可靠,官方给替代与退役日)→Retired(请求直接失败);公开发布模型至少提前 60 天通知",
   "cat": "upgrade",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M10-024": {
   "q": "模型升级的生产策略三要素?",
   "a": "版本锁定(生产用带日期快照 ID,模型 ID 是配置不是代码);灰度(1%→5%→25%→50%→100%,稳定哈希,异常回滚);回归评估(golden dataset 对比通过率,远早于退役日测试)",
   "cat": "upgrade",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M10-025": {
   "q": "官方审计 deprecated 模型用量的出口?",
   "a": "Console Usage 页 Export CSV,按 API key 与模型细分——定位仍在用 deprecated 模型的负载",
   "cat": "upgrade",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M10-026": {
   "q": "成本/延迟/可靠性三角的两两张力?",
   "a": "成本↔延迟(大模型贵但一次到位,小模型便宜可能多轮纠错更贵);成本↔可靠性(重试/校验加成本);延迟↔可靠性(重试校验加延迟,超时预算画线)",
   "cat": "tradeoffs",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M10-027": {
   "q": "anthropic-version 头的作用与稳定性承诺?",
   "a": "锁定 API 版本(如 2023-06-01,SDK 自动带);同版本内保留既有输入/输出参数不破坏,可能追加可选字段——解析响应要容忍新字段",
   "cat": "upgrade",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M10-028": {
   "q": "使用分层缓存的对话前缀 TTL 从何时起算?",
   "a": "从写/读请求开始时起算(不是响应结束);流式响应耗时也计入——4 分钟流式后续用缓存的请求要在响应结束后约 1 分钟内发起",
   "cat": "cost",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M11-001": {
   "q": "Prompt Injection 的两个官方威胁模型分别是什么?",
   "a": "直接注入/jailbreak(应用的用户是攻击者,构造输入绕过护栏)与间接注入(用户可信,但 Claude 处理的第三方内容——网页/邮件/文档/工具结果——含对抗性指令)",
   "cat": "prompt-injection",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M11-002": {
   "q": "间接注入 (Indirect Prompt Injection) 的载荷通常藏在哪里?",
   "a": "被 agent 代为处理的第三方内容:入站邮件正文、抓取的网页、上传文件的 OCR 输出、工具调用结果(tool results)",
   "cat": "prompt-injection",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M11-003": {
   "q": "官方对直接注入的四大缓解措施?",
   "a": "无伤害筛查(harmlessness screen,轻量模型+结构化输出)、输入校验(过滤已知注入模式)、提示工程(边界+明确拒绝话术)、处置惯犯(限流/封禁)",
   "cat": "prompt-injection",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M11-004": {
   "q": "官方推荐的间接注入第一道结构措施是什么?",
   "a": "不可信内容只放进 tool_result block,绝不放进 system prompt 或普通 user text block——Claude 被训练为对 tool result 中的指令保持怀疑",
   "cat": "prompt-injection",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M11-005": {
   "q": "为什么要对不可信内容做 JSON 编码后再进上下文?",
   "a": "JSON 转义提供无歧义定界符,攻击者无法通过闭合引号或标签『越狱』到指令上下文",
   "cat": "prompt-injection",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M11-006": {
   "q": "为什么不能把应用自己的指令写进 tool_result?",
   "a": "模型把 tool result 当不可信数据,里面的指令可能被忽略或被标记为注入;应用指令应放后续 user turn 或 mid-conversation system message",
   "cat": "prompt-injection",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M11-007": {
   "q": "『LLM 指令 ≠ 应用层强制』(LLM instruction vs application enforcement) 的核心含义?",
   "a": "system prompt 里的禁令只是对模型意图的概率性影响,不是授权机制;真正的授权必须由应用层确定性代码(工具设计/网关/审批门/沙箱)执行",
   "cat": "least-privilege",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M11-008": {
   "q": "Anthropic 工程博文给出的三类 agent 安全风险?",
   "a": "用户滥用(user misuse)、模型行为失当(model misbehavior)、外部攻击者(external attackers,含 prompt injection 与对运行时/编排层的传统攻击)",
   "cat": "security",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M11-009": {
   "q": "三层防御组件(environment/model/external content)中,哪层是硬边界?",
   "a": "环境层:进程沙箱、VM、文件系统边界、egress 控制——『当所有概率性防护都失手时,真正挡住攻击的是确定性边界』",
   "cat": "security",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M11-010": {
   "q": "Claude Code 遥测中约多少比例的权限弹窗被批准?说明了什么?",
   "a": "约 93%——approval fatigue(审批疲劳):弹窗越多用户越不细看,人审作为唯一防线的价值随审批量下降",
   "cat": "human-approval",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M11-011": {
   "q": "Anthropic 内部红队『用户作为注入向量』的钓鱼演练结果?",
   "a": "25 次重试 24 次外传成功——指令是用户亲手敲的,模型层分类器无异常可抓;唯一守得住的是环境层(egress 控制+文件系统边界)",
   "cat": "prompt-injection",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M11-012": {
   "q": "egress 域名白名单为什么被重新定义为『能力授予 (capability grant)』?",
   "a": "Cowork 案例:放行 api.anthropic.com 也放行了 Files API 上传,数据被传到攻击者的 Anthropic 账号——白名单放行的不是目的地而是该域名背后的全部功能面",
   "cat": "least-privilege",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M11-013": {
   "q": "最小权限工具设计的三个具体落点?",
   "a": "粒度拆分(run_command→read_file/run_tests)、只读优先(先验证正确性再放权)、参数 schema 收窄(路径前缀/域名/枚举值)",
   "cat": "least-privilege",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M11-014": {
   "q": "MCP 安全最佳实践中的渐进式 scope 模型怎么做?",
   "a": "初始只给低风险的发现/读 scope,首次尝试特权操作时经 WWW-Authenticate scope 挑战增量提权,并记录每次提权事件;避免一次性宽 scope(files:* / db:*)",
   "cat": "least-privilege",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M11-015": {
   "q": "MCP 的 token passthrough 反模式为什么被规范禁止?",
   "a": "绕过下游安全控制(限流/校验/监控)、审计断链(无法区分客户端)、信任边界混乱(一个 token 打通多个服务)",
   "cat": "tool-security",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M11-016": {
   "q": "为什么『审计过的连接器 ≠ 审计过的数据』?",
   "a": "连接器本身合规不代表它取回的内容干净:GitHub 连接器可通过恶意软件检查,却把带毒 README 载入模型上下文——工具输出仍是注入攻击面",
   "cat": "tool-security",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M11-017": {
   "q": "Anthropic Commercial Terms 对 API 客户数据训练的默认规定?",
   "a": "Anthropic may not train models on Customer Content from Services——商业/API 内容默认不用于训练;客户保留 Inputs 权利并拥有 Outputs",
   "cat": "data-privacy",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M11-018": {
   "q": "ZDR 是什么?covered models 的留存例外(截至 2026-08-30)?",
   "a": "Zero Data Retention:推理后不持久化 prompt/响应;例外:Mythos 级 covered models 在所有平台保留 30 天用于安全分析(2026-06-09 生效,仅影响开 ZDR 的组织),默认无人可读、访问有防篡改日志",
   "cat": "data-privacy",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M11-019": {
   "q": "PII 输入脱敏与日志脱敏的架构要点?",
   "a": "请求离开信任边界前做 PII 识别+替换(假名化/令牌化,应用层回填);对话日志/trace/工具入参出参同样脱敏——egress 控制挡不住你自己的日志管道",
   "cat": "data-privacy",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M11-020": {
   "q": "什么时候人工审批 (human approval) 是有效控制?",
   "a": "用户有能力评估动作风险(如能读懂 bash 的开发者)、审批不密集(避免 93% 批准率式疲劳)、用户本身不是注入向量;否则应换沙箱/确定性边界",
   "cat": "human-approval",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M11-021": {
   "q": "Anthropic 三种产品隔离模式分别用什么技术?",
   "a": "claude.ai 代码执行:gVisor 容器+每会话临时文件系统;Claude Code:OS 级沙箱(macOS Seatbelt / Linux bubblewrap,网络默认拒绝);Cowork:完整 VM+独立内核,凭据留在宿主 keychain",
   "cat": "security",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M12-001": {
   "q": "评估(Evaluation/eval)的四个基础组成部分是什么?",
   "a": "输入 prompt、模型输出、金标答案(Golden Answer)、分数(Score);金标可以是必须精确匹配的答案,也可以是给评分器的完美答案示例/评分指引",
   "cat": "evals-basics",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M12-002": {
   "q": "官方对 task 与 trial 的定义区别?",
   "a": "Task=单个测试(定义好的输入+成功标准);Trial=对一个 task 的一次尝试;因模型输出逐次不同,每个 task 要跑多 trial 才能得到稳定结果",
   "cat": "evals-basics",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M12-003": {
   "q": "Transcript 与 Outcome 的区别(官方定义)?",
   "a": "Transcript=一次 trial 的完整记录(输出/工具调用/推理/中间结果);Outcome=trial 结束时环境的最终状态;agent 说『已预订』是 transcript,数据库里存在预订才是 outcome",
   "cat": "evals-basics",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M12-004": {
   "q": "Agent 评估中 evaluation harness 与 agent harness 分别指什么?",
   "a": "Evaluation harness=端到端跑评估的基础设施(下发任务/并发/记录/评分/汇总);agent harness(脚手架)=让模型作为 agent 行动的系统;评估对象是二者组合体",
   "cat": "evals-basics",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M12-005": {
   "q": "三类评分器(code-based/LLM-as-judge/human)的官方推荐使用顺序?",
   "a": "能代码评分就代码评分(最快最可靠最可扩展),必要时用 LLM 评分(先测可靠性再规模化),人工评分少量谨慎使用(主要用于校准 LLM judge)",
   "cat": "graders",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M12-006": {
   "q": "LLM-as-judge 的四条官方技巧?",
   "a": "详细清晰的 rubric;输出经验化/结构化(只出 correct/incorrect 或 1-5 分);先在标签内推理再给结论然后丢弃推理;给 judge『Unknown/信息不足』出口避免幻觉判定",
   "cat": "graders",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M12-007": {
   "q": "官方对『评估的成本结构』的提醒?",
   "a": "写题目和金标答案是一次性固定成本;评分是每次重跑都发生的永续成本;因此『能被快速便宜地评分』应是 eval 设计的中心考量(如改写成选择题)",
   "cat": "graders",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M12-008": {
   "q": "Capability evals 与 regression evals 的期望通过率分别是多少?",
   "a": "Capability=低通过率(故意选 agent 做不好的任务当爬坡目标);Regression=接近 100%(下降=有东西坏了);能力题通过率高后『毕业』成回归套件继续跑",
   "cat": "evals-basics",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M12-009": {
   "q": "pass@k 与 pass^k 的定义与随 k 的变化方向?",
   "a": "pass@k=k 次尝试至少一次成功的概率,随 k 增大而升高;pass^k=k 次全部成功的概率,随 k 增大而降低;per-trial 75% 时 pass^3=0.75³≈42%",
   "cat": "evals-basics",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M12-010": {
   "q": "什么产品场景该看 pass^k 而非 pass@k?",
   "a": "面向用户、每次都必须对的系统(客服/交易):用户要求每次都可靠;k=1 时两者相等,k=10 时讲相反的故事",
   "cat": "evals-basics",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M12-011": {
   "q": "好任务(golden dataset 题目)的无歧义标准是什么?",
   "a": "两个领域专家独立判断应得出同一 pass/fail 结论,且专家自己能通过该任务;规格要完整(缺文件路径类歧义会让 agent 无辜挂科)",
   "cat": "golden-dataset",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M12-012": {
   "q": "为什么每道题要配参考解(Reference Solution)?",
   "a": "一份已知能通过所有 grader 的输出,证明题目可解且 grader 配置正确;前沿模型 0% pass@100 通常是题目/评分器坏了而非模型不行",
   "cat": "golden-dataset",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M12-013": {
   "q": "什么是单侧评估(one-sided evals)问题?官方例子?",
   "a": "只测『应该发生 X 时做了 X』不测『不该发生时没发生』→单侧优化(训出什么都搜的 agent);官方 web search 评估同时覆盖该搜(天气)与不该搜(谁创立 Apple)双向题目",
   "cat": "golden-dataset",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M12-014": {
   "q": "防过拟合到评测集的机制有哪些?",
   "a": "题目分布≈生产分布;held-out 子集只用于汇报不用于调参;线上失败持续回流换血;双向平衡;grader 抗绕过(防钻空子)",
   "cat": "golden-dataset",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M12-015": {
   "q": "评估饱和(Eval Saturation)是什么?有什么症状?",
   "a": "agent 通过了所有可解任务→分数不再提供改进信号,大改进只表现为小幅涨分(SWE-bench Verified 从约 30% 涨到 >80%);解法:难题补充+旧题毕业成回归套件",
   "cat": "golden-dataset",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M12-016": {
   "q": "官方 CORE-Bench 教训(Opus 4.5 从 42% 到 95%)说明什么?",
   "a": "评分器 bug 会冒充模型缺陷:僵化评分(期望 96.124991 却惩罚 96.12)/任务歧义/不可复现任务把 42% 压成假象;分数异常先怀疑 eval 再怀疑模型",
   "cat": "graders",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M12-017": {
   "q": "Task Success Rate 应该用什么校验?",
   "a": "state_check:校验环境终态(outcome),不是 transcript 里说了什么;官方会话 agent 成功判据=工单 resolved(state)+≤10 轮(transcript 约束)+语气(rubric)多维各配 grader",
   "cat": "metrics",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M12-018": {
   "q": "Tool Correctness(工具正确性)的三个检查面?",
   "a": "该调的调了(required 工具集);参数合规(如 process_refund amount<=100);不该调的没调/顺序符合业务规则(先鉴权后退款);但官方警告:评产出不评路径,严格校验调用顺序往往过脆",
   "cat": "metrics",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M12-019": {
   "q": "Groundedness 与 Answer Correctness 的区别?",
   "a": "Groundedness=主张被证据支撑的比例(有据);Correctness=答案内容对不对;有据≠正确(证据可能过时),正确≠有据(碰巧对);两个维度分开评",
   "cat": "metrics",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M12-020": {
   "q": "幻觉率(Hallucination Rate)的可操作定义及防作弊?",
   "a": "无支撑且未弃答的主张数/总主张数;弃答(I don't know)单独归类不计幻觉但弃答率要单独上报,否则『全拒答』就成了幻觉率 0% 的作弊解",
   "cat": "metrics",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M12-021": {
   "q": "官方减幻觉(Minimize Hallucinations)的基础三招?",
   "a": "允许说『我不知道』(授权弃答);长文档(>20k token)先摘原文引语再作答;主张级引证(答后逐主张找支撑引语,找不到就撤回该主张)",
   "cat": "guardrails",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M12-022": {
   "q": "recall@k / precision@k / MRR / nDCG 各管什么?",
   "a": "recall@k=查全(金标相关块进没进 Top-k,RAG 默认优先);precision@k=查准(上下文预算紧时);MRR=单正确答案问答的第一个相关排名; nDCG=分级相关度+位置对数折损的排序质量",
   "cat": "retrieval-metrics",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M12-023": {
   "q": "为什么 recall@k 不能单看?",
   "a": "加大 k 就能单调提高(全库塞入=recall 100%),必须与 precision@k/nDCG 同看;官方 RAG 评估正是检索层指标+端到端两层结构",
   "cat": "retrieval-metrics",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M12-024": {
   "q": "TTFT 与 Baseline Latency 的官方定义?",
   "a": "Baseline latency=模型处理 prompt 并生成响应的时间;TTFT(Time to First Token)=从发送 prompt 到吐出第一个 token 的时间,streaming 场景决定用户感知响应速度",
   "cat": "monitoring",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M12-025": {
   "q": "官方 agent 评估 YAML 里跟踪的延迟/用量指标有哪些?",
   "a": "time_to_first_token、output_tokens_per_sec、time_to_last_token + transcript 侧 n_turns/n_toolcalls/n_total_tokens;延迟指标应进回归套件",
   "cat": "monitoring",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M12-026": {
   "q": "生产监控(production monitoring)的定位与短板?",
   "a": "上线后检测 distribution drift 与合成评估漏掉的真实问题;短板:被动(问题先到用户)、信号噪声大、缺乏评分所需的 ground truth;须与离线评估互补",
   "cat": "monitoring",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M12-027": {
   "q": "六种理解 agent 表现的方法中,人工转录审读(manual transcript review)的节奏建议?",
   "a": "官方建议每周抽样阅读 transcript:建立失败模式直觉、捕捉自动检查漏掉的细微问题;费时不可扩展,但官方强调分数不读 transcript 就不把它当真",
   "cat": "monitoring",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M12-028": {
   "q": "逃逸指标(escape metrics,业界通用非官方术语)指什么?举例?",
   "a": "不评答案质量而评『用户是否放弃了 agent』的代理指标:用户改写率(重新措辞再问)、人工接管/升级率(escalation rate)、thumbs-down、中途放弃;异常升高时采样 transcript 定位是哪层劣化",
   "cat": "monitoring",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M12-029": {
   "q": "每任务成本(cost per task)与每请求成本的区别?",
   "a": "任务=可能 N 轮调用×(input+output)×重试放大(pass^k 概率下);token 预算应做成 transcript 约束(超预算=任务失败),比单请求 max_tokens 更贴近业务;官方 Usage & Cost Admin API 支持成本对账与告警",
   "cat": "monitoring",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M12-030": {
   "q": "官方对『降延迟时机』的次序警告?",
   "a": "先在无约束下做出表现好的 prompt,再做延迟优化;过早砍 token 换速度会让你永远不知道满血性能基线长什么样",
   "cat": "tradeoffs",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M13-001": {
   "q": "客服系统里 80% 是高频简单咨询, 20% 是跨系统疑难个案, 编排怎么设计?",
   "a": "分层分诊 (BEA 官方客服案例): 简单咨询→单次调用+RAG (便宜模型); 任务型 (查单/退款)→固定 workflow+程序化 gate; 疑难个案→受控 agent (步数上限+停止条件+人审检查点). 反模式: 一个开放式 agent 包打全部流量",
   "cat": "orchestration",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M13-002": {
   "q": "官方 Building Effective Agents 对「增加 agentic 复杂度」的原则是什么?",
   "a": "「只在能证明 (measure) 改善结果时才增加复杂度」: 先找最简单可行方案 (很多应用单次调用+检索+示例就够), 任务清晰用 workflow, 需要模型驱动决策的灵活性才上 agent",
   "cat": "orchestration",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M13-003": {
   "q": "workflow 和 agent 的定义区别 (官方口径)?",
   "a": "Workflow: LLM 和工具通过预定义代码路径编排; Agent: LLM 动态指挥自己的流程和工具使用, 对如何完成任务保持控制",
   "cat": "orchestration",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M13-004": {
   "q": "什么时候倾向 MCP 而不是直接 API 集成? (列 3 个信号)",
   "a": "1) 已有现成 MCP server 或多 host 要复用同一工具集; 2) 工具几十上百需要运行时发现 (tools/list); 3) 平台团队出 server/业务团队做 host 的组织分工. 单应用/1-2 系统/延迟敏感→直接 API",
   "cat": "integration",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M13-005": {
   "q": "MCP 工具的 description/annotations 应该如何对待?",
   "a": "视为不可信输入 (untrusted) 除非来自可信 server——间接注入面; 缓解: 工具级 allowlist/denylist、高风险工具人审确认",
   "cat": "security",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M13-006": {
   "q": "知识库 8000 页 wiki, 该塞上下文还是 RAG? 判断依据?",
   "a": "RAG. 官方阈值: 小于 200,000 token (约 500 页) 才考虑整个塞进 prompt 配合缓存; 更大库按需检索. 且任何窗口都有 context rot——塞得下不等于答得准",
   "cat": "retrieval",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M13-007": {
   "q": "作废的政策文档如何保证不再被引用? (RAG 层面)",
   "a": "摄取时打 metadata (valid_until / superseded_by), 查询时 pre-filter 在候选集形成前过滤掉——不是生成后再检查. 顺带解决租户隔离 (tenant_id 硬过滤)",
   "cat": "retrieval",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M13-008": {
   "q": "错误码 TS-1042 这类精确 token 查询靠检索哪一路? 为什么?",
   "a": "BM25/词法路: 罕见精确 token 没有语义分布, embedding 会稀释它; 官方 hybrid 默认 (embeddings+BM25, RRF 融合) 就是为了消除单路盲区",
   "cat": "retrieval",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M13-009": {
   "q": "为什么「system prompt 里写禁令」不算安全控制?",
   "a": "LLM 指令 ≠ 应用层强制: 禁令是对模型的请求不是对系统的约束, 直接注入 (忽略以上指令) 或间接注入 (检索内容藏指令) 即可绕过, 且无审计依据. 真正控制点: 工具的服务端鉴权/策略引擎/审批门/最小能力面 (不给工具=不能做)",
   "cat": "security",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M13-010": {
   "q": "「模型不能批准超过 $200 的退款」在架构上如何落地?",
   "a": "执行通道不进模型工具面; 模型只能创建冻结态退款申请 (request_refund 工具语义), 策略引擎命中 >$200 → 审批门, 人工批准后由代码执行并审计 (谁/依据/结果)",
   "cat": "security",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M13-011": {
   "q": "间接注入 (indirect prompt injection) 最典型的入口是什么? 怎么防?",
   "a": "进入上下文的内容: 检索块/工单历史/网页/邮件. 防御分层: 内容标记为数据非指令、摄取期清洗、权限 pre-filter 限制注入者影响范围、最小工具面、出口检测——纵深防御而非单点",
   "cat": "security",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M13-012": {
   "q": "审批门服务本身挂了, 高危动作怎么办?",
   "a": "冻结排队等待恢复, 绝不临时绕过 (宁可冻结不可放行). 积压超阈值→告警. 这是可靠性×安全的交叉不变式",
   "cat": "reliability",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M13-013": {
   "q": "Claude API 返回 400 invalid_request 和 529 overloaded, 重试策略分别是什么?",
   "a": "4xx 参数类: 不重试, 修复调用方; 5xx/429/超时: 指数退避+jitter 重试 (上限 2-3 次且计入预算), 429 要读 Retry-After; 连续失败→熔断器开路→降级链",
   "cat": "reliability",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M13-014": {
   "q": "列出一条完整的降级链 (L1 客服问答场景)",
   "a": "主模型 (Sonnet) → 备模型 (Haiku, 检索块照给) → 缓存模板答案+表单收集 → 人工队列. 每级触发条件是代码; 检索挂了则直转人工 (无证据不回答)",
   "cat": "reliability",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M13-015": {
   "q": "检索服务故障时为什么宁可转人工也不能让模型回答?",
   "a": "R2 有据性红线: 没有检索证据的生成就是编造 (hallucination), groundedness 无法保障. 原则: 无证据不回答——质量红线优先于自动化率",
   "cat": "reliability",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M13-016": {
   "q": "prompt caching 的断点应该放在哪? 什么做法会毁掉缓存?",
   "a": "放在跨请求保持不变的最后一个块上 (稳定 system+tools 前缀末尾); 把时间戳/当轮消息等动态内容放进前缀→回看窗口找不到先前写入→永远付全价写入永不命中. 命中读只要 0.1 倍价且不计 ITPM",
   "cat": "cost",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M13-017": {
   "q": "Message Batches 半价, 为什么不把实时客服也走 batch?",
   "a": "batch 不支持 streaming、结果要等 (多数<1h)——只适合延迟不敏感负载 (夜间评估/批量摘要/审核). 实时对话的首字延迟要求与 batch 语义冲突",
   "cat": "cost",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M13-018": {
   "q": "每会话成本超预算, 但直接全换最便宜模型 deflection 反而降——为什么?  正确做法?",
   "a": "便宜模型答不准→自动解决率降→升级率涨→坐席人力成本 (远贵于 token) 吃掉省的钱. 正确做法: 分层路由 (分类用 Haiku/主答 Sonnet/疑难 Opus) + 缓存纪律 + 按路径监控成本, 升降档依据 evals 成功率×单价",
   "cat": "cost",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M13-019": {
   "q": "为什么评估要分「检索层」和「端到端」两层? 单看端到端会怎样?",
   "a": "单看端到端分不清「检索坏了」还是「生成坏了」: 检索退化会被误诊为模型变笨去改 prompt. 两层口径: 检索层 recall@k/precision@k/MRR+权限正确率; 端到端 task success/groundedness/工具正确率/注入拦截率",
   "cat": "evaluation",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M13-020": {
   "q": "golden dataset 应该包含哪三类容易漏的负例?",
   "a": "1) 精确 token 用例 (错误码/编号); 2) 已作废知识负例 (旧政策不能再引用); 3) 越权/注入负例 (跨租户访问、红队注入)——其中越权拦截率要求 100%, 是安全指标不是质量指标",
   "cat": "evaluation",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M13-021": {
   "q": "成本-延迟-可靠性三角里, 「灰度发布+分标签指标+自动回滚」扮演什么角色?",
   "a": "安全网: 让你在任何优先级取向下都敢变更——1%→5%→25%→100% 分流, 指标异常即配置回切回滚, 避免全量爆炸半径",
   "cat": "production",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M13-022": {
   "q": "审计日志和观测日志该分开吗? 各记什么?",
   "a": "分开. 审计: append-only 业务/合规事件 (工具调用/审批/升级, 带策略依据与配置版本, 长保留); 观测: trace/usage/延迟, PII 脱敏后进常规栈. 原始会话密文存受控存储, 日志只放指针",
   "cat": "production",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  },
  "M13-023": {
   "q": "多轮对话场景, 让缓存命中的工程纪律是什么?",
   "a": "system+tools 前缀逐字节稳定 (不变措辞/不加时间戳), 动态内容 (检索块/当轮消息) 排后面, cache_control 放稳定前缀末尾; CI 检查 prompt 前缀 diff 防手滑破缓存",
   "cat": "cost",
   "due": "2026-08-30",
   "interval": 0,
   "ease": 2.5,
   "reps": 0,
   "lapses": 0
  }
 },
 "modules": {
  "01": {
   "quiz": [],
   "conf": null,
   "status": "in-progress",
   "note": "W1D1 阅读中：用户已读到 §4.3（上下文窗口），进度超前（当日任务仅前两节）"
  }
 },
 "plan_done": [],
 "sessions": [
  {
   "d": "2026-08-30",
   "a": "read M01 to 4.3"
  }
 ]
}