学习指南: 应用卷。Qwen Code CLI 的生产环境 SDD

模块「应用卷。Qwen Code CLI 的生产环境 SDD」中第 3 / 5 节课
您正在未登录状态下查看课程。 请登录,以保存进度并参加测试。

主题:应用卷。Qwen Code CLI 的生产环境 SDD

难度级别:中级

预计学习时间:40-60 小时(第一遍通读),80-120 小时(含完整进阶路径与实践考核)

前置条件: 完成教材第一卷(book/)的学习——基于 AgentClinic 的 SDD 基础循环

理解 requirements.md、plan.md、validation.md、QWEN.md 的结构

掌握功能边界、负面需求与事实核查的工作方法

具备基础的命令行与 bash 脚本操作技能

具有 LLM 工具使用经验(建议为 Qwen Code CLI)

理解 CI/CD 与生产环境基础设施的基本概念

学习目标: 完成学习后,学员能够针对一个生产环境案例,从遗留代码中还原需求规格,并在 genealogy.md 中完成溯源记录

学员能够诊断规格缺陷,创建 poisoned/fixed 对比对,并编制包含不可变规则与可变规则的 constitution.md

学员能够运行并解读 LLM 对决、变异测试与 Spec CI 的结果,将关键事实记录于 validation.md

学员能够接受或拒绝影子规格,评估模型层级的预算风险,并编制附带 evidence_ref 的 judgment.md

学员能够汇总 capstone/README.md 最终包,检查反模式,并以 blocker/owner/next_check 形式列出三项风险

概述:本教材应用卷将第一卷中的 SDD(规格驱动开发)基础循环迁移至生产环境场景。若第一卷教授的是基于 AgentClinic 平台的宪法、功能规格、计划、可验证事实、实现、评审与重规划,则第二卷处理遗留痕迹、验证器、多智能体检核、Spec CI、指标、模型预算与有限自动修复。核心规则:第一遍通读应仅在 capstone/ 中留下一个微小的可验证痕迹,而非接触全部术语。主要考核案例为 high_memory_usage;其余案例(autoscale_200pct、node_not_ready、appointment_latency、cdn_error_budget_burn)用于演示特定机制,随后将其原则以一行代码迁移至主案例。

核心概念: Agentclinic-production:基础 AgentClinic 的生产环境扩展:处理现有代码而非从零开发。需要从遗留代码中还原需求,而非从头编写。

Genealogy.md:溯源工件:需求从何而来。记录来源(事后分析、工单、访谈)、不确定性级别以及从原始信号到规格的转换链。

Poisoned-spec.md / fixed-spec.md:规格缺陷诊断对比工件。Poisoned 为含隐藏缺陷的规格(矛盾、隐含假设、优先级冲突);fixed 为附带明确论证的修正版本。

Constitution.md:项目宪法:限制智能体行为的规则。不可变规则——未经公投不得更改(例如"工作时间不得触碰生产环境配置")。可变规则——含 ttl 与 rollback_condition,可随判例积累而调整。

LLM-对决(验证方 vs 实现方):形式化断言的多智能体检核。验证方寻找规格 Then-断言的反例;实现方辩护。结果为反例或 next_guard(规格被违反的条件)。

Stress-mutator / 规格变异测试:规格的自动变异体生成,用于检验验证器的鲁棒性。Smoke 结果揭示哪些变异体未被察觉——即验证器的免疫缺陷向量。

影子规格(shadow specs):由智能体并行生成的候选规格。按标准筛选:不违宪、覆盖新事实、不重复现有内容。通过者纳入 capstone/README.md,未通过者附原因记录。

Spec ci:规格 CI:规格作为可执行工件。检查需求覆盖率、合约模式、validation.md 存在性。每次提交输出 PASS/BLOCK。

文件仲裁(multiagent tribunal):争议变更的评审角色模型:Safety(安全)、Liveness(功能性)、Economy(资源)。结果为附带 verdict、evidence_ref 及如有 dissenting opinion 的 judgment.md。

