[{"data":1,"prerenderedAt":6905},["ShallowReactive",2],{"article-/topics/ai/ai-agent-compliance-reporting-automation-evidence":3,"related-ai":2284,"content-query-EJ9D6YkqX9":5043},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":9,"date":10,"topic":5,"author":11,"tags":12,"image":18,"featured":6,"readingTime":19,"body":20,"_type":2278,"_id":2279,"_source":2280,"_file":2281,"_stem":2282,"_extension":2283},"/topics/ai/ai-agent-compliance-reporting-automation-evidence","ai",false,"","AI agent Compliance Reporting 自动化：SOC 2、GDPR 和内部审计需要的证据怎么自动生成","别再手动准备审计材料了！本文提供合规证据的自动收集框架、报告生成流程和持续监控机制，覆盖 SOC 2、GDPR、HIPAA 等主流合规标准，让 compliance reporting 从季度痛苦变成日常自动化流程。","2026-06-15","HTMLPAGE 团队",[13,14,15,16,17],"compliance reporting","automated evidence","SOC 2 audit","GDPR compliance","audit automation","/images/articles/as04-featured.jpeg",14,{"type":21,"children":22,"toc":2231},"root",[23,32,38,68,73,91,97,104,109,152,157,163,168,201,206,212,217,250,255,261,266,404,410,415,488,494,499,571,576,582,592,602,635,644,657,663,672,680,713,723,734,740,749,757,790,800,811,820,831,836,842,847,856,862,867,878,887,896,902,907,916,921,926,931,939,957,965,983,991,1009,1017,1035,1040,1045,1054,1060,1065,1074,1079,1085,1201,1207,1302,1308,1397,1403,1409,1419,1462,1468,1476,1518,1524,1533,1586,1591,1597,1606,1689,1694,1700,1708,1761,1767,1775,1828,1834,1842,1910,1916,1925,1988,1997,2050,2055,2099,2105,2110,2209,2213],{"type":24,"tag":25,"props":26,"children":28},"element","h2",{"id":27},"为什么需要自动化的-compliance-reporting",[29],{"type":30,"value":31},"text","为什么需要自动化的 Compliance Reporting？",{"type":24,"tag":33,"props":34,"children":35},"p",{},[36],{"type":30,"value":37},"每年 Q4，某 SaaS 公司的安全团队都要经历一场\"噩梦\"：为 SOC 2 Type II 审计准备证据。他们需要：",{"type":24,"tag":39,"props":40,"children":41},"ul",{},[42,48,53,58,63],{"type":24,"tag":43,"props":44,"children":45},"li",{},[46],{"type":30,"value":47},"从 10 个不同的系统中导出访问控制日志。",{"type":24,"tag":43,"props":49,"children":50},{},[51],{"type":30,"value":52},"手动整理过去 12 个月的凭证轮换记录。",{"type":24,"tag":43,"props":54,"children":55},{},[56],{"type":30,"value":57},"截图证明每个生产变更都经过了审批。",{"type":24,"tag":43,"props":59,"children":60},{},[61],{"type":30,"value":62},"编写 50+ 页的控制描述文档。",{"type":24,"tag":43,"props":64,"children":65},{},[66],{"type":30,"value":67},"回答审计师提出的 200+ 个问题。",{"type":24,"tag":33,"props":69,"children":70},{},[71],{"type":30,"value":72},"整个过程耗时 3 个月，消耗了安全团队 80% 的时间，还经常因为遗漏证据而被审计师要求补充材料。更糟糕的是，这种\"突击式\"的合规准备无法反映真实的合规状态——可能在审计之间的 11 个月里，某些控制已经失效，但没人知道。",{"type":24,"tag":33,"props":74,"children":75},{},[76,82,84,89],{"type":24,"tag":77,"props":78,"children":79},"strong",{},[80],{"type":30,"value":81},"Compliance Reporting 自动化",{"type":30,"value":83},"就是为了解决这些问题而设计的系统性方案。它不是简单的\"生成 PDF 报告\"，而是提供",{"type":24,"tag":77,"props":85,"children":86},{},[87],{"type":30,"value":88},"证据自动收集、持续监控、实时告警和一键生成审计报告",{"type":30,"value":90},"的完整框架，让合规从\"年度大考\"变成\"日常习惯\"。",{"type":24,"tag":25,"props":92,"children":94},{"id":93},"为什么需要-compliance-reporting",[95],{"type":30,"value":96},"为什么需要 Compliance Reporting？",{"type":24,"tag":98,"props":99,"children":101},"h3",{"id":100},"_1-审计压力audit-pressure",[102],{"type":30,"value":103},"1. 审计压力（Audit Pressure）",{"type":24,"tag":33,"props":105,"children":106},{},[107],{"type":30,"value":108},"越来越多的客户要求供应商通过合规认证：",{"type":24,"tag":39,"props":110,"children":111},{},[112,122,132,142],{"type":24,"tag":43,"props":113,"children":114},{},[115,120],{"type":24,"tag":77,"props":116,"children":117},{},[118],{"type":30,"value":119},"企业客户",{"type":30,"value":121},"：要求 SOC 2 Type II 报告，作为采购的前置条件。",{"type":24,"tag":43,"props":123,"children":124},{},[125,130],{"type":24,"tag":77,"props":126,"children":127},{},[128],{"type":30,"value":129},"医疗客户",{"type":30,"value":131},"：要求 HIPAA 合规证明，才能处理患者数据。",{"type":24,"tag":43,"props":133,"children":134},{},[135,140],{"type":24,"tag":77,"props":136,"children":137},{},[138],{"type":30,"value":139},"欧洲客户",{"type":30,"value":141},"：要求 GDPR 合规声明，才能传输个人数据。",{"type":24,"tag":43,"props":143,"children":144},{},[145,150],{"type":24,"tag":77,"props":146,"children":147},{},[148],{"type":30,"value":149},"金融客户",{"type":30,"value":151},"：要求 PCI DSS 认证，才能处理支付信息。",{"type":24,"tag":33,"props":153,"children":154},{},[155],{"type":30,"value":156},"如果没有自动化的合规报告，每次面对新客户都需要重新准备证据，效率极低。",{"type":24,"tag":98,"props":158,"children":160},{"id":159},"_2-持续合规continuous-compliance",[161],{"type":30,"value":162},"2. 持续合规（Continuous Compliance）",{"type":24,"tag":33,"props":164,"children":165},{},[166],{"type":30,"value":167},"合规不是一次性的任务，而是持续的状态：",{"type":24,"tag":39,"props":169,"children":170},{},[171,181,191],{"type":24,"tag":43,"props":172,"children":173},{},[174,179],{"type":24,"tag":77,"props":175,"children":176},{},[177],{"type":30,"value":178},"控制可能失效",{"type":30,"value":180},"：今天有效的访问控制，明天可能因为配置变更而失效。",{"type":24,"tag":43,"props":182,"children":183},{},[184,189],{"type":24,"tag":77,"props":185,"children":186},{},[187],{"type":30,"value":188},"法规可能更新",{"type":30,"value":190},"：GDPR 可能出台新的指南，SOC 2 可能更新控制标准。",{"type":24,"tag":43,"props":192,"children":193},{},[194,199],{"type":24,"tag":77,"props":195,"children":196},{},[197],{"type":30,"value":198},"业务可能变化",{"type":30,"value":200},"：新增的功能、新的集成、扩展的市场都可能引入新的合规风险。",{"type":24,"tag":33,"props":202,"children":203},{},[204],{"type":30,"value":205},"自动化的合规报告可以实时监控合规状态，及时发现并修复问题，而不是等到审计时才发现问题。",{"type":24,"tag":98,"props":207,"children":209},{"id":208},"_3-风险控制risk-management",[210],{"type":30,"value":211},"3. 风险控制（Risk Management）",{"type":24,"tag":33,"props":213,"children":214},{},[215],{"type":30,"value":216},"合规报告不仅是给审计师看的，更是内部风险管理的工具：",{"type":24,"tag":39,"props":218,"children":219},{},[220,230,240],{"type":24,"tag":43,"props":221,"children":222},{},[223,228],{"type":24,"tag":77,"props":224,"children":225},{},[226],{"type":30,"value":227},"识别弱点",{"type":30,"value":229},"：通过合规指标发现系统中的薄弱环节。",{"type":24,"tag":43,"props":231,"children":232},{},[233,238],{"type":24,"tag":77,"props":234,"children":235},{},[236],{"type":30,"value":237},"量化风险",{"type":30,"value":239},"：用数据说话，向管理层展示合规风险的大小。",{"type":24,"tag":43,"props":241,"children":242},{},[243,248],{"type":24,"tag":77,"props":244,"children":245},{},[246],{"type":30,"value":247},"优先改进",{"type":30,"value":249},"：根据风险等级确定改进优先级，合理分配资源。",{"type":24,"tag":25,"props":251,"children":253},{"id":252},"证据类型分类",[254],{"type":30,"value":252},{"type":24,"tag":98,"props":256,"children":258},{"id":257},"soc-2-trust-services-criteria",[259],{"type":30,"value":260},"SOC 2 Trust Services Criteria",{"type":24,"tag":33,"props":262,"children":263},{},[264],{"type":30,"value":265},"SOC 2 涵盖 5 个 Trust Services Criteria（TSC），每个 TSC 包含多个控制点：",{"type":24,"tag":267,"props":268,"children":269},"table",{},[270,294],{"type":24,"tag":271,"props":272,"children":273},"thead",{},[274],{"type":24,"tag":275,"props":276,"children":277},"tr",{},[278,284,289],{"type":24,"tag":279,"props":280,"children":281},"th",{},[282],{"type":30,"value":283},"TSC",{"type":24,"tag":279,"props":285,"children":286},{},[287],{"type":30,"value":288},"控制点示例",{"type":24,"tag":279,"props":290,"children":291},{},[292],{"type":30,"value":293},"证据类型",{"type":24,"tag":295,"props":296,"children":297},"tbody",{},[298,320,341,362,383],{"type":24,"tag":275,"props":299,"children":300},{},[301,310,315],{"type":24,"tag":302,"props":303,"children":304},"td",{},[305],{"type":24,"tag":77,"props":306,"children":307},{},[308],{"type":30,"value":309},"Security（CC）",{"type":24,"tag":302,"props":311,"children":312},{},[313],{"type":30,"value":314},"CC6.1 逻辑访问控制",{"type":24,"tag":302,"props":316,"children":317},{},[318],{"type":30,"value":319},"访问控制列表、权限审查记录、MFA 启用率",{"type":24,"tag":275,"props":321,"children":322},{},[323,331,336],{"type":24,"tag":302,"props":324,"children":325},{},[326],{"type":24,"tag":77,"props":327,"children":328},{},[329],{"type":30,"value":330},"Availability（A）",{"type":24,"tag":302,"props":332,"children":333},{},[334],{"type":30,"value":335},"A1.2 灾难恢复测试",{"type":24,"tag":302,"props":337,"children":338},{},[339],{"type":30,"value":340},"DR 测试报告、备份恢复演练记录",{"type":24,"tag":275,"props":342,"children":343},{},[344,352,357],{"type":24,"tag":302,"props":345,"children":346},{},[347],{"type":24,"tag":77,"props":348,"children":349},{},[350],{"type":30,"value":351},"Processing Integrity（PI）",{"type":24,"tag":302,"props":353,"children":354},{},[355],{"type":30,"value":356},"PI1.1 数据处理准确性",{"type":24,"tag":302,"props":358,"children":359},{},[360],{"type":30,"value":361},"数据验证日志、错误率指标、重试机制",{"type":24,"tag":275,"props":363,"children":364},{},[365,373,378],{"type":24,"tag":302,"props":366,"children":367},{},[368],{"type":24,"tag":77,"props":369,"children":370},{},[371],{"type":30,"value":372},"Confidentiality（C）",{"type":24,"tag":302,"props":374,"children":375},{},[376],{"type":30,"value":377},"C1.1 数据加密",{"type":24,"tag":302,"props":379,"children":380},{},[381],{"type":30,"value":382},"加密配置、密钥管理记录、数据传输协议",{"type":24,"tag":275,"props":384,"children":385},{},[386,394,399],{"type":24,"tag":302,"props":387,"children":388},{},[389],{"type":24,"tag":77,"props":390,"children":391},{},[392],{"type":30,"value":393},"Privacy（P）",{"type":24,"tag":302,"props":395,"children":396},{},[397],{"type":30,"value":398},"P1.1 个人数据收集通知",{"type":24,"tag":302,"props":400,"children":401},{},[402],{"type":30,"value":403},"隐私政策、同意记录、数据删除日志",{"type":24,"tag":98,"props":405,"children":407},{"id":406},"gdpr-证据要求",[408],{"type":30,"value":409},"GDPR 证据要求",{"type":24,"tag":33,"props":411,"children":412},{},[413],{"type":30,"value":414},"GDPR 要求记录以下数据处理活动：",{"type":24,"tag":267,"props":416,"children":417},{},[418,433],{"type":24,"tag":271,"props":419,"children":420},{},[421],{"type":24,"tag":275,"props":422,"children":423},{},[424,429],{"type":24,"tag":279,"props":425,"children":426},{},[427],{"type":30,"value":428},"要求",{"type":24,"tag":279,"props":430,"children":431},{},[432],{"type":30,"value":293},{"type":24,"tag":295,"props":434,"children":435},{},[436,449,462,475],{"type":24,"tag":275,"props":437,"children":438},{},[439,444],{"type":24,"tag":302,"props":440,"children":441},{},[442],{"type":30,"value":443},"Article 30：处理活动记录",{"type":24,"tag":302,"props":445,"children":446},{},[447],{"type":30,"value":448},"数据流图、处理目的说明、数据类别清单",{"type":24,"tag":275,"props":450,"children":451},{},[452,457],{"type":24,"tag":302,"props":453,"children":454},{},[455],{"type":30,"value":456},"Article 33：数据泄露通知",{"type":24,"tag":302,"props":458,"children":459},{},[460],{"type":30,"value":461},"泄露检测报告、响应时间记录、通知模板",{"type":24,"tag":275,"props":463,"children":464},{},[465,470],{"type":24,"tag":302,"props":466,"children":467},{},[468],{"type":30,"value":469},"Article 35：DPIA",{"type":24,"tag":302,"props":471,"children":472},{},[473],{"type":30,"value":474},"风险评估报告、缓解措施、残余风险说明",{"type":24,"tag":275,"props":476,"children":477},{},[478,483],{"type":24,"tag":302,"props":479,"children":480},{},[481],{"type":30,"value":482},"Article 17：被遗忘权",{"type":24,"tag":302,"props":484,"children":485},{},[486],{"type":30,"value":487},"数据删除日志、第三方通知记录、验证报告",{"type":24,"tag":98,"props":489,"children":491},{"id":490},"hipaa-证据要求",[492],{"type":30,"value":493},"HIPAA 证据要求",{"type":24,"tag":33,"props":495,"children":496},{},[497],{"type":30,"value":498},"HIPAA Security Rule 要求：",{"type":24,"tag":267,"props":500,"children":501},{},[502,516],{"type":24,"tag":271,"props":503,"children":504},{},[505],{"type":24,"tag":275,"props":506,"children":507},{},[508,512],{"type":24,"tag":279,"props":509,"children":510},{},[511],{"type":30,"value":428},{"type":24,"tag":279,"props":513,"children":514},{},[515],{"type":30,"value":293},{"type":24,"tag":295,"props":517,"children":518},{},[519,532,545,558],{"type":24,"tag":275,"props":520,"children":521},{},[522,527],{"type":24,"tag":302,"props":523,"children":524},{},[525],{"type":30,"value":526},"§164.312(a) 访问控制",{"type":24,"tag":302,"props":528,"children":529},{},[530],{"type":30,"value":531},"用户账户清单、权限矩阵、访问审查记录",{"type":24,"tag":275,"props":533,"children":534},{},[535,540],{"type":24,"tag":302,"props":536,"children":537},{},[538],{"type":30,"value":539},"§164.312(b) 审计控制",{"type":24,"tag":302,"props":541,"children":542},{},[543],{"type":30,"value":544},"审计日志、日志审查记录、异常检测报告",{"type":24,"tag":275,"props":546,"children":547},{},[548,553],{"type":24,"tag":302,"props":549,"children":550},{},[551],{"type":30,"value":552},"§164.312(c) 完整性控制",{"type":24,"tag":302,"props":554,"children":555},{},[556],{"type":30,"value":557},"数据校验和、篡改检测日志、备份验证报告",{"type":24,"tag":275,"props":559,"children":560},{},[561,566],{"type":24,"tag":302,"props":562,"children":563},{},[564],{"type":30,"value":565},"§164.312(e) 传输安全",{"type":24,"tag":302,"props":567,"children":568},{},[569],{"type":30,"value":570},"TLS 配置、VPN 设置、加密协议清单",{"type":24,"tag":25,"props":572,"children":574},{"id":573},"自动收集架构",[575],{"type":30,"value":573},{"type":24,"tag":98,"props":577,"children":579},{"id":578},"组件一metric-collector指标收集器",[580],{"type":30,"value":581},"组件一：Metric Collector（指标收集器）",{"type":24,"tag":33,"props":583,"children":584},{},[585,590],{"type":24,"tag":77,"props":586,"children":587},{},[588],{"type":30,"value":589},"职责",{"type":30,"value":591},"：从各个系统收集合规相关的指标。",{"type":24,"tag":33,"props":593,"children":594},{},[595,600],{"type":24,"tag":77,"props":596,"children":597},{},[598],{"type":30,"value":599},"实现方式",{"type":30,"value":601},"：",{"type":24,"tag":39,"props":603,"children":604},{},[605,615,625],{"type":24,"tag":43,"props":606,"children":607},{},[608,613],{"type":24,"tag":77,"props":609,"children":610},{},[611],{"type":30,"value":612},"API 集成",{"type":30,"value":614},"：调用 AWS CloudWatch、GitHub API、Vault API 等获取指标。",{"type":24,"tag":43,"props":616,"children":617},{},[618,623],{"type":24,"tag":77,"props":619,"children":620},{},[621],{"type":30,"value":622},"Agent 部署",{"type":30,"value":624},"：在服务器上部署轻量级 Agent，收集本地指标（如文件权限、进程列表）。",{"type":24,"tag":43,"props":626,"children":627},{},[628,633],{"type":24,"tag":77,"props":629,"children":630},{},[631],{"type":30,"value":632},"Webhook 接收",{"type":30,"value":634},"：接收来自 CI/CD、监控系统、安全扫描工具的 webhook 通知。",{"type":24,"tag":33,"props":636,"children":637},{},[638,643],{"type":24,"tag":77,"props":639,"children":640},{},[641],{"type":30,"value":642},"示例代码",{"type":30,"value":601},{"type":24,"tag":645,"props":646,"children":651},"pre",{"className":647,"code":649,"language":650,"meta":7},[648],"language-typescript","interface ComplianceMetric {\n  metric_name: string;\n  value: number | boolean | string;\n  timestamp: string;\n  source_system: string;\n  metadata?: Record\u003Cstring, any>;\n}\n\nclass MetricCollector {\n  async collectAccessControlMetrics(): Promise\u003CComplianceMetric[]> {\n    // 从 AWS IAM 获取 MFA 启用率\n    const mfaEnabled = await this.getMFARate();\n    \n    // 从 GitHub 获取分支保护规则启用率\n    const branchProtection = await this.getBranchProtectionRate();\n    \n    // 从 Vault 获取凭证轮换合规率\n    const credentialRotation = await this.getCredentialRotationCompliance();\n    \n    return [\n      {\n        metric_name: \"mfa_enabled_rate\",\n        value: mfaEnabled,\n        timestamp: new Date().toISOString(),\n        source_system: \"aws_iam\",\n      },\n      {\n        metric_name: \"branch_protection_enabled_rate\",\n        value: branchProtection,\n        timestamp: new Date().toISOString(),\n        source_system: \"github\",\n      },\n      {\n        metric_name: \"credential_rotation_compliance_rate\",\n        value: credentialRotation,\n        timestamp: new Date().toISOString(),\n        source_system: \"vault\",\n      },\n    ];\n  }\n  \n  private async getMFARate(): Promise\u003Cnumber> {\n    const iam = new IAMClient({ region: \"us-east-1\" });\n    const users = await iam.send(new ListUsersCommand({}));\n    \n    let mfaEnabledCount = 0;\n    for (const user of users.Users || []) {\n      const mfaDevices = await iam.send(new ListMFADevicesCommand({\n        UserName: user.UserName,\n      }));\n      \n      if (mfaDevices.MFADevices && mfaDevices.MFADevices.length > 0) {\n        mfaEnabledCount++;\n      }\n    }\n    \n    return users.Users ? mfaEnabledCount / users.Users.length : 0;\n  }\n}\n","typescript",[652],{"type":24,"tag":653,"props":654,"children":655},"code",{"__ignoreMap":7},[656],{"type":30,"value":649},{"type":24,"tag":98,"props":658,"children":660},{"id":659},"组件二log-aggregator日志聚合器",[661],{"type":30,"value":662},"组件二：Log Aggregator（日志聚合器）",{"type":24,"tag":33,"props":664,"children":665},{},[666,670],{"type":24,"tag":77,"props":667,"children":668},{},[669],{"type":30,"value":589},{"type":30,"value":671},"：集中收集和分析审计日志。",{"type":24,"tag":33,"props":673,"children":674},{},[675,679],{"type":24,"tag":77,"props":676,"children":677},{},[678],{"type":30,"value":599},{"type":30,"value":601},{"type":24,"tag":39,"props":681,"children":682},{},[683,693,703],{"type":24,"tag":43,"props":684,"children":685},{},[686,691],{"type":24,"tag":77,"props":687,"children":688},{},[689],{"type":30,"value":690},"日志转发",{"type":30,"value":692},"：使用 Fluentd、Vector 或 Logstash 将日志转发到中央存储。",{"type":24,"tag":43,"props":694,"children":695},{},[696,701],{"type":24,"tag":77,"props":697,"children":698},{},[699],{"type":30,"value":700},"结构化解析",{"type":30,"value":702},"：将非结构化日志解析为结构化数据（JSON）。",{"type":24,"tag":43,"props":704,"children":705},{},[706,711],{"type":24,"tag":77,"props":707,"children":708},{},[709],{"type":30,"value":710},"关联分析",{"type":30,"value":712},"：将来自不同系统的日志关联起来，形成完整的事件时间线。",{"type":24,"tag":33,"props":714,"children":715},{},[716,721],{"type":24,"tag":77,"props":717,"children":718},{},[719],{"type":30,"value":720},"示例配置",{"type":30,"value":722},"（Fluentd）：",{"type":24,"tag":645,"props":724,"children":729},{"className":725,"code":727,"language":728,"meta":7},[726],"language-xml","\u003Csource>\n  @type tail\n  path /var/log/audit/*.log\n  pos_file /var/log/fluentd/audit.log.pos\n  tag audit.*\n  \u003Cparse>\n    @type json\n  \u003C/parse>\n\u003C/source>\n\n\u003Cmatch audit.**>\n  @type elasticsearch\n  host elasticsearch.example.com\n  port 9200\n  index_name audit-logs-%Y.%m.%d\n  \u003Cbuffer>\n    @type file\n    path /var/log/fluentd/buffer\n    flush_interval 5s\n  \u003C/buffer>\n\u003C/match>\n","xml",[730],{"type":24,"tag":653,"props":731,"children":732},{"__ignoreMap":7},[733],{"type":30,"value":727},{"type":24,"tag":98,"props":735,"children":737},{"id":736},"组件三policy-engine策略引擎",[738],{"type":30,"value":739},"组件三：Policy Engine（策略引擎）",{"type":24,"tag":33,"props":741,"children":742},{},[743,747],{"type":24,"tag":77,"props":744,"children":745},{},[746],{"type":30,"value":589},{"type":30,"value":748},"：评估收集到的指标和日志是否符合合规要求。",{"type":24,"tag":33,"props":750,"children":751},{},[752,756],{"type":24,"tag":77,"props":753,"children":754},{},[755],{"type":30,"value":599},{"type":30,"value":601},{"type":24,"tag":39,"props":758,"children":759},{},[760,770,780],{"type":24,"tag":43,"props":761,"children":762},{},[763,768],{"type":24,"tag":77,"props":764,"children":765},{},[766],{"type":30,"value":767},"规则定义",{"type":30,"value":769},"：使用 DSL（Domain-Specific Language）定义合规规则。",{"type":24,"tag":43,"props":771,"children":772},{},[773,778],{"type":24,"tag":77,"props":774,"children":775},{},[776],{"type":30,"value":777},"实时评估",{"type":30,"value":779},"：每当新指标到达时，立即评估是否符合规则。",{"type":24,"tag":43,"props":781,"children":782},{},[783,788],{"type":24,"tag":77,"props":784,"children":785},{},[786],{"type":30,"value":787},"偏差检测",{"type":30,"value":789},"：检测指标偏离正常范围的情况，触发告警。",{"type":24,"tag":33,"props":791,"children":792},{},[793,798],{"type":24,"tag":77,"props":794,"children":795},{},[796],{"type":30,"value":797},"示例规则",{"type":30,"value":799},"（OPA Rego）：",{"type":24,"tag":645,"props":801,"children":806},{"className":802,"code":804,"language":805,"meta":7},[803],"language-rego","package compliance\n\n# SOC 2 CC6.1：所有生产账户必须启用 MFA\ndeny_mfa_not_enabled[msg] {\n  some user in input.aws_iam_users\n  not user.mfa_enabled\n  msg := sprintf(\"User %s does not have MFA enabled\", [user.username])\n}\n\n# SOC 2 CC7.1：凭证必须在 90 天内轮换\ndeny_credential_not_rotated[msg] {\n  some cred in input.vault_credentials\n  cred.age_days > 90\n  msg := sprintf(\"Credential %s is %d days old (max 90 days)\", [cred.name, cred.age_days])\n}\n\n# GDPR Article 30：所有个人数据处理活动必须有记录\ndeny_missing_processing_record[msg] {\n  some data_flow in input.data_flows\n  data_flow.contains_pii\n  not data_flow.has_processing_record\n  msg := sprintf(\"Data flow %s contains PII but has no processing record\", [data_flow.name])\n}\n","rego",[807],{"type":24,"tag":653,"props":808,"children":809},{"__ignoreMap":7},[810],{"type":30,"value":804},{"type":24,"tag":33,"props":812,"children":813},{},[814,819],{"type":24,"tag":77,"props":815,"children":816},{},[817],{"type":30,"value":818},"评估结果",{"type":30,"value":601},{"type":24,"tag":645,"props":821,"children":826},{"className":822,"code":824,"language":825,"meta":7},[823],"language-json","{\n  \"evaluation_timestamp\": \"2026-06-15T14:23:45Z\",\n  \"compliance_status\": \"non_compliant\",\n  \"violations\": [\n    {\n      \"rule_id\": \"deny_mfa_not_enabled\",\n      \"severity\": \"high\",\n      \"message\": \"User john.doe does not have MFA enabled\",\n      \"remediation\": \"Enable MFA for user john.doe in AWS IAM console\"\n    },\n    {\n      \"rule_id\": \"deny_credential_not_rotated\",\n      \"severity\": \"medium\",\n      \"message\": \"Credential openai-api-key is 95 days old (max 90 days)\",\n      \"remediation\": \"Rotate the OpenAI API key immediately\"\n    }\n  ],\n  \"compliant_controls\": 47,\n  \"total_controls\": 49,\n  \"compliance_rate\": 95.9\n}\n","json",[827],{"type":24,"tag":653,"props":828,"children":829},{"__ignoreMap":7},[830],{"type":30,"value":824},{"type":24,"tag":25,"props":832,"children":834},{"id":833},"报告生成流程",[835],{"type":30,"value":833},{"type":24,"tag":98,"props":837,"children":839},{"id":838},"步骤一证据聚合",[840],{"type":30,"value":841},"步骤一：证据聚合",{"type":24,"tag":33,"props":843,"children":844},{},[845],{"type":30,"value":846},"从各个数据源收集证据：",{"type":24,"tag":645,"props":848,"children":851},{"className":849,"code":850,"language":650,"meta":7},[648],"async function gatherEvidence(reportPeriod: { start: Date; end: Date }): Promise\u003CEvidencePackage> {\n  const evidence: EvidencePackage = {\n    period: reportPeriod,\n    generated_at: new Date().toISOString(),\n    sections: [],\n  };\n  \n  // Section 1: Access Control\n  evidence.sections.push({\n    section_name: \"Access Control\",\n    control_id: \"CC6.1\",\n    evidence_items: [\n      await collectMFARate(reportPeriod),\n      await collectAccessReviewRecords(reportPeriod),\n      await collectPermissionChangeLogs(reportPeriod),\n    ],\n  });\n  \n  // Section 2: Credential Management\n  evidence.sections.push({\n    section_name: \"Credential Management\",\n    control_id: \"CC6.3\",\n    evidence_items: [\n      await collectCredentialRotationRecords(reportPeriod),\n      await collectVaultAuditLogs(reportPeriod),\n    ],\n  });\n  \n  // Section 3: Change Management\n  evidence.sections.push({\n    section_name: \"Change Management\",\n    control_id: \"CC8.1\",\n    evidence_items: [\n      await collectChangeApprovalRecords(reportPeriod),\n      await collectDeploymentLogs(reportPeriod),\n      await collectRollbackRecords(reportPeriod),\n    ],\n  });\n  \n  return evidence;\n}\n",[852],{"type":24,"tag":653,"props":853,"children":854},{"__ignoreMap":7},[855],{"type":30,"value":850},{"type":24,"tag":98,"props":857,"children":859},{"id":858},"步骤二报告渲染",[860],{"type":30,"value":861},"步骤二：报告渲染",{"type":24,"tag":33,"props":863,"children":864},{},[865],{"type":30,"value":866},"使用模板引擎生成报告：",{"type":24,"tag":645,"props":868,"children":873},{"className":869,"code":871,"language":872,"meta":7},[870],"language-handlebars","{{!-- report-template.hbs --}}\n# SOC 2 Type II Compliance Report\n\n**Report Period:** {{period.start}} to {{period.end}}  \n**Generated At:** {{generated_at}}  \n**Overall Compliance Rate:** {{compliance_rate}}%\n\n## Executive Summary\n\n{{executive_summary}}\n\n## Control Assessment\n\n{{#each sections}}\n### {{section_name}} ({{control_id}})\n\n**Status:** {{status}}  \n**Compliance Rate:** {{compliance_rate}}%\n\n#### Evidence\n\n{{#each evidence_items}}\n- **{{name}}**: {{value}}\n  - Source: {{source_system}}\n  - Collected At: {{collected_at}}\n  - [View Details]({{detail_url}})\n{{/each}}\n\n#### Violations\n\n{{#if violations}}\n{{#each violations}}\n- ⚠️ **{{severity}}**: {{message}}\n  - Remediation: {{remediation}}\n{{/each}}\n{{else}}\n✅ No violations detected\n{{/if}}\n\n---\n{{/each}}\n\n## Recommendations\n\n{{#each recommendations}}\n{{priority_icon}} **{{priority}}**: {{recommendation}}\n{{/each}}\n","handlebars",[874],{"type":24,"tag":653,"props":875,"children":876},{"__ignoreMap":7},[877],{"type":30,"value":871},{"type":24,"tag":33,"props":879,"children":880},{},[881,886],{"type":24,"tag":77,"props":882,"children":883},{},[884],{"type":30,"value":885},"渲染代码",{"type":30,"value":601},{"type":24,"tag":645,"props":888,"children":891},{"className":889,"code":890,"language":650,"meta":7},[648],"import Handlebars from \"handlebars\";\n\nasync function generateReport(evidence: EvidencePackage): Promise\u003Cstring> {\n  const templateSource = await readFile(\"report-template.hbs\", \"utf-8\");\n  const template = Handlebars.compile(templateSource);\n  \n  // 计算整体合规率\n  const totalControls = evidence.sections.reduce((sum, section) => \n    sum + section.evidence_items.length, 0);\n  const compliantControls = evidence.sections.reduce((sum, section) => \n    sum + section.evidence_items.filter(item => item.is_compliant).length, 0);\n  const complianceRate = ((compliantControls / totalControls) * 100).toFixed(1);\n  \n  // 生成执行摘要\n  const executiveSummary = generateExecutiveSummary(evidence);\n  \n  // 生成建议\n  const recommendations = generateRecommendations(evidence);\n  \n  // 渲染报告\n  const report = template({\n    ...evidence,\n    compliance_rate: complianceRate,\n    executive_summary: executiveSummary,\n    recommendations: recommendations,\n  });\n  \n  return report;\n}\n",[892],{"type":24,"tag":653,"props":893,"children":894},{"__ignoreMap":7},[895],{"type":30,"value":890},{"type":24,"tag":98,"props":897,"children":899},{"id":898},"步骤三审批工作流",[900],{"type":30,"value":901},"步骤三：审批工作流",{"type":24,"tag":33,"props":903,"children":904},{},[905],{"type":30,"value":906},"报告生成后，需要经过审批才能发送给审计师：",{"type":24,"tag":645,"props":908,"children":911},{"className":909,"code":910,"language":650,"meta":7},[648],"interface ApprovalWorkflow {\n  report_id: string;\n  status: \"draft\" | \"pending_review\" | \"approved\" | \"rejected\";\n  reviewers: Array\u003C{\n    reviewer_id: string;\n    role: \"security_lead\" | \"cto\" | \"legal\";\n    status: \"pending\" | \"approved\" | \"rejected\";\n    comments?: string;\n  }>;\n}\n\nasync function submitForApproval(reportId: string): Promise\u003Cvoid> {\n  const workflow: ApprovalWorkflow = {\n    report_id: reportId,\n    status: \"pending_review\",\n    reviewers: [\n      { reviewer_id: \"user:alice\", role: \"security_lead\", status: \"pending\" },\n      { reviewer_id: \"user:bob\", role: \"cto\", status: \"pending\" },\n      { reviewer_id: \"user:carol\", role: \"legal\", status: \"pending\" },\n    ],\n  };\n  \n  await database.insert(\"approval_workflows\", workflow);\n  \n  // 发送通知给审批人\n  for (const reviewer of workflow.reviewers) {\n    await sendNotification({\n      to: reviewer.reviewer_id,\n      subject: \"Compliance Report Pending Review\",\n      body: `Please review the SOC 2 report: ${reportId}`,\n      action_url: `/reports/${reportId}/review`,\n    });\n  }\n}\n\nasync function approveReport(reportId: string, reviewerId: string, comments?: string): Promise\u003Cvoid> {\n  const workflow = await database.findOne(\"approval_workflows\", { report_id: reportId });\n  \n  const reviewer = workflow.reviewers.find(r => r.reviewer_id === reviewerId);\n  if (!reviewer) {\n    throw new Error(\"Reviewer not found\");\n  }\n  \n  reviewer.status = \"approved\";\n  reviewer.comments = comments;\n  \n  // 检查是否所有人都已批准\n  const allApproved = workflow.reviewers.every(r => r.status === \"approved\");\n  if (allApproved) {\n    workflow.status = \"approved\";\n    \n    // 自动发送给审计师\n    await sendToAuditor(reportId);\n  }\n  \n  await database.update(\"approval_workflows\", { report_id: reportId }, workflow);\n}\n",[912],{"type":24,"tag":653,"props":913,"children":914},{"__ignoreMap":7},[915],{"type":30,"value":910},{"type":24,"tag":25,"props":917,"children":919},{"id":918},"持续监控机制",[920],{"type":30,"value":918},{"type":24,"tag":98,"props":922,"children":924},{"id":923},"合规仪表盘",[925],{"type":30,"value":923},{"type":24,"tag":33,"props":927,"children":928},{},[929],{"type":30,"value":930},"构建实时合规仪表盘，展示关键指标：",{"type":24,"tag":33,"props":932,"children":933},{},[934],{"type":24,"tag":77,"props":935,"children":936},{},[937],{"type":30,"value":938},"面板 1：整体合规状态",{"type":24,"tag":39,"props":940,"children":941},{},[942,947,952],{"type":24,"tag":43,"props":943,"children":944},{},[945],{"type":30,"value":946},"显示当前合规率（如 95.9%）。",{"type":24,"tag":43,"props":948,"children":949},{},[950],{"type":30,"value":951},"按 TSC 分类显示合规率（Security 98%、Availability 95%、Privacy 92%）。",{"type":24,"tag":43,"props":953,"children":954},{},[955],{"type":30,"value":956},"趋势图显示过去 30 天的合规率变化。",{"type":24,"tag":33,"props":958,"children":959},{},[960],{"type":24,"tag":77,"props":961,"children":962},{},[963],{"type":30,"value":964},"面板 2：违规详情",{"type":24,"tag":39,"props":966,"children":967},{},[968,973,978],{"type":24,"tag":43,"props":969,"children":970},{},[971],{"type":30,"value":972},"表格列出所有当前违规项。",{"type":24,"tag":43,"props":974,"children":975},{},[976],{"type":30,"value":977},"按严重程度排序（Critical > High > Medium > Low）。",{"type":24,"tag":43,"props":979,"children":980},{},[981],{"type":30,"value":982},"显示每个违规项的持续时间、责任人、 remediation 状态。",{"type":24,"tag":33,"props":984,"children":985},{},[986],{"type":24,"tag":77,"props":987,"children":988},{},[989],{"type":30,"value":990},"面板 3：控制健康度",{"type":24,"tag":39,"props":992,"children":993},{},[994,999,1004],{"type":24,"tag":43,"props":995,"children":996},{},[997],{"type":30,"value":998},"热力图显示各个控制的健康状态。",{"type":24,"tag":43,"props":1000,"children":1001},{},[1002],{"type":30,"value":1003},"绿色=合规、黄色=警告、红色=违规。",{"type":24,"tag":43,"props":1005,"children":1006},{},[1007],{"type":30,"value":1008},"点击任意控制可查看详细信息和历史趋势。",{"type":24,"tag":33,"props":1010,"children":1011},{},[1012],{"type":24,"tag":77,"props":1013,"children":1014},{},[1015],{"type":30,"value":1016},"面板 4：即将过期的凭证",{"type":24,"tag":39,"props":1018,"children":1019},{},[1020,1025,1030],{"type":24,"tag":43,"props":1021,"children":1022},{},[1023],{"type":30,"value":1024},"列表显示未来 30 天内即将过期的凭证。",{"type":24,"tag":43,"props":1026,"children":1027},{},[1028],{"type":30,"value":1029},"按过期时间排序，最近的排在前面。",{"type":24,"tag":43,"props":1031,"children":1032},{},[1033],{"type":30,"value":1034},"提供一键轮换按钮。",{"type":24,"tag":98,"props":1036,"children":1038},{"id":1037},"偏差告警",[1039],{"type":30,"value":1037},{"type":24,"tag":33,"props":1041,"children":1042},{},[1043],{"type":30,"value":1044},"当检测到合规偏差时，立即发送告警：",{"type":24,"tag":645,"props":1046,"children":1049},{"className":1047,"code":1048,"language":650,"meta":7},[648],"async function checkComplianceDeviation(): Promise\u003Cvoid> {\n  const metrics = await collectCurrentMetrics();\n  \n  // 检查 MFA 启用率\n  if (metrics.mfa_enabled_rate \u003C 0.95) {\n    await sendAlert({\n      severity: \"high\",\n      title: \"MFA Enabled Rate Below Threshold\",\n      message: `Current MFA rate: ${(metrics.mfa_enabled_rate * 100).toFixed(1)}% (threshold: 95%)`,\n      channel: \"#security-alerts\",\n      pagerduty: true,\n    });\n  }\n  \n  // 检查凭证轮换合规率\n  if (metrics.credential_rotation_compliance_rate \u003C 1.0) {\n    await sendAlert({\n      severity: \"medium\",\n      title: \"Credential Rotation Non-Compliance Detected\",\n      message: `${metrics.non_compliant_credentials.length} credentials are overdue for rotation`,\n      channel: \"#security-alerts\",\n    });\n  }\n  \n  // 检查访问审查是否按时完成\n  if (metrics.access_review_overdue) {\n    await sendAlert({\n      severity: \"high\",\n      title: \"Access Review Overdue\",\n      message: `Quarterly access review is ${metrics.days_overdue} days overdue`,\n      channel: \"#security-alerts\",\n      pagerduty: true,\n    });\n  }\n}\n\n// 每小时检查一次\nsetInterval(checkComplianceDeviation, 60 * 60 * 1000);\n",[1050],{"type":24,"tag":653,"props":1051,"children":1052},{"__ignoreMap":7},[1053],{"type":30,"value":1048},{"type":24,"tag":98,"props":1055,"children":1057},{"id":1056},"remediation-tracking",[1058],{"type":30,"value":1059},"Remediation Tracking",{"type":24,"tag":33,"props":1061,"children":1062},{},[1063],{"type":30,"value":1064},"跟踪每个违规项的修复进度：",{"type":24,"tag":645,"props":1066,"children":1069},{"className":1067,"code":1068,"language":650,"meta":7},[648],"interface RemediationTicket {\n  ticket_id: string;\n  violation_id: string;\n  status: \"open\" | \"in_progress\" | \"resolved\" | \"closed\";\n  assignee: string;\n  created_at: string;\n  resolved_at?: string;\n  sla_deadline: string;\n  comments: Array\u003C{\n    author: string;\n    content: string;\n    timestamp: string;\n  }>;\n}\n\nasync function createRemediationTicket(violation: Violation): Promise\u003CRemediationTicket> {\n  const ticket: RemediationTicket = {\n    ticket_id: `REM-${Date.now()}`,\n    violation_id: violation.id,\n    status: \"open\",\n    assignee: determineAssignee(violation),\n    created_at: new Date().toISOString(),\n    sla_deadline: calculateSLADeadline(violation.severity),\n    comments: [],\n  };\n  \n  await database.insert(\"remediation_tickets\", ticket);\n  \n  // 创建 Jira/GitHub Issue\n  await createExternalTicket(ticket);\n  \n  // 通知责任人\n  await sendNotification({\n    to: ticket.assignee,\n    subject: `New Remediation Ticket: ${ticket.ticket_id}`,\n    body: `You have been assigned to fix: ${violation.message}`,\n    action_url: `/tickets/${ticket.ticket_id}`,\n  });\n  \n  return ticket;\n}\n",[1070],{"type":24,"tag":653,"props":1071,"children":1072},{"__ignoreMap":7},[1073],{"type":30,"value":1068},{"type":24,"tag":25,"props":1075,"children":1077},{"id":1076},"主流合规标准映射",[1078],{"type":30,"value":1076},{"type":24,"tag":98,"props":1080,"children":1082},{"id":1081},"soc-2-自动化证据",[1083],{"type":30,"value":1084},"SOC 2 → 自动化证据",{"type":24,"tag":267,"props":1086,"children":1087},{},[1088,1109],{"type":24,"tag":271,"props":1089,"children":1090},{},[1091],{"type":24,"tag":275,"props":1092,"children":1093},{},[1094,1099,1104],{"type":24,"tag":279,"props":1095,"children":1096},{},[1097],{"type":30,"value":1098},"SOC 2 Control",{"type":24,"tag":279,"props":1100,"children":1101},{},[1102],{"type":30,"value":1103},"自动化证据来源",{"type":24,"tag":279,"props":1105,"children":1106},{},[1107],{"type":30,"value":1108},"收集频率",{"type":24,"tag":295,"props":1110,"children":1111},{},[1112,1129,1147,1165,1183],{"type":24,"tag":275,"props":1113,"children":1114},{},[1115,1119,1124],{"type":24,"tag":302,"props":1116,"children":1117},{},[1118],{"type":30,"value":314},{"type":24,"tag":302,"props":1120,"children":1121},{},[1122],{"type":30,"value":1123},"AWS IAM API、GitHub API",{"type":24,"tag":302,"props":1125,"children":1126},{},[1127],{"type":30,"value":1128},"每日",{"type":24,"tag":275,"props":1130,"children":1131},{},[1132,1137,1142],{"type":24,"tag":302,"props":1133,"children":1134},{},[1135],{"type":30,"value":1136},"CC6.3 角色分离",{"type":24,"tag":302,"props":1138,"children":1139},{},[1140],{"type":30,"value":1141},"HR 系统、IAM 权限矩阵",{"type":24,"tag":302,"props":1143,"children":1144},{},[1145],{"type":30,"value":1146},"每月",{"type":24,"tag":275,"props":1148,"children":1149},{},[1150,1155,1160],{"type":24,"tag":302,"props":1151,"children":1152},{},[1153],{"type":30,"value":1154},"CC7.1 安全事件检测",{"type":24,"tag":302,"props":1156,"children":1157},{},[1158],{"type":30,"value":1159},"SIEM、IDS/IPS 日志",{"type":24,"tag":302,"props":1161,"children":1162},{},[1163],{"type":30,"value":1164},"实时",{"type":24,"tag":275,"props":1166,"children":1167},{},[1168,1173,1178],{"type":24,"tag":302,"props":1169,"children":1170},{},[1171],{"type":30,"value":1172},"CC8.1 变更管理",{"type":24,"tag":302,"props":1174,"children":1175},{},[1176],{"type":30,"value":1177},"CI/CD Pipeline、Git History",{"type":24,"tag":302,"props":1179,"children":1180},{},[1181],{"type":30,"value":1182},"每次部署",{"type":24,"tag":275,"props":1184,"children":1185},{},[1186,1191,1196],{"type":24,"tag":302,"props":1187,"children":1188},{},[1189],{"type":30,"value":1190},"CC9.1 风险评估",{"type":24,"tag":302,"props":1192,"children":1193},{},[1194],{"type":30,"value":1195},"漏洞扫描器、渗透测试报告",{"type":24,"tag":302,"props":1197,"children":1198},{},[1199],{"type":30,"value":1200},"每季度",{"type":24,"tag":98,"props":1202,"children":1204},{"id":1203},"gdpr-自动化证据",[1205],{"type":30,"value":1206},"GDPR → 自动化证据",{"type":24,"tag":267,"props":1208,"children":1209},{},[1210,1229],{"type":24,"tag":271,"props":1211,"children":1212},{},[1213],{"type":24,"tag":275,"props":1214,"children":1215},{},[1216,1221,1225],{"type":24,"tag":279,"props":1217,"children":1218},{},[1219],{"type":30,"value":1220},"GDPR Requirement",{"type":24,"tag":279,"props":1222,"children":1223},{},[1224],{"type":30,"value":1103},{"type":24,"tag":279,"props":1226,"children":1227},{},[1228],{"type":30,"value":1108},{"type":24,"tag":295,"props":1230,"children":1231},{},[1232,1249,1266,1284],{"type":24,"tag":275,"props":1233,"children":1234},{},[1235,1240,1245],{"type":24,"tag":302,"props":1236,"children":1237},{},[1238],{"type":30,"value":1239},"Article 30 处理活动记录",{"type":24,"tag":302,"props":1241,"children":1242},{},[1243],{"type":30,"value":1244},"数据流图、ETL Pipeline 日志",{"type":24,"tag":302,"props":1246,"children":1247},{},[1248],{"type":30,"value":1164},{"type":24,"tag":275,"props":1250,"children":1251},{},[1252,1257,1262],{"type":24,"tag":302,"props":1253,"children":1254},{},[1255],{"type":30,"value":1256},"Article 33 数据泄露通知",{"type":24,"tag":302,"props":1258,"children":1259},{},[1260],{"type":30,"value":1261},"泄露检测系统、响应时间日志",{"type":24,"tag":302,"props":1263,"children":1264},{},[1265],{"type":30,"value":1164},{"type":24,"tag":275,"props":1267,"children":1268},{},[1269,1274,1279],{"type":24,"tag":302,"props":1270,"children":1271},{},[1272],{"type":30,"value":1273},"Article 17 被遗忘权",{"type":24,"tag":302,"props":1275,"children":1276},{},[1277],{"type":30,"value":1278},"数据删除日志、第三方通知记录",{"type":24,"tag":302,"props":1280,"children":1281},{},[1282],{"type":30,"value":1283},"每次删除请求",{"type":24,"tag":275,"props":1285,"children":1286},{},[1287,1292,1297],{"type":24,"tag":302,"props":1288,"children":1289},{},[1290],{"type":30,"value":1291},"Article 25 默认数据保护",{"type":24,"tag":302,"props":1293,"children":1294},{},[1295],{"type":30,"value":1296},"加密配置、匿名化管道日志",{"type":24,"tag":302,"props":1298,"children":1299},{},[1300],{"type":30,"value":1301},"每周",{"type":24,"tag":98,"props":1303,"children":1305},{"id":1304},"hipaa-自动化证据",[1306],{"type":30,"value":1307},"HIPAA → 自动化证据",{"type":24,"tag":267,"props":1309,"children":1310},{},[1311,1330],{"type":24,"tag":271,"props":1312,"children":1313},{},[1314],{"type":24,"tag":275,"props":1315,"children":1316},{},[1317,1322,1326],{"type":24,"tag":279,"props":1318,"children":1319},{},[1320],{"type":30,"value":1321},"HIPAA Requirement",{"type":24,"tag":279,"props":1323,"children":1324},{},[1325],{"type":30,"value":1103},{"type":24,"tag":279,"props":1327,"children":1328},{},[1329],{"type":30,"value":1108},{"type":24,"tag":295,"props":1331,"children":1332},{},[1333,1349,1365,1381],{"type":24,"tag":275,"props":1334,"children":1335},{},[1336,1340,1345],{"type":24,"tag":302,"props":1337,"children":1338},{},[1339],{"type":30,"value":526},{"type":24,"tag":302,"props":1341,"children":1342},{},[1343],{"type":30,"value":1344},"EHR 系统访问日志、权限审查记录",{"type":24,"tag":302,"props":1346,"children":1347},{},[1348],{"type":30,"value":1128},{"type":24,"tag":275,"props":1350,"children":1351},{},[1352,1356,1361],{"type":24,"tag":302,"props":1353,"children":1354},{},[1355],{"type":30,"value":539},{"type":24,"tag":302,"props":1357,"children":1358},{},[1359],{"type":30,"value":1360},"审计日志、日志审查报告",{"type":24,"tag":302,"props":1362,"children":1363},{},[1364],{"type":30,"value":1164},{"type":24,"tag":275,"props":1366,"children":1367},{},[1368,1372,1377],{"type":24,"tag":302,"props":1369,"children":1370},{},[1371],{"type":30,"value":552},{"type":24,"tag":302,"props":1373,"children":1374},{},[1375],{"type":30,"value":1376},"数据校验和、备份验证报告",{"type":24,"tag":302,"props":1378,"children":1379},{},[1380],{"type":30,"value":1301},{"type":24,"tag":275,"props":1382,"children":1383},{},[1384,1388,1393],{"type":24,"tag":302,"props":1385,"children":1386},{},[1387],{"type":30,"value":565},{"type":24,"tag":302,"props":1389,"children":1390},{},[1391],{"type":30,"value":1392},"TLS 配置扫描、VPN 连接日志",{"type":24,"tag":302,"props":1394,"children":1395},{},[1396],{"type":30,"value":1128},{"type":24,"tag":25,"props":1398,"children":1400},{"id":1399},"faq",[1401],{"type":30,"value":1402},"FAQ",{"type":24,"tag":98,"props":1404,"children":1406},{"id":1405},"q1-compliance-reporting-和普通监控报表有什么区别",[1407],{"type":30,"value":1408},"Q1: Compliance Reporting 和普通监控报表有什么区别？",{"type":24,"tag":33,"props":1410,"children":1411},{},[1412,1417],{"type":24,"tag":77,"props":1413,"children":1414},{},[1415],{"type":30,"value":1416},"A",{"type":30,"value":1418},":",{"type":24,"tag":39,"props":1420,"children":1421},{},[1422,1432,1442,1452],{"type":24,"tag":43,"props":1423,"children":1424},{},[1425,1430],{"type":24,"tag":77,"props":1426,"children":1427},{},[1428],{"type":30,"value":1429},"目的不同",{"type":30,"value":1431},"：监控报表用于运维和性能优化，合规报告用于审计和法规遵从。",{"type":24,"tag":43,"props":1433,"children":1434},{},[1435,1440],{"type":24,"tag":77,"props":1436,"children":1437},{},[1438],{"type":30,"value":1439},"详细程度不同",{"type":30,"value":1441},"：监控报表关注指标趋势，合规报告需要提供详细的证据链（谁、何时、为何、如何）。",{"type":24,"tag":43,"props":1443,"children":1444},{},[1445,1450],{"type":24,"tag":77,"props":1446,"children":1447},{},[1448],{"type":30,"value":1449},"保留期限不同",{"type":30,"value":1451},"：监控报表通常保留 30-90 天，合规报告需要保留 1-7 年。",{"type":24,"tag":43,"props":1453,"children":1454},{},[1455,1460],{"type":24,"tag":77,"props":1456,"children":1457},{},[1458],{"type":30,"value":1459},"法律效力不同",{"type":30,"value":1461},"：合规报告可能具有法律效力，需要防篡改和数字签名；监控报表不需要。",{"type":24,"tag":98,"props":1463,"children":1465},{"id":1464},"q2-如何自动化收集审计证据",[1466],{"type":30,"value":1467},"Q2: 如何自动化收集审计证据？",{"type":24,"tag":33,"props":1469,"children":1470},{},[1471,1475],{"type":24,"tag":77,"props":1472,"children":1473},{},[1474],{"type":30,"value":1416},{"type":30,"value":1418},{"type":24,"tag":39,"props":1477,"children":1478},{},[1479,1488,1498,1508],{"type":24,"tag":43,"props":1480,"children":1481},{},[1482,1486],{"type":24,"tag":77,"props":1483,"children":1484},{},[1485],{"type":30,"value":612},{"type":30,"value":1487},"：从云服务、版本控制系统、身份管理系统等通过 API 自动收集数据。",{"type":24,"tag":43,"props":1489,"children":1490},{},[1491,1496],{"type":24,"tag":77,"props":1492,"children":1493},{},[1494],{"type":30,"value":1495},"日志聚合",{"type":30,"value":1497},"：集中收集审计日志，自动解析和关联。",{"type":24,"tag":43,"props":1499,"children":1500},{},[1501,1506],{"type":24,"tag":77,"props":1502,"children":1503},{},[1504],{"type":30,"value":1505},"策略引擎",{"type":30,"value":1507},"：使用 OPA、Sentinel 等工具自动评估合规状态。",{"type":24,"tag":43,"props":1509,"children":1510},{},[1511,1516],{"type":24,"tag":77,"props":1512,"children":1513},{},[1514],{"type":30,"value":1515},"定期扫描",{"type":30,"value":1517},"：定时运行合规扫描脚本，收集配置、权限、加密等证据。",{"type":24,"tag":98,"props":1519,"children":1521},{"id":1520},"q3-soc-2-审计需要准备哪些材料",[1522],{"type":30,"value":1523},"Q3: SOC 2 审计需要准备哪些材料？",{"type":24,"tag":33,"props":1525,"children":1526},{},[1527,1531],{"type":24,"tag":77,"props":1528,"children":1529},{},[1530],{"type":30,"value":1416},{"type":30,"value":1532},": SOC 2 Type II 通常需要：",{"type":24,"tag":39,"props":1534,"children":1535},{},[1536,1546,1556,1566,1576],{"type":24,"tag":43,"props":1537,"children":1538},{},[1539,1544],{"type":24,"tag":77,"props":1540,"children":1541},{},[1542],{"type":30,"value":1543},"控制描述文档",{"type":30,"value":1545},"：详细描述每个控制的设计和实施方式。",{"type":24,"tag":43,"props":1547,"children":1548},{},[1549,1554],{"type":24,"tag":77,"props":1550,"children":1551},{},[1552],{"type":30,"value":1553},"证据包",{"type":30,"value":1555},"：过去 12 个月的合规证据（访问控制日志、凭证轮换记录、变更审批记录等）。",{"type":24,"tag":43,"props":1557,"children":1558},{},[1559,1564],{"type":24,"tag":77,"props":1560,"children":1561},{},[1562],{"type":30,"value":1563},"例外报告",{"type":30,"value":1565},"：列出所有控制失效的情况及补救措施。",{"type":24,"tag":43,"props":1567,"children":1568},{},[1569,1574],{"type":24,"tag":77,"props":1570,"children":1571},{},[1572],{"type":30,"value":1573},"组织架构",{"type":30,"value":1575},"：安全团队结构、职责分工。",{"type":24,"tag":43,"props":1577,"children":1578},{},[1579,1584],{"type":24,"tag":77,"props":1580,"children":1581},{},[1582],{"type":30,"value":1583},"政策文档",{"type":30,"value":1585},"：信息安全政策、 incident response plan、DR plan 等。",{"type":24,"tag":33,"props":1587,"children":1588},{},[1589],{"type":30,"value":1590},"使用自动化工具可以大幅减少手动准备工作量。",{"type":24,"tag":98,"props":1592,"children":1594},{"id":1593},"q4-gdpr-合规需要记录什么",[1595],{"type":30,"value":1596},"Q4: GDPR 合规需要记录什么？",{"type":24,"tag":33,"props":1598,"children":1599},{},[1600,1604],{"type":24,"tag":77,"props":1601,"children":1602},{},[1603],{"type":30,"value":1416},{"type":30,"value":1605},": GDPR Article 30 要求记录：",{"type":24,"tag":39,"props":1607,"children":1608},{},[1609,1619,1629,1639,1649,1659,1669,1679],{"type":24,"tag":43,"props":1610,"children":1611},{},[1612,1617],{"type":24,"tag":77,"props":1613,"children":1614},{},[1615],{"type":30,"value":1616},"数据控制者和处理者",{"type":30,"value":1618},"：谁负责数据处理。",{"type":24,"tag":43,"props":1620,"children":1621},{},[1622,1627],{"type":24,"tag":77,"props":1623,"children":1624},{},[1625],{"type":30,"value":1626},"处理目的",{"type":30,"value":1628},"：为何处理这些数据。",{"type":24,"tag":43,"props":1630,"children":1631},{},[1632,1637],{"type":24,"tag":77,"props":1633,"children":1634},{},[1635],{"type":30,"value":1636},"数据类别",{"type":30,"value":1638},"：处理哪些类型的个人数据。",{"type":24,"tag":43,"props":1640,"children":1641},{},[1642,1647],{"type":24,"tag":77,"props":1643,"children":1644},{},[1645],{"type":30,"value":1646},"数据主体类别",{"type":30,"value":1648},"：数据属于哪些人（客户、员工等）。",{"type":24,"tag":43,"props":1650,"children":1651},{},[1652,1657],{"type":24,"tag":77,"props":1653,"children":1654},{},[1655],{"type":30,"value":1656},"数据接收者",{"type":30,"value":1658},"：数据分享给谁（第三方服务商等）。",{"type":24,"tag":43,"props":1660,"children":1661},{},[1662,1667],{"type":24,"tag":77,"props":1663,"children":1664},{},[1665],{"type":30,"value":1666},"国际传输",{"type":30,"value":1668},"：数据是否传输到欧盟以外。",{"type":24,"tag":43,"props":1670,"children":1671},{},[1672,1677],{"type":24,"tag":77,"props":1673,"children":1674},{},[1675],{"type":30,"value":1676},"保留期限",{"type":30,"value":1678},"：数据保留多久。",{"type":24,"tag":43,"props":1680,"children":1681},{},[1682,1687],{"type":24,"tag":77,"props":1683,"children":1684},{},[1685],{"type":30,"value":1686},"安全措施",{"type":30,"value":1688},"：如何保护数据安全。",{"type":24,"tag":33,"props":1690,"children":1691},{},[1692],{"type":30,"value":1693},"自动化工具可以从数据流图、ETL Pipeline、数据库 schema 等来源自动收集这些信息。",{"type":24,"tag":98,"props":1695,"children":1697},{"id":1696},"q5-如何证明-controls-持续有效",[1698],{"type":30,"value":1699},"Q5: 如何证明 controls 持续有效？",{"type":24,"tag":33,"props":1701,"children":1702},{},[1703,1707],{"type":24,"tag":77,"props":1704,"children":1705},{},[1706],{"type":30,"value":1416},{"type":30,"value":1418},{"type":24,"tag":39,"props":1709,"children":1710},{},[1711,1721,1731,1741,1751],{"type":24,"tag":43,"props":1712,"children":1713},{},[1714,1719],{"type":24,"tag":77,"props":1715,"children":1716},{},[1717],{"type":30,"value":1718},"持续监控",{"type":30,"value":1720},"：实时监控合规指标，发现偏差立即告警。",{"type":24,"tag":43,"props":1722,"children":1723},{},[1724,1729],{"type":24,"tag":77,"props":1725,"children":1726},{},[1727],{"type":30,"value":1728},"定期测试",{"type":30,"value":1730},"：定期进行渗透测试、漏洞扫描、DR 演练。",{"type":24,"tag":43,"props":1732,"children":1733},{},[1734,1739],{"type":24,"tag":77,"props":1735,"children":1736},{},[1737],{"type":30,"value":1738},"自动证据收集",{"type":30,"value":1740},"：每天自动收集证据，而不是等到审计前才突击准备。",{"type":24,"tag":43,"props":1742,"children":1743},{},[1744,1749],{"type":24,"tag":77,"props":1745,"children":1746},{},[1747],{"type":30,"value":1748},"趋势分析",{"type":30,"value":1750},"：分析合规指标的历史趋势，证明 controls 长期有效。",{"type":24,"tag":43,"props":1752,"children":1753},{},[1754,1759],{"type":24,"tag":77,"props":1755,"children":1756},{},[1757],{"type":30,"value":1758},"第三方认证",{"type":30,"value":1760},"：聘请第三方机构进行年度审计，获得独立认证。",{"type":24,"tag":98,"props":1762,"children":1764},{"id":1763},"q6-审计报告需要多久生成一次",[1765],{"type":30,"value":1766},"Q6: 审计报告需要多久生成一次？",{"type":24,"tag":33,"props":1768,"children":1769},{},[1770,1774],{"type":24,"tag":77,"props":1771,"children":1772},{},[1773],{"type":30,"value":1416},{"type":30,"value":1418},{"type":24,"tag":39,"props":1776,"children":1777},{},[1778,1788,1798,1808,1818],{"type":24,"tag":43,"props":1779,"children":1780},{},[1781,1786],{"type":24,"tag":77,"props":1782,"children":1783},{},[1784],{"type":30,"value":1785},"内部报告",{"type":30,"value":1787},"：建议每月或每季度生成一次，用于内部监控和改进。",{"type":24,"tag":43,"props":1789,"children":1790},{},[1791,1796],{"type":24,"tag":77,"props":1792,"children":1793},{},[1794],{"type":30,"value":1795},"SOC 2 Type II",{"type":30,"value":1797},"：每年一次，覆盖过去 12 个月的证据。",{"type":24,"tag":43,"props":1799,"children":1800},{},[1801,1806],{"type":24,"tag":77,"props":1802,"children":1803},{},[1804],{"type":30,"value":1805},"SOC 2 Type I",{"type":30,"value":1807},"：一次性，证明某个时间点的控制设计有效性。",{"type":24,"tag":43,"props":1809,"children":1810},{},[1811,1816],{"type":24,"tag":77,"props":1812,"children":1813},{},[1814],{"type":30,"value":1815},"GDPR DPIA",{"type":30,"value":1817},"：每次引入新的数据处理活动时进行。",{"type":24,"tag":43,"props":1819,"children":1820},{},[1821,1826],{"type":24,"tag":77,"props":1822,"children":1823},{},[1824],{"type":30,"value":1825},"HIPAA Risk Assessment",{"type":30,"value":1827},"：至少每年一次，或在重大变更后进行。",{"type":24,"tag":98,"props":1829,"children":1831},{"id":1830},"q7-如何处理审计发现的问题",[1832],{"type":30,"value":1833},"Q7: 如何处理审计发现的问题？",{"type":24,"tag":33,"props":1835,"children":1836},{},[1837,1841],{"type":24,"tag":77,"props":1838,"children":1839},{},[1840],{"type":30,"value":1416},{"type":30,"value":1418},{"type":24,"tag":39,"props":1843,"children":1844},{},[1845,1855,1865,1875,1880,1890,1900],{"type":24,"tag":43,"props":1846,"children":1847},{},[1848,1853],{"type":24,"tag":77,"props":1849,"children":1850},{},[1851],{"type":30,"value":1852},"分类",{"type":30,"value":1854},"：按严重程度分类（Critical、High、Medium、Low）。",{"type":24,"tag":43,"props":1856,"children":1857},{},[1858,1863],{"type":24,"tag":77,"props":1859,"children":1860},{},[1861],{"type":30,"value":1862},"优先级",{"type":30,"value":1864},"：优先解决 Critical 和 High 级别的问题。",{"type":24,"tag":43,"props":1866,"children":1867},{},[1868,1873],{"type":24,"tag":77,"props":1869,"children":1870},{},[1871],{"type":30,"value":1872},"根本原因分析",{"type":30,"value":1874},"：找出问题的根本原因，而不是只修复表面症状。",{"type":24,"tag":43,"props":1876,"children":1877},{},[1878],{"type":30,"value":1879},"** remediation plan**：制定修复计划，明确责任人和时间表。",{"type":24,"tag":43,"props":1881,"children":1882},{},[1883,1888],{"type":24,"tag":77,"props":1884,"children":1885},{},[1886],{"type":30,"value":1887},"跟踪",{"type":30,"value":1889},"：使用 remediation ticket 系统跟踪修复进度。",{"type":24,"tag":43,"props":1891,"children":1892},{},[1893,1898],{"type":24,"tag":77,"props":1894,"children":1895},{},[1896],{"type":30,"value":1897},"验证",{"type":30,"value":1899},"：修复后进行验证测试，确保问题真正解决。",{"type":24,"tag":43,"props":1901,"children":1902},{},[1903,1908],{"type":24,"tag":77,"props":1904,"children":1905},{},[1906],{"type":30,"value":1907},"预防",{"type":30,"value":1909},"：更新政策和流程，防止类似问题再次发生。",{"type":24,"tag":98,"props":1911,"children":1913},{"id":1912},"q8-如何选择合规自动化工具",[1914],{"type":30,"value":1915},"Q8: 如何选择合规自动化工具？",{"type":24,"tag":33,"props":1917,"children":1918},{},[1919,1923],{"type":24,"tag":77,"props":1920,"children":1921},{},[1922],{"type":30,"value":1416},{"type":30,"value":1924},": 考虑以下因素：",{"type":24,"tag":39,"props":1926,"children":1927},{},[1928,1938,1948,1958,1968,1978],{"type":24,"tag":43,"props":1929,"children":1930},{},[1931,1936],{"type":24,"tag":77,"props":1932,"children":1933},{},[1934],{"type":30,"value":1935},"集成能力",{"type":30,"value":1937},"：是否能与现有的云服务、版本控制系统、身份管理系统集成。",{"type":24,"tag":43,"props":1939,"children":1940},{},[1941,1946],{"type":24,"tag":77,"props":1942,"children":1943},{},[1944],{"type":30,"value":1945},"合规标准支持",{"type":30,"value":1947},"：是否支持你需要的合规标准（SOC 2、GDPR、HIPAA 等）。",{"type":24,"tag":43,"props":1949,"children":1950},{},[1951,1956],{"type":24,"tag":77,"props":1952,"children":1953},{},[1954],{"type":30,"value":1955},"易用性",{"type":30,"value":1957},"：是否易于配置和使用，学习曲线如何。",{"type":24,"tag":43,"props":1959,"children":1960},{},[1961,1966],{"type":24,"tag":77,"props":1962,"children":1963},{},[1964],{"type":30,"value":1965},"成本",{"type":30,"value":1967},"：许可证费用、实施成本、维护成本。",{"type":24,"tag":43,"props":1969,"children":1970},{},[1971,1976],{"type":24,"tag":77,"props":1972,"children":1973},{},[1974],{"type":30,"value":1975},"可扩展性",{"type":30,"value":1977},"：是否能随着业务增长而扩展。",{"type":24,"tag":43,"props":1979,"children":1980},{},[1981,1986],{"type":24,"tag":77,"props":1982,"children":1983},{},[1984],{"type":30,"value":1985},"社区和支持",{"type":30,"value":1987},"：是否有活跃的社区和良好的技术支持。",{"type":24,"tag":33,"props":1989,"children":1990},{},[1991,1996],{"type":24,"tag":77,"props":1992,"children":1993},{},[1994],{"type":30,"value":1995},"常见工具",{"type":30,"value":601},{"type":24,"tag":39,"props":1998,"children":1999},{},[2000,2010,2020,2030,2040],{"type":24,"tag":43,"props":2001,"children":2002},{},[2003,2008],{"type":24,"tag":77,"props":2004,"children":2005},{},[2006],{"type":30,"value":2007},"Vanta",{"type":30,"value":2009},"：自动化 SOC 2、GDPR、HIPAA 合规。",{"type":24,"tag":43,"props":2011,"children":2012},{},[2013,2018],{"type":24,"tag":77,"props":2014,"children":2015},{},[2016],{"type":30,"value":2017},"Drata",{"type":30,"value":2019},"：持续合规监控和证据收集。",{"type":24,"tag":43,"props":2021,"children":2022},{},[2023,2028],{"type":24,"tag":77,"props":2024,"children":2025},{},[2026],{"type":30,"value":2027},"Secureframe",{"type":30,"value":2029},"：自动化合规框架。",{"type":24,"tag":43,"props":2031,"children":2032},{},[2033,2038],{"type":24,"tag":77,"props":2034,"children":2035},{},[2036],{"type":30,"value":2037},"Laika",{"type":30,"value":2039},"：专注于 SOC 2 自动化。",{"type":24,"tag":43,"props":2041,"children":2042},{},[2043,2048],{"type":24,"tag":77,"props":2044,"children":2045},{},[2046],{"type":30,"value":2047},"OpenSource",{"type":30,"value":2049},"：OPA（Open Policy Agent）、Cloud Custodian、Scout Suite。",{"type":24,"tag":25,"props":2051,"children":2053},{"id":2052},"延伸阅读",[2054],{"type":30,"value":2052},{"type":24,"tag":39,"props":2056,"children":2057},{},[2058,2069,2079,2089],{"type":24,"tag":43,"props":2059,"children":2060},{},[2061],{"type":24,"tag":2062,"props":2063,"children":2067},"a",{"href":2064,"rel":2065},"https://www.aicpa.org/content/dam/aicpa/interestareas/frc/assuranceadvisoryservices/aicpasoc2report.pdf",[2066],"nofollow",[2068],{"type":30,"value":260},{"type":24,"tag":43,"props":2070,"children":2071},{},[2072],{"type":24,"tag":2062,"props":2073,"children":2076},{"href":2074,"rel":2075},"https://gdpr-info.eu/art-30-gdpr/",[2066],[2077],{"type":30,"value":2078},"GDPR Article 30: Records of Processing Activities",{"type":24,"tag":43,"props":2080,"children":2081},{},[2082],{"type":24,"tag":2062,"props":2083,"children":2086},{"href":2084,"rel":2085},"https://www.hhs.gov/hipaa/for-professionals/security/laws-regulations/index.html",[2066],[2087],{"type":30,"value":2088},"HIPAA Security Rule",{"type":24,"tag":43,"props":2090,"children":2091},{},[2092],{"type":24,"tag":2062,"props":2093,"children":2096},{"href":2094,"rel":2095},"https://www.nist.gov/cyberframework",[2066],[2097],{"type":30,"value":2098},"NIST Cybersecurity Framework",{"type":24,"tag":25,"props":2100,"children":2102},{"id":2101},"checklist",[2103],{"type":30,"value":2104},"Checklist",{"type":24,"tag":33,"props":2106,"children":2107},{},[2108],{"type":30,"value":2109},"在实施 Compliance Reporting 自动化之前，请确认以下事项：",{"type":24,"tag":39,"props":2111,"children":2114},{"className":2112},[2113],"contains-task-list",[2115,2128,2137,2146,2155,2164,2173,2182,2191,2200],{"type":24,"tag":43,"props":2116,"children":2119},{"className":2117},[2118],"task-list-item",[2120,2126],{"type":24,"tag":2121,"props":2122,"children":2125},"input",{"disabled":2123,"type":2124},true,"checkbox",[],{"type":30,"value":2127}," 已明确需要的合规标准（SOC 2、GDPR、HIPAA 等）",{"type":24,"tag":43,"props":2129,"children":2131},{"className":2130},[2118],[2132,2135],{"type":24,"tag":2121,"props":2133,"children":2134},{"disabled":2123,"type":2124},[],{"type":30,"value":2136}," 已列出所有需要自动收集的证据类型",{"type":24,"tag":43,"props":2138,"children":2140},{"className":2139},[2118],[2141,2144],{"type":24,"tag":2121,"props":2142,"children":2143},{"disabled":2123,"type":2124},[],{"type":30,"value":2145}," 已选择合规自动化工具或自建方案",{"type":24,"tag":43,"props":2147,"children":2149},{"className":2148},[2118],[2150,2153],{"type":24,"tag":2121,"props":2151,"children":2152},{"disabled":2123,"type":2124},[],{"type":30,"value":2154}," 已集成所有数据源（AWS、GitHub、Vault、SIEM 等）",{"type":24,"tag":43,"props":2156,"children":2158},{"className":2157},[2118],[2159,2162],{"type":24,"tag":2121,"props":2160,"children":2161},{"disabled":2123,"type":2124},[],{"type":30,"value":2163}," 已定义合规规则和阈值",{"type":24,"tag":43,"props":2165,"children":2167},{"className":2166},[2118],[2168,2171],{"type":24,"tag":2121,"props":2169,"children":2170},{"disabled":2123,"type":2124},[],{"type":30,"value":2172}," 已构建合规仪表盘，实时监控合规状态",{"type":24,"tag":43,"props":2174,"children":2176},{"className":2175},[2118],[2177,2180],{"type":24,"tag":2121,"props":2178,"children":2179},{"disabled":2123,"type":2124},[],{"type":30,"value":2181}," 已配置偏差告警，及时发现并修复问题",{"type":24,"tag":43,"props":2183,"children":2185},{"className":2184},[2118],[2186,2189],{"type":24,"tag":2121,"props":2187,"children":2188},{"disabled":2123,"type":2124},[],{"type":30,"value":2190}," 已建立 remediation ticket 系统，跟踪修复进度",{"type":24,"tag":43,"props":2192,"children":2194},{"className":2193},[2118],[2195,2198],{"type":24,"tag":2121,"props":2196,"children":2197},{"disabled":2123,"type":2124},[],{"type":30,"value":2199}," 已设计报告生成和审批工作流",{"type":24,"tag":43,"props":2201,"children":2203},{"className":2202},[2118],[2204,2207],{"type":24,"tag":2121,"props":2205,"children":2206},{"disabled":2123,"type":2124},[],{"type":30,"value":2208}," 已安排定期的合规审查会议（如每月一次）",{"type":24,"tag":2210,"props":2211,"children":2212},"hr",{},[],{"type":24,"tag":33,"props":2214,"children":2215},{},[2216,2221,2223,2229],{"type":24,"tag":77,"props":2217,"children":2218},{},[2219],{"type":30,"value":2220},"下一步行动",{"type":30,"value":2222},"：阅读 ",{"type":24,"tag":2062,"props":2224,"children":2226},{"href":2225},"./ai-agent-data-lineage-tracking-provenance",[2227],{"type":30,"value":2228},"AI agent Data Lineage Tracking",{"type":30,"value":2230},"，了解如何追踪数据从输入到输出的完整流转路径，支持问题排查、影响分析和合规审计。",{"title":7,"searchDepth":2232,"depth":2232,"links":2233},3,[2234,2236,2241,2246,2251,2256,2261,2266,2276,2277],{"id":27,"depth":2235,"text":31},2,{"id":93,"depth":2235,"text":96,"children":2237},[2238,2239,2240],{"id":100,"depth":2232,"text":103},{"id":159,"depth":2232,"text":162},{"id":208,"depth":2232,"text":211},{"id":252,"depth":2235,"text":252,"children":2242},[2243,2244,2245],{"id":257,"depth":2232,"text":260},{"id":406,"depth":2232,"text":409},{"id":490,"depth":2232,"text":493},{"id":573,"depth":2235,"text":573,"children":2247},[2248,2249,2250],{"id":578,"depth":2232,"text":581},{"id":659,"depth":2232,"text":662},{"id":736,"depth":2232,"text":739},{"id":833,"depth":2235,"text":833,"children":2252},[2253,2254,2255],{"id":838,"depth":2232,"text":841},{"id":858,"depth":2232,"text":861},{"id":898,"depth":2232,"text":901},{"id":918,"depth":2235,"text":918,"children":2257},[2258,2259,2260],{"id":923,"depth":2232,"text":923},{"id":1037,"depth":2232,"text":1037},{"id":1056,"depth":2232,"text":1059},{"id":1076,"depth":2235,"text":1076,"children":2262},[2263,2264,2265],{"id":1081,"depth":2232,"text":1084},{"id":1203,"depth":2232,"text":1206},{"id":1304,"depth":2232,"text":1307},{"id":1399,"depth":2235,"text":1402,"children":2267},[2268,2269,2270,2271,2272,2273,2274,2275],{"id":1405,"depth":2232,"text":1408},{"id":1464,"depth":2232,"text":1467},{"id":1520,"depth":2232,"text":1523},{"id":1593,"depth":2232,"text":1596},{"id":1696,"depth":2232,"text":1699},{"id":1763,"depth":2232,"text":1766},{"id":1830,"depth":2232,"text":1833},{"id":1912,"depth":2232,"text":1915},{"id":2052,"depth":2235,"text":2052},{"id":2101,"depth":2235,"text":2104},"markdown","content:topics:ai:ai-agent-compliance-reporting-automation-evidence.md","content","topics/ai/ai-agent-compliance-reporting-automation-evidence.md","topics/ai/ai-agent-compliance-reporting-automation-evidence","md",[2285,3436,4383],{"_path":2286,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":2287,"description":2288,"date":2289,"topic":5,"author":11,"tags":2290,"image":2296,"imageAlt":2297,"pexelsPhotoId":2298,"pexelsUrl":2299,"readingTime":2300,"body":2301,"_type":2278,"_id":3433,"_source":2280,"_file":3434,"_stem":3435,"_extension":2283},"/topics/ai/cursor-keyboard-shortcuts-cheatsheet","Cursor 快捷键速查表（macOS/Windows）：从“会用”到“能提效”的 10 个工作流","把 Cursor 常用快捷键按任务分组（查代码、改代码、多文件、对话、审查与回滚），给出可直接照抄的工作流与最小回归清单，避免“快捷键背了也没变快”。","2026-03-02",[2291,2292,2293,2294,2295],"Cursor","快捷键","AI IDE","VS Code","开发效率","/images/topics/ai/cursor-keyboard-shortcuts-cheatsheet.jpg","彩色机械键盘与鼠标的工作台面",34563105,"https://www.pexels.com/photo/colorful-mechanical-keyboard-and-mouse-setup-34563105/",12,{"type":21,"children":2302,"toc":3407},[2303,2308,2326,2331,2359,2364,2400,2403,2409,2414,2447,2452,2475,2478,2484,2489,2707,2716,2719,2725,2731,2750,2758,2779,2784,2790,2805,2836,2841,2854,2860,2879,2897,2905,2910,2916,2921,2942,2950,2956,2961,2984,2989,2995,3008,3014,3031,3049,3055,3066,3084,3090,3101,3107,3112,3155,3158,3164,3172,3225,3228,3234,3240,3245,3250,3273,3291,3296,3321,3324,3330,3336,3341,3347,3352,3358,3363,3366,3372],{"type":24,"tag":33,"props":2304,"children":2305},{},[2306],{"type":30,"value":2307},"如果你在搜“Cursor 快捷键”，你大概率不是想背一张表，而是想解决这类问题：",{"type":24,"tag":39,"props":2309,"children":2310},{},[2311,2316,2321],{"type":24,"tag":43,"props":2312,"children":2313},{},[2314],{"type":30,"value":2315},"为什么我用了 AI，还是很慢？（对话来回太多、改动不可控）",{"type":24,"tag":43,"props":2317,"children":2318},{},[2319],{"type":30,"value":2320},"为什么它“看起来懂了”，却改错文件/改出回归？（上下文与范围没锁住）",{"type":24,"tag":43,"props":2322,"children":2323},{},[2324],{"type":30,"value":2325},"多文件改动怎么做得安全？（验收、回滚、最小回归集）",{"type":24,"tag":33,"props":2327,"children":2328},{},[2329],{"type":30,"value":2330},"这篇文章给你两份东西：",{"type":24,"tag":2332,"props":2333,"children":2334},"ol",{},[2335,2347],{"type":24,"tag":43,"props":2336,"children":2337},{},[2338,2340,2345],{"type":30,"value":2339},"一张",{"type":24,"tag":77,"props":2341,"children":2342},{},[2343],{"type":30,"value":2344},"按任务分组",{"type":30,"value":2346},"的快捷键表（不是按功能堆在一起）",{"type":24,"tag":43,"props":2348,"children":2349},{},[2350,2352,2357],{"type":30,"value":2351},"一套“从需求到落地”的",{"type":24,"tag":77,"props":2353,"children":2354},{},[2355],{"type":30,"value":2356},"最小闭环工作流",{"type":30,"value":2358},"（每一步都有快捷键）",{"type":24,"tag":33,"props":2360,"children":2361},{},[2362],{"type":30,"value":2363},"想看系统玩法：",{"type":24,"tag":39,"props":2365,"children":2366},{},[2367,2378,2389],{"type":24,"tag":43,"props":2368,"children":2369},{},[2370,2372],{"type":30,"value":2371},"入门教程看：",{"type":24,"tag":2062,"props":2373,"children":2375},{"href":2374},"/topics/ai/cursor-tutorial",[2376],{"type":30,"value":2377},"Cursor 使用教程（2026）",{"type":24,"tag":43,"props":2379,"children":2380},{},[2381,2383],{"type":30,"value":2382},"进阶玩法看：",{"type":24,"tag":2062,"props":2384,"children":2386},{"href":2385},"/topics/ai/cursor-editor-guide",[2387],{"type":30,"value":2388},"Cursor 编辑器深度玩法",{"type":24,"tag":43,"props":2390,"children":2391},{},[2392,2394],{"type":30,"value":2393},"规则与忽略看：",{"type":24,"tag":2062,"props":2395,"children":2397},{"href":2396},"/topics/ai/cursor-rules-cursorrules",[2398],{"type":30,"value":2399},"Cursor Rules 与 .cursorrules",{"type":24,"tag":2210,"props":2401,"children":2402},{},[],{"type":24,"tag":25,"props":2404,"children":2406},{"id":2405},"先给结论提效不是按得快而是闭环更短",[2407],{"type":30,"value":2408},"先给结论：提效不是“按得快”，而是“闭环更短”",{"type":24,"tag":33,"props":2410,"children":2411},{},[2412],{"type":30,"value":2413},"你可以把 Cursor 的快捷键理解为 3 条流水线：",{"type":24,"tag":39,"props":2415,"children":2416},{},[2417,2427,2437],{"type":24,"tag":43,"props":2418,"children":2419},{},[2420,2425],{"type":24,"tag":77,"props":2421,"children":2422},{},[2423],{"type":30,"value":2424},"改一小段",{"type":30,"value":2426},"（内联编辑）：把改动限制在一个函数/一段样式",{"type":24,"tag":43,"props":2428,"children":2429},{},[2430,2435],{"type":24,"tag":77,"props":2431,"children":2432},{},[2433],{"type":30,"value":2434},"改一组文件",{"type":30,"value":2436},"（Composer）：把改动限制在一组明确文件，并要求输出 diff + 验收点",{"type":24,"tag":43,"props":2438,"children":2439},{},[2440,2445],{"type":24,"tag":77,"props":2441,"children":2442},{},[2443],{"type":30,"value":2444},"聊清楚再动手",{"type":30,"value":2446},"（侧边对话）：先对齐目标、范围、验收、回滚",{"type":24,"tag":33,"props":2448,"children":2449},{},[2450],{"type":30,"value":2451},"当你觉得“它乱改/改太大”时，往往不是快捷键没记住，而是缺了两件事：",{"type":24,"tag":39,"props":2453,"children":2454},{},[2455,2465],{"type":24,"tag":43,"props":2456,"children":2457},{},[2458,2460],{"type":30,"value":2459},"没有在动手前锁定",{"type":24,"tag":77,"props":2461,"children":2462},{},[2463],{"type":30,"value":2464},"范围",{"type":24,"tag":43,"props":2466,"children":2467},{},[2468,2470],{"type":30,"value":2469},"没有在接受改动前准备",{"type":24,"tag":77,"props":2471,"children":2472},{},[2473],{"type":30,"value":2474},"验收/回滚",{"type":24,"tag":2210,"props":2476,"children":2477},{},[],{"type":24,"tag":25,"props":2479,"children":2481},{"id":2480},"快捷键速查表按任务分组",[2482],{"type":30,"value":2483},"快捷键速查表（按任务分组）",{"type":24,"tag":33,"props":2485,"children":2486},{},[2487],{"type":30,"value":2488},"说明：下表按“你正在做什么”组织，而不是按“功能名字”组织。不同版本快捷键可能略有差异，但核心逻辑一致。",{"type":24,"tag":267,"props":2490,"children":2491},{},[2492,2518],{"type":24,"tag":271,"props":2493,"children":2494},{},[2495],{"type":24,"tag":275,"props":2496,"children":2497},{},[2498,2503,2508,2513],{"type":24,"tag":279,"props":2499,"children":2500},{},[2501],{"type":30,"value":2502},"任务",{"type":24,"tag":279,"props":2504,"children":2505},{},[2506],{"type":30,"value":2507},"macOS",{"type":24,"tag":279,"props":2509,"children":2510},{},[2511],{"type":30,"value":2512},"Windows",{"type":24,"tag":279,"props":2514,"children":2515},{},[2516],{"type":30,"value":2517},"你该在什么时候用",{"type":24,"tag":295,"props":2519,"children":2520},{},[2521,2552,2583,2614,2645,2676],{"type":24,"tag":275,"props":2522,"children":2523},{},[2524,2529,2538,2547],{"type":24,"tag":302,"props":2525,"children":2526},{},[2527],{"type":30,"value":2528},"改一小段（最安全）",{"type":24,"tag":302,"props":2530,"children":2531},{},[2532],{"type":24,"tag":653,"props":2533,"children":2535},{"className":2534},[],[2536],{"type":30,"value":2537},"Cmd + K",{"type":24,"tag":302,"props":2539,"children":2540},{},[2541],{"type":24,"tag":653,"props":2542,"children":2544},{"className":2543},[],[2545],{"type":30,"value":2546},"Ctrl + K",{"type":24,"tag":302,"props":2548,"children":2549},{},[2550],{"type":30,"value":2551},"只想改一个函数/一段 CSS，不想动别的",{"type":24,"tag":275,"props":2553,"children":2554},{},[2555,2560,2569,2578],{"type":24,"tag":302,"props":2556,"children":2557},{},[2558],{"type":30,"value":2559},"打开 AI 对话（先对齐再动手）",{"type":24,"tag":302,"props":2561,"children":2562},{},[2563],{"type":24,"tag":653,"props":2564,"children":2566},{"className":2565},[],[2567],{"type":30,"value":2568},"Cmd + L",{"type":24,"tag":302,"props":2570,"children":2571},{},[2572],{"type":24,"tag":653,"props":2573,"children":2575},{"className":2574},[],[2576],{"type":30,"value":2577},"Ctrl + L",{"type":24,"tag":302,"props":2579,"children":2580},{},[2581],{"type":30,"value":2582},"需要澄清目标、制定步骤、给验收点",{"type":24,"tag":275,"props":2584,"children":2585},{},[2586,2591,2600,2609],{"type":24,"tag":302,"props":2587,"children":2588},{},[2589],{"type":30,"value":2590},"多文件编辑（有组织地改一组文件）",{"type":24,"tag":302,"props":2592,"children":2593},{},[2594],{"type":24,"tag":653,"props":2595,"children":2597},{"className":2596},[],[2598],{"type":30,"value":2599},"Cmd + I",{"type":24,"tag":302,"props":2601,"children":2602},{},[2603],{"type":24,"tag":653,"props":2604,"children":2606},{"className":2605},[],[2607],{"type":30,"value":2608},"Ctrl + I",{"type":24,"tag":302,"props":2610,"children":2611},{},[2612],{"type":30,"value":2613},"改动涉及多个文件：组件+样式+测试",{"type":24,"tag":275,"props":2615,"children":2616},{},[2617,2622,2631,2640],{"type":24,"tag":302,"props":2618,"children":2619},{},[2620],{"type":30,"value":2621},"把选中代码加入对话上下文",{"type":24,"tag":302,"props":2623,"children":2624},{},[2625],{"type":24,"tag":653,"props":2626,"children":2628},{"className":2627},[],[2629],{"type":30,"value":2630},"Cmd + Shift + L",{"type":24,"tag":302,"props":2632,"children":2633},{},[2634],{"type":24,"tag":653,"props":2635,"children":2637},{"className":2636},[],[2638],{"type":30,"value":2639},"Ctrl + Shift + L",{"type":24,"tag":302,"props":2641,"children":2642},{},[2643],{"type":30,"value":2644},"让 AI 只看你选的片段（降低噪音）",{"type":24,"tag":275,"props":2646,"children":2647},{},[2648,2653,2662,2671],{"type":24,"tag":302,"props":2649,"children":2650},{},[2651],{"type":30,"value":2652},"接受当前建议",{"type":24,"tag":302,"props":2654,"children":2655},{},[2656],{"type":24,"tag":653,"props":2657,"children":2659},{"className":2658},[],[2660],{"type":30,"value":2661},"Cmd + Y",{"type":24,"tag":302,"props":2663,"children":2664},{},[2665],{"type":24,"tag":653,"props":2666,"children":2668},{"className":2667},[],[2669],{"type":30,"value":2670},"Ctrl + Y",{"type":24,"tag":302,"props":2672,"children":2673},{},[2674],{"type":30,"value":2675},"你已经准备好验收/回滚，并确认改动范围",{"type":24,"tag":275,"props":2677,"children":2678},{},[2679,2684,2693,2702],{"type":24,"tag":302,"props":2680,"children":2681},{},[2682],{"type":30,"value":2683},"拒绝当前建议",{"type":24,"tag":302,"props":2685,"children":2686},{},[2687],{"type":24,"tag":653,"props":2688,"children":2690},{"className":2689},[],[2691],{"type":30,"value":2692},"Cmd + N",{"type":24,"tag":302,"props":2694,"children":2695},{},[2696],{"type":24,"tag":653,"props":2697,"children":2699},{"className":2698},[],[2700],{"type":30,"value":2701},"Ctrl + N",{"type":24,"tag":302,"props":2703,"children":2704},{},[2705],{"type":30,"value":2706},"改得太大、改错方向，立刻收手",{"type":24,"tag":2708,"props":2709,"children":2710},"blockquote",{},[2711],{"type":24,"tag":33,"props":2712,"children":2713},{},[2714],{"type":30,"value":2715},"小技巧：把“改一小段”当默认路径。只有当你能清晰写出“会改哪几类文件、怎么验收”时再进入多文件。",{"type":24,"tag":2210,"props":2717,"children":2718},{},[],{"type":24,"tag":25,"props":2720,"children":2722},{"id":2721},"_10-个可直接照抄的提效工作流每个都能闭环",[2723],{"type":30,"value":2724},"10 个可直接照抄的提效工作流（每个都能闭环）",{"type":24,"tag":98,"props":2726,"children":2728},{"id":2727},"工作流-1需求计划小步改新手最稳",[2729],{"type":30,"value":2730},"工作流 1：需求→计划→小步改（新手最稳）",{"type":24,"tag":2332,"props":2732,"children":2733},{},[2734,2745],{"type":24,"tag":43,"props":2735,"children":2736},{},[2737,2743],{"type":24,"tag":653,"props":2738,"children":2740},{"className":2739},[],[2741],{"type":30,"value":2742},"Cmd/Ctrl + L",{"type":30,"value":2744}," 打开对话",{"type":24,"tag":43,"props":2746,"children":2747},{},[2748],{"type":30,"value":2749},"先发这段（可复制）：",{"type":24,"tag":2708,"props":2751,"children":2752},{},[2753],{"type":24,"tag":33,"props":2754,"children":2755},{},[2756],{"type":30,"value":2757},"目标：……\n范围：只修改以下文件/模块：……\n非目标：……（明确不做）\n验收：……（可测试/可手动检查）\n输出格式：先给计划，再逐步执行；每一步写出 diff 摘要。",{"type":24,"tag":2332,"props":2759,"children":2760},{"start":2232},[2761,2766],{"type":24,"tag":43,"props":2762,"children":2763},{},[2764],{"type":30,"value":2765},"让 AI 先给“计划（3~6 步）”，你确认后再执行",{"type":24,"tag":43,"props":2767,"children":2768},{},[2769,2771,2777],{"type":30,"value":2770},"任何一步涉及改代码：优先回到编辑区，选中片段用 ",{"type":24,"tag":653,"props":2772,"children":2774},{"className":2773},[],[2775],{"type":30,"value":2776},"Cmd/Ctrl + K",{"type":30,"value":2778}," 小步改",{"type":24,"tag":33,"props":2780,"children":2781},{},[2782],{"type":30,"value":2783},"为什么有效：你把“想法”变成了“可执行约束”，这就是 GEO（面向 AI/模型的可理解结构）。",{"type":24,"tag":98,"props":2785,"children":2787},{"id":2786},"工作流-2只改一个函数高频低风险",[2788],{"type":30,"value":2789},"工作流 2：只改一个函数（高频、低风险）",{"type":24,"tag":39,"props":2791,"children":2792},{},[2793],{"type":24,"tag":43,"props":2794,"children":2795},{},[2796,2798,2803],{"type":30,"value":2797},"选中函数 → ",{"type":24,"tag":653,"props":2799,"children":2801},{"className":2800},[],[2802],{"type":30,"value":2776},{"type":30,"value":2804}," → 输入指令：",{"type":24,"tag":2708,"props":2806,"children":2807},{},[2808,2813],{"type":24,"tag":33,"props":2809,"children":2810},{},[2811],{"type":30,"value":2812},"把这段改成更可读：",{"type":24,"tag":39,"props":2814,"children":2815},{},[2816,2821,2826,2831],{"type":24,"tag":43,"props":2817,"children":2818},{},[2819],{"type":30,"value":2820},"用 async/await",{"type":24,"tag":43,"props":2822,"children":2823},{},[2824],{"type":30,"value":2825},"错误处理不要吞掉",{"type":24,"tag":43,"props":2827,"children":2828},{},[2829],{"type":30,"value":2830},"添加类型（若可推断）",{"type":24,"tag":43,"props":2832,"children":2833},{},[2834],{"type":30,"value":2835},"不要改函数签名",{"type":24,"tag":33,"props":2837,"children":2838},{},[2839],{"type":30,"value":2840},"验收方式（强制）：",{"type":24,"tag":39,"props":2842,"children":2843},{},[2844,2849],{"type":24,"tag":43,"props":2845,"children":2846},{},[2847],{"type":30,"value":2848},"输出前后函数行为一致（输入/输出）",{"type":24,"tag":43,"props":2850,"children":2851},{},[2852],{"type":30,"value":2853},"失败分支有可观测日志（不要悄悄 return null）",{"type":24,"tag":98,"props":2855,"children":2857},{"id":2856},"工作流-3多文件改动先定文件清单",[2858],{"type":30,"value":2859},"工作流 3：多文件改动（先定“文件清单”）",{"type":24,"tag":2332,"props":2861,"children":2862},{},[2863,2874],{"type":24,"tag":43,"props":2864,"children":2865},{},[2866,2872],{"type":24,"tag":653,"props":2867,"children":2869},{"className":2868},[],[2870],{"type":30,"value":2871},"Cmd/Ctrl + I",{"type":30,"value":2873}," 进入多文件",{"type":24,"tag":43,"props":2875,"children":2876},{},[2877],{"type":30,"value":2878},"先让 AI 输出：",{"type":24,"tag":39,"props":2880,"children":2881},{},[2882,2887,2892],{"type":24,"tag":43,"props":2883,"children":2884},{},[2885],{"type":30,"value":2886},"预计会改哪些文件（最多 5 个）",{"type":24,"tag":43,"props":2888,"children":2889},{},[2890],{"type":30,"value":2891},"每个文件改什么",{"type":24,"tag":43,"props":2893,"children":2894},{},[2895],{"type":30,"value":2896},"每一步怎么验收",{"type":24,"tag":2332,"props":2898,"children":2899},{"start":2232},[2900],{"type":24,"tag":43,"props":2901,"children":2902},{},[2903],{"type":30,"value":2904},"你确认文件清单后再开始生成改动",{"type":24,"tag":33,"props":2906,"children":2907},{},[2908],{"type":30,"value":2909},"关键点：多文件最容易翻车的是“它把你没想到的文件也改了”。所以文件清单是第一道闸门。",{"type":24,"tag":98,"props":2911,"children":2913},{"id":2912},"工作流-4把上下文噪音砍掉防跑偏",[2914],{"type":30,"value":2915},"工作流 4：把“上下文噪音”砍掉（防跑偏）",{"type":24,"tag":33,"props":2917,"children":2918},{},[2919],{"type":30,"value":2920},"当你怀疑它在胡说/乱改时：",{"type":24,"tag":39,"props":2922,"children":2923},{},[2924,2937],{"type":24,"tag":43,"props":2925,"children":2926},{},[2927,2929,2935],{"type":30,"value":2928},"只选择关键代码片段 → ",{"type":24,"tag":653,"props":2930,"children":2932},{"className":2931},[],[2933],{"type":30,"value":2934},"Cmd/Ctrl + Shift + L",{"type":30,"value":2936}," 加入对话",{"type":24,"tag":43,"props":2938,"children":2939},{},[2940],{"type":30,"value":2941},"然后在对话里要求：",{"type":24,"tag":2708,"props":2943,"children":2944},{},[2945],{"type":24,"tag":33,"props":2946,"children":2947},{},[2948],{"type":30,"value":2949},"只基于我提供的代码片段回答，不要假设其它文件存在。",{"type":24,"tag":98,"props":2951,"children":2953},{"id":2952},"工作流-5生成变更说明让-code-review-变快",[2954],{"type":30,"value":2955},"工作流 5：生成变更说明（让 code review 变快）",{"type":24,"tag":33,"props":2957,"children":2958},{},[2959],{"type":30,"value":2960},"改完后在对话里让它输出：",{"type":24,"tag":39,"props":2962,"children":2963},{},[2964,2969,2974,2979],{"type":24,"tag":43,"props":2965,"children":2966},{},[2967],{"type":30,"value":2968},"改动摘要（3~7 条）",{"type":24,"tag":43,"props":2970,"children":2971},{},[2972],{"type":30,"value":2973},"风险点（依赖/边界条件）",{"type":24,"tag":43,"props":2975,"children":2976},{},[2977],{"type":30,"value":2978},"回滚方式",{"type":24,"tag":43,"props":2980,"children":2981},{},[2982],{"type":30,"value":2983},"验收步骤",{"type":24,"tag":33,"props":2985,"children":2986},{},[2987],{"type":30,"value":2988},"这套结构能直接贴进 PR 描述。",{"type":24,"tag":98,"props":2990,"children":2992},{"id":2991},"工作流-6写最小回归集不写回归-等事故",[2993],{"type":30,"value":2994},"工作流 6：写“最小回归集”（不写回归 = 等事故）",{"type":24,"tag":33,"props":2996,"children":2997},{},[2998,3000,3006],{"type":30,"value":2999},"每次改动都至少做 10 条最小回归（见下文清单）。你可以把它写在 ",{"type":24,"tag":653,"props":3001,"children":3003},{"className":3002},[],[3004],{"type":30,"value":3005},"README",{"type":30,"value":3007}," 或团队 wiki。",{"type":24,"tag":98,"props":3009,"children":3011},{"id":3010},"工作流-7把接受建议变成最后一步",[3012],{"type":30,"value":3013},"工作流 7：把“接受建议”变成最后一步",{"type":24,"tag":33,"props":3015,"children":3016},{},[3017,3023,3025,3030],{"type":24,"tag":653,"props":3018,"children":3020},{"className":3019},[],[3021],{"type":30,"value":3022},"Cmd/Ctrl + Y",{"type":30,"value":3024}," 应该是",{"type":24,"tag":77,"props":3026,"children":3027},{},[3028],{"type":30,"value":3029},"最后一步",{"type":30,"value":601},{"type":24,"tag":39,"props":3032,"children":3033},{},[3034,3039,3044],{"type":24,"tag":43,"props":3035,"children":3036},{},[3037],{"type":30,"value":3038},"你已经看过 diff",{"type":24,"tag":43,"props":3040,"children":3041},{},[3042],{"type":30,"value":3043},"你能说清楚“怎么验收”",{"type":24,"tag":43,"props":3045,"children":3046},{},[3047],{"type":30,"value":3048},"你知道“怎么回滚”",{"type":24,"tag":98,"props":3050,"children":3052},{"id":3051},"工作流-8拒绝建议不是失败是风控动作",[3053],{"type":30,"value":3054},"工作流 8：拒绝建议不是失败，是风控动作",{"type":24,"tag":33,"props":3056,"children":3057},{},[3058,3064],{"type":24,"tag":653,"props":3059,"children":3061},{"className":3060},[],[3062],{"type":30,"value":3063},"Cmd/Ctrl + N",{"type":30,"value":3065}," 的使用时机：",{"type":24,"tag":39,"props":3067,"children":3068},{},[3069,3074,3079],{"type":24,"tag":43,"props":3070,"children":3071},{},[3072],{"type":30,"value":3073},"它开始改你没提过的东西（范围漂移）",{"type":24,"tag":43,"props":3075,"children":3076},{},[3077],{"type":30,"value":3078},"它改了 10 个文件但你只想改 1 个",{"type":24,"tag":43,"props":3080,"children":3081},{},[3082],{"type":30,"value":3083},"它为了“更优雅”引入新依赖/新抽象",{"type":24,"tag":98,"props":3085,"children":3087},{"id":3086},"工作流-9重复任务做成模板提示词不是一次性",[3088],{"type":30,"value":3089},"工作流 9：重复任务做成模板（提示词不是一次性）",{"type":24,"tag":33,"props":3091,"children":3092},{},[3093,3095,3099],{"type":30,"value":3094},"把高频任务（比如“写组件+样式+验收”）固化成模板，放进 Rules（见：",{"type":24,"tag":2062,"props":3096,"children":3097},{"href":2396},[3098],{"type":30,"value":2399},{"type":30,"value":3100},"）。",{"type":24,"tag":98,"props":3102,"children":3104},{"id":3103},"工作流-10把快捷键表做成你自己的任务表",[3105],{"type":30,"value":3106},"工作流 10：把“快捷键表”做成你自己的任务表",{"type":24,"tag":33,"props":3108,"children":3109},{},[3110],{"type":30,"value":3111},"你不需要记住所有快捷键，只需要记住：",{"type":24,"tag":39,"props":3113,"children":3114},{},[3115,3125,3135,3145],{"type":24,"tag":43,"props":3116,"children":3117},{},[3118,3120],{"type":30,"value":3119},"小步改：",{"type":24,"tag":653,"props":3121,"children":3123},{"className":3122},[],[3124],{"type":30,"value":2776},{"type":24,"tag":43,"props":3126,"children":3127},{},[3128,3130],{"type":30,"value":3129},"先对齐：",{"type":24,"tag":653,"props":3131,"children":3133},{"className":3132},[],[3134],{"type":30,"value":2742},{"type":24,"tag":43,"props":3136,"children":3137},{},[3138,3140],{"type":30,"value":3139},"多文件：",{"type":24,"tag":653,"props":3141,"children":3143},{"className":3142},[],[3144],{"type":30,"value":2871},{"type":24,"tag":43,"props":3146,"children":3147},{},[3148,3150],{"type":30,"value":3149},"上下文聚焦：",{"type":24,"tag":653,"props":3151,"children":3153},{"className":3152},[],[3154],{"type":30,"value":2934},{"type":24,"tag":2210,"props":3156,"children":3157},{},[],{"type":24,"tag":25,"props":3159,"children":3161},{"id":3160},"必交付物-1最小回归任务清单10-条通用",[3162],{"type":30,"value":3163},"必交付物 1：最小回归任务清单（10 条，通用）",{"type":24,"tag":2708,"props":3165,"children":3166},{},[3167],{"type":24,"tag":33,"props":3168,"children":3169},{},[3170],{"type":30,"value":3171},"这份清单的意义：让每次 AI 改动都能“被验证”。否则你只是把不可控变成了更快的不可控。",{"type":24,"tag":2332,"props":3173,"children":3174},{},[3175,3180,3185,3190,3195,3200,3205,3210,3215,3220],{"type":24,"tag":43,"props":3176,"children":3177},{},[3178],{"type":30,"value":3179},"关键路径能跑通（手动点击/请求一次）",{"type":24,"tag":43,"props":3181,"children":3182},{},[3183],{"type":30,"value":3184},"错误路径能触发（模拟一次失败输入）",{"type":24,"tag":43,"props":3186,"children":3187},{},[3188],{"type":30,"value":3189},"控制台无新增错误（至少关注 1 次真实操作）",{"type":24,"tag":43,"props":3191,"children":3192},{},[3193],{"type":30,"value":3194},"关键 UI 未错位（移动端/桌面端各看一眼）",{"type":24,"tag":43,"props":3196,"children":3197},{},[3198],{"type":30,"value":3199},"刷新后状态正确（尤其是表单/列表）",{"type":24,"tag":43,"props":3201,"children":3202},{},[3203],{"type":30,"value":3204},"路由跳转没断（从入口到目标页）",{"type":24,"tag":43,"props":3206,"children":3207},{},[3208],{"type":30,"value":3209},"相关接口未改变契约（字段名/类型）",{"type":24,"tag":43,"props":3211,"children":3212},{},[3213],{"type":30,"value":3214},"性能没有明显退化（首屏、交互卡顿）",{"type":24,"tag":43,"props":3216,"children":3217},{},[3218],{"type":30,"value":3219},"回滚方案可执行（知道回滚哪几个文件/commit）",{"type":24,"tag":43,"props":3221,"children":3222},{},[3223],{"type":30,"value":3224},"写下“这次改动解决了什么、风险是什么”（可贴 PR）",{"type":24,"tag":2210,"props":3226,"children":3227},{},[],{"type":24,"tag":25,"props":3229,"children":3231},{"id":3230},"必交付物-2失败案例复盘真实会发生",[3232],{"type":30,"value":3233},"必交付物 2：失败案例复盘（真实会发生）",{"type":24,"tag":98,"props":3235,"children":3237},{"id":3236},"现象快捷键用得很熟但交付还是慢",[3238],{"type":30,"value":3239},"现象：快捷键用得很熟，但交付还是慢",{"type":24,"tag":33,"props":3241,"children":3242},{},[3243],{"type":30,"value":3244},"典型原因：你把 Cursor 当成“更聪明的搜索框”，不断对话，直到它给出你想要的答案。",{"type":24,"tag":33,"props":3246,"children":3247},{},[3248],{"type":30,"value":3249},"复现路径：",{"type":24,"tag":39,"props":3251,"children":3252},{},[3253,3258,3263,3268],{"type":24,"tag":43,"props":3254,"children":3255},{},[3256],{"type":30,"value":3257},"你直接说“把页面做得更好看、更高级”",{"type":24,"tag":43,"props":3259,"children":3260},{},[3261],{"type":30,"value":3262},"AI 开始大改样式、抽象组件、甚至引入新依赖",{"type":24,"tag":43,"props":3264,"children":3265},{},[3266],{"type":30,"value":3267},"你为了省事按了“接受建议”",{"type":24,"tag":43,"props":3269,"children":3270},{},[3271],{"type":30,"value":3272},"最后发现：设计没统一、移动端崩、甚至埋了性能问题",{"type":24,"tag":33,"props":3274,"children":3275},{},[3276,3278,3282,3284,3289],{"type":30,"value":3277},"根因：缺少",{"type":24,"tag":77,"props":3279,"children":3280},{},[3281],{"type":30,"value":2464},{"type":30,"value":3283},"与",{"type":24,"tag":77,"props":3285,"children":3286},{},[3287],{"type":30,"value":3288},"验收",{"type":30,"value":3290},"。",{"type":24,"tag":33,"props":3292,"children":3293},{},[3294],{"type":30,"value":3295},"修复方式（可照抄）：",{"type":24,"tag":39,"props":3297,"children":3298},{},[3299,3304,3316],{"type":24,"tag":43,"props":3300,"children":3301},{},[3302],{"type":30,"value":3303},"把需求拆成 3 个可验证目标：例如“按钮样式统一”“首屏 CTA 更明显”“移动端间距不挤”",{"type":24,"tag":43,"props":3305,"children":3306},{},[3307,3309,3314],{"type":30,"value":3308},"每个目标只用 ",{"type":24,"tag":653,"props":3310,"children":3312},{"className":3311},[],[3313],{"type":30,"value":2776},{"type":30,"value":3315}," 改一个局部",{"type":24,"tag":43,"props":3317,"children":3318},{},[3319],{"type":30,"value":3320},"每次接受建议前跑一遍“最小回归集”",{"type":24,"tag":2210,"props":3322,"children":3323},{},[],{"type":24,"tag":25,"props":3325,"children":3327},{"id":3326},"faq高频问题",[3328],{"type":30,"value":3329},"FAQ（高频问题）",{"type":24,"tag":98,"props":3331,"children":3333},{"id":3332},"q1我应该先记快捷键还是先学工作流",[3334],{"type":30,"value":3335},"Q1：我应该先记快捷键还是先学工作流？",{"type":24,"tag":33,"props":3337,"children":3338},{},[3339],{"type":30,"value":3340},"先学工作流。快捷键只是把工作流的步骤变短。",{"type":24,"tag":98,"props":3342,"children":3344},{"id":3343},"q2为什么我一用多文件就容易翻车",[3345],{"type":30,"value":3346},"Q2：为什么我一用多文件就容易翻车？",{"type":24,"tag":33,"props":3348,"children":3349},{},[3350],{"type":30,"value":3351},"因为多文件意味着范围更大、依赖更多、验收更难。先锁定“文件清单 + 每步验收”，再让它动手。",{"type":24,"tag":98,"props":3353,"children":3355},{"id":3354},"q3有没有万能提示词",[3356],{"type":30,"value":3357},"Q3：有没有“万能提示词”？",{"type":24,"tag":33,"props":3359,"children":3360},{},[3361],{"type":30,"value":3362},"没有，但有“万能结构”：目标、范围、非目标、验收、输出格式。",{"type":24,"tag":2210,"props":3364,"children":3365},{},[],{"type":24,"tag":25,"props":3367,"children":3369},{"id":3368},"延伸阅读建议按顺序",[3370],{"type":30,"value":3371},"延伸阅读（建议按顺序）",{"type":24,"tag":39,"props":3373,"children":3374},{},[3375,3382,3389,3396],{"type":24,"tag":43,"props":3376,"children":3377},{},[3378],{"type":24,"tag":2062,"props":3379,"children":3380},{"href":2374},[3381],{"type":30,"value":2377},{"type":24,"tag":43,"props":3383,"children":3384},{},[3385],{"type":24,"tag":2062,"props":3386,"children":3387},{"href":2385},[3388],{"type":30,"value":2388},{"type":24,"tag":43,"props":3390,"children":3391},{},[3392],{"type":24,"tag":2062,"props":3393,"children":3394},{"href":2396},[3395],{"type":30,"value":2399},{"type":24,"tag":43,"props":3397,"children":3398},{},[3399,3401],{"type":30,"value":3400},"如果你更关心“网页制作落地”：看这篇 ",{"type":24,"tag":2062,"props":3402,"children":3404},{"href":3403},"/topics/practical-tips/htmlpage-quick-landing-page",[3405],{"type":30,"value":3406},"3 分钟用 HTMLPAGE 做落地页",{"title":7,"searchDepth":2232,"depth":2232,"links":3408},[3409,3410,3411,3423,3424,3427,3432],{"id":2405,"depth":2235,"text":2408},{"id":2480,"depth":2235,"text":2483},{"id":2721,"depth":2235,"text":2724,"children":3412},[3413,3414,3415,3416,3417,3418,3419,3420,3421,3422],{"id":2727,"depth":2232,"text":2730},{"id":2786,"depth":2232,"text":2789},{"id":2856,"depth":2232,"text":2859},{"id":2912,"depth":2232,"text":2915},{"id":2952,"depth":2232,"text":2955},{"id":2991,"depth":2232,"text":2994},{"id":3010,"depth":2232,"text":3013},{"id":3051,"depth":2232,"text":3054},{"id":3086,"depth":2232,"text":3089},{"id":3103,"depth":2232,"text":3106},{"id":3160,"depth":2235,"text":3163},{"id":3230,"depth":2235,"text":3233,"children":3425},[3426],{"id":3236,"depth":2232,"text":3239},{"id":3326,"depth":2235,"text":3329,"children":3428},[3429,3430,3431],{"id":3332,"depth":2232,"text":3335},{"id":3343,"depth":2232,"text":3346},{"id":3354,"depth":2232,"text":3357},{"id":3368,"depth":2235,"text":3371},"content:topics:ai:cursor-keyboard-shortcuts-cheatsheet.md","topics/ai/cursor-keyboard-shortcuts-cheatsheet.md","topics/ai/cursor-keyboard-shortcuts-cheatsheet",{"_path":3437,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":3438,"description":3439,"date":3440,"topic":5,"author":11,"tags":3441,"image":3445,"imageAlt":3446,"pexelsPhotoId":3447,"pexelsUrl":3448,"readingTime":3449,"body":3450,"_type":2278,"_id":4380,"_source":2280,"_file":4381,"_stem":4382,"_extension":2283},"/topics/ai/cursor-vs-copilot-vscode-workflow","Cursor vs GitHub Copilot vs VS Code：怎么选、怎么搭配、怎么把风险关在笼子里","用“任务类型×风险×验收成本”的选择矩阵解释 Cursor/Copilot/VS Code 的差异，并给出一套可落地的协作工作流（范围闸门、最小回归集、回滚策略）。","2026-03-01",[2291,3442,2294,3443,3444],"GitHub Copilot","AI 编程","工作流","/images/topics/ai/cursor-vs-copilot-vscode-workflow.jpg","团队在电脑前进行协作讨论",1181371,"https://www.pexels.com/photo/man-wearing-blue-dress-shirt-1181371/",15,{"type":21,"children":3451,"toc":4358},[3452,3457,3462,3480,3485,3503,3506,3512,3517,3548,3553,3556,3562,3570,3774,3782,3795,3798,3804,3810,3823,3828,3841,3847,3852,3885,3891,3896,3914,3917,3923,3928,3934,3939,3972,3978,3991,3996,4009,4015,4027,4033,4038,4051,4056,4059,4065,4070,4191,4194,4200,4210,4219,4237,4246,4254,4263,4281,4284,4288,4294,4299,4305,4310,4313,4317],{"type":24,"tag":33,"props":3453,"children":3454},{},[3455],{"type":30,"value":3456},"“Cursor 和 Copilot 到底有什么区别？”",{"type":24,"tag":33,"props":3458,"children":3459},{},[3460],{"type":30,"value":3461},"这个问题问得越早越好，因为你一旦把工具选错，后面所有痛苦都不是“提示词不够好”，而是：",{"type":24,"tag":39,"props":3463,"children":3464},{},[3465,3470,3475],{"type":24,"tag":43,"props":3466,"children":3467},{},[3468],{"type":30,"value":3469},"改动不可控（范围漂移、改错文件）",{"type":24,"tag":43,"props":3471,"children":3472},{},[3473],{"type":30,"value":3474},"验收成本爆炸（不知道要测什么）",{"type":24,"tag":43,"props":3476,"children":3477},{},[3478],{"type":30,"value":3479},"团队协作崩盘（没有闸门、没有回滚）",{"type":24,"tag":33,"props":3481,"children":3482},{},[3483],{"type":30,"value":3484},"这篇文章用一张选择矩阵 + 一套可执行工作流，帮你做到两件事：",{"type":24,"tag":2332,"props":3486,"children":3487},{},[3488,3493],{"type":24,"tag":43,"props":3489,"children":3490},{},[3491],{"type":30,"value":3492},"知道什么时候用 Cursor、什么时候用 Copilot、什么时候“纯 VS Code 更快”",{"type":24,"tag":43,"props":3494,"children":3495},{},[3496,3498],{"type":30,"value":3497},"就算用 AI，也能把风险关在笼子里：",{"type":24,"tag":77,"props":3499,"children":3500},{},[3501],{"type":30,"value":3502},"可审查、可验证、可回滚",{"type":24,"tag":2210,"props":3504,"children":3505},{},[],{"type":24,"tag":25,"props":3507,"children":3509},{"id":3508},"结论先说三者不是互斥而是分工",[3510],{"type":30,"value":3511},"结论先说：三者不是互斥，而是分工",{"type":24,"tag":33,"props":3513,"children":3514},{},[3515],{"type":30,"value":3516},"你可以把它们看成三层能力：",{"type":24,"tag":39,"props":3518,"children":3519},{},[3520,3529,3539],{"type":24,"tag":43,"props":3521,"children":3522},{},[3523,3527],{"type":24,"tag":77,"props":3524,"children":3525},{},[3526],{"type":30,"value":2294},{"type":30,"value":3528},"：编辑器与生态（调试、插件、任务、终端、语言服务）",{"type":24,"tag":43,"props":3530,"children":3531},{},[3532,3537],{"type":24,"tag":77,"props":3533,"children":3534},{},[3535],{"type":30,"value":3536},"Copilot",{"type":30,"value":3538},"：代码补全与局部建议（“我正在写这一行/这一段”）",{"type":24,"tag":43,"props":3540,"children":3541},{},[3542,3546],{"type":24,"tag":77,"props":3543,"children":3544},{},[3545],{"type":30,"value":2291},{"type":30,"value":3547},"：以项目为单位的 AI 协作（对话、索引、多文件编辑、规则）",{"type":24,"tag":33,"props":3549,"children":3550},{},[3551],{"type":30,"value":3552},"最常见的误区是：把“局部补全能力”当作“能做架构与多文件落地”。",{"type":24,"tag":2210,"props":3554,"children":3555},{},[],{"type":24,"tag":25,"props":3557,"children":3559},{"id":3558},"选择矩阵按任务类型选工具不是按偏好",[3560],{"type":30,"value":3561},"选择矩阵：按任务类型选工具（不是按偏好）",{"type":24,"tag":2708,"props":3563,"children":3564},{},[3565],{"type":24,"tag":33,"props":3566,"children":3567},{},[3568],{"type":30,"value":3569},"你只要把自己的任务放进表格，就能得到推荐路径。",{"type":24,"tag":267,"props":3571,"children":3572},{},[3573,3605],{"type":24,"tag":271,"props":3574,"children":3575},{},[3576],{"type":24,"tag":275,"props":3577,"children":3578},{},[3579,3584,3590,3595,3600],{"type":24,"tag":279,"props":3580,"children":3581},{},[3582],{"type":30,"value":3583},"任务类型",{"type":24,"tag":279,"props":3585,"children":3587},{"align":3586},"right",[3588],{"type":30,"value":3589},"风险",{"type":24,"tag":279,"props":3591,"children":3592},{"align":3586},[3593],{"type":30,"value":3594},"验收成本",{"type":24,"tag":279,"props":3596,"children":3597},{},[3598],{"type":30,"value":3599},"更推荐",{"type":24,"tag":279,"props":3601,"children":3602},{},[3603],{"type":30,"value":3604},"为什么",{"type":24,"tag":295,"props":3606,"children":3607},{},[3608,3635,3668,3694,3721,3748],{"type":24,"tag":275,"props":3609,"children":3610},{},[3611,3616,3621,3625,3630],{"type":24,"tag":302,"props":3612,"children":3613},{},[3614],{"type":30,"value":3615},"写一段代码/补一个 if",{"type":24,"tag":302,"props":3617,"children":3618},{"align":3586},[3619],{"type":30,"value":3620},"低",{"type":24,"tag":302,"props":3622,"children":3623},{"align":3586},[3624],{"type":30,"value":3620},{"type":24,"tag":302,"props":3626,"children":3627},{},[3628],{"type":30,"value":3629},"Copilot / Cursor 内联编辑",{"type":24,"tag":302,"props":3631,"children":3632},{},[3633],{"type":30,"value":3634},"局部建议足够，成本最低",{"type":24,"tag":275,"props":3636,"children":3637},{},[3638,3643,3648,3652,3663],{"type":24,"tag":302,"props":3639,"children":3640},{},[3641],{"type":30,"value":3642},"重构一个函数",{"type":24,"tag":302,"props":3644,"children":3645},{"align":3586},[3646],{"type":30,"value":3647},"中",{"type":24,"tag":302,"props":3649,"children":3650},{"align":3586},[3651],{"type":30,"value":3647},{"type":24,"tag":302,"props":3653,"children":3654},{},[3655,3657],{"type":30,"value":3656},"Cursor ",{"type":24,"tag":653,"props":3658,"children":3660},{"className":3659},[],[3661],{"type":30,"value":3662},"内联编辑",{"type":24,"tag":302,"props":3664,"children":3665},{},[3666],{"type":30,"value":3667},"需要解释、需要约束输出",{"type":24,"tag":275,"props":3669,"children":3670},{},[3671,3676,3680,3684,3689],{"type":24,"tag":302,"props":3672,"children":3673},{},[3674],{"type":30,"value":3675},"改一个组件 + 样式",{"type":24,"tag":302,"props":3677,"children":3678},{"align":3586},[3679],{"type":30,"value":3647},{"type":24,"tag":302,"props":3681,"children":3682},{"align":3586},[3683],{"type":30,"value":3647},{"type":24,"tag":302,"props":3685,"children":3686},{},[3687],{"type":30,"value":3688},"Cursor（小范围多文件）",{"type":24,"tag":302,"props":3690,"children":3691},{},[3692],{"type":30,"value":3693},"需要同时改模板与样式",{"type":24,"tag":275,"props":3695,"children":3696},{},[3697,3702,3707,3711,3716],{"type":24,"tag":302,"props":3698,"children":3699},{},[3700],{"type":30,"value":3701},"改 3~5 个文件（组件+api+测试）",{"type":24,"tag":302,"props":3703,"children":3704},{"align":3586},[3705],{"type":30,"value":3706},"高",{"type":24,"tag":302,"props":3708,"children":3709},{"align":3586},[3710],{"type":30,"value":3706},{"type":24,"tag":302,"props":3712,"children":3713},{},[3714],{"type":30,"value":3715},"Cursor Composer + 闸门",{"type":24,"tag":302,"props":3717,"children":3718},{},[3719],{"type":30,"value":3720},"需要计划、验收、回滚",{"type":24,"tag":275,"props":3722,"children":3723},{},[3724,3729,3734,3738,3743],{"type":24,"tag":302,"props":3725,"children":3726},{},[3727],{"type":30,"value":3728},"重写一段架构/引入新依赖",{"type":24,"tag":302,"props":3730,"children":3731},{"align":3586},[3732],{"type":30,"value":3733},"很高",{"type":24,"tag":302,"props":3735,"children":3736},{"align":3586},[3737],{"type":30,"value":3733},{"type":24,"tag":302,"props":3739,"children":3740},{},[3741],{"type":30,"value":3742},"先人脑设计 + VS Code 实现",{"type":24,"tag":302,"props":3744,"children":3745},{},[3746],{"type":30,"value":3747},"AI 易发散，最好先设计再执行",{"type":24,"tag":275,"props":3749,"children":3750},{},[3751,3756,3760,3764,3769],{"type":24,"tag":302,"props":3752,"children":3753},{},[3754],{"type":30,"value":3755},"排查线上问题/性能抖动",{"type":24,"tag":302,"props":3757,"children":3758},{"align":3586},[3759],{"type":30,"value":3706},{"type":24,"tag":302,"props":3761,"children":3762},{"align":3586},[3763],{"type":30,"value":3733},{"type":24,"tag":302,"props":3765,"children":3766},{},[3767],{"type":30,"value":3768},"VS Code + 工具链优先，AI 辅助归纳",{"type":24,"tag":302,"props":3770,"children":3771},{},[3772],{"type":30,"value":3773},"需要证据，不要“猜”",{"type":24,"tag":33,"props":3775,"children":3776},{},[3777],{"type":24,"tag":77,"props":3778,"children":3779},{},[3780],{"type":30,"value":3781},"一句话规则：",{"type":24,"tag":39,"props":3783,"children":3784},{},[3785,3790],{"type":24,"tag":43,"props":3786,"children":3787},{},[3788],{"type":30,"value":3789},"当你的改动可以用“10 条最小回归集”覆盖时，用 Cursor。",{"type":24,"tag":43,"props":3791,"children":3792},{},[3793],{"type":30,"value":3794},"当你的改动无法验证时，先别让 AI 动手。",{"type":24,"tag":2210,"props":3796,"children":3797},{},[],{"type":24,"tag":25,"props":3799,"children":3801},{"id":3800},"差异拆解到底差在哪里",[3802],{"type":30,"value":3803},"差异拆解：到底差在哪里？",{"type":24,"tag":98,"props":3805,"children":3807},{"id":3806},"_1-上下文来源补全-vs-项目索引",[3808],{"type":30,"value":3809},"1) 上下文来源：补全 vs 项目索引",{"type":24,"tag":39,"props":3811,"children":3812},{},[3813,3818],{"type":24,"tag":43,"props":3814,"children":3815},{},[3816],{"type":30,"value":3817},"Copilot 更擅长：你正在写的这几行、当前文件的局部上下文",{"type":24,"tag":43,"props":3819,"children":3820},{},[3821],{"type":30,"value":3822},"Cursor 更擅长：项目级索引 + 多文件关联理解",{"type":24,"tag":33,"props":3824,"children":3825},{},[3826],{"type":30,"value":3827},"因此：",{"type":24,"tag":39,"props":3829,"children":3830},{},[3831,3836],{"type":24,"tag":43,"props":3832,"children":3833},{},[3834],{"type":30,"value":3835},"写代码片段：Copilot 速度更快",{"type":24,"tag":43,"props":3837,"children":3838},{},[3839],{"type":30,"value":3840},"改一坨工程：Cursor 更有胜算（但更需要闸门）",{"type":24,"tag":98,"props":3842,"children":3844},{"id":3843},"_2-交互方式你能不能控制范围",[3845],{"type":30,"value":3846},"2) 交互方式：你能不能控制范围",{"type":24,"tag":33,"props":3848,"children":3849},{},[3850],{"type":30,"value":3851},"范围控制的三个层级：",{"type":24,"tag":2332,"props":3853,"children":3854},{},[3855,3865,3875],{"type":24,"tag":43,"props":3856,"children":3857},{},[3858,3860],{"type":30,"value":3859},"内联编辑（选中一段）→ ",{"type":24,"tag":77,"props":3861,"children":3862},{},[3863],{"type":30,"value":3864},"最强范围控制",{"type":24,"tag":43,"props":3866,"children":3867},{},[3868,3870],{"type":30,"value":3869},"Composer 多文件（先列文件清单）→ ",{"type":24,"tag":77,"props":3871,"children":3872},{},[3873],{"type":30,"value":3874},"可控但要闸门",{"type":24,"tag":43,"props":3876,"children":3877},{},[3878,3880],{"type":30,"value":3879},"大对话（泛目标）→ ",{"type":24,"tag":77,"props":3881,"children":3882},{},[3883],{"type":30,"value":3884},"最容易跑偏",{"type":24,"tag":98,"props":3886,"children":3888},{"id":3887},"_3-输出形态建议-vs-可审查的变更",[3889],{"type":30,"value":3890},"3) 输出形态：建议 vs 可审查的变更",{"type":24,"tag":33,"props":3892,"children":3893},{},[3894],{"type":30,"value":3895},"最好的 AI 输出不是“给我一段代码”，而是：",{"type":24,"tag":39,"props":3897,"children":3898},{},[3899,3904,3909],{"type":24,"tag":43,"props":3900,"children":3901},{},[3902],{"type":30,"value":3903},"改动摘要（做了什么）",{"type":24,"tag":43,"props":3905,"children":3906},{},[3907],{"type":30,"value":3908},"diff 级别的可审查变更",{"type":24,"tag":43,"props":3910,"children":3911},{},[3912],{"type":30,"value":3913},"验收步骤与回滚方案",{"type":24,"tag":2210,"props":3915,"children":3916},{},[],{"type":24,"tag":25,"props":3918,"children":3920},{"id":3919},"一套可落地的团队工作流把风险关住",[3921],{"type":30,"value":3922},"一套可落地的团队工作流（把风险关住）",{"type":24,"tag":33,"props":3924,"children":3925},{},[3926],{"type":30,"value":3927},"下面这套流程，你可以直接写进团队规范：",{"type":24,"tag":98,"props":3929,"children":3931},{"id":3930},"step-1先写任务单geo-友好结构",[3932],{"type":30,"value":3933},"Step 1：先写任务单（GEO 友好结构）",{"type":24,"tag":33,"props":3935,"children":3936},{},[3937],{"type":30,"value":3938},"模板：",{"type":24,"tag":39,"props":3940,"children":3941},{},[3942,3947,3952,3957,3962,3967],{"type":24,"tag":43,"props":3943,"children":3944},{},[3945],{"type":30,"value":3946},"目标：……",{"type":24,"tag":43,"props":3948,"children":3949},{},[3950],{"type":30,"value":3951},"背景：……",{"type":24,"tag":43,"props":3953,"children":3954},{},[3955],{"type":30,"value":3956},"范围：只改这些文件/模块：……",{"type":24,"tag":43,"props":3958,"children":3959},{},[3960],{"type":30,"value":3961},"非目标：不做哪些事情：……",{"type":24,"tag":43,"props":3963,"children":3964},{},[3965],{"type":30,"value":3966},"验收：如何判断完成（可测试/可观察）：……",{"type":24,"tag":43,"props":3968,"children":3969},{},[3970],{"type":30,"value":3971},"回滚：如果失败怎么撤回：……",{"type":24,"tag":98,"props":3973,"children":3975},{"id":3974},"step-2用范围闸门限制-ai",[3976],{"type":30,"value":3977},"Step 2：用“范围闸门”限制 AI",{"type":24,"tag":39,"props":3979,"children":3980},{},[3981,3986],{"type":24,"tag":43,"props":3982,"children":3983},{},[3984],{"type":30,"value":3985},"单文件改动：优先 Cursor 内联编辑",{"type":24,"tag":43,"props":3987,"children":3988},{},[3989],{"type":30,"value":3990},"多文件改动：必须先让 AI 输出“文件清单（≤5）+ 每步验收”",{"type":24,"tag":33,"props":3992,"children":3993},{},[3994],{"type":30,"value":3995},"如果 AI 输出的文件清单超过 5 个：",{"type":24,"tag":39,"props":3997,"children":3998},{},[3999,4004],{"type":24,"tag":43,"props":4000,"children":4001},{},[4002],{"type":30,"value":4003},"不是它太强，是任务太大",{"type":24,"tag":43,"props":4005,"children":4006},{},[4007],{"type":30,"value":4008},"你需要拆任务，而不是继续推进",{"type":24,"tag":98,"props":4010,"children":4012},{"id":4011},"step-3最小回归集10-条",[4013],{"type":30,"value":4014},"Step 3：最小回归集（10 条）",{"type":24,"tag":33,"props":4016,"children":4017},{},[4018,4020,4025],{"type":30,"value":4019},"每次接受改动前必须跑（可参考：",{"type":24,"tag":2062,"props":4021,"children":4022},{"href":2286},[4023],{"type":30,"value":4024},"Cursor 快捷键速查表",{"type":30,"value":4026}," 里的清单）。",{"type":24,"tag":98,"props":4028,"children":4030},{"id":4029},"step-4回滚策略不用等事故才想",[4031],{"type":30,"value":4032},"Step 4：回滚策略（不用等事故才想）",{"type":24,"tag":33,"props":4034,"children":4035},{},[4036],{"type":30,"value":4037},"回滚最常见的两条路：",{"type":24,"tag":39,"props":4039,"children":4040},{},[4041,4046],{"type":24,"tag":43,"props":4042,"children":4043},{},[4044],{"type":30,"value":4045},"git 回滚 commit",{"type":24,"tag":43,"props":4047,"children":4048},{},[4049],{"type":30,"value":4050},"对关键文件保留前版本（至少能快速恢复）",{"type":24,"tag":33,"props":4052,"children":4053},{},[4054],{"type":30,"value":4055},"你需要做到：任何一轮 AI 改动都能在 5 分钟内撤回。",{"type":24,"tag":2210,"props":4057,"children":4058},{},[],{"type":24,"tag":25,"props":4060,"children":4062},{"id":4061},"必交付物对比矩阵可复制",[4063],{"type":30,"value":4064},"必交付物：对比矩阵（可复制）",{"type":24,"tag":33,"props":4066,"children":4067},{},[4068],{"type":30,"value":4069},"下面这张表可以直接贴到你的团队 wiki：",{"type":24,"tag":267,"props":4071,"children":4072},{},[4073,4096],{"type":24,"tag":271,"props":4074,"children":4075},{},[4076],{"type":24,"tag":275,"props":4077,"children":4078},{},[4079,4084,4088,4092],{"type":24,"tag":279,"props":4080,"children":4081},{},[4082],{"type":30,"value":4083},"维度",{"type":24,"tag":279,"props":4085,"children":4086},{},[4087],{"type":30,"value":2294},{"type":24,"tag":279,"props":4089,"children":4090},{},[4091],{"type":30,"value":3536},{"type":24,"tag":279,"props":4093,"children":4094},{},[4095],{"type":30,"value":2291},{"type":24,"tag":295,"props":4097,"children":4098},{},[4099,4122,4145,4168],{"type":24,"tag":275,"props":4100,"children":4101},{},[4102,4107,4112,4117],{"type":24,"tag":302,"props":4103,"children":4104},{},[4105],{"type":30,"value":4106},"强项",{"type":24,"tag":302,"props":4108,"children":4109},{},[4110],{"type":30,"value":4111},"工具链、调试、生态",{"type":24,"tag":302,"props":4113,"children":4114},{},[4115],{"type":30,"value":4116},"补全与局部建议",{"type":24,"tag":302,"props":4118,"children":4119},{},[4120],{"type":30,"value":4121},"项目上下文、多文件落地",{"type":24,"tag":275,"props":4123,"children":4124},{},[4125,4130,4135,4140],{"type":24,"tag":302,"props":4126,"children":4127},{},[4128],{"type":30,"value":4129},"适合任务",{"type":24,"tag":302,"props":4131,"children":4132},{},[4133],{"type":30,"value":4134},"排查、调试、验证",{"type":24,"tag":302,"props":4136,"children":4137},{},[4138],{"type":30,"value":4139},"写一段、补一段",{"type":24,"tag":302,"props":4141,"children":4142},{},[4143],{"type":30,"value":4144},"改一段、改一组文件",{"type":24,"tag":275,"props":4146,"children":4147},{},[4148,4153,4158,4163],{"type":24,"tag":302,"props":4149,"children":4150},{},[4151],{"type":30,"value":4152},"最大风险",{"type":24,"tag":302,"props":4154,"children":4155},{},[4156],{"type":30,"value":4157},"无",{"type":24,"tag":302,"props":4159,"children":4160},{},[4161],{"type":30,"value":4162},"过度依赖建议",{"type":24,"tag":302,"props":4164,"children":4165},{},[4166],{"type":30,"value":4167},"范围漂移、多文件回归",{"type":24,"tag":275,"props":4169,"children":4170},{},[4171,4176,4181,4186],{"type":24,"tag":302,"props":4172,"children":4173},{},[4174],{"type":30,"value":4175},"必须搭配",{"type":24,"tag":302,"props":4177,"children":4178},{},[4179],{"type":30,"value":4180},"规范与检查",{"type":24,"tag":302,"props":4182,"children":4183},{},[4184],{"type":30,"value":4185},"代码评审",{"type":24,"tag":302,"props":4187,"children":4188},{},[4189],{"type":30,"value":4190},"闸门 + 最小回归集",{"type":24,"tag":2210,"props":4192,"children":4193},{},[],{"type":24,"tag":25,"props":4195,"children":4197},{"id":4196},"失败案例多文件看似成功实际埋雷",[4198],{"type":30,"value":4199},"失败案例：多文件“看似成功”，实际埋雷",{"type":24,"tag":33,"props":4201,"children":4202},{},[4203,4208],{"type":24,"tag":77,"props":4204,"children":4205},{},[4206],{"type":30,"value":4207},"现象",{"type":30,"value":4209},"：AI 说“我已经把所有地方都改了”，你也接受了，结果上线后 404 或样式错位。",{"type":24,"tag":33,"props":4211,"children":4212},{},[4213,4218],{"type":24,"tag":77,"props":4214,"children":4215},{},[4216],{"type":30,"value":4217},"复现条件",{"type":30,"value":601},{"type":24,"tag":39,"props":4220,"children":4221},{},[4222,4227,4232],{"type":24,"tag":43,"props":4223,"children":4224},{},[4225],{"type":30,"value":4226},"你给了一个大目标（例如“把所有按钮统一成主题色”）",{"type":24,"tag":43,"props":4228,"children":4229},{},[4230],{"type":30,"value":4231},"它改了组件、样式、甚至主题配置",{"type":24,"tag":43,"props":4233,"children":4234},{},[4235],{"type":30,"value":4236},"你没有按页面模块走一遍，直接合并",{"type":24,"tag":33,"props":4238,"children":4239},{},[4240,4245],{"type":24,"tag":77,"props":4241,"children":4242},{},[4243],{"type":30,"value":4244},"根因",{"type":30,"value":601},{"type":24,"tag":39,"props":4247,"children":4248},{},[4249],{"type":24,"tag":43,"props":4250,"children":4251},{},[4252],{"type":30,"value":4253},"改动范围大，但验收仍按“小改动”的方式做（只看一处）",{"type":24,"tag":33,"props":4255,"children":4256},{},[4257,4262],{"type":24,"tag":77,"props":4258,"children":4259},{},[4260],{"type":30,"value":4261},"修复",{"type":30,"value":601},{"type":24,"tag":39,"props":4264,"children":4265},{},[4266,4271,4276],{"type":24,"tag":43,"props":4267,"children":4268},{},[4269],{"type":30,"value":4270},"强制把任务拆成“模块级目标”：Hero、Feature、Pricing、Form",{"type":24,"tag":43,"props":4272,"children":4273},{},[4274],{"type":30,"value":4275},"每个模块改完就验收一次",{"type":24,"tag":43,"props":4277,"children":4278},{},[4279],{"type":30,"value":4280},"验收通过再进入下一个模块",{"type":24,"tag":2210,"props":4282,"children":4283},{},[],{"type":24,"tag":25,"props":4285,"children":4286},{"id":1399},[4287],{"type":30,"value":1402},{"type":24,"tag":98,"props":4289,"children":4291},{"id":4290},"q1我已经用了-cursor为什么还要用-copilot",[4292],{"type":30,"value":4293},"Q1：我已经用了 Cursor，为什么还要用 Copilot？",{"type":24,"tag":33,"props":4295,"children":4296},{},[4297],{"type":30,"value":4298},"因为“补全”这种高频低风险任务，Copilot 的交互成本更低；Cursor 更适合需要解释与约束的改动。",{"type":24,"tag":98,"props":4300,"children":4302},{"id":4301},"q2什么时候应该完全不用-ai",[4303],{"type":30,"value":4304},"Q2：什么时候应该完全不用 AI？",{"type":24,"tag":33,"props":4306,"children":4307},{},[4308],{"type":30,"value":4309},"当你无法定义验收标准时。比如“更高级”“更好看”这种目标，先做信息结构与设计规则，再让 AI 帮你落地局部。",{"type":24,"tag":2210,"props":4311,"children":4312},{},[],{"type":24,"tag":25,"props":4314,"children":4315},{"id":2052},[4316],{"type":30,"value":2052},{"type":24,"tag":39,"props":4318,"children":4319},{},[4320,4329,4338,4347],{"type":24,"tag":43,"props":4321,"children":4322},{},[4323,4325],{"type":30,"value":4324},"Cursor 入门：",{"type":24,"tag":2062,"props":4326,"children":4327},{"href":2374},[4328],{"type":30,"value":2377},{"type":24,"tag":43,"props":4330,"children":4331},{},[4332,4334],{"type":30,"value":4333},"Cursor 进阶：",{"type":24,"tag":2062,"props":4335,"children":4336},{"href":2385},[4337],{"type":30,"value":2388},{"type":24,"tag":43,"props":4339,"children":4340},{},[4341,4343],{"type":30,"value":4342},"规则配置：",{"type":24,"tag":2062,"props":4344,"children":4345},{"href":2396},[4346],{"type":30,"value":2399},{"type":24,"tag":43,"props":4348,"children":4349},{},[4350,4352],{"type":30,"value":4351},"Copilot 实战：",{"type":24,"tag":2062,"props":4353,"children":4355},{"href":4354},"/topics/ai/github-copilot-tips",[4356],{"type":30,"value":4357},"GitHub Copilot 实用技巧",{"title":7,"searchDepth":2232,"depth":2232,"links":4359},[4360,4361,4362,4367,4373,4374,4375,4379],{"id":3508,"depth":2235,"text":3511},{"id":3558,"depth":2235,"text":3561},{"id":3800,"depth":2235,"text":3803,"children":4363},[4364,4365,4366],{"id":3806,"depth":2232,"text":3809},{"id":3843,"depth":2232,"text":3846},{"id":3887,"depth":2232,"text":3890},{"id":3919,"depth":2235,"text":3922,"children":4368},[4369,4370,4371,4372],{"id":3930,"depth":2232,"text":3933},{"id":3974,"depth":2232,"text":3977},{"id":4011,"depth":2232,"text":4014},{"id":4029,"depth":2232,"text":4032},{"id":4061,"depth":2235,"text":4064},{"id":4196,"depth":2235,"text":4199},{"id":1399,"depth":2235,"text":1402,"children":4376},[4377,4378],{"id":4290,"depth":2232,"text":4293},{"id":4301,"depth":2232,"text":4304},{"id":2052,"depth":2235,"text":2052},"content:topics:ai:cursor-vs-copilot-vscode-workflow.md","topics/ai/cursor-vs-copilot-vscode-workflow.md","topics/ai/cursor-vs-copilot-vscode-workflow",{"_path":4384,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":4385,"description":4386,"date":4387,"topic":5,"author":11,"tags":4388,"image":4393,"featured":2123,"readingTime":3449,"body":4394,"_type":2278,"_id":5040,"_source":2280,"_file":5041,"_stem":5042,"_extension":2283},"/topics/ai/ai-debugging-troubleshooting-guide","AI 辅助调试与问题排查：让 AI 成为你的调试搭档","深入探讨如何利用 AI 工具提升调试效率，包括错误信息分析、日志解读、性能问题定位、复杂 bug 排查等实战场景，构建 AI 驱动的调试工作流。","2026-01-18",[4389,4390,4391,2295,4392],"AI 调试","问题排查","Debug","错误处理","/images/topics/ai/ai-debugging-guide.jpg",{"type":21,"children":4395,"toc":5011},[4396,4402,4408,4413,4418,4423,4429,4435,4440,4448,4476,4484,4507,4513,4523,4532,4540,4548,4581,4589,4619,4632,4640,4645,4653,4661,4670,4676,4684,4695,4703,4712,4718,4724,4729,4738,4744,4749,4758,4764,4770,4779,4785,4794,4800,4811,4817,4823,4832,4838,4847,4853,4859,4867,4873,4882,4890,4898,4901,4907,4912,4931,4943,4946,4952,4957,4966,4971,4974,4980,4985,5003],{"type":24,"tag":25,"props":4397,"children":4399},{"id":4398},"ai-辅助调试与问题排查",[4400],{"type":30,"value":4401},"AI 辅助调试与问题排查",{"type":24,"tag":25,"props":4403,"children":4405},{"id":4404},"引言调试的痛与-ai-的解药",[4406],{"type":30,"value":4407},"引言：调试的痛与 AI 的解药",{"type":24,"tag":33,"props":4409,"children":4410},{},[4411],{"type":30,"value":4412},"调试是每个程序员的日常，也是最消耗时间和精力的工作之一。我们都有过这样的经历：盯着一个莫名其妙的错误信息，翻遍 Stack Overflow，尝试各种方案，几个小时后才发现是一个愚蠢的拼写错误。",{"type":24,"tag":33,"props":4414,"children":4415},{},[4416],{"type":30,"value":4417},"AI 工具的出现，正在改变调试的方式。不是替代你的思考，而是加速你的分析过程——帮你快速理解错误、缩小排查范围、验证假设。",{"type":24,"tag":33,"props":4419,"children":4420},{},[4421],{"type":30,"value":4422},"这篇文章分享我在实际项目中使用 AI 辅助调试的经验和方法论。",{"type":24,"tag":25,"props":4424,"children":4426},{"id":4425},"第一部分建立-ai-调试的思维模型",[4427],{"type":30,"value":4428},"第一部分：建立 AI 调试的思维模型",{"type":24,"tag":98,"props":4430,"children":4432},{"id":4431},"_11-ai-在调试中的角色",[4433],{"type":30,"value":4434},"1.1 AI 在调试中的角色",{"type":24,"tag":33,"props":4436,"children":4437},{},[4438],{"type":30,"value":4439},"把 AI 想象成一个经验丰富但不了解你项目的高级工程师。它：",{"type":24,"tag":33,"props":4441,"children":4442},{},[4443],{"type":24,"tag":77,"props":4444,"children":4445},{},[4446],{"type":30,"value":4447},"擅长的事情：",{"type":24,"tag":39,"props":4449,"children":4450},{},[4451,4456,4461,4466,4471],{"type":24,"tag":43,"props":4452,"children":4453},{},[4454],{"type":30,"value":4455},"解读错误信息的含义",{"type":24,"tag":43,"props":4457,"children":4458},{},[4459],{"type":30,"value":4460},"提供可能的原因列表",{"type":24,"tag":43,"props":4462,"children":4463},{},[4464],{"type":30,"value":4465},"给出排查方向建议",{"type":24,"tag":43,"props":4467,"children":4468},{},[4469],{"type":30,"value":4470},"解释复杂的技术概念",{"type":24,"tag":43,"props":4472,"children":4473},{},[4474],{"type":30,"value":4475},"生成调试代码片段",{"type":24,"tag":33,"props":4477,"children":4478},{},[4479],{"type":24,"tag":77,"props":4480,"children":4481},{},[4482],{"type":30,"value":4483},"不擅长的事情：",{"type":24,"tag":39,"props":4485,"children":4486},{},[4487,4492,4497,4502],{"type":24,"tag":43,"props":4488,"children":4489},{},[4490],{"type":30,"value":4491},"了解你的业务逻辑",{"type":24,"tag":43,"props":4493,"children":4494},{},[4495],{"type":30,"value":4496},"知道你的代码历史",{"type":24,"tag":43,"props":4498,"children":4499},{},[4500],{"type":30,"value":4501},"理解项目特定的约定",{"type":24,"tag":43,"props":4503,"children":4504},{},[4505],{"type":30,"value":4506},"做出架构级判断",{"type":24,"tag":98,"props":4508,"children":4510},{"id":4509},"_12-有效提问的结构",[4511],{"type":30,"value":4512},"1.2 有效提问的结构",{"type":24,"tag":645,"props":4514,"children":4518},{"code":4515,"language":2278,"meta":7,"className":4516},"## 高效的调试提问模板\n\n**问题描述**\n[简洁描述遇到的问题]\n\n**错误信息**\n",[4517],"language-markdown",[4519],{"type":24,"tag":653,"props":4520,"children":4521},{"__ignoreMap":7},[4522],{"type":30,"value":4515},{"type":24,"tag":33,"props":4524,"children":4525},{},[4526],{"type":24,"tag":4527,"props":4528,"children":4529},"span",{},[4530],{"type":30,"value":4531},"完整的错误信息，不要截断",{"type":24,"tag":645,"props":4533,"children":4535},{"code":4534},"\n**相关代码**\n```javascript\n[精简但完整的相关代码]\n",[4536],{"type":24,"tag":653,"props":4537,"children":4538},{"__ignoreMap":7},[4539],{"type":30,"value":4534},{"type":24,"tag":33,"props":4541,"children":4542},{},[4543],{"type":24,"tag":77,"props":4544,"children":4545},{},[4546],{"type":30,"value":4547},"环境信息",{"type":24,"tag":39,"props":4549,"children":4550},{},[4551,4561,4571],{"type":24,"tag":43,"props":4552,"children":4553},{},[4554,4556],{"type":30,"value":4555},"运行环境：",{"type":24,"tag":4527,"props":4557,"children":4558},{},[4559],{"type":30,"value":4560},"Node 版本/浏览器版本",{"type":24,"tag":43,"props":4562,"children":4563},{},[4564,4566],{"type":30,"value":4565},"框架版本：",{"type":24,"tag":4527,"props":4567,"children":4568},{},[4569],{"type":30,"value":4570},"相关框架版本",{"type":24,"tag":43,"props":4572,"children":4573},{},[4574,4576],{"type":30,"value":4575},"操作系统：",{"type":24,"tag":4527,"props":4577,"children":4578},{},[4579],{"type":30,"value":4580},"如果相关",{"type":24,"tag":33,"props":4582,"children":4583},{},[4584],{"type":24,"tag":77,"props":4585,"children":4586},{},[4587],{"type":30,"value":4588},"已尝试的方案",{"type":24,"tag":39,"props":4590,"children":4591},{},[4592,4606],{"type":24,"tag":43,"props":4593,"children":4594},{},[4595,4600,4601],{"type":24,"tag":4527,"props":4596,"children":4597},{},[4598],{"type":30,"value":4599},"方案1",{"type":30,"value":601},{"type":24,"tag":4527,"props":4602,"children":4603},{},[4604],{"type":30,"value":4605},"结果",{"type":24,"tag":43,"props":4607,"children":4608},{},[4609,4614,4615],{"type":24,"tag":4527,"props":4610,"children":4611},{},[4612],{"type":30,"value":4613},"方案2",{"type":30,"value":601},{"type":24,"tag":4527,"props":4616,"children":4617},{},[4618],{"type":30,"value":4605},{"type":24,"tag":33,"props":4620,"children":4621},{},[4622,4627],{"type":24,"tag":77,"props":4623,"children":4624},{},[4625],{"type":30,"value":4626},"期望的结果",{"type":24,"tag":4527,"props":4628,"children":4629},{},[4630],{"type":30,"value":4631},"描述期望的行为",{"type":24,"tag":645,"props":4633,"children":4635},{"code":4634},"\n### 1.3 分级调试策略\n\n",[4636],{"type":24,"tag":653,"props":4637,"children":4638},{"__ignoreMap":7},[4639],{"type":30,"value":4634},{"type":24,"tag":33,"props":4641,"children":4642},{},[4643],{"type":30,"value":4644},"┌───────────────────────────────────────────────────────────┐\n│                    AI 辅助调试决策树                        │\n├───────────────────────────────────────────────────────────┤\n│                                                           │\n│  Level 1：简单错误（5分钟内解决）                           │\n│  ├── 语法错误、拼写错误                                    │\n│  ├── 方法：直接复制错误信息给 AI                           │\n│  └── 工具：Copilot Chat / ChatGPT                        │\n│                                                           │\n│  Level 2：中等复杂度（30分钟内解决）                        │\n│  ├── 类型错误、逻辑错误、API 使用错误                      │\n│  ├── 方法：提供错误信息 + 相关代码 + 上下文                 │\n│  └── 工具：Cursor Chat / Claude                          │\n│                                                           │\n│  Level 3：复杂问题（需要深入分析）                          │\n│  ├── 竞态条件、内存泄漏、性能问题                          │\n│  ├── 方法：详细描述场景 + 提供多个文件 + 讨论               │\n│  └── 工具：Cursor Composer / 专门的 AI 会话                │\n│                                                           │\n│  Level 4：架构级问题                                       │\n│  ├── 设计缺陷、技术债务                                    │\n│  ├── 方法：AI 辅助分析 + 人工判断                          │\n│  └── 工具：与团队讨论 + AI 作为顾问                        │\n│                                                           │\n└───────────────────────────────────────────────────────────┘",{"type":24,"tag":645,"props":4646,"children":4648},{"code":4647},"\n## 第二部分：错误信息分析\n\n### 2.1 前端错误分析\n\n**场景 1：React 错误边界触发**\n\n```typescript\n// 错误信息：\n// Error: Hydration failed because the initial UI does not match \n// what was rendered on the server.\n\n// 提问方式：\n/**\n * 我在 Next.js 14 App Router 项目中遇到这个错误：\n * \n * Error: Hydration failed because the initial UI does not match \n * what was rendered on the server.\n * \n * 相关代码：\n */\nfunction UserStatus() {\n  const [isLoggedIn, setIsLoggedIn] = useState(false);\n  \n  useEffect(() => {\n    setIsLoggedIn(localStorage.getItem('token') !== null);\n  }, []);\n  \n  return \u003Cdiv>{isLoggedIn ? '已登录' : '未登录'}\u003C/div>;\n}\n\n// AI 会分析出：\n// 1. 服务端渲染时 localStorage 不可用，默认 false\n// 2. 客户端 hydration 时可能是 true\n// 3. 导致服务端和客户端渲染结果不一致\n\n// AI 建议的解决方案：\nfunction UserStatus() {\n  const [isLoggedIn, setIsLoggedIn] = useState\u003Cboolean | null>(null);\n  \n  useEffect(() => {\n    setIsLoggedIn(localStorage.getItem('token') !== null);\n  }, []);\n  \n  // 初始状态显示加载中，避免 hydration 不匹配\n  if (isLoggedIn === null) {\n    return \u003Cdiv>加载中...\u003C/div>;\n  }\n  \n  return \u003Cdiv>{isLoggedIn ? '已登录' : '未登录'}\u003C/div>;\n}\n",[4649],{"type":24,"tag":653,"props":4650,"children":4651},{"__ignoreMap":7},[4652],{"type":30,"value":4647},{"type":24,"tag":33,"props":4654,"children":4655},{},[4656],{"type":24,"tag":77,"props":4657,"children":4658},{},[4659],{"type":30,"value":4660},"场景 2：Vue 响应式警告",{"type":24,"tag":645,"props":4662,"children":4665},{"code":4663,"language":650,"meta":7,"className":4664},"// 警告信息：\n// [Vue warn]: Property \"xxx\" was accessed during render but is not \n// defined on instance.\n\n// 提问方式：\n/**\n * Vue 3 项目中出现这个警告：\n * [Vue warn]: Property \"userInfo\" was accessed during render \n * but is not defined on instance.\n * \n * 组件代码：\n */\n\u003Ctemplate>\n  \u003Cdiv>{{ userInfo.name }}\u003C/div>\n\u003C/template>\n\n\u003Cscript setup>\nconst { data: userInfo } = await useFetch('/api/user');\n\u003C/script>\n\n// AI 分析：\n// 1. useFetch 是异步的，初始渲染时 userInfo 可能是 undefined\n// 2. 直接访问 userInfo.name 会报错\n\n// AI 建议：\n\u003Ctemplate>\n  \u003Cdiv v-if=\"userInfo\">{{ userInfo.name }}\u003C/div>\n  \u003Cdiv v-else>加载中...\u003C/div>\n\u003C/template>\n\n\u003Cscript setup>\nconst { data: userInfo, pending } = await useFetch('/api/user');\n\u003C/script>\n",[648],[4666],{"type":24,"tag":653,"props":4667,"children":4668},{"__ignoreMap":7},[4669],{"type":30,"value":4663},{"type":24,"tag":98,"props":4671,"children":4673},{"id":4672},"_22-后端错误分析",[4674],{"type":30,"value":4675},"2.2 后端错误分析",{"type":24,"tag":33,"props":4677,"children":4678},{},[4679],{"type":24,"tag":77,"props":4680,"children":4681},{},[4682],{"type":30,"value":4683},"场景 1：Node.js 内存问题",{"type":24,"tag":645,"props":4685,"children":4690},{"code":4686,"language":4687,"meta":7,"className":4688},"// 错误信息：\n// FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - \n// JavaScript heap out of memory\n\n// 提问方式（包含上下文）：\n/**\n * Node.js 服务运行几小时后崩溃，错误信息：\n * FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - \n * JavaScript heap out of memory\n * \n * 服务功能：处理 CSV 文件上传，每次约 100MB\n * \n * 处理代码：\n */\nasync function processCSV(filePath) {\n  const content = fs.readFileSync(filePath, 'utf-8');\n  const rows = content.split('\\n');\n  const results = [];\n  \n  for (const row of rows) {\n    const processed = await processRow(row);\n    results.push(processed);\n  }\n  \n  return results;\n}\n\n// AI 分析会指出：\n// 1. 一次性读取整个文件到内存\n// 2. 所有处理结果累积在 results 数组\n// 3. 建议使用流式处理\n\n// AI 提供的优化方案：\nconst { createReadStream } = require('fs');\nconst { createInterface } = require('readline');\n\nasync function processCSVStream(filePath, onRow) {\n  const fileStream = createReadStream(filePath);\n  const rl = createInterface({\n    input: fileStream,\n    crlfDelay: Infinity\n  });\n  \n  let count = 0;\n  for await (const line of rl) {\n    await onRow(line);\n    count++;\n    \n    // 每处理 1000 行，给 GC 机会运行\n    if (count % 1000 === 0) {\n      await new Promise(r => setImmediate(r));\n    }\n  }\n}\n","javascript",[4689],"language-javascript",[4691],{"type":24,"tag":653,"props":4692,"children":4693},{"__ignoreMap":7},[4694],{"type":30,"value":4686},{"type":24,"tag":33,"props":4696,"children":4697},{},[4698],{"type":24,"tag":77,"props":4699,"children":4700},{},[4701],{"type":30,"value":4702},"场景 2：数据库连接问题",{"type":24,"tag":645,"props":4704,"children":4707},{"code":4705,"language":650,"meta":7,"className":4706},"// 错误信息：\n// Error: Connection pool exhausted - \n// max connections (10) already in use\n\n// 提问方式：\n/**\n * PostgreSQL 连接池耗尽错误，高并发时出现：\n * Error: Connection pool exhausted\n * \n * 当前配置：\n * - max connections: 10\n * - 并发请求: 约 100/秒\n * \n * 数据库调用代码：\n */\nasync function getUserData(userId: string) {\n  const client = await pool.connect();\n  try {\n    const user = await client.query('SELECT * FROM users WHERE id = $1', [userId]);\n    const orders = await client.query('SELECT * FROM orders WHERE user_id = $1', [userId]);\n    const payments = await client.query('SELECT * FROM payments WHERE user_id = $1', [userId]);\n    return { user: user.rows[0], orders: orders.rows, payments: payments.rows };\n  } finally {\n    client.release();\n  }\n}\n\n// AI 会分析出多个可能原因并给出综合方案\n",[648],[4708],{"type":24,"tag":653,"props":4709,"children":4710},{"__ignoreMap":7},[4711],{"type":30,"value":4705},{"type":24,"tag":25,"props":4713,"children":4715},{"id":4714},"第三部分日志分析与问题定位",[4716],{"type":30,"value":4717},"第三部分：日志分析与问题定位",{"type":24,"tag":98,"props":4719,"children":4721},{"id":4720},"_31-结构化日志分析",[4722],{"type":30,"value":4723},"3.1 结构化日志分析",{"type":24,"tag":33,"props":4725,"children":4726},{},[4727],{"type":30,"value":4728},"当面对大量日志时，让 AI 帮你快速定位问题：",{"type":24,"tag":645,"props":4730,"children":4733},{"code":4731,"language":4687,"meta":7,"className":4732},"// 提问示例：\n/**\n * 分析以下日志，找出导致请求失败的原因：\n * \n * 日志片段：\n */\nconst logs = `\n2024-01-15 10:23:45.123 INFO  [req-abc123] 收到请求 POST /api/order\n2024-01-15 10:23:45.125 DEBUG [req-abc123] 用户认证通过 userId=u001\n2024-01-15 10:23:45.130 DEBUG [req-abc123] 开始库存检查 productId=p001\n2024-01-15 10:23:45.145 DEBUG [req-abc123] 库存检查通过 available=50\n2024-01-15 10:23:45.150 DEBUG [req-abc123] 开始创建订单\n2024-01-15 10:23:45.200 DEBUG [req-abc123] 数据库连接获取成功\n2024-01-15 10:23:45.250 ERROR [req-abc123] 订单创建失败 error=\"deadlock detected\"\n2024-01-15 10:23:45.251 WARN  [req-abc123] 事务回滚\n2024-01-15 10:23:45.255 INFO  [req-abc123] 响应 500 耗时 132ms\n`;\n\n// AI 分析结果会包括：\n// 1. 问题定位：数据库死锁\n// 2. 可能原因：并发订单创建导致锁竞争\n// 3. 排查建议：检查事务隔离级别、锁顺序\n",[4689],[4734],{"type":24,"tag":653,"props":4735,"children":4736},{"__ignoreMap":7},[4737],{"type":30,"value":4731},{"type":24,"tag":98,"props":4739,"children":4741},{"id":4740},"_32-创建调试日志",[4742],{"type":30,"value":4743},"3.2 创建调试日志",{"type":24,"tag":33,"props":4745,"children":4746},{},[4747],{"type":30,"value":4748},"让 AI 帮你生成调试用的日志代码：",{"type":24,"tag":645,"props":4750,"children":4753},{"code":4751,"language":650,"meta":7,"className":4752},"// 请求：\n// \"为这个函数添加详细的调试日志，包括入参、关键步骤、耗时和结果\"\n\n// 原代码：\nasync function processOrder(order: Order): Promise\u003COrderResult> {\n  const inventory = await checkInventory(order.items);\n  const payment = await processPayment(order.userId, order.total);\n  const result = await createOrder(order, payment.transactionId);\n  return result;\n}\n\n// AI 生成的带日志版本：\nasync function processOrder(order: Order): Promise\u003COrderResult> {\n  const requestId = generateRequestId();\n  const startTime = performance.now();\n  \n  logger.info({\n    requestId,\n    event: 'order_processing_start',\n    orderId: order.id,\n    userId: order.userId,\n    itemCount: order.items.length,\n    total: order.total\n  });\n  \n  try {\n    // 库存检查\n    const inventoryStart = performance.now();\n    const inventory = await checkInventory(order.items);\n    logger.debug({\n      requestId,\n      event: 'inventory_check_complete',\n      duration: performance.now() - inventoryStart,\n      available: inventory.allAvailable\n    });\n    \n    // 支付处理\n    const paymentStart = performance.now();\n    const payment = await processPayment(order.userId, order.total);\n    logger.debug({\n      requestId,\n      event: 'payment_complete',\n      duration: performance.now() - paymentStart,\n      transactionId: payment.transactionId\n    });\n    \n    // 创建订单\n    const createStart = performance.now();\n    const result = await createOrder(order, payment.transactionId);\n    logger.debug({\n      requestId,\n      event: 'order_created',\n      duration: performance.now() - createStart,\n      resultOrderId: result.orderId\n    });\n    \n    logger.info({\n      requestId,\n      event: 'order_processing_complete',\n      duration: performance.now() - startTime,\n      success: true\n    });\n    \n    return result;\n  } catch (error) {\n    logger.error({\n      requestId,\n      event: 'order_processing_failed',\n      duration: performance.now() - startTime,\n      error: error.message,\n      stack: error.stack\n    });\n    throw error;\n  }\n}\n",[648],[4754],{"type":24,"tag":653,"props":4755,"children":4756},{"__ignoreMap":7},[4757],{"type":30,"value":4751},{"type":24,"tag":25,"props":4759,"children":4761},{"id":4760},"第四部分性能问题排查",[4762],{"type":30,"value":4763},"第四部分：性能问题排查",{"type":24,"tag":98,"props":4765,"children":4767},{"id":4766},"_41-前端性能分析",[4768],{"type":30,"value":4769},"4.1 前端性能分析",{"type":24,"tag":645,"props":4771,"children":4774},{"code":4772,"language":650,"meta":7,"className":4773},"// 场景：页面加载慢，需要分析原因\n\n// 提问方式：\n/**\n * 页面首屏加载需要 5 秒，以下是 Performance API 数据，\n * 请分析性能瓶颈：\n */\nconst performanceData = {\n  // Navigation Timing\n  dns: 50,           // DNS 查询\n  tcp: 100,          // TCP 连接\n  ttfb: 800,         // 首字节时间\n  download: 200,     // 文档下载\n  domParsing: 300,   // DOM 解析\n  domContentLoaded: 1500,\n  load: 5000,\n  \n  // Resource Timing (主要资源)\n  resources: [\n    { name: 'main.js', size: '2.5MB', duration: 1200 },\n    { name: 'vendor.js', size: '1.8MB', duration: 900 },\n    { name: 'styles.css', size: '500KB', duration: 300 },\n    { name: 'hero-image.jpg', size: '3MB', duration: 1500 },\n  ],\n  \n  // Long Tasks\n  longTasks: [\n    { startTime: 1600, duration: 800, name: 'script-evaluation' },\n    { startTime: 2500, duration: 400, name: 'layout' }\n  ]\n};\n\n// AI 会分析出：\n// 1. JS bundle 过大（4.3MB），需要代码分割\n// 2. 图片未优化（3MB 的 hero 图片）\n// 3. 存在长任务阻塞主线程\n// 并给出具体优化建议\n",[648],[4775],{"type":24,"tag":653,"props":4776,"children":4777},{"__ignoreMap":7},[4778],{"type":30,"value":4772},{"type":24,"tag":98,"props":4780,"children":4782},{"id":4781},"_42-内存泄漏排查",[4783],{"type":30,"value":4784},"4.2 内存泄漏排查",{"type":24,"tag":645,"props":4786,"children":4789},{"code":4787,"language":650,"meta":7,"className":4788},"// 场景：应用运行一段时间后变卡\n\n// 提问方式：\n/**\n * React 应用运行一段时间后内存持续增长，以下是 Heap Snapshot 对比：\n * \n * 初始状态：50MB\n * 运行 1 小时后：150MB\n * 运行 2 小时后：280MB\n * \n * Retained objects 增长最快的：\n * - (closure) - 增长 50MB\n * - HTMLDivElement - 增长 30MB\n * - Array - 增长 20MB\n * \n * 可疑代码：\n */\nfunction DataDashboard() {\n  const [data, setData] = useState([]);\n  const chartRef = useRef(null);\n  \n  useEffect(() => {\n    // 每秒刷新数据\n    const interval = setInterval(async () => {\n      const newData = await fetchLatestData();\n      setData(prev => [...prev, ...newData]);  // 数据不断累积\n    }, 1000);\n    \n    // 初始化图表\n    const chart = new Chart(chartRef.current, {\n      // 配置...\n    });\n    \n    // 没有 cleanup！\n  }, []);\n  \n  return \u003Ccanvas ref={chartRef} />;\n}\n\n// AI 会指出：\n// 1. interval 没有清理\n// 2. Chart 实例没有销毁\n// 3. data 无限增长\n// 并提供修复代码\n",[648],[4790],{"type":24,"tag":653,"props":4791,"children":4792},{"__ignoreMap":7},[4793],{"type":30,"value":4787},{"type":24,"tag":98,"props":4795,"children":4797},{"id":4796},"_43-数据库查询优化",[4798],{"type":30,"value":4799},"4.3 数据库查询优化",{"type":24,"tag":645,"props":4801,"children":4806},{"code":4802,"language":4803,"meta":7,"className":4804},"-- 场景：查询很慢，让 AI 分析执行计划\n\n-- 提问方式：\n-- 以下查询在数据量大时很慢（orders 表 1000 万行），\n-- 执行计划如下，请分析并优化：\n\nEXPLAIN ANALYZE\nSELECT o.*, u.name, u.email\nFROM orders o\nJOIN users u ON o.user_id = u.id\nWHERE o.status = 'pending'\n  AND o.created_at > '2024-01-01'\nORDER BY o.created_at DESC\nLIMIT 20;\n\n-- 执行计划：\n/*\nSort  (cost=156847.23..157847.23 rows=400000 width=250)\n  Sort Key: o.created_at DESC\n  ->  Hash Join  (cost=1500.00..89847.23 rows=400000 width=250)\n        Hash Cond: (o.user_id = u.id)\n        ->  Seq Scan on orders o  (cost=0.00..85000.00 rows=400000)\n              Filter: ((status = 'pending') AND (created_at > '2024-01-01'))\n        ->  Hash  (cost=1000.00..1000.00 rows=50000 width=100)\n              ->  Seq Scan on users u  (cost=0.00..1000.00 rows=50000)\nPlanning Time: 0.5 ms\nExecution Time: 3500 ms\n*/\n\n-- AI 会分析出问题并建议：\n-- 1. orders 表全表扫描 - 需要复合索引\n-- 2. 建议创建索引：\nCREATE INDEX idx_orders_status_created ON orders(status, created_at DESC);\n\n-- 3. 如果 status 选择性不高，考虑部分索引：\nCREATE INDEX idx_orders_pending ON orders(created_at DESC) \nWHERE status = 'pending';\n","sql",[4805],"language-sql",[4807],{"type":24,"tag":653,"props":4808,"children":4809},{"__ignoreMap":7},[4810],{"type":30,"value":4802},{"type":24,"tag":25,"props":4812,"children":4814},{"id":4813},"第五部分复杂-bug-排查",[4815],{"type":30,"value":4816},"第五部分：复杂 Bug 排查",{"type":24,"tag":98,"props":4818,"children":4820},{"id":4819},"_51-竞态条件",[4821],{"type":30,"value":4822},"5.1 竞态条件",{"type":24,"tag":645,"props":4824,"children":4827},{"code":4825,"language":650,"meta":7,"className":4826},"// 场景：偶发的数据不一致问题\n\n// 提问方式：\n/**\n * 用户反馈偶尔看到错误的账户余额，但刷新后正常。\n * 怀疑是竞态条件，以下是相关代码：\n */\nasync function updateBalance(userId: string, amount: number) {\n  // 读取当前余额\n  const user = await db.users.findOne({ id: userId });\n  const newBalance = user.balance + amount;\n  \n  // 更新余额\n  await db.users.update({ id: userId }, { balance: newBalance });\n  \n  // 记录交易\n  await db.transactions.create({\n    userId,\n    amount,\n    balanceAfter: newBalance,\n    createdAt: new Date()\n  });\n  \n  return newBalance;\n}\n\n// 并发调用场景：\n// 用户同时发起两笔交易：+100 和 -50\n// 期望结果：原余额 1000 → 1050\n// 实际可能：原余额 1000 → 1100 或 950\n\n// AI 会分析竞态条件并提供解决方案：\nasync function updateBalanceAtomic(userId: string, amount: number) {\n  // 方案 1：使用数据库原子操作\n  const result = await db.users.findOneAndUpdate(\n    { id: userId },\n    { $inc: { balance: amount } },\n    { returnDocument: 'after' }\n  );\n  \n  await db.transactions.create({\n    userId,\n    amount,\n    balanceAfter: result.balance,\n    createdAt: new Date()\n  });\n  \n  return result.balance;\n}\n\n// 方案 2：使用乐观锁\nasync function updateBalanceOptimistic(userId: string, amount: number) {\n  const maxRetries = 3;\n  \n  for (let i = 0; i \u003C maxRetries; i++) {\n    const user = await db.users.findOne({ id: userId });\n    const newBalance = user.balance + amount;\n    \n    const updated = await db.users.updateOne(\n      { id: userId, version: user.version },\n      { balance: newBalance, version: user.version + 1 }\n    );\n    \n    if (updated.modifiedCount === 1) {\n      await db.transactions.create({...});\n      return newBalance;\n    }\n    \n    // 版本冲突，重试\n    await sleep(10 * (i + 1));\n  }\n  \n  throw new Error('Update failed after retries');\n}\n",[648],[4828],{"type":24,"tag":653,"props":4829,"children":4830},{"__ignoreMap":7},[4831],{"type":30,"value":4825},{"type":24,"tag":98,"props":4833,"children":4835},{"id":4834},"_52-分布式系统问题",[4836],{"type":30,"value":4837},"5.2 分布式系统问题",{"type":24,"tag":645,"props":4839,"children":4842},{"code":4840,"language":650,"meta":7,"className":4841},"// 场景：微服务间的数据不一致\n\n// 提问方式：\n/**\n * 订单服务和库存服务偶尔出现数据不一致：\n * - 订单显示已创建\n * - 库存未扣减\n * \n * 当前流程：\n */\n// Order Service\nasync function createOrder(orderData) {\n  // 1. 调用库存服务扣减库存\n  await inventoryService.deduct(orderData.items);\n  \n  // 2. 创建订单\n  const order = await orderRepository.create(orderData);\n  \n  // 3. 发送订单创建事件\n  await eventBus.publish('order.created', order);\n  \n  return order;\n}\n\n// 问题分析：如果步骤 2 或 3 失败，库存已经扣减但订单未创建\n\n// AI 会建议使用 Saga 模式或事务发件箱模式\n",[648],[4843],{"type":24,"tag":653,"props":4844,"children":4845},{"__ignoreMap":7},[4846],{"type":30,"value":4840},{"type":24,"tag":25,"props":4848,"children":4850},{"id":4849},"第六部分ai-调试工作流",[4851],{"type":30,"value":4852},"第六部分：AI 调试工作流",{"type":24,"tag":98,"props":4854,"children":4856},{"id":4855},"_61-我的调试流程",[4857],{"type":30,"value":4858},"6.1 我的调试流程",{"type":24,"tag":645,"props":4860,"children":4862},{"code":4861},"┌────────────────────────────────────────────────────────────┐\n│                    AI 辅助调试工作流                         │\n├────────────────────────────────────────────────────────────┤\n│                                                            │\n│  Step 1: 问题收集                                          │\n│  ├── 复制完整错误信息                                       │\n│  ├── 截图相关日志                                          │\n│  └── 记录复现步骤                                          │\n│                                                            │\n│  Step 2: 快速分析                                          │\n│  ├── 将错误信息发给 AI                                      │\n│  ├── 获取可能原因列表                                       │\n│  └── 评估哪些最可能                                         │\n│                                                            │\n│  Step 3: 深入调查                                          │\n│  ├── 根据 AI 建议添加日志/断点                              │\n│  ├── 收集更多信息                                          │\n│  └── 再次询问 AI（带新信息）                                │\n│                                                            │\n│  Step 4: 验证修复                                          │\n│  ├── AI 生成修复代码                                        │\n│  ├── 人工审查确认                                          │\n│  └── 测试验证                                               │\n│                                                            │\n│  Step 5: 预防措施                                          │\n│  ├── AI 建议类似问题的预防方法                              │\n│  ├── 添加相关测试用例                                       │\n│  └── 更新文档/知识库                                        │\n│                                                            │\n└────────────────────────────────────────────────────────────┘\n",[4863],{"type":24,"tag":653,"props":4864,"children":4865},{"__ignoreMap":7},[4866],{"type":30,"value":4861},{"type":24,"tag":98,"props":4868,"children":4870},{"id":4869},"_62-调试对话模板",[4871],{"type":30,"value":4872},"6.2 调试对话模板",{"type":24,"tag":645,"props":4874,"children":4877},{"code":4875,"language":2278,"meta":7,"className":4876},"## 第一轮：问题描述\n\n我遇到了一个问题：[简述问题]\n\n错误信息：\n",[4517],[4878],{"type":24,"tag":653,"props":4879,"children":4880},{"__ignoreMap":7},[4881],{"type":30,"value":4875},{"type":24,"tag":33,"props":4883,"children":4884},{},[4885],{"type":24,"tag":4527,"props":4886,"children":4887},{},[4888],{"type":30,"value":4889},"粘贴完整错误",{"type":24,"tag":645,"props":4891,"children":4893},{"code":4892},"\n相关代码：\n```javascript\n[粘贴代码]\n",[4894],{"type":24,"tag":653,"props":4895,"children":4896},{"__ignoreMap":7},[4897],{"type":30,"value":4892},{"type":24,"tag":2210,"props":4899,"children":4900},{},[],{"type":24,"tag":25,"props":4902,"children":4904},{"id":4903},"第二轮补充信息",[4905],{"type":30,"value":4906},"第二轮：补充信息",{"type":24,"tag":33,"props":4908,"children":4909},{},[4910],{"type":30,"value":4911},"根据你的建议，我添加了日志，发现：",{"type":24,"tag":39,"props":4913,"children":4914},{},[4915,4923],{"type":24,"tag":43,"props":4916,"children":4917},{},[4918],{"type":24,"tag":4527,"props":4919,"children":4920},{},[4921],{"type":30,"value":4922},"发现 1",{"type":24,"tag":43,"props":4924,"children":4925},{},[4926],{"type":24,"tag":4527,"props":4927,"children":4928},{},[4929],{"type":30,"value":4930},"发现 2",{"type":24,"tag":33,"props":4932,"children":4933},{},[4934,4936,4941],{"type":30,"value":4935},"这是否说明问题出在 ",{"type":24,"tag":4527,"props":4937,"children":4938},{},[4939],{"type":30,"value":4940},"你的猜测",{"type":30,"value":4942},"？",{"type":24,"tag":2210,"props":4944,"children":4945},{},[],{"type":24,"tag":25,"props":4947,"children":4949},{"id":4948},"第三轮确认修复",[4950],{"type":30,"value":4951},"第三轮：确认修复",{"type":24,"tag":33,"props":4953,"children":4954},{},[4955],{"type":30,"value":4956},"我按照你的建议修改了代码：",{"type":24,"tag":645,"props":4958,"children":4961},{"code":4959,"language":4687,"meta":7,"className":4960},"[粘贴修改后的代码]\n",[4689],[4962],{"type":24,"tag":653,"props":4963,"children":4964},{"__ignoreMap":7},[4965],{"type":30,"value":4959},{"type":24,"tag":33,"props":4967,"children":4968},{},[4969],{"type":30,"value":4970},"请确认这个修复是否正确，以及是否有其他潜在问题。",{"type":24,"tag":2210,"props":4972,"children":4973},{},[],{"type":24,"tag":25,"props":4975,"children":4977},{"id":4976},"第四轮预防",[4978],{"type":30,"value":4979},"第四轮：预防",{"type":24,"tag":33,"props":4981,"children":4982},{},[4983],{"type":30,"value":4984},"这个问题已解决。请建议：",{"type":24,"tag":2332,"props":4986,"children":4987},{},[4988,4993,4998],{"type":24,"tag":43,"props":4989,"children":4990},{},[4991],{"type":30,"value":4992},"如何防止类似问题再次发生？",{"type":24,"tag":43,"props":4994,"children":4995},{},[4996],{"type":30,"value":4997},"应该添加什么测试用例？",{"type":24,"tag":43,"props":4999,"children":5000},{},[5001],{"type":30,"value":5002},"有什么最佳实践可以参考？",{"type":24,"tag":645,"props":5004,"children":5006},{"code":5005},"\n## 结语：AI 是放大器，不是替代品\n\nAI 调试工具能够显著加速问题排查过程，但它不能替代你的思考。最有价值的能力组合是：\n\n- **你的领域知识** + **AI 的广博见识**\n- **你对项目的理解** + **AI 的分析能力**\n- **你的判断力** + **AI 的执行速度**\n\n调试的本质是假设-验证的循环。AI 帮你更快地生成假设、更高效地验证假设，但做出最终判断的还是你。\n\n学会与 AI 高效协作调试，不是依赖 AI 给你答案，而是让 AI 帮你更快地找到自己的答案。\n\n---\n\n## 参考资源\n\n- [Chrome DevTools 官方文档](https://developer.chrome.com/docs/devtools)\n- [Node.js 调试指南](https://nodejs.org/en/docs/guides/debugging-getting-started)\n- [React DevTools 使用指南](https://react.dev/learn/react-developer-tools)\n",[5007],{"type":24,"tag":653,"props":5008,"children":5009},{"__ignoreMap":7},[5010],{"type":30,"value":5005},{"title":7,"searchDepth":2232,"depth":2232,"links":5012},[5013,5014,5015,5020,5024,5029,5033,5037,5038,5039],{"id":4398,"depth":2235,"text":4401},{"id":4404,"depth":2235,"text":4407},{"id":4425,"depth":2235,"text":4428,"children":5016},[5017,5018,5019],{"id":4431,"depth":2232,"text":4434},{"id":4509,"depth":2232,"text":4512},{"id":4672,"depth":2232,"text":4675},{"id":4714,"depth":2235,"text":4717,"children":5021},[5022,5023],{"id":4720,"depth":2232,"text":4723},{"id":4740,"depth":2232,"text":4743},{"id":4760,"depth":2235,"text":4763,"children":5025},[5026,5027,5028],{"id":4766,"depth":2232,"text":4769},{"id":4781,"depth":2232,"text":4784},{"id":4796,"depth":2232,"text":4799},{"id":4813,"depth":2235,"text":4816,"children":5030},[5031,5032],{"id":4819,"depth":2232,"text":4822},{"id":4834,"depth":2232,"text":4837},{"id":4849,"depth":2235,"text":4852,"children":5034},[5035,5036],{"id":4855,"depth":2232,"text":4858},{"id":4869,"depth":2232,"text":4872},{"id":4903,"depth":2235,"text":4906},{"id":4948,"depth":2235,"text":4951},{"id":4976,"depth":2235,"text":4979},"content:topics:ai:ai-debugging-troubleshooting-guide.md","topics/ai/ai-debugging-troubleshooting-guide.md","topics/ai/ai-debugging-troubleshooting-guide",{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":9,"date":10,"topic":5,"author":11,"tags":5044,"image":18,"featured":6,"readingTime":19,"body":5045,"_type":2278,"_id":2279,"_source":2280,"_file":2281,"_stem":2282,"_extension":2283},[13,14,15,16,17],{"type":21,"children":5046,"toc":6860},[5047,5051,5055,5078,5082,5095,5099,5103,5107,5142,5146,5150,5154,5181,5185,5189,5193,5220,5224,5228,5232,5346,5350,5354,5418,5422,5426,5490,5494,5498,5506,5514,5541,5549,5557,5561,5569,5577,5604,5612,5620,5624,5632,5640,5667,5675,5683,5691,5699,5703,5707,5711,5719,5723,5727,5735,5743,5751,5755,5759,5767,5771,5775,5779,5786,5801,5808,5823,5830,5845,5852,5867,5871,5875,5883,5887,5891,5899,5903,5907,6006,6010,6094,6098,6182,6186,6190,6198,6233,6237,6245,6280,6284,6292,6335,6339,6343,6351,6418,6422,6426,6434,6477,6481,6489,6532,6536,6544,6599,6603,6611,6662,6670,6713,6717,6752,6756,6760,6844,6847],{"type":24,"tag":25,"props":5048,"children":5049},{"id":27},[5050],{"type":30,"value":31},{"type":24,"tag":33,"props":5052,"children":5053},{},[5054],{"type":30,"value":37},{"type":24,"tag":39,"props":5056,"children":5057},{},[5058,5062,5066,5070,5074],{"type":24,"tag":43,"props":5059,"children":5060},{},[5061],{"type":30,"value":47},{"type":24,"tag":43,"props":5063,"children":5064},{},[5065],{"type":30,"value":52},{"type":24,"tag":43,"props":5067,"children":5068},{},[5069],{"type":30,"value":57},{"type":24,"tag":43,"props":5071,"children":5072},{},[5073],{"type":30,"value":62},{"type":24,"tag":43,"props":5075,"children":5076},{},[5077],{"type":30,"value":67},{"type":24,"tag":33,"props":5079,"children":5080},{},[5081],{"type":30,"value":72},{"type":24,"tag":33,"props":5083,"children":5084},{},[5085,5089,5090,5094],{"type":24,"tag":77,"props":5086,"children":5087},{},[5088],{"type":30,"value":81},{"type":30,"value":83},{"type":24,"tag":77,"props":5091,"children":5092},{},[5093],{"type":30,"value":88},{"type":30,"value":90},{"type":24,"tag":25,"props":5096,"children":5097},{"id":93},[5098],{"type":30,"value":96},{"type":24,"tag":98,"props":5100,"children":5101},{"id":100},[5102],{"type":30,"value":103},{"type":24,"tag":33,"props":5104,"children":5105},{},[5106],{"type":30,"value":108},{"type":24,"tag":39,"props":5108,"children":5109},{},[5110,5118,5126,5134],{"type":24,"tag":43,"props":5111,"children":5112},{},[5113,5117],{"type":24,"tag":77,"props":5114,"children":5115},{},[5116],{"type":30,"value":119},{"type":30,"value":121},{"type":24,"tag":43,"props":5119,"children":5120},{},[5121,5125],{"type":24,"tag":77,"props":5122,"children":5123},{},[5124],{"type":30,"value":129},{"type":30,"value":131},{"type":24,"tag":43,"props":5127,"children":5128},{},[5129,5133],{"type":24,"tag":77,"props":5130,"children":5131},{},[5132],{"type":30,"value":139},{"type":30,"value":141},{"type":24,"tag":43,"props":5135,"children":5136},{},[5137,5141],{"type":24,"tag":77,"props":5138,"children":5139},{},[5140],{"type":30,"value":149},{"type":30,"value":151},{"type":24,"tag":33,"props":5143,"children":5144},{},[5145],{"type":30,"value":156},{"type":24,"tag":98,"props":5147,"children":5148},{"id":159},[5149],{"type":30,"value":162},{"type":24,"tag":33,"props":5151,"children":5152},{},[5153],{"type":30,"value":167},{"type":24,"tag":39,"props":5155,"children":5156},{},[5157,5165,5173],{"type":24,"tag":43,"props":5158,"children":5159},{},[5160,5164],{"type":24,"tag":77,"props":5161,"children":5162},{},[5163],{"type":30,"value":178},{"type":30,"value":180},{"type":24,"tag":43,"props":5166,"children":5167},{},[5168,5172],{"type":24,"tag":77,"props":5169,"children":5170},{},[5171],{"type":30,"value":188},{"type":30,"value":190},{"type":24,"tag":43,"props":5174,"children":5175},{},[5176,5180],{"type":24,"tag":77,"props":5177,"children":5178},{},[5179],{"type":30,"value":198},{"type":30,"value":200},{"type":24,"tag":33,"props":5182,"children":5183},{},[5184],{"type":30,"value":205},{"type":24,"tag":98,"props":5186,"children":5187},{"id":208},[5188],{"type":30,"value":211},{"type":24,"tag":33,"props":5190,"children":5191},{},[5192],{"type":30,"value":216},{"type":24,"tag":39,"props":5194,"children":5195},{},[5196,5204,5212],{"type":24,"tag":43,"props":5197,"children":5198},{},[5199,5203],{"type":24,"tag":77,"props":5200,"children":5201},{},[5202],{"type":30,"value":227},{"type":30,"value":229},{"type":24,"tag":43,"props":5205,"children":5206},{},[5207,5211],{"type":24,"tag":77,"props":5208,"children":5209},{},[5210],{"type":30,"value":237},{"type":30,"value":239},{"type":24,"tag":43,"props":5213,"children":5214},{},[5215,5219],{"type":24,"tag":77,"props":5216,"children":5217},{},[5218],{"type":30,"value":247},{"type":30,"value":249},{"type":24,"tag":25,"props":5221,"children":5222},{"id":252},[5223],{"type":30,"value":252},{"type":24,"tag":98,"props":5225,"children":5226},{"id":257},[5227],{"type":30,"value":260},{"type":24,"tag":33,"props":5229,"children":5230},{},[5231],{"type":30,"value":265},{"type":24,"tag":267,"props":5233,"children":5234},{},[5235,5253],{"type":24,"tag":271,"props":5236,"children":5237},{},[5238],{"type":24,"tag":275,"props":5239,"children":5240},{},[5241,5245,5249],{"type":24,"tag":279,"props":5242,"children":5243},{},[5244],{"type":30,"value":283},{"type":24,"tag":279,"props":5246,"children":5247},{},[5248],{"type":30,"value":288},{"type":24,"tag":279,"props":5250,"children":5251},{},[5252],{"type":30,"value":293},{"type":24,"tag":295,"props":5254,"children":5255},{},[5256,5274,5292,5310,5328],{"type":24,"tag":275,"props":5257,"children":5258},{},[5259,5266,5270],{"type":24,"tag":302,"props":5260,"children":5261},{},[5262],{"type":24,"tag":77,"props":5263,"children":5264},{},[5265],{"type":30,"value":309},{"type":24,"tag":302,"props":5267,"children":5268},{},[5269],{"type":30,"value":314},{"type":24,"tag":302,"props":5271,"children":5272},{},[5273],{"type":30,"value":319},{"type":24,"tag":275,"props":5275,"children":5276},{},[5277,5284,5288],{"type":24,"tag":302,"props":5278,"children":5279},{},[5280],{"type":24,"tag":77,"props":5281,"children":5282},{},[5283],{"type":30,"value":330},{"type":24,"tag":302,"props":5285,"children":5286},{},[5287],{"type":30,"value":335},{"type":24,"tag":302,"props":5289,"children":5290},{},[5291],{"type":30,"value":340},{"type":24,"tag":275,"props":5293,"children":5294},{},[5295,5302,5306],{"type":24,"tag":302,"props":5296,"children":5297},{},[5298],{"type":24,"tag":77,"props":5299,"children":5300},{},[5301],{"type":30,"value":351},{"type":24,"tag":302,"props":5303,"children":5304},{},[5305],{"type":30,"value":356},{"type":24,"tag":302,"props":5307,"children":5308},{},[5309],{"type":30,"value":361},{"type":24,"tag":275,"props":5311,"children":5312},{},[5313,5320,5324],{"type":24,"tag":302,"props":5314,"children":5315},{},[5316],{"type":24,"tag":77,"props":5317,"children":5318},{},[5319],{"type":30,"value":372},{"type":24,"tag":302,"props":5321,"children":5322},{},[5323],{"type":30,"value":377},{"type":24,"tag":302,"props":5325,"children":5326},{},[5327],{"type":30,"value":382},{"type":24,"tag":275,"props":5329,"children":5330},{},[5331,5338,5342],{"type":24,"tag":302,"props":5332,"children":5333},{},[5334],{"type":24,"tag":77,"props":5335,"children":5336},{},[5337],{"type":30,"value":393},{"type":24,"tag":302,"props":5339,"children":5340},{},[5341],{"type":30,"value":398},{"type":24,"tag":302,"props":5343,"children":5344},{},[5345],{"type":30,"value":403},{"type":24,"tag":98,"props":5347,"children":5348},{"id":406},[5349],{"type":30,"value":409},{"type":24,"tag":33,"props":5351,"children":5352},{},[5353],{"type":30,"value":414},{"type":24,"tag":267,"props":5355,"children":5356},{},[5357,5371],{"type":24,"tag":271,"props":5358,"children":5359},{},[5360],{"type":24,"tag":275,"props":5361,"children":5362},{},[5363,5367],{"type":24,"tag":279,"props":5364,"children":5365},{},[5366],{"type":30,"value":428},{"type":24,"tag":279,"props":5368,"children":5369},{},[5370],{"type":30,"value":293},{"type":24,"tag":295,"props":5372,"children":5373},{},[5374,5385,5396,5407],{"type":24,"tag":275,"props":5375,"children":5376},{},[5377,5381],{"type":24,"tag":302,"props":5378,"children":5379},{},[5380],{"type":30,"value":443},{"type":24,"tag":302,"props":5382,"children":5383},{},[5384],{"type":30,"value":448},{"type":24,"tag":275,"props":5386,"children":5387},{},[5388,5392],{"type":24,"tag":302,"props":5389,"children":5390},{},[5391],{"type":30,"value":456},{"type":24,"tag":302,"props":5393,"children":5394},{},[5395],{"type":30,"value":461},{"type":24,"tag":275,"props":5397,"children":5398},{},[5399,5403],{"type":24,"tag":302,"props":5400,"children":5401},{},[5402],{"type":30,"value":469},{"type":24,"tag":302,"props":5404,"children":5405},{},[5406],{"type":30,"value":474},{"type":24,"tag":275,"props":5408,"children":5409},{},[5410,5414],{"type":24,"tag":302,"props":5411,"children":5412},{},[5413],{"type":30,"value":482},{"type":24,"tag":302,"props":5415,"children":5416},{},[5417],{"type":30,"value":487},{"type":24,"tag":98,"props":5419,"children":5420},{"id":490},[5421],{"type":30,"value":493},{"type":24,"tag":33,"props":5423,"children":5424},{},[5425],{"type":30,"value":498},{"type":24,"tag":267,"props":5427,"children":5428},{},[5429,5443],{"type":24,"tag":271,"props":5430,"children":5431},{},[5432],{"type":24,"tag":275,"props":5433,"children":5434},{},[5435,5439],{"type":24,"tag":279,"props":5436,"children":5437},{},[5438],{"type":30,"value":428},{"type":24,"tag":279,"props":5440,"children":5441},{},[5442],{"type":30,"value":293},{"type":24,"tag":295,"props":5444,"children":5445},{},[5446,5457,5468,5479],{"type":24,"tag":275,"props":5447,"children":5448},{},[5449,5453],{"type":24,"tag":302,"props":5450,"children":5451},{},[5452],{"type":30,"value":526},{"type":24,"tag":302,"props":5454,"children":5455},{},[5456],{"type":30,"value":531},{"type":24,"tag":275,"props":5458,"children":5459},{},[5460,5464],{"type":24,"tag":302,"props":5461,"children":5462},{},[5463],{"type":30,"value":539},{"type":24,"tag":302,"props":5465,"children":5466},{},[5467],{"type":30,"value":544},{"type":24,"tag":275,"props":5469,"children":5470},{},[5471,5475],{"type":24,"tag":302,"props":5472,"children":5473},{},[5474],{"type":30,"value":552},{"type":24,"tag":302,"props":5476,"children":5477},{},[5478],{"type":30,"value":557},{"type":24,"tag":275,"props":5480,"children":5481},{},[5482,5486],{"type":24,"tag":302,"props":5483,"children":5484},{},[5485],{"type":30,"value":565},{"type":24,"tag":302,"props":5487,"children":5488},{},[5489],{"type":30,"value":570},{"type":24,"tag":25,"props":5491,"children":5492},{"id":573},[5493],{"type":30,"value":573},{"type":24,"tag":98,"props":5495,"children":5496},{"id":578},[5497],{"type":30,"value":581},{"type":24,"tag":33,"props":5499,"children":5500},{},[5501,5505],{"type":24,"tag":77,"props":5502,"children":5503},{},[5504],{"type":30,"value":589},{"type":30,"value":591},{"type":24,"tag":33,"props":5507,"children":5508},{},[5509,5513],{"type":24,"tag":77,"props":5510,"children":5511},{},[5512],{"type":30,"value":599},{"type":30,"value":601},{"type":24,"tag":39,"props":5515,"children":5516},{},[5517,5525,5533],{"type":24,"tag":43,"props":5518,"children":5519},{},[5520,5524],{"type":24,"tag":77,"props":5521,"children":5522},{},[5523],{"type":30,"value":612},{"type":30,"value":614},{"type":24,"tag":43,"props":5526,"children":5527},{},[5528,5532],{"type":24,"tag":77,"props":5529,"children":5530},{},[5531],{"type":30,"value":622},{"type":30,"value":624},{"type":24,"tag":43,"props":5534,"children":5535},{},[5536,5540],{"type":24,"tag":77,"props":5537,"children":5538},{},[5539],{"type":30,"value":632},{"type":30,"value":634},{"type":24,"tag":33,"props":5542,"children":5543},{},[5544,5548],{"type":24,"tag":77,"props":5545,"children":5546},{},[5547],{"type":30,"value":642},{"type":30,"value":601},{"type":24,"tag":645,"props":5550,"children":5552},{"className":5551,"code":649,"language":650,"meta":7},[648],[5553],{"type":24,"tag":653,"props":5554,"children":5555},{"__ignoreMap":7},[5556],{"type":30,"value":649},{"type":24,"tag":98,"props":5558,"children":5559},{"id":659},[5560],{"type":30,"value":662},{"type":24,"tag":33,"props":5562,"children":5563},{},[5564,5568],{"type":24,"tag":77,"props":5565,"children":5566},{},[5567],{"type":30,"value":589},{"type":30,"value":671},{"type":24,"tag":33,"props":5570,"children":5571},{},[5572,5576],{"type":24,"tag":77,"props":5573,"children":5574},{},[5575],{"type":30,"value":599},{"type":30,"value":601},{"type":24,"tag":39,"props":5578,"children":5579},{},[5580,5588,5596],{"type":24,"tag":43,"props":5581,"children":5582},{},[5583,5587],{"type":24,"tag":77,"props":5584,"children":5585},{},[5586],{"type":30,"value":690},{"type":30,"value":692},{"type":24,"tag":43,"props":5589,"children":5590},{},[5591,5595],{"type":24,"tag":77,"props":5592,"children":5593},{},[5594],{"type":30,"value":700},{"type":30,"value":702},{"type":24,"tag":43,"props":5597,"children":5598},{},[5599,5603],{"type":24,"tag":77,"props":5600,"children":5601},{},[5602],{"type":30,"value":710},{"type":30,"value":712},{"type":24,"tag":33,"props":5605,"children":5606},{},[5607,5611],{"type":24,"tag":77,"props":5608,"children":5609},{},[5610],{"type":30,"value":720},{"type":30,"value":722},{"type":24,"tag":645,"props":5613,"children":5615},{"className":5614,"code":727,"language":728,"meta":7},[726],[5616],{"type":24,"tag":653,"props":5617,"children":5618},{"__ignoreMap":7},[5619],{"type":30,"value":727},{"type":24,"tag":98,"props":5621,"children":5622},{"id":736},[5623],{"type":30,"value":739},{"type":24,"tag":33,"props":5625,"children":5626},{},[5627,5631],{"type":24,"tag":77,"props":5628,"children":5629},{},[5630],{"type":30,"value":589},{"type":30,"value":748},{"type":24,"tag":33,"props":5633,"children":5634},{},[5635,5639],{"type":24,"tag":77,"props":5636,"children":5637},{},[5638],{"type":30,"value":599},{"type":30,"value":601},{"type":24,"tag":39,"props":5641,"children":5642},{},[5643,5651,5659],{"type":24,"tag":43,"props":5644,"children":5645},{},[5646,5650],{"type":24,"tag":77,"props":5647,"children":5648},{},[5649],{"type":30,"value":767},{"type":30,"value":769},{"type":24,"tag":43,"props":5652,"children":5653},{},[5654,5658],{"type":24,"tag":77,"props":5655,"children":5656},{},[5657],{"type":30,"value":777},{"type":30,"value":779},{"type":24,"tag":43,"props":5660,"children":5661},{},[5662,5666],{"type":24,"tag":77,"props":5663,"children":5664},{},[5665],{"type":30,"value":787},{"type":30,"value":789},{"type":24,"tag":33,"props":5668,"children":5669},{},[5670,5674],{"type":24,"tag":77,"props":5671,"children":5672},{},[5673],{"type":30,"value":797},{"type":30,"value":799},{"type":24,"tag":645,"props":5676,"children":5678},{"className":5677,"code":804,"language":805,"meta":7},[803],[5679],{"type":24,"tag":653,"props":5680,"children":5681},{"__ignoreMap":7},[5682],{"type":30,"value":804},{"type":24,"tag":33,"props":5684,"children":5685},{},[5686,5690],{"type":24,"tag":77,"props":5687,"children":5688},{},[5689],{"type":30,"value":818},{"type":30,"value":601},{"type":24,"tag":645,"props":5692,"children":5694},{"className":5693,"code":824,"language":825,"meta":7},[823],[5695],{"type":24,"tag":653,"props":5696,"children":5697},{"__ignoreMap":7},[5698],{"type":30,"value":824},{"type":24,"tag":25,"props":5700,"children":5701},{"id":833},[5702],{"type":30,"value":833},{"type":24,"tag":98,"props":5704,"children":5705},{"id":838},[5706],{"type":30,"value":841},{"type":24,"tag":33,"props":5708,"children":5709},{},[5710],{"type":30,"value":846},{"type":24,"tag":645,"props":5712,"children":5714},{"className":5713,"code":850,"language":650,"meta":7},[648],[5715],{"type":24,"tag":653,"props":5716,"children":5717},{"__ignoreMap":7},[5718],{"type":30,"value":850},{"type":24,"tag":98,"props":5720,"children":5721},{"id":858},[5722],{"type":30,"value":861},{"type":24,"tag":33,"props":5724,"children":5725},{},[5726],{"type":30,"value":866},{"type":24,"tag":645,"props":5728,"children":5730},{"className":5729,"code":871,"language":872,"meta":7},[870],[5731],{"type":24,"tag":653,"props":5732,"children":5733},{"__ignoreMap":7},[5734],{"type":30,"value":871},{"type":24,"tag":33,"props":5736,"children":5737},{},[5738,5742],{"type":24,"tag":77,"props":5739,"children":5740},{},[5741],{"type":30,"value":885},{"type":30,"value":601},{"type":24,"tag":645,"props":5744,"children":5746},{"className":5745,"code":890,"language":650,"meta":7},[648],[5747],{"type":24,"tag":653,"props":5748,"children":5749},{"__ignoreMap":7},[5750],{"type":30,"value":890},{"type":24,"tag":98,"props":5752,"children":5753},{"id":898},[5754],{"type":30,"value":901},{"type":24,"tag":33,"props":5756,"children":5757},{},[5758],{"type":30,"value":906},{"type":24,"tag":645,"props":5760,"children":5762},{"className":5761,"code":910,"language":650,"meta":7},[648],[5763],{"type":24,"tag":653,"props":5764,"children":5765},{"__ignoreMap":7},[5766],{"type":30,"value":910},{"type":24,"tag":25,"props":5768,"children":5769},{"id":918},[5770],{"type":30,"value":918},{"type":24,"tag":98,"props":5772,"children":5773},{"id":923},[5774],{"type":30,"value":923},{"type":24,"tag":33,"props":5776,"children":5777},{},[5778],{"type":30,"value":930},{"type":24,"tag":33,"props":5780,"children":5781},{},[5782],{"type":24,"tag":77,"props":5783,"children":5784},{},[5785],{"type":30,"value":938},{"type":24,"tag":39,"props":5787,"children":5788},{},[5789,5793,5797],{"type":24,"tag":43,"props":5790,"children":5791},{},[5792],{"type":30,"value":946},{"type":24,"tag":43,"props":5794,"children":5795},{},[5796],{"type":30,"value":951},{"type":24,"tag":43,"props":5798,"children":5799},{},[5800],{"type":30,"value":956},{"type":24,"tag":33,"props":5802,"children":5803},{},[5804],{"type":24,"tag":77,"props":5805,"children":5806},{},[5807],{"type":30,"value":964},{"type":24,"tag":39,"props":5809,"children":5810},{},[5811,5815,5819],{"type":24,"tag":43,"props":5812,"children":5813},{},[5814],{"type":30,"value":972},{"type":24,"tag":43,"props":5816,"children":5817},{},[5818],{"type":30,"value":977},{"type":24,"tag":43,"props":5820,"children":5821},{},[5822],{"type":30,"value":982},{"type":24,"tag":33,"props":5824,"children":5825},{},[5826],{"type":24,"tag":77,"props":5827,"children":5828},{},[5829],{"type":30,"value":990},{"type":24,"tag":39,"props":5831,"children":5832},{},[5833,5837,5841],{"type":24,"tag":43,"props":5834,"children":5835},{},[5836],{"type":30,"value":998},{"type":24,"tag":43,"props":5838,"children":5839},{},[5840],{"type":30,"value":1003},{"type":24,"tag":43,"props":5842,"children":5843},{},[5844],{"type":30,"value":1008},{"type":24,"tag":33,"props":5846,"children":5847},{},[5848],{"type":24,"tag":77,"props":5849,"children":5850},{},[5851],{"type":30,"value":1016},{"type":24,"tag":39,"props":5853,"children":5854},{},[5855,5859,5863],{"type":24,"tag":43,"props":5856,"children":5857},{},[5858],{"type":30,"value":1024},{"type":24,"tag":43,"props":5860,"children":5861},{},[5862],{"type":30,"value":1029},{"type":24,"tag":43,"props":5864,"children":5865},{},[5866],{"type":30,"value":1034},{"type":24,"tag":98,"props":5868,"children":5869},{"id":1037},[5870],{"type":30,"value":1037},{"type":24,"tag":33,"props":5872,"children":5873},{},[5874],{"type":30,"value":1044},{"type":24,"tag":645,"props":5876,"children":5878},{"className":5877,"code":1048,"language":650,"meta":7},[648],[5879],{"type":24,"tag":653,"props":5880,"children":5881},{"__ignoreMap":7},[5882],{"type":30,"value":1048},{"type":24,"tag":98,"props":5884,"children":5885},{"id":1056},[5886],{"type":30,"value":1059},{"type":24,"tag":33,"props":5888,"children":5889},{},[5890],{"type":30,"value":1064},{"type":24,"tag":645,"props":5892,"children":5894},{"className":5893,"code":1068,"language":650,"meta":7},[648],[5895],{"type":24,"tag":653,"props":5896,"children":5897},{"__ignoreMap":7},[5898],{"type":30,"value":1068},{"type":24,"tag":25,"props":5900,"children":5901},{"id":1076},[5902],{"type":30,"value":1076},{"type":24,"tag":98,"props":5904,"children":5905},{"id":1081},[5906],{"type":30,"value":1084},{"type":24,"tag":267,"props":5908,"children":5909},{},[5910,5928],{"type":24,"tag":271,"props":5911,"children":5912},{},[5913],{"type":24,"tag":275,"props":5914,"children":5915},{},[5916,5920,5924],{"type":24,"tag":279,"props":5917,"children":5918},{},[5919],{"type":30,"value":1098},{"type":24,"tag":279,"props":5921,"children":5922},{},[5923],{"type":30,"value":1103},{"type":24,"tag":279,"props":5925,"children":5926},{},[5927],{"type":30,"value":1108},{"type":24,"tag":295,"props":5929,"children":5930},{},[5931,5946,5961,5976,5991],{"type":24,"tag":275,"props":5932,"children":5933},{},[5934,5938,5942],{"type":24,"tag":302,"props":5935,"children":5936},{},[5937],{"type":30,"value":314},{"type":24,"tag":302,"props":5939,"children":5940},{},[5941],{"type":30,"value":1123},{"type":24,"tag":302,"props":5943,"children":5944},{},[5945],{"type":30,"value":1128},{"type":24,"tag":275,"props":5947,"children":5948},{},[5949,5953,5957],{"type":24,"tag":302,"props":5950,"children":5951},{},[5952],{"type":30,"value":1136},{"type":24,"tag":302,"props":5954,"children":5955},{},[5956],{"type":30,"value":1141},{"type":24,"tag":302,"props":5958,"children":5959},{},[5960],{"type":30,"value":1146},{"type":24,"tag":275,"props":5962,"children":5963},{},[5964,5968,5972],{"type":24,"tag":302,"props":5965,"children":5966},{},[5967],{"type":30,"value":1154},{"type":24,"tag":302,"props":5969,"children":5970},{},[5971],{"type":30,"value":1159},{"type":24,"tag":302,"props":5973,"children":5974},{},[5975],{"type":30,"value":1164},{"type":24,"tag":275,"props":5977,"children":5978},{},[5979,5983,5987],{"type":24,"tag":302,"props":5980,"children":5981},{},[5982],{"type":30,"value":1172},{"type":24,"tag":302,"props":5984,"children":5985},{},[5986],{"type":30,"value":1177},{"type":24,"tag":302,"props":5988,"children":5989},{},[5990],{"type":30,"value":1182},{"type":24,"tag":275,"props":5992,"children":5993},{},[5994,5998,6002],{"type":24,"tag":302,"props":5995,"children":5996},{},[5997],{"type":30,"value":1190},{"type":24,"tag":302,"props":5999,"children":6000},{},[6001],{"type":30,"value":1195},{"type":24,"tag":302,"props":6003,"children":6004},{},[6005],{"type":30,"value":1200},{"type":24,"tag":98,"props":6007,"children":6008},{"id":1203},[6009],{"type":30,"value":1206},{"type":24,"tag":267,"props":6011,"children":6012},{},[6013,6031],{"type":24,"tag":271,"props":6014,"children":6015},{},[6016],{"type":24,"tag":275,"props":6017,"children":6018},{},[6019,6023,6027],{"type":24,"tag":279,"props":6020,"children":6021},{},[6022],{"type":30,"value":1220},{"type":24,"tag":279,"props":6024,"children":6025},{},[6026],{"type":30,"value":1103},{"type":24,"tag":279,"props":6028,"children":6029},{},[6030],{"type":30,"value":1108},{"type":24,"tag":295,"props":6032,"children":6033},{},[6034,6049,6064,6079],{"type":24,"tag":275,"props":6035,"children":6036},{},[6037,6041,6045],{"type":24,"tag":302,"props":6038,"children":6039},{},[6040],{"type":30,"value":1239},{"type":24,"tag":302,"props":6042,"children":6043},{},[6044],{"type":30,"value":1244},{"type":24,"tag":302,"props":6046,"children":6047},{},[6048],{"type":30,"value":1164},{"type":24,"tag":275,"props":6050,"children":6051},{},[6052,6056,6060],{"type":24,"tag":302,"props":6053,"children":6054},{},[6055],{"type":30,"value":1256},{"type":24,"tag":302,"props":6057,"children":6058},{},[6059],{"type":30,"value":1261},{"type":24,"tag":302,"props":6061,"children":6062},{},[6063],{"type":30,"value":1164},{"type":24,"tag":275,"props":6065,"children":6066},{},[6067,6071,6075],{"type":24,"tag":302,"props":6068,"children":6069},{},[6070],{"type":30,"value":1273},{"type":24,"tag":302,"props":6072,"children":6073},{},[6074],{"type":30,"value":1278},{"type":24,"tag":302,"props":6076,"children":6077},{},[6078],{"type":30,"value":1283},{"type":24,"tag":275,"props":6080,"children":6081},{},[6082,6086,6090],{"type":24,"tag":302,"props":6083,"children":6084},{},[6085],{"type":30,"value":1291},{"type":24,"tag":302,"props":6087,"children":6088},{},[6089],{"type":30,"value":1296},{"type":24,"tag":302,"props":6091,"children":6092},{},[6093],{"type":30,"value":1301},{"type":24,"tag":98,"props":6095,"children":6096},{"id":1304},[6097],{"type":30,"value":1307},{"type":24,"tag":267,"props":6099,"children":6100},{},[6101,6119],{"type":24,"tag":271,"props":6102,"children":6103},{},[6104],{"type":24,"tag":275,"props":6105,"children":6106},{},[6107,6111,6115],{"type":24,"tag":279,"props":6108,"children":6109},{},[6110],{"type":30,"value":1321},{"type":24,"tag":279,"props":6112,"children":6113},{},[6114],{"type":30,"value":1103},{"type":24,"tag":279,"props":6116,"children":6117},{},[6118],{"type":30,"value":1108},{"type":24,"tag":295,"props":6120,"children":6121},{},[6122,6137,6152,6167],{"type":24,"tag":275,"props":6123,"children":6124},{},[6125,6129,6133],{"type":24,"tag":302,"props":6126,"children":6127},{},[6128],{"type":30,"value":526},{"type":24,"tag":302,"props":6130,"children":6131},{},[6132],{"type":30,"value":1344},{"type":24,"tag":302,"props":6134,"children":6135},{},[6136],{"type":30,"value":1128},{"type":24,"tag":275,"props":6138,"children":6139},{},[6140,6144,6148],{"type":24,"tag":302,"props":6141,"children":6142},{},[6143],{"type":30,"value":539},{"type":24,"tag":302,"props":6145,"children":6146},{},[6147],{"type":30,"value":1360},{"type":24,"tag":302,"props":6149,"children":6150},{},[6151],{"type":30,"value":1164},{"type":24,"tag":275,"props":6153,"children":6154},{},[6155,6159,6163],{"type":24,"tag":302,"props":6156,"children":6157},{},[6158],{"type":30,"value":552},{"type":24,"tag":302,"props":6160,"children":6161},{},[6162],{"type":30,"value":1376},{"type":24,"tag":302,"props":6164,"children":6165},{},[6166],{"type":30,"value":1301},{"type":24,"tag":275,"props":6168,"children":6169},{},[6170,6174,6178],{"type":24,"tag":302,"props":6171,"children":6172},{},[6173],{"type":30,"value":565},{"type":24,"tag":302,"props":6175,"children":6176},{},[6177],{"type":30,"value":1392},{"type":24,"tag":302,"props":6179,"children":6180},{},[6181],{"type":30,"value":1128},{"type":24,"tag":25,"props":6183,"children":6184},{"id":1399},[6185],{"type":30,"value":1402},{"type":24,"tag":98,"props":6187,"children":6188},{"id":1405},[6189],{"type":30,"value":1408},{"type":24,"tag":33,"props":6191,"children":6192},{},[6193,6197],{"type":24,"tag":77,"props":6194,"children":6195},{},[6196],{"type":30,"value":1416},{"type":30,"value":1418},{"type":24,"tag":39,"props":6199,"children":6200},{},[6201,6209,6217,6225],{"type":24,"tag":43,"props":6202,"children":6203},{},[6204,6208],{"type":24,"tag":77,"props":6205,"children":6206},{},[6207],{"type":30,"value":1429},{"type":30,"value":1431},{"type":24,"tag":43,"props":6210,"children":6211},{},[6212,6216],{"type":24,"tag":77,"props":6213,"children":6214},{},[6215],{"type":30,"value":1439},{"type":30,"value":1441},{"type":24,"tag":43,"props":6218,"children":6219},{},[6220,6224],{"type":24,"tag":77,"props":6221,"children":6222},{},[6223],{"type":30,"value":1449},{"type":30,"value":1451},{"type":24,"tag":43,"props":6226,"children":6227},{},[6228,6232],{"type":24,"tag":77,"props":6229,"children":6230},{},[6231],{"type":30,"value":1459},{"type":30,"value":1461},{"type":24,"tag":98,"props":6234,"children":6235},{"id":1464},[6236],{"type":30,"value":1467},{"type":24,"tag":33,"props":6238,"children":6239},{},[6240,6244],{"type":24,"tag":77,"props":6241,"children":6242},{},[6243],{"type":30,"value":1416},{"type":30,"value":1418},{"type":24,"tag":39,"props":6246,"children":6247},{},[6248,6256,6264,6272],{"type":24,"tag":43,"props":6249,"children":6250},{},[6251,6255],{"type":24,"tag":77,"props":6252,"children":6253},{},[6254],{"type":30,"value":612},{"type":30,"value":1487},{"type":24,"tag":43,"props":6257,"children":6258},{},[6259,6263],{"type":24,"tag":77,"props":6260,"children":6261},{},[6262],{"type":30,"value":1495},{"type":30,"value":1497},{"type":24,"tag":43,"props":6265,"children":6266},{},[6267,6271],{"type":24,"tag":77,"props":6268,"children":6269},{},[6270],{"type":30,"value":1505},{"type":30,"value":1507},{"type":24,"tag":43,"props":6273,"children":6274},{},[6275,6279],{"type":24,"tag":77,"props":6276,"children":6277},{},[6278],{"type":30,"value":1515},{"type":30,"value":1517},{"type":24,"tag":98,"props":6281,"children":6282},{"id":1520},[6283],{"type":30,"value":1523},{"type":24,"tag":33,"props":6285,"children":6286},{},[6287,6291],{"type":24,"tag":77,"props":6288,"children":6289},{},[6290],{"type":30,"value":1416},{"type":30,"value":1532},{"type":24,"tag":39,"props":6293,"children":6294},{},[6295,6303,6311,6319,6327],{"type":24,"tag":43,"props":6296,"children":6297},{},[6298,6302],{"type":24,"tag":77,"props":6299,"children":6300},{},[6301],{"type":30,"value":1543},{"type":30,"value":1545},{"type":24,"tag":43,"props":6304,"children":6305},{},[6306,6310],{"type":24,"tag":77,"props":6307,"children":6308},{},[6309],{"type":30,"value":1553},{"type":30,"value":1555},{"type":24,"tag":43,"props":6312,"children":6313},{},[6314,6318],{"type":24,"tag":77,"props":6315,"children":6316},{},[6317],{"type":30,"value":1563},{"type":30,"value":1565},{"type":24,"tag":43,"props":6320,"children":6321},{},[6322,6326],{"type":24,"tag":77,"props":6323,"children":6324},{},[6325],{"type":30,"value":1573},{"type":30,"value":1575},{"type":24,"tag":43,"props":6328,"children":6329},{},[6330,6334],{"type":24,"tag":77,"props":6331,"children":6332},{},[6333],{"type":30,"value":1583},{"type":30,"value":1585},{"type":24,"tag":33,"props":6336,"children":6337},{},[6338],{"type":30,"value":1590},{"type":24,"tag":98,"props":6340,"children":6341},{"id":1593},[6342],{"type":30,"value":1596},{"type":24,"tag":33,"props":6344,"children":6345},{},[6346,6350],{"type":24,"tag":77,"props":6347,"children":6348},{},[6349],{"type":30,"value":1416},{"type":30,"value":1605},{"type":24,"tag":39,"props":6352,"children":6353},{},[6354,6362,6370,6378,6386,6394,6402,6410],{"type":24,"tag":43,"props":6355,"children":6356},{},[6357,6361],{"type":24,"tag":77,"props":6358,"children":6359},{},[6360],{"type":30,"value":1616},{"type":30,"value":1618},{"type":24,"tag":43,"props":6363,"children":6364},{},[6365,6369],{"type":24,"tag":77,"props":6366,"children":6367},{},[6368],{"type":30,"value":1626},{"type":30,"value":1628},{"type":24,"tag":43,"props":6371,"children":6372},{},[6373,6377],{"type":24,"tag":77,"props":6374,"children":6375},{},[6376],{"type":30,"value":1636},{"type":30,"value":1638},{"type":24,"tag":43,"props":6379,"children":6380},{},[6381,6385],{"type":24,"tag":77,"props":6382,"children":6383},{},[6384],{"type":30,"value":1646},{"type":30,"value":1648},{"type":24,"tag":43,"props":6387,"children":6388},{},[6389,6393],{"type":24,"tag":77,"props":6390,"children":6391},{},[6392],{"type":30,"value":1656},{"type":30,"value":1658},{"type":24,"tag":43,"props":6395,"children":6396},{},[6397,6401],{"type":24,"tag":77,"props":6398,"children":6399},{},[6400],{"type":30,"value":1666},{"type":30,"value":1668},{"type":24,"tag":43,"props":6403,"children":6404},{},[6405,6409],{"type":24,"tag":77,"props":6406,"children":6407},{},[6408],{"type":30,"value":1676},{"type":30,"value":1678},{"type":24,"tag":43,"props":6411,"children":6412},{},[6413,6417],{"type":24,"tag":77,"props":6414,"children":6415},{},[6416],{"type":30,"value":1686},{"type":30,"value":1688},{"type":24,"tag":33,"props":6419,"children":6420},{},[6421],{"type":30,"value":1693},{"type":24,"tag":98,"props":6423,"children":6424},{"id":1696},[6425],{"type":30,"value":1699},{"type":24,"tag":33,"props":6427,"children":6428},{},[6429,6433],{"type":24,"tag":77,"props":6430,"children":6431},{},[6432],{"type":30,"value":1416},{"type":30,"value":1418},{"type":24,"tag":39,"props":6435,"children":6436},{},[6437,6445,6453,6461,6469],{"type":24,"tag":43,"props":6438,"children":6439},{},[6440,6444],{"type":24,"tag":77,"props":6441,"children":6442},{},[6443],{"type":30,"value":1718},{"type":30,"value":1720},{"type":24,"tag":43,"props":6446,"children":6447},{},[6448,6452],{"type":24,"tag":77,"props":6449,"children":6450},{},[6451],{"type":30,"value":1728},{"type":30,"value":1730},{"type":24,"tag":43,"props":6454,"children":6455},{},[6456,6460],{"type":24,"tag":77,"props":6457,"children":6458},{},[6459],{"type":30,"value":1738},{"type":30,"value":1740},{"type":24,"tag":43,"props":6462,"children":6463},{},[6464,6468],{"type":24,"tag":77,"props":6465,"children":6466},{},[6467],{"type":30,"value":1748},{"type":30,"value":1750},{"type":24,"tag":43,"props":6470,"children":6471},{},[6472,6476],{"type":24,"tag":77,"props":6473,"children":6474},{},[6475],{"type":30,"value":1758},{"type":30,"value":1760},{"type":24,"tag":98,"props":6478,"children":6479},{"id":1763},[6480],{"type":30,"value":1766},{"type":24,"tag":33,"props":6482,"children":6483},{},[6484,6488],{"type":24,"tag":77,"props":6485,"children":6486},{},[6487],{"type":30,"value":1416},{"type":30,"value":1418},{"type":24,"tag":39,"props":6490,"children":6491},{},[6492,6500,6508,6516,6524],{"type":24,"tag":43,"props":6493,"children":6494},{},[6495,6499],{"type":24,"tag":77,"props":6496,"children":6497},{},[6498],{"type":30,"value":1785},{"type":30,"value":1787},{"type":24,"tag":43,"props":6501,"children":6502},{},[6503,6507],{"type":24,"tag":77,"props":6504,"children":6505},{},[6506],{"type":30,"value":1795},{"type":30,"value":1797},{"type":24,"tag":43,"props":6509,"children":6510},{},[6511,6515],{"type":24,"tag":77,"props":6512,"children":6513},{},[6514],{"type":30,"value":1805},{"type":30,"value":1807},{"type":24,"tag":43,"props":6517,"children":6518},{},[6519,6523],{"type":24,"tag":77,"props":6520,"children":6521},{},[6522],{"type":30,"value":1815},{"type":30,"value":1817},{"type":24,"tag":43,"props":6525,"children":6526},{},[6527,6531],{"type":24,"tag":77,"props":6528,"children":6529},{},[6530],{"type":30,"value":1825},{"type":30,"value":1827},{"type":24,"tag":98,"props":6533,"children":6534},{"id":1830},[6535],{"type":30,"value":1833},{"type":24,"tag":33,"props":6537,"children":6538},{},[6539,6543],{"type":24,"tag":77,"props":6540,"children":6541},{},[6542],{"type":30,"value":1416},{"type":30,"value":1418},{"type":24,"tag":39,"props":6545,"children":6546},{},[6547,6555,6563,6571,6575,6583,6591],{"type":24,"tag":43,"props":6548,"children":6549},{},[6550,6554],{"type":24,"tag":77,"props":6551,"children":6552},{},[6553],{"type":30,"value":1852},{"type":30,"value":1854},{"type":24,"tag":43,"props":6556,"children":6557},{},[6558,6562],{"type":24,"tag":77,"props":6559,"children":6560},{},[6561],{"type":30,"value":1862},{"type":30,"value":1864},{"type":24,"tag":43,"props":6564,"children":6565},{},[6566,6570],{"type":24,"tag":77,"props":6567,"children":6568},{},[6569],{"type":30,"value":1872},{"type":30,"value":1874},{"type":24,"tag":43,"props":6572,"children":6573},{},[6574],{"type":30,"value":1879},{"type":24,"tag":43,"props":6576,"children":6577},{},[6578,6582],{"type":24,"tag":77,"props":6579,"children":6580},{},[6581],{"type":30,"value":1887},{"type":30,"value":1889},{"type":24,"tag":43,"props":6584,"children":6585},{},[6586,6590],{"type":24,"tag":77,"props":6587,"children":6588},{},[6589],{"type":30,"value":1897},{"type":30,"value":1899},{"type":24,"tag":43,"props":6592,"children":6593},{},[6594,6598],{"type":24,"tag":77,"props":6595,"children":6596},{},[6597],{"type":30,"value":1907},{"type":30,"value":1909},{"type":24,"tag":98,"props":6600,"children":6601},{"id":1912},[6602],{"type":30,"value":1915},{"type":24,"tag":33,"props":6604,"children":6605},{},[6606,6610],{"type":24,"tag":77,"props":6607,"children":6608},{},[6609],{"type":30,"value":1416},{"type":30,"value":1924},{"type":24,"tag":39,"props":6612,"children":6613},{},[6614,6622,6630,6638,6646,6654],{"type":24,"tag":43,"props":6615,"children":6616},{},[6617,6621],{"type":24,"tag":77,"props":6618,"children":6619},{},[6620],{"type":30,"value":1935},{"type":30,"value":1937},{"type":24,"tag":43,"props":6623,"children":6624},{},[6625,6629],{"type":24,"tag":77,"props":6626,"children":6627},{},[6628],{"type":30,"value":1945},{"type":30,"value":1947},{"type":24,"tag":43,"props":6631,"children":6632},{},[6633,6637],{"type":24,"tag":77,"props":6634,"children":6635},{},[6636],{"type":30,"value":1955},{"type":30,"value":1957},{"type":24,"tag":43,"props":6639,"children":6640},{},[6641,6645],{"type":24,"tag":77,"props":6642,"children":6643},{},[6644],{"type":30,"value":1965},{"type":30,"value":1967},{"type":24,"tag":43,"props":6647,"children":6648},{},[6649,6653],{"type":24,"tag":77,"props":6650,"children":6651},{},[6652],{"type":30,"value":1975},{"type":30,"value":1977},{"type":24,"tag":43,"props":6655,"children":6656},{},[6657,6661],{"type":24,"tag":77,"props":6658,"children":6659},{},[6660],{"type":30,"value":1985},{"type":30,"value":1987},{"type":24,"tag":33,"props":6663,"children":6664},{},[6665,6669],{"type":24,"tag":77,"props":6666,"children":6667},{},[6668],{"type":30,"value":1995},{"type":30,"value":601},{"type":24,"tag":39,"props":6671,"children":6672},{},[6673,6681,6689,6697,6705],{"type":24,"tag":43,"props":6674,"children":6675},{},[6676,6680],{"type":24,"tag":77,"props":6677,"children":6678},{},[6679],{"type":30,"value":2007},{"type":30,"value":2009},{"type":24,"tag":43,"props":6682,"children":6683},{},[6684,6688],{"type":24,"tag":77,"props":6685,"children":6686},{},[6687],{"type":30,"value":2017},{"type":30,"value":2019},{"type":24,"tag":43,"props":6690,"children":6691},{},[6692,6696],{"type":24,"tag":77,"props":6693,"children":6694},{},[6695],{"type":30,"value":2027},{"type":30,"value":2029},{"type":24,"tag":43,"props":6698,"children":6699},{},[6700,6704],{"type":24,"tag":77,"props":6701,"children":6702},{},[6703],{"type":30,"value":2037},{"type":30,"value":2039},{"type":24,"tag":43,"props":6706,"children":6707},{},[6708,6712],{"type":24,"tag":77,"props":6709,"children":6710},{},[6711],{"type":30,"value":2047},{"type":30,"value":2049},{"type":24,"tag":25,"props":6714,"children":6715},{"id":2052},[6716],{"type":30,"value":2052},{"type":24,"tag":39,"props":6718,"children":6719},{},[6720,6728,6736,6744],{"type":24,"tag":43,"props":6721,"children":6722},{},[6723],{"type":24,"tag":2062,"props":6724,"children":6726},{"href":2064,"rel":6725},[2066],[6727],{"type":30,"value":260},{"type":24,"tag":43,"props":6729,"children":6730},{},[6731],{"type":24,"tag":2062,"props":6732,"children":6734},{"href":2074,"rel":6733},[2066],[6735],{"type":30,"value":2078},{"type":24,"tag":43,"props":6737,"children":6738},{},[6739],{"type":24,"tag":2062,"props":6740,"children":6742},{"href":2084,"rel":6741},[2066],[6743],{"type":30,"value":2088},{"type":24,"tag":43,"props":6745,"children":6746},{},[6747],{"type":24,"tag":2062,"props":6748,"children":6750},{"href":2094,"rel":6749},[2066],[6751],{"type":30,"value":2098},{"type":24,"tag":25,"props":6753,"children":6754},{"id":2101},[6755],{"type":30,"value":2104},{"type":24,"tag":33,"props":6757,"children":6758},{},[6759],{"type":30,"value":2109},{"type":24,"tag":39,"props":6761,"children":6763},{"className":6762},[2113],[6764,6772,6780,6788,6796,6804,6812,6820,6828,6836],{"type":24,"tag":43,"props":6765,"children":6767},{"className":6766},[2118],[6768,6771],{"type":24,"tag":2121,"props":6769,"children":6770},{"disabled":2123,"type":2124},[],{"type":30,"value":2127},{"type":24,"tag":43,"props":6773,"children":6775},{"className":6774},[2118],[6776,6779],{"type":24,"tag":2121,"props":6777,"children":6778},{"disabled":2123,"type":2124},[],{"type":30,"value":2136},{"type":24,"tag":43,"props":6781,"children":6783},{"className":6782},[2118],[6784,6787],{"type":24,"tag":2121,"props":6785,"children":6786},{"disabled":2123,"type":2124},[],{"type":30,"value":2145},{"type":24,"tag":43,"props":6789,"children":6791},{"className":6790},[2118],[6792,6795],{"type":24,"tag":2121,"props":6793,"children":6794},{"disabled":2123,"type":2124},[],{"type":30,"value":2154},{"type":24,"tag":43,"props":6797,"children":6799},{"className":6798},[2118],[6800,6803],{"type":24,"tag":2121,"props":6801,"children":6802},{"disabled":2123,"type":2124},[],{"type":30,"value":2163},{"type":24,"tag":43,"props":6805,"children":6807},{"className":6806},[2118],[6808,6811],{"type":24,"tag":2121,"props":6809,"children":6810},{"disabled":2123,"type":2124},[],{"type":30,"value":2172},{"type":24,"tag":43,"props":6813,"children":6815},{"className":6814},[2118],[6816,6819],{"type":24,"tag":2121,"props":6817,"children":6818},{"disabled":2123,"type":2124},[],{"type":30,"value":2181},{"type":24,"tag":43,"props":6821,"children":6823},{"className":6822},[2118],[6824,6827],{"type":24,"tag":2121,"props":6825,"children":6826},{"disabled":2123,"type":2124},[],{"type":30,"value":2190},{"type":24,"tag":43,"props":6829,"children":6831},{"className":6830},[2118],[6832,6835],{"type":24,"tag":2121,"props":6833,"children":6834},{"disabled":2123,"type":2124},[],{"type":30,"value":2199},{"type":24,"tag":43,"props":6837,"children":6839},{"className":6838},[2118],[6840,6843],{"type":24,"tag":2121,"props":6841,"children":6842},{"disabled":2123,"type":2124},[],{"type":30,"value":2208},{"type":24,"tag":2210,"props":6845,"children":6846},{},[],{"type":24,"tag":33,"props":6848,"children":6849},{},[6850,6854,6855,6859],{"type":24,"tag":77,"props":6851,"children":6852},{},[6853],{"type":30,"value":2220},{"type":30,"value":2222},{"type":24,"tag":2062,"props":6856,"children":6857},{"href":2225},[6858],{"type":30,"value":2228},{"type":30,"value":2230},{"title":7,"searchDepth":2232,"depth":2232,"links":6861},[6862,6863,6868,6873,6878,6883,6888,6893,6903,6904],{"id":27,"depth":2235,"text":31},{"id":93,"depth":2235,"text":96,"children":6864},[6865,6866,6867],{"id":100,"depth":2232,"text":103},{"id":159,"depth":2232,"text":162},{"id":208,"depth":2232,"text":211},{"id":252,"depth":2235,"text":252,"children":6869},[6870,6871,6872],{"id":257,"depth":2232,"text":260},{"id":406,"depth":2232,"text":409},{"id":490,"depth":2232,"text":493},{"id":573,"depth":2235,"text":573,"children":6874},[6875,6876,6877],{"id":578,"depth":2232,"text":581},{"id":659,"depth":2232,"text":662},{"id":736,"depth":2232,"text":739},{"id":833,"depth":2235,"text":833,"children":6879},[6880,6881,6882],{"id":838,"depth":2232,"text":841},{"id":858,"depth":2232,"text":861},{"id":898,"depth":2232,"text":901},{"id":918,"depth":2235,"text":918,"children":6884},[6885,6886,6887],{"id":923,"depth":2232,"text":923},{"id":1037,"depth":2232,"text":1037},{"id":1056,"depth":2232,"text":1059},{"id":1076,"depth":2235,"text":1076,"children":6889},[6890,6891,6892],{"id":1081,"depth":2232,"text":1084},{"id":1203,"depth":2232,"text":1206},{"id":1304,"depth":2232,"text":1307},{"id":1399,"depth":2235,"text":1402,"children":6894},[6895,6896,6897,6898,6899,6900,6901,6902],{"id":1405,"depth":2232,"text":1408},{"id":1464,"depth":2232,"text":1467},{"id":1520,"depth":2232,"text":1523},{"id":1593,"depth":2232,"text":1596},{"id":1696,"depth":2232,"text":1699},{"id":1763,"depth":2232,"text":1766},{"id":1830,"depth":2232,"text":1833},{"id":1912,"depth":2232,"text":1915},{"id":2052,"depth":2235,"text":2052},{"id":2101,"depth":2235,"text":2104},1782088238655]