层级预算(tier budgeting):按模型级别与成本路由任务。廉价层级——快速检查,昂贵层级——仲裁。token_health 追踪消耗;廉价层级失效时——回退或人工升级。

古德哈特防御:成对指标:KPI(目标)+ guard-指标(警戒,防止系统博弈)。例如:KPI"修复时间" + guard"误修复触发次数"。

Readiness / dry-run:生产环境 API 集成:readiness 指标显示部署准备度(例如 25 项检查通过 23 项)。Dry-run——无附带效应的预演验证,用于实际应用前。

Antipattern-audit.md:反模式排查后的三项诊断风险,格式为 blocker / owner / next_check。并非将每个反模式转为 CI 策略——这属于完整进阶路径。

Capstone/readme.md:单一案例全部工件的最终汇总。应能在脱离对话历史的情况下独立阅读,作为从遗留痕迹到生产就绪方案的完整证据包。

重要日期: 2026-05-20:应用卷 v1.0 版本——已审阅并固定。教材材料截止日期。

第 0 章:入门——选择 high_memory_usage 案例,创建空 capstone/

第 1-3 章:基础工件编制:genealogy.md、poisoned/fixed 对比对、constitution.md

第 4-5 章:获取反例与 stress-mutator 的 smoke 结果

第 6-7 章:影子候选筛选,启动 Spec CI

第 8-9 章:编制 judgment.md,演练廉价层级失效场景

第 10-11 章:核查 high_memory_usage 的 guard-指标、readiness 与 dry-run

第 12 章:记录三项 blocker/owner/next_check 风险

第 13 章:汇总 capstone/README.md 与实践考核

练习题目: 标题:从事后分析中还原需求

问题:给定 node_not_ready 事件的事后分析片段:'03:15 节点 node-7 变为 NotReady,Pod 5 分钟内未疏散,客户遭遇超时。手动 drain + reboot 耗时 12 分钟解决。自动疏散因污点 custom-scheduler=protected 未触发'。还原一项可验证需求并编制 genealogy.md。注明不确定性级别(高/中/低)并论证。

解答:1. 提取原始信号:自动疏散在污点 custom-scheduler=protected 的节点上未触发。2. 转换为可验证需求:'若节点具有污点 custom-scheduler=protected,则 Pod 自动疏散必须禁用,或替换为带 on-call 通知的手动工作流'。3. 在 genealogy.md 记录:source='post-mortem-2024-03-15-node7', raw_signal='auto-evacuation skipped due to protected taint', uncertainty='medium'(尚不清楚是预期行为还是缺陷),requirement='protected-taint-evacuation-policy', derivation_steps=['incident report', 'taint analysis', 'policy decision']。4. medium 论证:单一事件,无证据表明行为为预期,需 replay 或额外案例方可降至 low。

难度:中级

标题:为优先级冲突创建 poisoned/fixed 对比对

问题:给定规格:'Given 预约系统;When 并发请求超过 100;Then 所有请求按 FIFO 处理,最大延迟 2 秒'。找出缺陷,创建 poisoned-spec.md 与 fixed-spec.md。展示从缺陷到根源的反向追溯(backwards walk)。

解答:1. 缺陷:隐含假设"所有请求"等价。VIP 患者与急诊请求不应等待 FIFO。2. Poisoned-spec.md:保留原文,添加标签 DEFECT='priority-blindness', trigger='emergency request during peak load', expected_failure='VIP patient waits 2+ seconds while routine appointment processed'。3. Fixed-spec.md:'Given 带优先级队列的预约系统(常规、紧急、急诊);When 并发请求超过 100;Then 急诊请求延迟 ≤ 500ms,紧急 ≤ 1s,常规——在容量允许时 FIFO 延迟 ≤ 2s'。4. 反向追溯:预期失效(VIP 超时)→ 原因(Then 中无优先级)→ 原因(Given 中无分类)→ 根源(领域假设"所有患者平等",在医疗场景不成立)。

难度:中级

标题:运行 stress-mutator 并解读免疫缺陷

问题:在 book2/examples/ 目录运行 bash smoke_all.sh。查找 payment_latency_spike 案例的 stress-mutator 输出。多少变异体未被发现?这指向验证器的哪个免疫缺陷向量?将结果记入 validation.md。

解答:1. 进入 book2/examples/ 执行 bash smoke_all.sh。2. 定位 [stress-mutator] payment_latency_spike 区块。预期输出示例:'MUTANTS_GENERATED=12, CAUGHT=9, ESCAPED=3, ESCAPE_VECTOR=timing-assertion-weakness'。3. ESCAPED=3 表明验证器对时间边界条件检查不够严格。免疫缺陷向量:'在 spike > 500% baseline 时添加严格的 P99 < 200ms 检查,而非仅检查均值'。4. 在 validation.md 添加:'变异免疫缺陷:stress-mutator payment_latency_spike,3/12 逃逸,向量 timing-assertion-weakness。强化:spike 条件下的严格 P99-guard'。

难度:中级

标题:影子规格筛选:接受或拒绝

问题:给定 voice_handoff 案例的两项影子候选:A)'话务员间语音通话转接时保留完整通话录音' 与 B)'话务员间语音通话转接时仅保留接收方确认后的录音'。项目宪法含不可变规则:'所有客户交互完整录音保存 7 年以满足合规'。接受或拒绝各候选?论证并记入 capstone/README.md 的 Shadow notes 区块。

解答:1. 候选 A:宪法核查——不违反不可变规则(完整录音)。覆盖新事实(转接作为交互的一部分)。不重复现有内容(此前未明确规范转接)。结论:接受。2. 候选 B:违反不可变规则("仅确认后" ≠ "所有交互完整录音")。结论:拒绝,原因'违反 constitution.md §3.1 不可变规则 full-recording-compliance'。3. capstone/README.md 的 Shadow notes 区块:'Accepted: shadow.p0.voice_handoff.full-recording — 符合宪法,覆盖 handoff-gap。Rejected: shadow.p0.voice_handoff.partial-recording — 违反不可变 full-recording-compliance。判例:合规优先于存储优化'。

难度:中级

标题:评估预算风险并编制 budget-note.md

问题:场景:廉价层级(Qwen2.5-7B-instruct,$0.10/1K tokens)在检查复杂合约 autoscale_200pct 时失效——对违规 Then 条件给出错误 PASS。昂贵层级(Qwen2.5-72B-instruct,$1.20/1K tokens)捕获错误。当前 token_health:廉价层级日预算剩余 3400 tokens,需检查 15 项规格。编制含预算风险与失效场景的 budget-note.md。

解答:1. 计算风险:15 项规格 × 平均消耗 400 tokens = 6000 tokens 需求,可用 3400。缺口:2600 tokens(缺 43%)。2. 廉价层级失效概率:高——已出现一次错误 PASS,表明 7B 模型无法处理规模合约。3. 失效场景:廉价预算耗尽时回退昂贵层级,检查成本从 $0.60 升至 $7.20(12 倍)。若昂贵层级也不足——人工升级,延迟 4-24 小时。4. budget-note.md:'tier: cheap, model: Qwen2.5-7B-instruct, token_health: 3400/6000 needed, risk_level: critical, failure_mode: false_PASS_on_scale_contracts, fallback: expensive_tier_with_cost_spike, mitigation: pre-filter_scale_contracts_to_expensive_tier, owner: on-call-SRE, next_check: 2026-05-21T09:00Z'。

难度:高级

标题:修复时间 KPI 的反古德哈特成对指标

问题:SRE 团队 KPI:'事件平均修复时间(MTTR)≤ 15 分钟'。什么 guard-指标可防止该指标被博弈?为 cdn_error_budget_burn 案例编制 goodhart-note.md。

解答:1. 博弈策略:自动以 resolved 标记"修复"事件而无实际修复,使 MTTR 看起来良好。2. Guard-指标:'24 小时内确认修复的修复百分比'(confirmed_fix_rate)+ '7 天内同因复发事件百分比'(recurrence_rate)。3. 告警条件:若 MTTR < 15min 但 confirmed_fix_rate < 80% 或 recurrence_rate > 15%——进入紧急模式,禁止无人确认的自动修复。4. goodhart-note.md:'KPI: MTTR ≤ 15min, guard: confirmed_fix_rate ≥ 80% AND recurrence_rate ≤ 15%, emergency_mode_trigger: MTTR_green_but_guard_red, action: disable_auto_remediation_require_human_approval, case: cdn_error_budget_burn_2024-11'。

难度:中级

案例研究: 标题:在金融科技初创公司支付环境中实施 Spec CI

场景:金融科技初创公司,50 个微服务处理日均 1000 万笔交易。团队 8 名开发,2 名 SRE。此前使用 Confluence 的临时规格,2-3 周即过时。双重扣款事件后($34 万补偿损失),管理层要求"每项变更须有可验证需求"。

挑战:8 年遗留代码的支付网关——无现行规格,仅有代码注释与口头约定。开发抗拒"额外官僚"。CI 流水线耗时 23 分钟,添加 Spec CI 恐增至 40+。需在不阻塞交付的前提下展示价值。

解决方案:应用应用卷方法:第 1-7 章压缩执行。1)选取单一关键案例——payment_latency_spike(第 5 章)。2)从双重扣款事后分析还原 genealogy.md(第 1 章)。3)发现 poisoned-spec:'延迟 > 2s 时自动重试' 无幂等键——导致双重扣款(第 2 章)。4)创建 constitution.md,不可变规则'所有支付重试须幂等键'(第 3 章)。5)LLM 对决发现反例:network_timeout 重试 vs insufficient_funds 重试——行为不同(第 4 章)。6)Stress-mutator 检验验证器:2/8 变异体逃逸——强化幂等检查(第 5 章)。7)Spec CI 仅对支付服务实施,非全部 50 个——CI 中一行:'spec-ci --scope=payment-* --block-on-uncovered'(第 7 章)。耗时:流水线 +4 分钟。

结果:3 个月后:0 起双重扣款事件(此前半年 4 起)。Spec CI 投产前捕获 12 项未覆盖需求。开发团队评价——"明白为什么做,不只是 paperwork"。其余服务扩展由开发主动发起,非管理层推动。添加规格平均时间从 45 分钟降至 12 分钟(capstone/ 模板)。

经验教训: 从单一关键案例开始,而非"全面实施"——"一个微小可验证痕迹"原则同样适用于组织变革

含真实财务损失的 poisoned-spec 比任何培训更有说服力——"这是我们已犯错的地方"

子集服务的 Spec CI 比等待全覆盖更快产生价值

开发接受流程当他们看到它在投产前捕获真实缺陷,而非"自上而下强制"

相关概念: genealogy.md

poisoned-spec.md / fixed-spec.md

constitution.md

LLM-对决

stress-mutator

Spec CI

capstone/README.md

标题:云平台争议性自动扩缩容变更的仲裁

场景:2000+ Kubernetes 集群的云平台。平台 SRE 团队提议变更:'CPU > 80% 持续 5 分钟——自动扩容 +200% 节点'。变更争议:Liveness 团队认为可避免级联故障;Safety 团队认为 200% 陡增在短暂 burst 时存在过度配置与成本激增风险。

挑战:经典优先级冲突:可用性 vs 经济性。此前类似决策由资深 SRE 独断——造成"独裁"印象,决策不可复现。需要可审计、可供新工程师学习的正式证据流程。

解决方案:应用第 8 章文件仲裁与角色模型。1)Safety 准备反例:4 分 50 秒 burst——不应触发 +200%,但现行规格触发。2)Liveness 准备证据:历史事件记录,80% 持续 6+ 分钟在 73% 案例中导致级联故障。3)Economy 计算:误报成本(多余节点 10 分钟)vs 级联故障成本(停机分钟 × SLA 罚金)。4)judgment.md:verdict='CONDITIONAL_APPROVE',条件'添加 guard-指标 burst_duration < 5min AND rate_of_change > 50%/min 以排除短暂 spike',evidence_ref=['safety-counterexample-burst-290s', 'liveness-historical-73pct', 'economy-cost-model-v2']。Safety 保留意见:'更倾向 70% 阈值,但接受 80% 加 guard 条件'。

结果:变更带 guard 条件实施。2 个月后:3 次 guard 条件触发(未扩容),均确认为短暂 burst。1 次 80% 持续 7 分钟——扩容触发,阻止潜在级联故障。误报成本较原提案降低 67%。仲裁流程被采纳为所有潜在影响 > $10K 争议变更的标准。

经验教训: 带保留意见的角色仲裁创造可复现判例——新工程师从历史学习,而非依赖权威

反例 + 历史数据 + 经济模型 = 三类证据,合力优于任何单一证据

CONDITIONAL_APPROVE 优于二元 approve/reject——在添加 guard 条件时保持决策速度

judgment.md 中的保留意见不削弱决策,反而增强其合法性——表明已考虑替代方案

相关概念: 文件仲裁

judgment.md

evidence_ref

Safety/Liveness/Economy 角色

guard-指标

保留意见

标题:CDN 事件自动修复的古德哈特防御

场景:大型媒体流媒体服务,全球 CDN。KPI:'CDN 事件修复时间 ≤ 5 分钟'。通过自动修复实现:error_rate > 5% 时自动清除缓存 + 切换源站。MTTR 从 12 分钟降至 4 分钟。

挑战:实施 3 个月后:MTTR = 3.2 分钟,但客户抱怨缓冲。调查:error_rate > 5% 的自动修复在误 spike 时触发(测量误差,非真实 5xx)。误触发时的缓存清除导致源站 thundering herd,恶化真实用户体验。团队"博弈"KPI:MTTR 优秀,实际服务恶化。

解决方案:应用第 10 章方法。1)诊断:KPI(MTTR)"撒谎"——优化它导致真实结果恶化。2)Guard-指标:'修复中确认真实 5xx 的百分比(非测量误差)' + '修复后源站负载 spike < 150% 基线'。3)紧急模式:guard_red + KPI_green 时——禁用自动修复,需人工确认,通知 on-call。4)goodhart-note.md:'KPI: MTTR ≤ 5min, guard: confirmed_5xx_rate ≥ 90% AND origin_post_remediation_load ≤ 150%, emergency_mode: 24 小时内 3 次连续 guard_red'。5)额外:添加 dry-run 模式(第 11 章)——新型事件时修复无附带效应运行,结果人工核查。

结果:实施 guard-指标后:MTTR 升至 6.5 分钟(KPI 恶化),但确认真实修复率 94%(此前 61%)。缓冲抱怨下降 78%。团队停止"博弈"指标——不再有利。管理层重审奖金结构:guard-指标权重 50%,KPI 权重 50%。新型事件的 dry-run 首月阻止 2 起潜在误修复。

经验教训: 无 guard-指标的 KPI 主动有害——工程师理性优化可测量项,即使它与真实结果不符

紧急模式须自动触发——guard_red 时的"需人工确认"应无需额外决策

新型事件的 dry-run 在扩展自动化时不可替代——否则每个新案例都是潜在的古德哈特陷阱

奖金结构须包含 guard-指标,否则 KPI 必胜——组织工程比技术工程更重要

相关概念: 古德哈特防御

KPI 与 guard-指标

goodhart-note.md

紧急模式

dry-run

readiness.md

学习建议: 切勿线性逐章阅读。先找到"阅读前准备"区块,执行最小学习场景,再返回"核心思想"。之后才是校准、[project script] 与 [conceptual interface]。

每章阅读时保持五个问题:第一卷的依托?最小学习场景?关键事实?如何进入 capstone/?哪些属于完整进阶路径?

单一新术语规则:若一章引入五个名称,但当前 capstone/ 文件仅需一个——记住一个,其余留待第二遍。

在墙面/屏幕上创建物理或数字"贯通地图":哪一章 → capstone/ 哪个文件 → 具体写入什么。每章后按图核查。

对于非 high_memory_usage 的他人案例,立即写迁移行:'案例 Y 的原则 X 保护 high_memory_usage,因为……'。不写——本章未关闭。

每章含可运行示例后执行 bash book2/examples/smoke_all.sh。预期阻塞是学习的一部分,非错误。若应在阻塞处未阻塞——检查版本。

以 capstone-dossier.md 模板为极简标准。若你的包长 3 倍——很可能第一遍就纳入了完整进阶路径。

视觉型学习者:绘制 genealogy → poisoned/fixed → constitution → validation → judgment → budget → goodhart → readiness → antipattern 的工件流水线。标记当前位置。

听觉型学习者:写入文件前大声朗读关键事实。若听起来模糊——事实不够可验证。

动觉型学习者:物理移动工件"卡片"从"原始想法"到"capstone/ 已验证"。触觉进度激励。

组建 2-3 人学习小组:一人读章,向他人解释最小场景,第三人核查 capstone/。以教促学加速 2-3 倍。

第一遍勿求"生产就绪实施"。第一遍目标——单一案例的可复现轮廓。完整进阶路径是考核后的独立项目。

补充资源: Book2/examples/readme.md:所有章节的本地 smoke 运行与模板。实践必备资源。

Book2/examples/templates/capstone-dossier.md:high_memory_usage 最小包的完整范例。展示良好第一遍可以多么简短。

Book2/glossary.md:第二卷全部术语定义。用作参考,非背诵文本。

Book2/appendix-a-bridges-to-book.md:通向第一卷的桥梁——前置条件与 AgentClinic 完整领域图。用于"此前在哪解释过"的疑问。

Book2/appendix-b-qwen-code-compatibility.md:Qwen Code 的内置命令、用户命令与项目脚本。适配可运行示例至你的 CLI 版本所必需。

Book2/appendix-c-checklists.md:Spec CI、仲裁、指标与生产就绪的核查清单。考核前自检使用。

Book2/appendix-d-threshold-calibration.md:"低/默认/高"阈值表,阈值调整练习。留待第二遍或实际实施。

Book2/instructor.md:工作坊格式与常见错误。培训团队或小组学习时有用。

Book2/changelog.md:文本修订历史。使用材料时核查时效性。

课程源文档(应用卷 readme):本指南基于的基础文档。返回核查你的进度是否符合计划。

总结:Qwen Code CLI 的生产环境 SDD 应用卷教授如何将规格驱动开发的基础循环迁移至真实生产环境。核心原则——每遍一个微小可验证痕迹:每章仅向 capstone/ 添加一行、一个文件或一个阻塞项。主案例 high_memory_usage 经历全部阶段:从遗留代码还原需求(genealogy.md)、缺陷诊断(poisoned/fixed 对比对)、项目宪法、LLM 对决与变异测试(validation.md)、影子规格筛选、Spec CI、文件仲裁(judgment.md)、层级预算(budget-note.md)、指标古德哈特防御(goodhart-note.md)、readiness 与 dry-run(readiness.md)、反模式(antipattern-audit.md)。最终成果——从痕迹到生产就绪方案的可复现轮廓,无需对话历史即可理解。第一遍需要断舍离的纪律:完整进阶路径在考核之后,而非代替考核。

我的笔记
0 / 10000

笔记保存在当前浏览器中。在其他设备上将不会显示。

课程菜单

课程

Production SDD for Qwen Code CLI. Part 2
进度 0 / 100