[{"data":1,"prerenderedAt":3931},["ShallowReactive",2],{"article-/topics/ai/ai-agent-human-task-node-sla-escalation":3,"related-ai":656,"content-query-a00o8nKKZb":3423},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":9,"date":10,"topic":5,"author":11,"tags":12,"image":17,"imageQuery":18,"pexelsPhotoId":19,"pexelsUrl":20,"featured":6,"readingTime":21,"body":22,"_type":650,"_id":651,"_source":652,"_file":653,"_stem":654,"_extension":655},"/topics/ai/ai-agent-human-task-node-sla-escalation","ai",false,"","AI agent Human Task Node SLA：人工节点不是黑洞，必须有升级路径","很多工作流卡在人工节点后无人追踪。本文讲清 human task 节点的 SLA 设计、升级规则与看板指标。","2026-05-30","HTMLPAGE 团队",[13,14,15,16],"AI agent","Human Task","SLA","Escalation","/images/articles/ai-agent-human-task-node-sla-escalation-featured.jpg","team meeting service level agreement planning",6814521,"https://www.pexels.com/photo/a-person-signing-a-contract-6814521/",12,{"type":23,"children":24,"toc":636},"root",[25,33,38,44,124,129,135,140,240,245,251,256,271,276,282,287,292,311,316,321,344,349,354,372,377,382,387,420,425,431,436,497,502,507,512,535,540,546,600,605],{"type":26,"tag":27,"props":28,"children":29},"element","p",{},[30],{"type":31,"value":32},"text","AI 自动化系统最常见的吞吐瓶颈不是模型，而是人工节点。只要 human task 没有 SLA 和升级规则，流程很快会出现“卡住但没人负责”。",{"type":26,"tag":27,"props":34,"children":35},{},[36],{"type":31,"value":37},"这类问题最容易被误判成“人手不足”，但真正根因通常是流程治理缺失。",{"type":26,"tag":39,"props":40,"children":42},"h2",{"id":41},"人工节点治理四件事",[43],{"type":31,"value":41},{"type":26,"tag":45,"props":46,"children":47},"table",{},[48,67],{"type":26,"tag":49,"props":50,"children":51},"thead",{},[52],{"type":26,"tag":53,"props":54,"children":55},"tr",{},[56,62],{"type":26,"tag":57,"props":58,"children":59},"th",{},[60],{"type":31,"value":61},"维度",{"type":26,"tag":57,"props":63,"children":64},{},[65],{"type":31,"value":66},"最小要求",{"type":26,"tag":68,"props":69,"children":70},"tbody",{},[71,85,98,111],{"type":26,"tag":53,"props":72,"children":73},{},[74,80],{"type":26,"tag":75,"props":76,"children":77},"td",{},[78],{"type":31,"value":79},"响应时限",{"type":26,"tag":75,"props":81,"children":82},{},[83],{"type":31,"value":84},"每类任务定义首响 SLA",{"type":26,"tag":53,"props":86,"children":87},{},[88,93],{"type":26,"tag":75,"props":89,"children":90},{},[91],{"type":31,"value":92},"处理时限",{"type":26,"tag":75,"props":94,"children":95},{},[96],{"type":31,"value":97},"定义完成 SLA 与超时动作",{"type":26,"tag":53,"props":99,"children":100},{},[101,106],{"type":26,"tag":75,"props":102,"children":103},{},[104],{"type":31,"value":105},"升级路径",{"type":26,"tag":75,"props":107,"children":108},{},[109],{"type":31,"value":110},"超时自动升级到下一责任层",{"type":26,"tag":53,"props":112,"children":113},{},[114,119],{"type":26,"tag":75,"props":115,"children":116},{},[117],{"type":31,"value":118},"可见性",{"type":26,"tag":75,"props":120,"children":121},{},[122],{"type":31,"value":123},"看板显示 aging 与阻塞原因",{"type":26,"tag":27,"props":125,"children":126},{},[127],{"type":31,"value":128},"这四项缺任一项，人工节点都会变成黑洞。",{"type":26,"tag":39,"props":130,"children":132},{"id":131},"sla-不应一刀切",[133],{"type":31,"value":134},"SLA 不应“一刀切”",{"type":26,"tag":27,"props":136,"children":137},{},[138],{"type":31,"value":139},"建议按风险等级分层：",{"type":26,"tag":45,"props":141,"children":142},{},[143,169],{"type":26,"tag":49,"props":144,"children":145},{},[146],{"type":26,"tag":53,"props":147,"children":148},{},[149,154,159,164],{"type":26,"tag":57,"props":150,"children":151},{},[152],{"type":31,"value":153},"任务等级",{"type":26,"tag":57,"props":155,"children":156},{},[157],{"type":31,"value":158},"首响 SLA",{"type":26,"tag":57,"props":160,"children":161},{},[162],{"type":31,"value":163},"完成 SLA",{"type":26,"tag":57,"props":165,"children":166},{},[167],{"type":31,"value":168},"升级策略",{"type":26,"tag":68,"props":170,"children":171},{},[172,195,218],{"type":26,"tag":53,"props":173,"children":174},{},[175,180,185,190],{"type":26,"tag":75,"props":176,"children":177},{},[178],{"type":31,"value":179},"L1 低风险",{"type":26,"tag":75,"props":181,"children":182},{},[183],{"type":31,"value":184},"4h",{"type":26,"tag":75,"props":186,"children":187},{},[188],{"type":31,"value":189},"24h",{"type":26,"tag":75,"props":191,"children":192},{},[193],{"type":31,"value":194},"单次提醒",{"type":26,"tag":53,"props":196,"children":197},{},[198,203,208,213],{"type":26,"tag":75,"props":199,"children":200},{},[201],{"type":31,"value":202},"L2 中风险",{"type":26,"tag":75,"props":204,"children":205},{},[206],{"type":31,"value":207},"2h",{"type":26,"tag":75,"props":209,"children":210},{},[211],{"type":31,"value":212},"8h",{"type":26,"tag":75,"props":214,"children":215},{},[216],{"type":31,"value":217},"双次提醒 + 主管升级",{"type":26,"tag":53,"props":219,"children":220},{},[221,226,231,235],{"type":26,"tag":75,"props":222,"children":223},{},[224],{"type":31,"value":225},"L3 高风险",{"type":26,"tag":75,"props":227,"children":228},{},[229],{"type":31,"value":230},"30m",{"type":26,"tag":75,"props":232,"children":233},{},[234],{"type":31,"value":207},{"type":26,"tag":75,"props":236,"children":237},{},[238],{"type":31,"value":239},"立即升级 + 备援接手",{"type":26,"tag":27,"props":241,"children":242},{},[243],{"type":31,"value":244},"分层后，资源才会用在真正关键节点上。",{"type":26,"tag":39,"props":246,"children":248},{"id":247},"容量模型别只盯-sla不算负载",[249],{"type":31,"value":250},"容量模型：别只盯 SLA，不算负载",{"type":26,"tag":27,"props":252,"children":253},{},[254],{"type":31,"value":255},"至少要回答两个问题：",{"type":26,"tag":257,"props":258,"children":259},"ol",{},[260,266],{"type":26,"tag":261,"props":262,"children":263},"li",{},[264],{"type":31,"value":265},"峰值时段的任务到达率是多少？",{"type":26,"tag":261,"props":267,"children":268},{},[269],{"type":31,"value":270},"每个审核员在质量不下降前提下的处理吞吐是多少？",{"type":26,"tag":27,"props":272,"children":273},{},[274],{"type":31,"value":275},"没有容量模型，SLA 只是口号。",{"type":26,"tag":39,"props":277,"children":279},{"id":278},"失败案例审批队列假日堆积",[280],{"type":31,"value":281},"失败案例：审批队列假日堆积",{"type":26,"tag":27,"props":283,"children":284},{},[285],{"type":31,"value":286},"某平台在节假日无 on-call 备援，审批节点平均卡 36 小时。业务侧把问题归咎于“自动化没价值”，实际上是人工节点没有组织级保障。",{"type":26,"tag":27,"props":288,"children":289},{},[290],{"type":31,"value":291},"修复动作：",{"type":26,"tag":293,"props":294,"children":295},"ul",{},[296,301,306],{"type":26,"tag":261,"props":297,"children":298},{},[299],{"type":31,"value":300},"增加节假日值班与共享队列。",{"type":26,"tag":261,"props":302,"children":303},{},[304],{"type":31,"value":305},"超时任务自动升级到备援角色。",{"type":26,"tag":261,"props":307,"children":308},{},[309],{"type":31,"value":310},"高风险任务启用优先通道。",{"type":26,"tag":27,"props":312,"children":313},{},[314],{"type":31,"value":315},"改完后，堵塞显著下降。",{"type":26,"tag":39,"props":317,"children":319},{"id":318},"监控与告警建议",[320],{"type":31,"value":318},{"type":26,"tag":293,"props":322,"children":323},{},[324,329,334,339],{"type":26,"tag":261,"props":325,"children":326},{},[327],{"type":31,"value":328},"aging P95",{"type":26,"tag":261,"props":330,"children":331},{},[332],{"type":31,"value":333},"超时升级率",{"type":26,"tag":261,"props":335,"children":336},{},[337],{"type":31,"value":338},"升级后二次超时率",{"type":26,"tag":261,"props":340,"children":341},{},[342],{"type":31,"value":343},"任务退回率",{"type":26,"tag":27,"props":345,"children":346},{},[347],{"type":31,"value":348},"退回率高常常意味着“上游证据包质量差”，不一定是审核员效率低。",{"type":26,"tag":39,"props":350,"children":352},{"id":351},"组织层面要做的事",[353],{"type":31,"value":351},{"type":26,"tag":293,"props":355,"children":356},{},[357,362,367],{"type":26,"tag":261,"props":358,"children":359},{},[360],{"type":31,"value":361},"明确值班责任，不依赖临时协调。",{"type":26,"tag":261,"props":363,"children":364},{},[365],{"type":31,"value":366},"把人工节点指标纳入周度运营复盘。",{"type":26,"tag":261,"props":368,"children":369},{},[370],{"type":31,"value":371},"对高风险场景预留突发处理容量。",{"type":26,"tag":27,"props":373,"children":374},{},[375],{"type":31,"value":376},"否则你做的是“流程自动化”，不是“运营自动化”。",{"type":26,"tag":39,"props":378,"children":380},{"id":379},"人工任务包决定处理效率",[381],{"type":31,"value":379},{"type":26,"tag":27,"props":383,"children":384},{},[385],{"type":31,"value":386},"很多人工节点慢，不是因为人不愿意处理，而是任务包质量太差。一个可用的人工作业包至少包含：",{"type":26,"tag":293,"props":388,"children":389},{},[390,395,400,405,410,415],{"type":26,"tag":261,"props":391,"children":392},{},[393],{"type":31,"value":394},"任务目标",{"type":26,"tag":261,"props":396,"children":397},{},[398],{"type":31,"value":399},"系统建议结论",{"type":26,"tag":261,"props":401,"children":402},{},[403],{"type":31,"value":404},"关键证据",{"type":26,"tag":261,"props":406,"children":407},{},[408],{"type":31,"value":409},"风险点",{"type":26,"tag":261,"props":411,"children":412},{},[413],{"type":31,"value":414},"可选动作",{"type":26,"tag":261,"props":416,"children":417},{},[418],{"type":31,"value":419},"超时后果",{"type":26,"tag":27,"props":421,"children":422},{},[423],{"type":31,"value":424},"如果审核员需要自己翻日志、查上下文、找证据，SLA 再漂亮也会失效。",{"type":26,"tag":39,"props":426,"children":428},{"id":427},"路由规则谁来处理比什么时候处理更重要",[429],{"type":31,"value":430},"路由规则：谁来处理比什么时候处理更重要",{"type":26,"tag":27,"props":432,"children":433},{},[434],{"type":31,"value":435},"任务路由建议按三类信号：",{"type":26,"tag":45,"props":437,"children":438},{},[439,455],{"type":26,"tag":49,"props":440,"children":441},{},[442],{"type":26,"tag":53,"props":443,"children":444},{},[445,450],{"type":26,"tag":57,"props":446,"children":447},{},[448],{"type":31,"value":449},"信号",{"type":26,"tag":57,"props":451,"children":452},{},[453],{"type":31,"value":454},"路由依据",{"type":26,"tag":68,"props":456,"children":457},{},[458,471,484],{"type":26,"tag":53,"props":459,"children":460},{},[461,466],{"type":26,"tag":75,"props":462,"children":463},{},[464],{"type":31,"value":465},"风险等级",{"type":26,"tag":75,"props":467,"children":468},{},[469],{"type":31,"value":470},"高风险给资深 reviewer",{"type":26,"tag":53,"props":472,"children":473},{},[474,479],{"type":26,"tag":75,"props":475,"children":476},{},[477],{"type":31,"value":478},"领域标签",{"type":26,"tag":75,"props":480,"children":481},{},[482],{"type":31,"value":483},"技术、法务、财务分别路由",{"type":26,"tag":53,"props":485,"children":486},{},[487,492],{"type":26,"tag":75,"props":488,"children":489},{},[490],{"type":31,"value":491},"当前负载",{"type":26,"tag":75,"props":493,"children":494},{},[495],{"type":31,"value":496},"避免把任务堆给单个 owner",{"type":26,"tag":27,"props":498,"children":499},{},[500],{"type":31,"value":501},"路由做不好，升级链路会变成“不断转派”。",{"type":26,"tag":39,"props":503,"children":505},{"id":504},"复盘不只看谁超时",[506],{"type":31,"value":504},{"type":26,"tag":27,"props":508,"children":509},{},[510],{"type":31,"value":511},"每次人工节点超时，复盘要问：",{"type":26,"tag":257,"props":513,"children":514},{},[515,520,525,530],{"type":26,"tag":261,"props":516,"children":517},{},[518],{"type":31,"value":519},"任务是否路由给了正确的人？",{"type":26,"tag":261,"props":521,"children":522},{},[523],{"type":31,"value":524},"任务包是否足够完整？",{"type":26,"tag":261,"props":526,"children":527},{},[528],{"type":31,"value":529},"SLA 是否符合风险等级？",{"type":26,"tag":261,"props":531,"children":532},{},[533],{"type":31,"value":534},"是否需要把某类人工判断沉淀成自动规则？",{"type":26,"tag":27,"props":536,"children":537},{},[538],{"type":31,"value":539},"最后一条很关键。好的人工节点不是永远人工处理，而是不断把稳定判断沉淀回系统。",{"type":26,"tag":39,"props":541,"children":543},{"id":542},"checklist",[544],{"type":31,"value":545},"Checklist",{"type":26,"tag":293,"props":547,"children":550},{"className":548},[549],"contains-task-list",[551,564,573,582,591],{"type":26,"tag":261,"props":552,"children":555},{"className":553},[554],"task-list-item",[556,562],{"type":26,"tag":557,"props":558,"children":561},"input",{"disabled":559,"type":560},true,"checkbox",[],{"type":31,"value":563}," 人工节点均有分级 SLA 定义",{"type":26,"tag":261,"props":565,"children":567},{"className":566},[554],[568,571],{"type":26,"tag":557,"props":569,"children":570},{"disabled":559,"type":560},[],{"type":31,"value":572}," 超时升级链路已自动化",{"type":26,"tag":261,"props":574,"children":576},{"className":575},[554],[577,580],{"type":26,"tag":557,"props":578,"children":579},{"disabled":559,"type":560},[],{"type":31,"value":581}," 看板按 aging 与风险展示阻塞",{"type":26,"tag":261,"props":583,"children":585},{"className":584},[554],[586,589],{"type":26,"tag":557,"props":587,"children":588},{"disabled":559,"type":560},[],{"type":31,"value":590}," 人工节点有容量模型与排班策略",{"type":26,"tag":261,"props":592,"children":594},{"className":593},[554],[595,598],{"type":26,"tag":557,"props":596,"children":597},{"disabled":559,"type":560},[],{"type":31,"value":599}," 复盘包含人工瓶颈与上游质量分析",{"type":26,"tag":27,"props":601,"children":602},{},[603],{"type":31,"value":604},"延伸阅读：",{"type":26,"tag":293,"props":606,"children":607},{},[608,618,627],{"type":26,"tag":261,"props":609,"children":610},{},[611],{"type":26,"tag":612,"props":613,"children":615},"a",{"href":614},"/topics/ai/ai-agent-human-review-console-design",[616],{"type":31,"value":617},"AI agent Human Review Console 设计",{"type":26,"tag":261,"props":619,"children":620},{},[621],{"type":26,"tag":612,"props":622,"children":624},{"href":623},"/topics/ai/ai-agent-review-queue-aging-escalation",[625],{"type":31,"value":626},"AI agent Review Queue Aging 与升级",{"type":26,"tag":261,"props":628,"children":629},{},[630],{"type":26,"tag":612,"props":631,"children":633},{"href":632},"/topics/ai/ai-agent-where-to-insert-approval",[634],{"type":31,"value":635},"AI agent Where To Insert Approval",{"title":7,"searchDepth":637,"depth":637,"links":638},3,[639,641,642,643,644,645,646,647,648,649],{"id":41,"depth":640,"text":41},2,{"id":131,"depth":640,"text":134},{"id":247,"depth":640,"text":250},{"id":278,"depth":640,"text":281},{"id":318,"depth":640,"text":318},{"id":351,"depth":640,"text":351},{"id":379,"depth":640,"text":379},{"id":427,"depth":640,"text":430},{"id":504,"depth":640,"text":504},{"id":542,"depth":640,"text":545},"markdown","content:topics:ai:ai-agent-human-task-node-sla-escalation.md","content","topics/ai/ai-agent-human-task-node-sla-escalation.md","topics/ai/ai-agent-human-task-node-sla-escalation","md",[657,1811,2760],{"_path":658,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":659,"description":660,"date":661,"topic":5,"author":11,"tags":662,"image":668,"imageAlt":669,"pexelsPhotoId":670,"pexelsUrl":671,"readingTime":21,"body":672,"_type":650,"_id":1808,"_source":652,"_file":1809,"_stem":1810,"_extension":655},"/topics/ai/cursor-keyboard-shortcuts-cheatsheet","Cursor 快捷键速查表（macOS/Windows）：从“会用”到“能提效”的 10 个工作流","把 Cursor 常用快捷键按任务分组（查代码、改代码、多文件、对话、审查与回滚），给出可直接照抄的工作流与最小回归清单，避免“快捷键背了也没变快”。","2026-03-02",[663,664,665,666,667],"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/",{"type":23,"children":673,"toc":1782},[674,679,697,702,730,735,771,775,781,786,819,824,847,850,856,861,1080,1089,1092,1098,1105,1124,1132,1153,1158,1164,1179,1210,1215,1228,1234,1253,1271,1279,1284,1290,1295,1316,1324,1330,1335,1358,1363,1369,1382,1388,1406,1424,1430,1441,1459,1465,1476,1482,1487,1530,1533,1539,1547,1600,1603,1609,1615,1620,1625,1648,1666,1671,1696,1699,1705,1711,1716,1722,1727,1733,1738,1741,1747],{"type":26,"tag":27,"props":675,"children":676},{},[677],{"type":31,"value":678},"如果你在搜“Cursor 快捷键”，你大概率不是想背一张表，而是想解决这类问题：",{"type":26,"tag":293,"props":680,"children":681},{},[682,687,692],{"type":26,"tag":261,"props":683,"children":684},{},[685],{"type":31,"value":686},"为什么我用了 AI，还是很慢？（对话来回太多、改动不可控）",{"type":26,"tag":261,"props":688,"children":689},{},[690],{"type":31,"value":691},"为什么它“看起来懂了”，却改错文件/改出回归？（上下文与范围没锁住）",{"type":26,"tag":261,"props":693,"children":694},{},[695],{"type":31,"value":696},"多文件改动怎么做得安全？（验收、回滚、最小回归集）",{"type":26,"tag":27,"props":698,"children":699},{},[700],{"type":31,"value":701},"这篇文章给你两份东西：",{"type":26,"tag":257,"props":703,"children":704},{},[705,718],{"type":26,"tag":261,"props":706,"children":707},{},[708,710,716],{"type":31,"value":709},"一张",{"type":26,"tag":711,"props":712,"children":713},"strong",{},[714],{"type":31,"value":715},"按任务分组",{"type":31,"value":717},"的快捷键表（不是按功能堆在一起）",{"type":26,"tag":261,"props":719,"children":720},{},[721,723,728],{"type":31,"value":722},"一套“从需求到落地”的",{"type":26,"tag":711,"props":724,"children":725},{},[726],{"type":31,"value":727},"最小闭环工作流",{"type":31,"value":729},"（每一步都有快捷键）",{"type":26,"tag":27,"props":731,"children":732},{},[733],{"type":31,"value":734},"想看系统玩法：",{"type":26,"tag":293,"props":736,"children":737},{},[738,749,760],{"type":26,"tag":261,"props":739,"children":740},{},[741,743],{"type":31,"value":742},"入门教程看：",{"type":26,"tag":612,"props":744,"children":746},{"href":745},"/topics/ai/cursor-tutorial",[747],{"type":31,"value":748},"Cursor 使用教程（2026）",{"type":26,"tag":261,"props":750,"children":751},{},[752,754],{"type":31,"value":753},"进阶玩法看：",{"type":26,"tag":612,"props":755,"children":757},{"href":756},"/topics/ai/cursor-editor-guide",[758],{"type":31,"value":759},"Cursor 编辑器深度玩法",{"type":26,"tag":261,"props":761,"children":762},{},[763,765],{"type":31,"value":764},"规则与忽略看：",{"type":26,"tag":612,"props":766,"children":768},{"href":767},"/topics/ai/cursor-rules-cursorrules",[769],{"type":31,"value":770},"Cursor Rules 与 .cursorrules",{"type":26,"tag":772,"props":773,"children":774},"hr",{},[],{"type":26,"tag":39,"props":776,"children":778},{"id":777},"先给结论提效不是按得快而是闭环更短",[779],{"type":31,"value":780},"先给结论：提效不是“按得快”，而是“闭环更短”",{"type":26,"tag":27,"props":782,"children":783},{},[784],{"type":31,"value":785},"你可以把 Cursor 的快捷键理解为 3 条流水线：",{"type":26,"tag":293,"props":787,"children":788},{},[789,799,809],{"type":26,"tag":261,"props":790,"children":791},{},[792,797],{"type":26,"tag":711,"props":793,"children":794},{},[795],{"type":31,"value":796},"改一小段",{"type":31,"value":798},"（内联编辑）：把改动限制在一个函数/一段样式",{"type":26,"tag":261,"props":800,"children":801},{},[802,807],{"type":26,"tag":711,"props":803,"children":804},{},[805],{"type":31,"value":806},"改一组文件",{"type":31,"value":808},"（Composer）：把改动限制在一组明确文件，并要求输出 diff + 验收点",{"type":26,"tag":261,"props":810,"children":811},{},[812,817],{"type":26,"tag":711,"props":813,"children":814},{},[815],{"type":31,"value":816},"聊清楚再动手",{"type":31,"value":818},"（侧边对话）：先对齐目标、范围、验收、回滚",{"type":26,"tag":27,"props":820,"children":821},{},[822],{"type":31,"value":823},"当你觉得“它乱改/改太大”时，往往不是快捷键没记住，而是缺了两件事：",{"type":26,"tag":293,"props":825,"children":826},{},[827,837],{"type":26,"tag":261,"props":828,"children":829},{},[830,832],{"type":31,"value":831},"没有在动手前锁定",{"type":26,"tag":711,"props":833,"children":834},{},[835],{"type":31,"value":836},"范围",{"type":26,"tag":261,"props":838,"children":839},{},[840,842],{"type":31,"value":841},"没有在接受改动前准备",{"type":26,"tag":711,"props":843,"children":844},{},[845],{"type":31,"value":846},"验收/回滚",{"type":26,"tag":772,"props":848,"children":849},{},[],{"type":26,"tag":39,"props":851,"children":853},{"id":852},"快捷键速查表按任务分组",[854],{"type":31,"value":855},"快捷键速查表（按任务分组）",{"type":26,"tag":27,"props":857,"children":858},{},[859],{"type":31,"value":860},"说明：下表按“你正在做什么”组织，而不是按“功能名字”组织。不同版本快捷键可能略有差异，但核心逻辑一致。",{"type":26,"tag":45,"props":862,"children":863},{},[864,890],{"type":26,"tag":49,"props":865,"children":866},{},[867],{"type":26,"tag":53,"props":868,"children":869},{},[870,875,880,885],{"type":26,"tag":57,"props":871,"children":872},{},[873],{"type":31,"value":874},"任务",{"type":26,"tag":57,"props":876,"children":877},{},[878],{"type":31,"value":879},"macOS",{"type":26,"tag":57,"props":881,"children":882},{},[883],{"type":31,"value":884},"Windows",{"type":26,"tag":57,"props":886,"children":887},{},[888],{"type":31,"value":889},"你该在什么时候用",{"type":26,"tag":68,"props":891,"children":892},{},[893,925,956,987,1018,1049],{"type":26,"tag":53,"props":894,"children":895},{},[896,901,911,920],{"type":26,"tag":75,"props":897,"children":898},{},[899],{"type":31,"value":900},"改一小段（最安全）",{"type":26,"tag":75,"props":902,"children":903},{},[904],{"type":26,"tag":905,"props":906,"children":908},"code",{"className":907},[],[909],{"type":31,"value":910},"Cmd + K",{"type":26,"tag":75,"props":912,"children":913},{},[914],{"type":26,"tag":905,"props":915,"children":917},{"className":916},[],[918],{"type":31,"value":919},"Ctrl + K",{"type":26,"tag":75,"props":921,"children":922},{},[923],{"type":31,"value":924},"只想改一个函数/一段 CSS，不想动别的",{"type":26,"tag":53,"props":926,"children":927},{},[928,933,942,951],{"type":26,"tag":75,"props":929,"children":930},{},[931],{"type":31,"value":932},"打开 AI 对话（先对齐再动手）",{"type":26,"tag":75,"props":934,"children":935},{},[936],{"type":26,"tag":905,"props":937,"children":939},{"className":938},[],[940],{"type":31,"value":941},"Cmd + L",{"type":26,"tag":75,"props":943,"children":944},{},[945],{"type":26,"tag":905,"props":946,"children":948},{"className":947},[],[949],{"type":31,"value":950},"Ctrl + L",{"type":26,"tag":75,"props":952,"children":953},{},[954],{"type":31,"value":955},"需要澄清目标、制定步骤、给验收点",{"type":26,"tag":53,"props":957,"children":958},{},[959,964,973,982],{"type":26,"tag":75,"props":960,"children":961},{},[962],{"type":31,"value":963},"多文件编辑（有组织地改一组文件）",{"type":26,"tag":75,"props":965,"children":966},{},[967],{"type":26,"tag":905,"props":968,"children":970},{"className":969},[],[971],{"type":31,"value":972},"Cmd + I",{"type":26,"tag":75,"props":974,"children":975},{},[976],{"type":26,"tag":905,"props":977,"children":979},{"className":978},[],[980],{"type":31,"value":981},"Ctrl + I",{"type":26,"tag":75,"props":983,"children":984},{},[985],{"type":31,"value":986},"改动涉及多个文件：组件+样式+测试",{"type":26,"tag":53,"props":988,"children":989},{},[990,995,1004,1013],{"type":26,"tag":75,"props":991,"children":992},{},[993],{"type":31,"value":994},"把选中代码加入对话上下文",{"type":26,"tag":75,"props":996,"children":997},{},[998],{"type":26,"tag":905,"props":999,"children":1001},{"className":1000},[],[1002],{"type":31,"value":1003},"Cmd + Shift + L",{"type":26,"tag":75,"props":1005,"children":1006},{},[1007],{"type":26,"tag":905,"props":1008,"children":1010},{"className":1009},[],[1011],{"type":31,"value":1012},"Ctrl + Shift + L",{"type":26,"tag":75,"props":1014,"children":1015},{},[1016],{"type":31,"value":1017},"让 AI 只看你选的片段（降低噪音）",{"type":26,"tag":53,"props":1019,"children":1020},{},[1021,1026,1035,1044],{"type":26,"tag":75,"props":1022,"children":1023},{},[1024],{"type":31,"value":1025},"接受当前建议",{"type":26,"tag":75,"props":1027,"children":1028},{},[1029],{"type":26,"tag":905,"props":1030,"children":1032},{"className":1031},[],[1033],{"type":31,"value":1034},"Cmd + Y",{"type":26,"tag":75,"props":1036,"children":1037},{},[1038],{"type":26,"tag":905,"props":1039,"children":1041},{"className":1040},[],[1042],{"type":31,"value":1043},"Ctrl + Y",{"type":26,"tag":75,"props":1045,"children":1046},{},[1047],{"type":31,"value":1048},"你已经准备好验收/回滚，并确认改动范围",{"type":26,"tag":53,"props":1050,"children":1051},{},[1052,1057,1066,1075],{"type":26,"tag":75,"props":1053,"children":1054},{},[1055],{"type":31,"value":1056},"拒绝当前建议",{"type":26,"tag":75,"props":1058,"children":1059},{},[1060],{"type":26,"tag":905,"props":1061,"children":1063},{"className":1062},[],[1064],{"type":31,"value":1065},"Cmd + N",{"type":26,"tag":75,"props":1067,"children":1068},{},[1069],{"type":26,"tag":905,"props":1070,"children":1072},{"className":1071},[],[1073],{"type":31,"value":1074},"Ctrl + N",{"type":26,"tag":75,"props":1076,"children":1077},{},[1078],{"type":31,"value":1079},"改得太大、改错方向，立刻收手",{"type":26,"tag":1081,"props":1082,"children":1083},"blockquote",{},[1084],{"type":26,"tag":27,"props":1085,"children":1086},{},[1087],{"type":31,"value":1088},"小技巧：把“改一小段”当默认路径。只有当你能清晰写出“会改哪几类文件、怎么验收”时再进入多文件。",{"type":26,"tag":772,"props":1090,"children":1091},{},[],{"type":26,"tag":39,"props":1093,"children":1095},{"id":1094},"_10-个可直接照抄的提效工作流每个都能闭环",[1096],{"type":31,"value":1097},"10 个可直接照抄的提效工作流（每个都能闭环）",{"type":26,"tag":1099,"props":1100,"children":1102},"h3",{"id":1101},"工作流-1需求计划小步改新手最稳",[1103],{"type":31,"value":1104},"工作流 1：需求→计划→小步改（新手最稳）",{"type":26,"tag":257,"props":1106,"children":1107},{},[1108,1119],{"type":26,"tag":261,"props":1109,"children":1110},{},[1111,1117],{"type":26,"tag":905,"props":1112,"children":1114},{"className":1113},[],[1115],{"type":31,"value":1116},"Cmd/Ctrl + L",{"type":31,"value":1118}," 打开对话",{"type":26,"tag":261,"props":1120,"children":1121},{},[1122],{"type":31,"value":1123},"先发这段（可复制）：",{"type":26,"tag":1081,"props":1125,"children":1126},{},[1127],{"type":26,"tag":27,"props":1128,"children":1129},{},[1130],{"type":31,"value":1131},"目标：……\n范围：只修改以下文件/模块：……\n非目标：……（明确不做）\n验收：……（可测试/可手动检查）\n输出格式：先给计划，再逐步执行；每一步写出 diff 摘要。",{"type":26,"tag":257,"props":1133,"children":1134},{"start":637},[1135,1140],{"type":26,"tag":261,"props":1136,"children":1137},{},[1138],{"type":31,"value":1139},"让 AI 先给“计划（3~6 步）”，你确认后再执行",{"type":26,"tag":261,"props":1141,"children":1142},{},[1143,1145,1151],{"type":31,"value":1144},"任何一步涉及改代码：优先回到编辑区，选中片段用 ",{"type":26,"tag":905,"props":1146,"children":1148},{"className":1147},[],[1149],{"type":31,"value":1150},"Cmd/Ctrl + K",{"type":31,"value":1152}," 小步改",{"type":26,"tag":27,"props":1154,"children":1155},{},[1156],{"type":31,"value":1157},"为什么有效：你把“想法”变成了“可执行约束”，这就是 GEO（面向 AI/模型的可理解结构）。",{"type":26,"tag":1099,"props":1159,"children":1161},{"id":1160},"工作流-2只改一个函数高频低风险",[1162],{"type":31,"value":1163},"工作流 2：只改一个函数（高频、低风险）",{"type":26,"tag":293,"props":1165,"children":1166},{},[1167],{"type":26,"tag":261,"props":1168,"children":1169},{},[1170,1172,1177],{"type":31,"value":1171},"选中函数 → ",{"type":26,"tag":905,"props":1173,"children":1175},{"className":1174},[],[1176],{"type":31,"value":1150},{"type":31,"value":1178}," → 输入指令：",{"type":26,"tag":1081,"props":1180,"children":1181},{},[1182,1187],{"type":26,"tag":27,"props":1183,"children":1184},{},[1185],{"type":31,"value":1186},"把这段改成更可读：",{"type":26,"tag":293,"props":1188,"children":1189},{},[1190,1195,1200,1205],{"type":26,"tag":261,"props":1191,"children":1192},{},[1193],{"type":31,"value":1194},"用 async/await",{"type":26,"tag":261,"props":1196,"children":1197},{},[1198],{"type":31,"value":1199},"错误处理不要吞掉",{"type":26,"tag":261,"props":1201,"children":1202},{},[1203],{"type":31,"value":1204},"添加类型（若可推断）",{"type":26,"tag":261,"props":1206,"children":1207},{},[1208],{"type":31,"value":1209},"不要改函数签名",{"type":26,"tag":27,"props":1211,"children":1212},{},[1213],{"type":31,"value":1214},"验收方式（强制）：",{"type":26,"tag":293,"props":1216,"children":1217},{},[1218,1223],{"type":26,"tag":261,"props":1219,"children":1220},{},[1221],{"type":31,"value":1222},"输出前后函数行为一致（输入/输出）",{"type":26,"tag":261,"props":1224,"children":1225},{},[1226],{"type":31,"value":1227},"失败分支有可观测日志（不要悄悄 return null）",{"type":26,"tag":1099,"props":1229,"children":1231},{"id":1230},"工作流-3多文件改动先定文件清单",[1232],{"type":31,"value":1233},"工作流 3：多文件改动（先定“文件清单”）",{"type":26,"tag":257,"props":1235,"children":1236},{},[1237,1248],{"type":26,"tag":261,"props":1238,"children":1239},{},[1240,1246],{"type":26,"tag":905,"props":1241,"children":1243},{"className":1242},[],[1244],{"type":31,"value":1245},"Cmd/Ctrl + I",{"type":31,"value":1247}," 进入多文件",{"type":26,"tag":261,"props":1249,"children":1250},{},[1251],{"type":31,"value":1252},"先让 AI 输出：",{"type":26,"tag":293,"props":1254,"children":1255},{},[1256,1261,1266],{"type":26,"tag":261,"props":1257,"children":1258},{},[1259],{"type":31,"value":1260},"预计会改哪些文件（最多 5 个）",{"type":26,"tag":261,"props":1262,"children":1263},{},[1264],{"type":31,"value":1265},"每个文件改什么",{"type":26,"tag":261,"props":1267,"children":1268},{},[1269],{"type":31,"value":1270},"每一步怎么验收",{"type":26,"tag":257,"props":1272,"children":1273},{"start":637},[1274],{"type":26,"tag":261,"props":1275,"children":1276},{},[1277],{"type":31,"value":1278},"你确认文件清单后再开始生成改动",{"type":26,"tag":27,"props":1280,"children":1281},{},[1282],{"type":31,"value":1283},"关键点：多文件最容易翻车的是“它把你没想到的文件也改了”。所以文件清单是第一道闸门。",{"type":26,"tag":1099,"props":1285,"children":1287},{"id":1286},"工作流-4把上下文噪音砍掉防跑偏",[1288],{"type":31,"value":1289},"工作流 4：把“上下文噪音”砍掉（防跑偏）",{"type":26,"tag":27,"props":1291,"children":1292},{},[1293],{"type":31,"value":1294},"当你怀疑它在胡说/乱改时：",{"type":26,"tag":293,"props":1296,"children":1297},{},[1298,1311],{"type":26,"tag":261,"props":1299,"children":1300},{},[1301,1303,1309],{"type":31,"value":1302},"只选择关键代码片段 → ",{"type":26,"tag":905,"props":1304,"children":1306},{"className":1305},[],[1307],{"type":31,"value":1308},"Cmd/Ctrl + Shift + L",{"type":31,"value":1310}," 加入对话",{"type":26,"tag":261,"props":1312,"children":1313},{},[1314],{"type":31,"value":1315},"然后在对话里要求：",{"type":26,"tag":1081,"props":1317,"children":1318},{},[1319],{"type":26,"tag":27,"props":1320,"children":1321},{},[1322],{"type":31,"value":1323},"只基于我提供的代码片段回答，不要假设其它文件存在。",{"type":26,"tag":1099,"props":1325,"children":1327},{"id":1326},"工作流-5生成变更说明让-code-review-变快",[1328],{"type":31,"value":1329},"工作流 5：生成变更说明（让 code review 变快）",{"type":26,"tag":27,"props":1331,"children":1332},{},[1333],{"type":31,"value":1334},"改完后在对话里让它输出：",{"type":26,"tag":293,"props":1336,"children":1337},{},[1338,1343,1348,1353],{"type":26,"tag":261,"props":1339,"children":1340},{},[1341],{"type":31,"value":1342},"改动摘要（3~7 条）",{"type":26,"tag":261,"props":1344,"children":1345},{},[1346],{"type":31,"value":1347},"风险点（依赖/边界条件）",{"type":26,"tag":261,"props":1349,"children":1350},{},[1351],{"type":31,"value":1352},"回滚方式",{"type":26,"tag":261,"props":1354,"children":1355},{},[1356],{"type":31,"value":1357},"验收步骤",{"type":26,"tag":27,"props":1359,"children":1360},{},[1361],{"type":31,"value":1362},"这套结构能直接贴进 PR 描述。",{"type":26,"tag":1099,"props":1364,"children":1366},{"id":1365},"工作流-6写最小回归集不写回归-等事故",[1367],{"type":31,"value":1368},"工作流 6：写“最小回归集”（不写回归 = 等事故）",{"type":26,"tag":27,"props":1370,"children":1371},{},[1372,1374,1380],{"type":31,"value":1373},"每次改动都至少做 10 条最小回归（见下文清单）。你可以把它写在 ",{"type":26,"tag":905,"props":1375,"children":1377},{"className":1376},[],[1378],{"type":31,"value":1379},"README",{"type":31,"value":1381}," 或团队 wiki。",{"type":26,"tag":1099,"props":1383,"children":1385},{"id":1384},"工作流-7把接受建议变成最后一步",[1386],{"type":31,"value":1387},"工作流 7：把“接受建议”变成最后一步",{"type":26,"tag":27,"props":1389,"children":1390},{},[1391,1397,1399,1404],{"type":26,"tag":905,"props":1392,"children":1394},{"className":1393},[],[1395],{"type":31,"value":1396},"Cmd/Ctrl + Y",{"type":31,"value":1398}," 应该是",{"type":26,"tag":711,"props":1400,"children":1401},{},[1402],{"type":31,"value":1403},"最后一步",{"type":31,"value":1405},"：",{"type":26,"tag":293,"props":1407,"children":1408},{},[1409,1414,1419],{"type":26,"tag":261,"props":1410,"children":1411},{},[1412],{"type":31,"value":1413},"你已经看过 diff",{"type":26,"tag":261,"props":1415,"children":1416},{},[1417],{"type":31,"value":1418},"你能说清楚“怎么验收”",{"type":26,"tag":261,"props":1420,"children":1421},{},[1422],{"type":31,"value":1423},"你知道“怎么回滚”",{"type":26,"tag":1099,"props":1425,"children":1427},{"id":1426},"工作流-8拒绝建议不是失败是风控动作",[1428],{"type":31,"value":1429},"工作流 8：拒绝建议不是失败，是风控动作",{"type":26,"tag":27,"props":1431,"children":1432},{},[1433,1439],{"type":26,"tag":905,"props":1434,"children":1436},{"className":1435},[],[1437],{"type":31,"value":1438},"Cmd/Ctrl + N",{"type":31,"value":1440}," 的使用时机：",{"type":26,"tag":293,"props":1442,"children":1443},{},[1444,1449,1454],{"type":26,"tag":261,"props":1445,"children":1446},{},[1447],{"type":31,"value":1448},"它开始改你没提过的东西（范围漂移）",{"type":26,"tag":261,"props":1450,"children":1451},{},[1452],{"type":31,"value":1453},"它改了 10 个文件但你只想改 1 个",{"type":26,"tag":261,"props":1455,"children":1456},{},[1457],{"type":31,"value":1458},"它为了“更优雅”引入新依赖/新抽象",{"type":26,"tag":1099,"props":1460,"children":1462},{"id":1461},"工作流-9重复任务做成模板提示词不是一次性",[1463],{"type":31,"value":1464},"工作流 9：重复任务做成模板（提示词不是一次性）",{"type":26,"tag":27,"props":1466,"children":1467},{},[1468,1470,1474],{"type":31,"value":1469},"把高频任务（比如“写组件+样式+验收”）固化成模板，放进 Rules（见：",{"type":26,"tag":612,"props":1471,"children":1472},{"href":767},[1473],{"type":31,"value":770},{"type":31,"value":1475},"）。",{"type":26,"tag":1099,"props":1477,"children":1479},{"id":1478},"工作流-10把快捷键表做成你自己的任务表",[1480],{"type":31,"value":1481},"工作流 10：把“快捷键表”做成你自己的任务表",{"type":26,"tag":27,"props":1483,"children":1484},{},[1485],{"type":31,"value":1486},"你不需要记住所有快捷键，只需要记住：",{"type":26,"tag":293,"props":1488,"children":1489},{},[1490,1500,1510,1520],{"type":26,"tag":261,"props":1491,"children":1492},{},[1493,1495],{"type":31,"value":1494},"小步改：",{"type":26,"tag":905,"props":1496,"children":1498},{"className":1497},[],[1499],{"type":31,"value":1150},{"type":26,"tag":261,"props":1501,"children":1502},{},[1503,1505],{"type":31,"value":1504},"先对齐：",{"type":26,"tag":905,"props":1506,"children":1508},{"className":1507},[],[1509],{"type":31,"value":1116},{"type":26,"tag":261,"props":1511,"children":1512},{},[1513,1515],{"type":31,"value":1514},"多文件：",{"type":26,"tag":905,"props":1516,"children":1518},{"className":1517},[],[1519],{"type":31,"value":1245},{"type":26,"tag":261,"props":1521,"children":1522},{},[1523,1525],{"type":31,"value":1524},"上下文聚焦：",{"type":26,"tag":905,"props":1526,"children":1528},{"className":1527},[],[1529],{"type":31,"value":1308},{"type":26,"tag":772,"props":1531,"children":1532},{},[],{"type":26,"tag":39,"props":1534,"children":1536},{"id":1535},"必交付物-1最小回归任务清单10-条通用",[1537],{"type":31,"value":1538},"必交付物 1：最小回归任务清单（10 条，通用）",{"type":26,"tag":1081,"props":1540,"children":1541},{},[1542],{"type":26,"tag":27,"props":1543,"children":1544},{},[1545],{"type":31,"value":1546},"这份清单的意义：让每次 AI 改动都能“被验证”。否则你只是把不可控变成了更快的不可控。",{"type":26,"tag":257,"props":1548,"children":1549},{},[1550,1555,1560,1565,1570,1575,1580,1585,1590,1595],{"type":26,"tag":261,"props":1551,"children":1552},{},[1553],{"type":31,"value":1554},"关键路径能跑通（手动点击/请求一次）",{"type":26,"tag":261,"props":1556,"children":1557},{},[1558],{"type":31,"value":1559},"错误路径能触发（模拟一次失败输入）",{"type":26,"tag":261,"props":1561,"children":1562},{},[1563],{"type":31,"value":1564},"控制台无新增错误（至少关注 1 次真实操作）",{"type":26,"tag":261,"props":1566,"children":1567},{},[1568],{"type":31,"value":1569},"关键 UI 未错位（移动端/桌面端各看一眼）",{"type":26,"tag":261,"props":1571,"children":1572},{},[1573],{"type":31,"value":1574},"刷新后状态正确（尤其是表单/列表）",{"type":26,"tag":261,"props":1576,"children":1577},{},[1578],{"type":31,"value":1579},"路由跳转没断（从入口到目标页）",{"type":26,"tag":261,"props":1581,"children":1582},{},[1583],{"type":31,"value":1584},"相关接口未改变契约（字段名/类型）",{"type":26,"tag":261,"props":1586,"children":1587},{},[1588],{"type":31,"value":1589},"性能没有明显退化（首屏、交互卡顿）",{"type":26,"tag":261,"props":1591,"children":1592},{},[1593],{"type":31,"value":1594},"回滚方案可执行（知道回滚哪几个文件/commit）",{"type":26,"tag":261,"props":1596,"children":1597},{},[1598],{"type":31,"value":1599},"写下“这次改动解决了什么、风险是什么”（可贴 PR）",{"type":26,"tag":772,"props":1601,"children":1602},{},[],{"type":26,"tag":39,"props":1604,"children":1606},{"id":1605},"必交付物-2失败案例复盘真实会发生",[1607],{"type":31,"value":1608},"必交付物 2：失败案例复盘（真实会发生）",{"type":26,"tag":1099,"props":1610,"children":1612},{"id":1611},"现象快捷键用得很熟但交付还是慢",[1613],{"type":31,"value":1614},"现象：快捷键用得很熟，但交付还是慢",{"type":26,"tag":27,"props":1616,"children":1617},{},[1618],{"type":31,"value":1619},"典型原因：你把 Cursor 当成“更聪明的搜索框”，不断对话，直到它给出你想要的答案。",{"type":26,"tag":27,"props":1621,"children":1622},{},[1623],{"type":31,"value":1624},"复现路径：",{"type":26,"tag":293,"props":1626,"children":1627},{},[1628,1633,1638,1643],{"type":26,"tag":261,"props":1629,"children":1630},{},[1631],{"type":31,"value":1632},"你直接说“把页面做得更好看、更高级”",{"type":26,"tag":261,"props":1634,"children":1635},{},[1636],{"type":31,"value":1637},"AI 开始大改样式、抽象组件、甚至引入新依赖",{"type":26,"tag":261,"props":1639,"children":1640},{},[1641],{"type":31,"value":1642},"你为了省事按了“接受建议”",{"type":26,"tag":261,"props":1644,"children":1645},{},[1646],{"type":31,"value":1647},"最后发现：设计没统一、移动端崩、甚至埋了性能问题",{"type":26,"tag":27,"props":1649,"children":1650},{},[1651,1653,1657,1659,1664],{"type":31,"value":1652},"根因：缺少",{"type":26,"tag":711,"props":1654,"children":1655},{},[1656],{"type":31,"value":836},{"type":31,"value":1658},"与",{"type":26,"tag":711,"props":1660,"children":1661},{},[1662],{"type":31,"value":1663},"验收",{"type":31,"value":1665},"。",{"type":26,"tag":27,"props":1667,"children":1668},{},[1669],{"type":31,"value":1670},"修复方式（可照抄）：",{"type":26,"tag":293,"props":1672,"children":1673},{},[1674,1679,1691],{"type":26,"tag":261,"props":1675,"children":1676},{},[1677],{"type":31,"value":1678},"把需求拆成 3 个可验证目标：例如“按钮样式统一”“首屏 CTA 更明显”“移动端间距不挤”",{"type":26,"tag":261,"props":1680,"children":1681},{},[1682,1684,1689],{"type":31,"value":1683},"每个目标只用 ",{"type":26,"tag":905,"props":1685,"children":1687},{"className":1686},[],[1688],{"type":31,"value":1150},{"type":31,"value":1690}," 改一个局部",{"type":26,"tag":261,"props":1692,"children":1693},{},[1694],{"type":31,"value":1695},"每次接受建议前跑一遍“最小回归集”",{"type":26,"tag":772,"props":1697,"children":1698},{},[],{"type":26,"tag":39,"props":1700,"children":1702},{"id":1701},"faq高频问题",[1703],{"type":31,"value":1704},"FAQ（高频问题）",{"type":26,"tag":1099,"props":1706,"children":1708},{"id":1707},"q1我应该先记快捷键还是先学工作流",[1709],{"type":31,"value":1710},"Q1：我应该先记快捷键还是先学工作流？",{"type":26,"tag":27,"props":1712,"children":1713},{},[1714],{"type":31,"value":1715},"先学工作流。快捷键只是把工作流的步骤变短。",{"type":26,"tag":1099,"props":1717,"children":1719},{"id":1718},"q2为什么我一用多文件就容易翻车",[1720],{"type":31,"value":1721},"Q2：为什么我一用多文件就容易翻车？",{"type":26,"tag":27,"props":1723,"children":1724},{},[1725],{"type":31,"value":1726},"因为多文件意味着范围更大、依赖更多、验收更难。先锁定“文件清单 + 每步验收”，再让它动手。",{"type":26,"tag":1099,"props":1728,"children":1730},{"id":1729},"q3有没有万能提示词",[1731],{"type":31,"value":1732},"Q3：有没有“万能提示词”？",{"type":26,"tag":27,"props":1734,"children":1735},{},[1736],{"type":31,"value":1737},"没有，但有“万能结构”：目标、范围、非目标、验收、输出格式。",{"type":26,"tag":772,"props":1739,"children":1740},{},[],{"type":26,"tag":39,"props":1742,"children":1744},{"id":1743},"延伸阅读建议按顺序",[1745],{"type":31,"value":1746},"延伸阅读（建议按顺序）",{"type":26,"tag":293,"props":1748,"children":1749},{},[1750,1757,1764,1771],{"type":26,"tag":261,"props":1751,"children":1752},{},[1753],{"type":26,"tag":612,"props":1754,"children":1755},{"href":745},[1756],{"type":31,"value":748},{"type":26,"tag":261,"props":1758,"children":1759},{},[1760],{"type":26,"tag":612,"props":1761,"children":1762},{"href":756},[1763],{"type":31,"value":759},{"type":26,"tag":261,"props":1765,"children":1766},{},[1767],{"type":26,"tag":612,"props":1768,"children":1769},{"href":767},[1770],{"type":31,"value":770},{"type":26,"tag":261,"props":1772,"children":1773},{},[1774,1776],{"type":31,"value":1775},"如果你更关心“网页制作落地”：看这篇 ",{"type":26,"tag":612,"props":1777,"children":1779},{"href":1778},"/topics/practical-tips/htmlpage-quick-landing-page",[1780],{"type":31,"value":1781},"3 分钟用 HTMLPAGE 做落地页",{"title":7,"searchDepth":637,"depth":637,"links":1783},[1784,1785,1786,1798,1799,1802,1807],{"id":777,"depth":640,"text":780},{"id":852,"depth":640,"text":855},{"id":1094,"depth":640,"text":1097,"children":1787},[1788,1789,1790,1791,1792,1793,1794,1795,1796,1797],{"id":1101,"depth":637,"text":1104},{"id":1160,"depth":637,"text":1163},{"id":1230,"depth":637,"text":1233},{"id":1286,"depth":637,"text":1289},{"id":1326,"depth":637,"text":1329},{"id":1365,"depth":637,"text":1368},{"id":1384,"depth":637,"text":1387},{"id":1426,"depth":637,"text":1429},{"id":1461,"depth":637,"text":1464},{"id":1478,"depth":637,"text":1481},{"id":1535,"depth":640,"text":1538},{"id":1605,"depth":640,"text":1608,"children":1800},[1801],{"id":1611,"depth":637,"text":1614},{"id":1701,"depth":640,"text":1704,"children":1803},[1804,1805,1806],{"id":1707,"depth":637,"text":1710},{"id":1718,"depth":637,"text":1721},{"id":1729,"depth":637,"text":1732},{"id":1743,"depth":640,"text":1746},"content:topics:ai:cursor-keyboard-shortcuts-cheatsheet.md","topics/ai/cursor-keyboard-shortcuts-cheatsheet.md","topics/ai/cursor-keyboard-shortcuts-cheatsheet",{"_path":1812,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":1813,"description":1814,"date":1815,"topic":5,"author":11,"tags":1816,"image":1820,"imageAlt":1821,"pexelsPhotoId":1822,"pexelsUrl":1823,"readingTime":1824,"body":1825,"_type":650,"_id":2757,"_source":652,"_file":2758,"_stem":2759,"_extension":655},"/topics/ai/cursor-vs-copilot-vscode-workflow","Cursor vs GitHub Copilot vs VS Code：怎么选、怎么搭配、怎么把风险关在笼子里","用“任务类型×风险×验收成本”的选择矩阵解释 Cursor/Copilot/VS Code 的差异，并给出一套可落地的协作工作流（范围闸门、最小回归集、回滚策略）。","2026-03-01",[663,1817,666,1818,1819],"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":23,"children":1826,"toc":2735},[1827,1832,1837,1855,1860,1878,1881,1887,1892,1923,1928,1931,1937,1945,2149,2157,2170,2173,2179,2185,2198,2203,2216,2222,2227,2260,2266,2271,2289,2292,2298,2303,2309,2314,2347,2353,2366,2371,2384,2390,2402,2408,2413,2426,2431,2434,2440,2445,2565,2568,2574,2584,2593,2611,2620,2628,2637,2655,2658,2664,2670,2675,2681,2686,2689,2694],{"type":26,"tag":27,"props":1828,"children":1829},{},[1830],{"type":31,"value":1831},"“Cursor 和 Copilot 到底有什么区别？”",{"type":26,"tag":27,"props":1833,"children":1834},{},[1835],{"type":31,"value":1836},"这个问题问得越早越好，因为你一旦把工具选错，后面所有痛苦都不是“提示词不够好”，而是：",{"type":26,"tag":293,"props":1838,"children":1839},{},[1840,1845,1850],{"type":26,"tag":261,"props":1841,"children":1842},{},[1843],{"type":31,"value":1844},"改动不可控（范围漂移、改错文件）",{"type":26,"tag":261,"props":1846,"children":1847},{},[1848],{"type":31,"value":1849},"验收成本爆炸（不知道要测什么）",{"type":26,"tag":261,"props":1851,"children":1852},{},[1853],{"type":31,"value":1854},"团队协作崩盘（没有闸门、没有回滚）",{"type":26,"tag":27,"props":1856,"children":1857},{},[1858],{"type":31,"value":1859},"这篇文章用一张选择矩阵 + 一套可执行工作流，帮你做到两件事：",{"type":26,"tag":257,"props":1861,"children":1862},{},[1863,1868],{"type":26,"tag":261,"props":1864,"children":1865},{},[1866],{"type":31,"value":1867},"知道什么时候用 Cursor、什么时候用 Copilot、什么时候“纯 VS Code 更快”",{"type":26,"tag":261,"props":1869,"children":1870},{},[1871,1873],{"type":31,"value":1872},"就算用 AI，也能把风险关在笼子里：",{"type":26,"tag":711,"props":1874,"children":1875},{},[1876],{"type":31,"value":1877},"可审查、可验证、可回滚",{"type":26,"tag":772,"props":1879,"children":1880},{},[],{"type":26,"tag":39,"props":1882,"children":1884},{"id":1883},"结论先说三者不是互斥而是分工",[1885],{"type":31,"value":1886},"结论先说：三者不是互斥，而是分工",{"type":26,"tag":27,"props":1888,"children":1889},{},[1890],{"type":31,"value":1891},"你可以把它们看成三层能力：",{"type":26,"tag":293,"props":1893,"children":1894},{},[1895,1904,1914],{"type":26,"tag":261,"props":1896,"children":1897},{},[1898,1902],{"type":26,"tag":711,"props":1899,"children":1900},{},[1901],{"type":31,"value":666},{"type":31,"value":1903},"：编辑器与生态（调试、插件、任务、终端、语言服务）",{"type":26,"tag":261,"props":1905,"children":1906},{},[1907,1912],{"type":26,"tag":711,"props":1908,"children":1909},{},[1910],{"type":31,"value":1911},"Copilot",{"type":31,"value":1913},"：代码补全与局部建议（“我正在写这一行/这一段”）",{"type":26,"tag":261,"props":1915,"children":1916},{},[1917,1921],{"type":26,"tag":711,"props":1918,"children":1919},{},[1920],{"type":31,"value":663},{"type":31,"value":1922},"：以项目为单位的 AI 协作（对话、索引、多文件编辑、规则）",{"type":26,"tag":27,"props":1924,"children":1925},{},[1926],{"type":31,"value":1927},"最常见的误区是：把“局部补全能力”当作“能做架构与多文件落地”。",{"type":26,"tag":772,"props":1929,"children":1930},{},[],{"type":26,"tag":39,"props":1932,"children":1934},{"id":1933},"选择矩阵按任务类型选工具不是按偏好",[1935],{"type":31,"value":1936},"选择矩阵：按任务类型选工具（不是按偏好）",{"type":26,"tag":1081,"props":1938,"children":1939},{},[1940],{"type":26,"tag":27,"props":1941,"children":1942},{},[1943],{"type":31,"value":1944},"你只要把自己的任务放进表格，就能得到推荐路径。",{"type":26,"tag":45,"props":1946,"children":1947},{},[1948,1980],{"type":26,"tag":49,"props":1949,"children":1950},{},[1951],{"type":26,"tag":53,"props":1952,"children":1953},{},[1954,1959,1965,1970,1975],{"type":26,"tag":57,"props":1955,"children":1956},{},[1957],{"type":31,"value":1958},"任务类型",{"type":26,"tag":57,"props":1960,"children":1962},{"align":1961},"right",[1963],{"type":31,"value":1964},"风险",{"type":26,"tag":57,"props":1966,"children":1967},{"align":1961},[1968],{"type":31,"value":1969},"验收成本",{"type":26,"tag":57,"props":1971,"children":1972},{},[1973],{"type":31,"value":1974},"更推荐",{"type":26,"tag":57,"props":1976,"children":1977},{},[1978],{"type":31,"value":1979},"为什么",{"type":26,"tag":68,"props":1981,"children":1982},{},[1983,2010,2043,2069,2096,2123],{"type":26,"tag":53,"props":1984,"children":1985},{},[1986,1991,1996,2000,2005],{"type":26,"tag":75,"props":1987,"children":1988},{},[1989],{"type":31,"value":1990},"写一段代码/补一个 if",{"type":26,"tag":75,"props":1992,"children":1993},{"align":1961},[1994],{"type":31,"value":1995},"低",{"type":26,"tag":75,"props":1997,"children":1998},{"align":1961},[1999],{"type":31,"value":1995},{"type":26,"tag":75,"props":2001,"children":2002},{},[2003],{"type":31,"value":2004},"Copilot / Cursor 内联编辑",{"type":26,"tag":75,"props":2006,"children":2007},{},[2008],{"type":31,"value":2009},"局部建议足够，成本最低",{"type":26,"tag":53,"props":2011,"children":2012},{},[2013,2018,2023,2027,2038],{"type":26,"tag":75,"props":2014,"children":2015},{},[2016],{"type":31,"value":2017},"重构一个函数",{"type":26,"tag":75,"props":2019,"children":2020},{"align":1961},[2021],{"type":31,"value":2022},"中",{"type":26,"tag":75,"props":2024,"children":2025},{"align":1961},[2026],{"type":31,"value":2022},{"type":26,"tag":75,"props":2028,"children":2029},{},[2030,2032],{"type":31,"value":2031},"Cursor ",{"type":26,"tag":905,"props":2033,"children":2035},{"className":2034},[],[2036],{"type":31,"value":2037},"内联编辑",{"type":26,"tag":75,"props":2039,"children":2040},{},[2041],{"type":31,"value":2042},"需要解释、需要约束输出",{"type":26,"tag":53,"props":2044,"children":2045},{},[2046,2051,2055,2059,2064],{"type":26,"tag":75,"props":2047,"children":2048},{},[2049],{"type":31,"value":2050},"改一个组件 + 样式",{"type":26,"tag":75,"props":2052,"children":2053},{"align":1961},[2054],{"type":31,"value":2022},{"type":26,"tag":75,"props":2056,"children":2057},{"align":1961},[2058],{"type":31,"value":2022},{"type":26,"tag":75,"props":2060,"children":2061},{},[2062],{"type":31,"value":2063},"Cursor（小范围多文件）",{"type":26,"tag":75,"props":2065,"children":2066},{},[2067],{"type":31,"value":2068},"需要同时改模板与样式",{"type":26,"tag":53,"props":2070,"children":2071},{},[2072,2077,2082,2086,2091],{"type":26,"tag":75,"props":2073,"children":2074},{},[2075],{"type":31,"value":2076},"改 3~5 个文件（组件+api+测试）",{"type":26,"tag":75,"props":2078,"children":2079},{"align":1961},[2080],{"type":31,"value":2081},"高",{"type":26,"tag":75,"props":2083,"children":2084},{"align":1961},[2085],{"type":31,"value":2081},{"type":26,"tag":75,"props":2087,"children":2088},{},[2089],{"type":31,"value":2090},"Cursor Composer + 闸门",{"type":26,"tag":75,"props":2092,"children":2093},{},[2094],{"type":31,"value":2095},"需要计划、验收、回滚",{"type":26,"tag":53,"props":2097,"children":2098},{},[2099,2104,2109,2113,2118],{"type":26,"tag":75,"props":2100,"children":2101},{},[2102],{"type":31,"value":2103},"重写一段架构/引入新依赖",{"type":26,"tag":75,"props":2105,"children":2106},{"align":1961},[2107],{"type":31,"value":2108},"很高",{"type":26,"tag":75,"props":2110,"children":2111},{"align":1961},[2112],{"type":31,"value":2108},{"type":26,"tag":75,"props":2114,"children":2115},{},[2116],{"type":31,"value":2117},"先人脑设计 + VS Code 实现",{"type":26,"tag":75,"props":2119,"children":2120},{},[2121],{"type":31,"value":2122},"AI 易发散，最好先设计再执行",{"type":26,"tag":53,"props":2124,"children":2125},{},[2126,2131,2135,2139,2144],{"type":26,"tag":75,"props":2127,"children":2128},{},[2129],{"type":31,"value":2130},"排查线上问题/性能抖动",{"type":26,"tag":75,"props":2132,"children":2133},{"align":1961},[2134],{"type":31,"value":2081},{"type":26,"tag":75,"props":2136,"children":2137},{"align":1961},[2138],{"type":31,"value":2108},{"type":26,"tag":75,"props":2140,"children":2141},{},[2142],{"type":31,"value":2143},"VS Code + 工具链优先，AI 辅助归纳",{"type":26,"tag":75,"props":2145,"children":2146},{},[2147],{"type":31,"value":2148},"需要证据，不要“猜”",{"type":26,"tag":27,"props":2150,"children":2151},{},[2152],{"type":26,"tag":711,"props":2153,"children":2154},{},[2155],{"type":31,"value":2156},"一句话规则：",{"type":26,"tag":293,"props":2158,"children":2159},{},[2160,2165],{"type":26,"tag":261,"props":2161,"children":2162},{},[2163],{"type":31,"value":2164},"当你的改动可以用“10 条最小回归集”覆盖时，用 Cursor。",{"type":26,"tag":261,"props":2166,"children":2167},{},[2168],{"type":31,"value":2169},"当你的改动无法验证时，先别让 AI 动手。",{"type":26,"tag":772,"props":2171,"children":2172},{},[],{"type":26,"tag":39,"props":2174,"children":2176},{"id":2175},"差异拆解到底差在哪里",[2177],{"type":31,"value":2178},"差异拆解：到底差在哪里？",{"type":26,"tag":1099,"props":2180,"children":2182},{"id":2181},"_1-上下文来源补全-vs-项目索引",[2183],{"type":31,"value":2184},"1) 上下文来源：补全 vs 项目索引",{"type":26,"tag":293,"props":2186,"children":2187},{},[2188,2193],{"type":26,"tag":261,"props":2189,"children":2190},{},[2191],{"type":31,"value":2192},"Copilot 更擅长：你正在写的这几行、当前文件的局部上下文",{"type":26,"tag":261,"props":2194,"children":2195},{},[2196],{"type":31,"value":2197},"Cursor 更擅长：项目级索引 + 多文件关联理解",{"type":26,"tag":27,"props":2199,"children":2200},{},[2201],{"type":31,"value":2202},"因此：",{"type":26,"tag":293,"props":2204,"children":2205},{},[2206,2211],{"type":26,"tag":261,"props":2207,"children":2208},{},[2209],{"type":31,"value":2210},"写代码片段：Copilot 速度更快",{"type":26,"tag":261,"props":2212,"children":2213},{},[2214],{"type":31,"value":2215},"改一坨工程：Cursor 更有胜算（但更需要闸门）",{"type":26,"tag":1099,"props":2217,"children":2219},{"id":2218},"_2-交互方式你能不能控制范围",[2220],{"type":31,"value":2221},"2) 交互方式：你能不能控制范围",{"type":26,"tag":27,"props":2223,"children":2224},{},[2225],{"type":31,"value":2226},"范围控制的三个层级：",{"type":26,"tag":257,"props":2228,"children":2229},{},[2230,2240,2250],{"type":26,"tag":261,"props":2231,"children":2232},{},[2233,2235],{"type":31,"value":2234},"内联编辑（选中一段）→ ",{"type":26,"tag":711,"props":2236,"children":2237},{},[2238],{"type":31,"value":2239},"最强范围控制",{"type":26,"tag":261,"props":2241,"children":2242},{},[2243,2245],{"type":31,"value":2244},"Composer 多文件（先列文件清单）→ ",{"type":26,"tag":711,"props":2246,"children":2247},{},[2248],{"type":31,"value":2249},"可控但要闸门",{"type":26,"tag":261,"props":2251,"children":2252},{},[2253,2255],{"type":31,"value":2254},"大对话（泛目标）→ ",{"type":26,"tag":711,"props":2256,"children":2257},{},[2258],{"type":31,"value":2259},"最容易跑偏",{"type":26,"tag":1099,"props":2261,"children":2263},{"id":2262},"_3-输出形态建议-vs-可审查的变更",[2264],{"type":31,"value":2265},"3) 输出形态：建议 vs 可审查的变更",{"type":26,"tag":27,"props":2267,"children":2268},{},[2269],{"type":31,"value":2270},"最好的 AI 输出不是“给我一段代码”，而是：",{"type":26,"tag":293,"props":2272,"children":2273},{},[2274,2279,2284],{"type":26,"tag":261,"props":2275,"children":2276},{},[2277],{"type":31,"value":2278},"改动摘要（做了什么）",{"type":26,"tag":261,"props":2280,"children":2281},{},[2282],{"type":31,"value":2283},"diff 级别的可审查变更",{"type":26,"tag":261,"props":2285,"children":2286},{},[2287],{"type":31,"value":2288},"验收步骤与回滚方案",{"type":26,"tag":772,"props":2290,"children":2291},{},[],{"type":26,"tag":39,"props":2293,"children":2295},{"id":2294},"一套可落地的团队工作流把风险关住",[2296],{"type":31,"value":2297},"一套可落地的团队工作流（把风险关住）",{"type":26,"tag":27,"props":2299,"children":2300},{},[2301],{"type":31,"value":2302},"下面这套流程，你可以直接写进团队规范：",{"type":26,"tag":1099,"props":2304,"children":2306},{"id":2305},"step-1先写任务单geo-友好结构",[2307],{"type":31,"value":2308},"Step 1：先写任务单（GEO 友好结构）",{"type":26,"tag":27,"props":2310,"children":2311},{},[2312],{"type":31,"value":2313},"模板：",{"type":26,"tag":293,"props":2315,"children":2316},{},[2317,2322,2327,2332,2337,2342],{"type":26,"tag":261,"props":2318,"children":2319},{},[2320],{"type":31,"value":2321},"目标：……",{"type":26,"tag":261,"props":2323,"children":2324},{},[2325],{"type":31,"value":2326},"背景：……",{"type":26,"tag":261,"props":2328,"children":2329},{},[2330],{"type":31,"value":2331},"范围：只改这些文件/模块：……",{"type":26,"tag":261,"props":2333,"children":2334},{},[2335],{"type":31,"value":2336},"非目标：不做哪些事情：……",{"type":26,"tag":261,"props":2338,"children":2339},{},[2340],{"type":31,"value":2341},"验收：如何判断完成（可测试/可观察）：……",{"type":26,"tag":261,"props":2343,"children":2344},{},[2345],{"type":31,"value":2346},"回滚：如果失败怎么撤回：……",{"type":26,"tag":1099,"props":2348,"children":2350},{"id":2349},"step-2用范围闸门限制-ai",[2351],{"type":31,"value":2352},"Step 2：用“范围闸门”限制 AI",{"type":26,"tag":293,"props":2354,"children":2355},{},[2356,2361],{"type":26,"tag":261,"props":2357,"children":2358},{},[2359],{"type":31,"value":2360},"单文件改动：优先 Cursor 内联编辑",{"type":26,"tag":261,"props":2362,"children":2363},{},[2364],{"type":31,"value":2365},"多文件改动：必须先让 AI 输出“文件清单（≤5）+ 每步验收”",{"type":26,"tag":27,"props":2367,"children":2368},{},[2369],{"type":31,"value":2370},"如果 AI 输出的文件清单超过 5 个：",{"type":26,"tag":293,"props":2372,"children":2373},{},[2374,2379],{"type":26,"tag":261,"props":2375,"children":2376},{},[2377],{"type":31,"value":2378},"不是它太强，是任务太大",{"type":26,"tag":261,"props":2380,"children":2381},{},[2382],{"type":31,"value":2383},"你需要拆任务，而不是继续推进",{"type":26,"tag":1099,"props":2385,"children":2387},{"id":2386},"step-3最小回归集10-条",[2388],{"type":31,"value":2389},"Step 3：最小回归集（10 条）",{"type":26,"tag":27,"props":2391,"children":2392},{},[2393,2395,2400],{"type":31,"value":2394},"每次接受改动前必须跑（可参考：",{"type":26,"tag":612,"props":2396,"children":2397},{"href":658},[2398],{"type":31,"value":2399},"Cursor 快捷键速查表",{"type":31,"value":2401}," 里的清单）。",{"type":26,"tag":1099,"props":2403,"children":2405},{"id":2404},"step-4回滚策略不用等事故才想",[2406],{"type":31,"value":2407},"Step 4：回滚策略（不用等事故才想）",{"type":26,"tag":27,"props":2409,"children":2410},{},[2411],{"type":31,"value":2412},"回滚最常见的两条路：",{"type":26,"tag":293,"props":2414,"children":2415},{},[2416,2421],{"type":26,"tag":261,"props":2417,"children":2418},{},[2419],{"type":31,"value":2420},"git 回滚 commit",{"type":26,"tag":261,"props":2422,"children":2423},{},[2424],{"type":31,"value":2425},"对关键文件保留前版本（至少能快速恢复）",{"type":26,"tag":27,"props":2427,"children":2428},{},[2429],{"type":31,"value":2430},"你需要做到：任何一轮 AI 改动都能在 5 分钟内撤回。",{"type":26,"tag":772,"props":2432,"children":2433},{},[],{"type":26,"tag":39,"props":2435,"children":2437},{"id":2436},"必交付物对比矩阵可复制",[2438],{"type":31,"value":2439},"必交付物：对比矩阵（可复制）",{"type":26,"tag":27,"props":2441,"children":2442},{},[2443],{"type":31,"value":2444},"下面这张表可以直接贴到你的团队 wiki：",{"type":26,"tag":45,"props":2446,"children":2447},{},[2448,2470],{"type":26,"tag":49,"props":2449,"children":2450},{},[2451],{"type":26,"tag":53,"props":2452,"children":2453},{},[2454,2458,2462,2466],{"type":26,"tag":57,"props":2455,"children":2456},{},[2457],{"type":31,"value":61},{"type":26,"tag":57,"props":2459,"children":2460},{},[2461],{"type":31,"value":666},{"type":26,"tag":57,"props":2463,"children":2464},{},[2465],{"type":31,"value":1911},{"type":26,"tag":57,"props":2467,"children":2468},{},[2469],{"type":31,"value":663},{"type":26,"tag":68,"props":2471,"children":2472},{},[2473,2496,2519,2542],{"type":26,"tag":53,"props":2474,"children":2475},{},[2476,2481,2486,2491],{"type":26,"tag":75,"props":2477,"children":2478},{},[2479],{"type":31,"value":2480},"强项",{"type":26,"tag":75,"props":2482,"children":2483},{},[2484],{"type":31,"value":2485},"工具链、调试、生态",{"type":26,"tag":75,"props":2487,"children":2488},{},[2489],{"type":31,"value":2490},"补全与局部建议",{"type":26,"tag":75,"props":2492,"children":2493},{},[2494],{"type":31,"value":2495},"项目上下文、多文件落地",{"type":26,"tag":53,"props":2497,"children":2498},{},[2499,2504,2509,2514],{"type":26,"tag":75,"props":2500,"children":2501},{},[2502],{"type":31,"value":2503},"适合任务",{"type":26,"tag":75,"props":2505,"children":2506},{},[2507],{"type":31,"value":2508},"排查、调试、验证",{"type":26,"tag":75,"props":2510,"children":2511},{},[2512],{"type":31,"value":2513},"写一段、补一段",{"type":26,"tag":75,"props":2515,"children":2516},{},[2517],{"type":31,"value":2518},"改一段、改一组文件",{"type":26,"tag":53,"props":2520,"children":2521},{},[2522,2527,2532,2537],{"type":26,"tag":75,"props":2523,"children":2524},{},[2525],{"type":31,"value":2526},"最大风险",{"type":26,"tag":75,"props":2528,"children":2529},{},[2530],{"type":31,"value":2531},"无",{"type":26,"tag":75,"props":2533,"children":2534},{},[2535],{"type":31,"value":2536},"过度依赖建议",{"type":26,"tag":75,"props":2538,"children":2539},{},[2540],{"type":31,"value":2541},"范围漂移、多文件回归",{"type":26,"tag":53,"props":2543,"children":2544},{},[2545,2550,2555,2560],{"type":26,"tag":75,"props":2546,"children":2547},{},[2548],{"type":31,"value":2549},"必须搭配",{"type":26,"tag":75,"props":2551,"children":2552},{},[2553],{"type":31,"value":2554},"规范与检查",{"type":26,"tag":75,"props":2556,"children":2557},{},[2558],{"type":31,"value":2559},"代码评审",{"type":26,"tag":75,"props":2561,"children":2562},{},[2563],{"type":31,"value":2564},"闸门 + 最小回归集",{"type":26,"tag":772,"props":2566,"children":2567},{},[],{"type":26,"tag":39,"props":2569,"children":2571},{"id":2570},"失败案例多文件看似成功实际埋雷",[2572],{"type":31,"value":2573},"失败案例：多文件“看似成功”，实际埋雷",{"type":26,"tag":27,"props":2575,"children":2576},{},[2577,2582],{"type":26,"tag":711,"props":2578,"children":2579},{},[2580],{"type":31,"value":2581},"现象",{"type":31,"value":2583},"：AI 说“我已经把所有地方都改了”，你也接受了，结果上线后 404 或样式错位。",{"type":26,"tag":27,"props":2585,"children":2586},{},[2587,2592],{"type":26,"tag":711,"props":2588,"children":2589},{},[2590],{"type":31,"value":2591},"复现条件",{"type":31,"value":1405},{"type":26,"tag":293,"props":2594,"children":2595},{},[2596,2601,2606],{"type":26,"tag":261,"props":2597,"children":2598},{},[2599],{"type":31,"value":2600},"你给了一个大目标（例如“把所有按钮统一成主题色”）",{"type":26,"tag":261,"props":2602,"children":2603},{},[2604],{"type":31,"value":2605},"它改了组件、样式、甚至主题配置",{"type":26,"tag":261,"props":2607,"children":2608},{},[2609],{"type":31,"value":2610},"你没有按页面模块走一遍，直接合并",{"type":26,"tag":27,"props":2612,"children":2613},{},[2614,2619],{"type":26,"tag":711,"props":2615,"children":2616},{},[2617],{"type":31,"value":2618},"根因",{"type":31,"value":1405},{"type":26,"tag":293,"props":2621,"children":2622},{},[2623],{"type":26,"tag":261,"props":2624,"children":2625},{},[2626],{"type":31,"value":2627},"改动范围大，但验收仍按“小改动”的方式做（只看一处）",{"type":26,"tag":27,"props":2629,"children":2630},{},[2631,2636],{"type":26,"tag":711,"props":2632,"children":2633},{},[2634],{"type":31,"value":2635},"修复",{"type":31,"value":1405},{"type":26,"tag":293,"props":2638,"children":2639},{},[2640,2645,2650],{"type":26,"tag":261,"props":2641,"children":2642},{},[2643],{"type":31,"value":2644},"强制把任务拆成“模块级目标”：Hero、Feature、Pricing、Form",{"type":26,"tag":261,"props":2646,"children":2647},{},[2648],{"type":31,"value":2649},"每个模块改完就验收一次",{"type":26,"tag":261,"props":2651,"children":2652},{},[2653],{"type":31,"value":2654},"验收通过再进入下一个模块",{"type":26,"tag":772,"props":2656,"children":2657},{},[],{"type":26,"tag":39,"props":2659,"children":2661},{"id":2660},"faq",[2662],{"type":31,"value":2663},"FAQ",{"type":26,"tag":1099,"props":2665,"children":2667},{"id":2666},"q1我已经用了-cursor为什么还要用-copilot",[2668],{"type":31,"value":2669},"Q1：我已经用了 Cursor，为什么还要用 Copilot？",{"type":26,"tag":27,"props":2671,"children":2672},{},[2673],{"type":31,"value":2674},"因为“补全”这种高频低风险任务，Copilot 的交互成本更低；Cursor 更适合需要解释与约束的改动。",{"type":26,"tag":1099,"props":2676,"children":2678},{"id":2677},"q2什么时候应该完全不用-ai",[2679],{"type":31,"value":2680},"Q2：什么时候应该完全不用 AI？",{"type":26,"tag":27,"props":2682,"children":2683},{},[2684],{"type":31,"value":2685},"当你无法定义验收标准时。比如“更高级”“更好看”这种目标，先做信息结构与设计规则，再让 AI 帮你落地局部。",{"type":26,"tag":772,"props":2687,"children":2688},{},[],{"type":26,"tag":39,"props":2690,"children":2692},{"id":2691},"延伸阅读",[2693],{"type":31,"value":2691},{"type":26,"tag":293,"props":2695,"children":2696},{},[2697,2706,2715,2724],{"type":26,"tag":261,"props":2698,"children":2699},{},[2700,2702],{"type":31,"value":2701},"Cursor 入门：",{"type":26,"tag":612,"props":2703,"children":2704},{"href":745},[2705],{"type":31,"value":748},{"type":26,"tag":261,"props":2707,"children":2708},{},[2709,2711],{"type":31,"value":2710},"Cursor 进阶：",{"type":26,"tag":612,"props":2712,"children":2713},{"href":756},[2714],{"type":31,"value":759},{"type":26,"tag":261,"props":2716,"children":2717},{},[2718,2720],{"type":31,"value":2719},"规则配置：",{"type":26,"tag":612,"props":2721,"children":2722},{"href":767},[2723],{"type":31,"value":770},{"type":26,"tag":261,"props":2725,"children":2726},{},[2727,2729],{"type":31,"value":2728},"Copilot 实战：",{"type":26,"tag":612,"props":2730,"children":2732},{"href":2731},"/topics/ai/github-copilot-tips",[2733],{"type":31,"value":2734},"GitHub Copilot 实用技巧",{"title":7,"searchDepth":637,"depth":637,"links":2736},[2737,2738,2739,2744,2750,2751,2752,2756],{"id":1883,"depth":640,"text":1886},{"id":1933,"depth":640,"text":1936},{"id":2175,"depth":640,"text":2178,"children":2740},[2741,2742,2743],{"id":2181,"depth":637,"text":2184},{"id":2218,"depth":637,"text":2221},{"id":2262,"depth":637,"text":2265},{"id":2294,"depth":640,"text":2297,"children":2745},[2746,2747,2748,2749],{"id":2305,"depth":637,"text":2308},{"id":2349,"depth":637,"text":2352},{"id":2386,"depth":637,"text":2389},{"id":2404,"depth":637,"text":2407},{"id":2436,"depth":640,"text":2439},{"id":2570,"depth":640,"text":2573},{"id":2660,"depth":640,"text":2663,"children":2753},[2754,2755],{"id":2666,"depth":637,"text":2669},{"id":2677,"depth":637,"text":2680},{"id":2691,"depth":640,"text":2691},"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":2761,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":2762,"description":2763,"date":2764,"topic":5,"author":11,"tags":2765,"image":2770,"featured":559,"readingTime":1824,"body":2771,"_type":650,"_id":3420,"_source":652,"_file":3421,"_stem":3422,"_extension":655},"/topics/ai/ai-debugging-troubleshooting-guide","AI 辅助调试与问题排查：让 AI 成为你的调试搭档","深入探讨如何利用 AI 工具提升调试效率，包括错误信息分析、日志解读、性能问题定位、复杂 bug 排查等实战场景，构建 AI 驱动的调试工作流。","2026-01-18",[2766,2767,2768,667,2769],"AI 调试","问题排查","Debug","错误处理","/images/topics/ai/ai-debugging-guide.jpg",{"type":23,"children":2772,"toc":3391},[2773,2779,2785,2790,2795,2800,2806,2812,2817,2825,2853,2861,2884,2890,2901,2910,2918,2926,2959,2967,2997,3010,3018,3023,3031,3039,3050,3056,3064,3075,3083,3092,3098,3104,3109,3118,3124,3129,3138,3144,3150,3159,3165,3174,3180,3191,3197,3203,3212,3218,3227,3233,3239,3247,3253,3262,3270,3278,3281,3287,3292,3311,3323,3326,3332,3337,3346,3351,3354,3360,3365,3383],{"type":26,"tag":39,"props":2774,"children":2776},{"id":2775},"ai-辅助调试与问题排查",[2777],{"type":31,"value":2778},"AI 辅助调试与问题排查",{"type":26,"tag":39,"props":2780,"children":2782},{"id":2781},"引言调试的痛与-ai-的解药",[2783],{"type":31,"value":2784},"引言：调试的痛与 AI 的解药",{"type":26,"tag":27,"props":2786,"children":2787},{},[2788],{"type":31,"value":2789},"调试是每个程序员的日常，也是最消耗时间和精力的工作之一。我们都有过这样的经历：盯着一个莫名其妙的错误信息，翻遍 Stack Overflow，尝试各种方案，几个小时后才发现是一个愚蠢的拼写错误。",{"type":26,"tag":27,"props":2791,"children":2792},{},[2793],{"type":31,"value":2794},"AI 工具的出现，正在改变调试的方式。不是替代你的思考，而是加速你的分析过程——帮你快速理解错误、缩小排查范围、验证假设。",{"type":26,"tag":27,"props":2796,"children":2797},{},[2798],{"type":31,"value":2799},"这篇文章分享我在实际项目中使用 AI 辅助调试的经验和方法论。",{"type":26,"tag":39,"props":2801,"children":2803},{"id":2802},"第一部分建立-ai-调试的思维模型",[2804],{"type":31,"value":2805},"第一部分：建立 AI 调试的思维模型",{"type":26,"tag":1099,"props":2807,"children":2809},{"id":2808},"_11-ai-在调试中的角色",[2810],{"type":31,"value":2811},"1.1 AI 在调试中的角色",{"type":26,"tag":27,"props":2813,"children":2814},{},[2815],{"type":31,"value":2816},"把 AI 想象成一个经验丰富但不了解你项目的高级工程师。它：",{"type":26,"tag":27,"props":2818,"children":2819},{},[2820],{"type":26,"tag":711,"props":2821,"children":2822},{},[2823],{"type":31,"value":2824},"擅长的事情：",{"type":26,"tag":293,"props":2826,"children":2827},{},[2828,2833,2838,2843,2848],{"type":26,"tag":261,"props":2829,"children":2830},{},[2831],{"type":31,"value":2832},"解读错误信息的含义",{"type":26,"tag":261,"props":2834,"children":2835},{},[2836],{"type":31,"value":2837},"提供可能的原因列表",{"type":26,"tag":261,"props":2839,"children":2840},{},[2841],{"type":31,"value":2842},"给出排查方向建议",{"type":26,"tag":261,"props":2844,"children":2845},{},[2846],{"type":31,"value":2847},"解释复杂的技术概念",{"type":26,"tag":261,"props":2849,"children":2850},{},[2851],{"type":31,"value":2852},"生成调试代码片段",{"type":26,"tag":27,"props":2854,"children":2855},{},[2856],{"type":26,"tag":711,"props":2857,"children":2858},{},[2859],{"type":31,"value":2860},"不擅长的事情：",{"type":26,"tag":293,"props":2862,"children":2863},{},[2864,2869,2874,2879],{"type":26,"tag":261,"props":2865,"children":2866},{},[2867],{"type":31,"value":2868},"了解你的业务逻辑",{"type":26,"tag":261,"props":2870,"children":2871},{},[2872],{"type":31,"value":2873},"知道你的代码历史",{"type":26,"tag":261,"props":2875,"children":2876},{},[2877],{"type":31,"value":2878},"理解项目特定的约定",{"type":26,"tag":261,"props":2880,"children":2881},{},[2882],{"type":31,"value":2883},"做出架构级判断",{"type":26,"tag":1099,"props":2885,"children":2887},{"id":2886},"_12-有效提问的结构",[2888],{"type":31,"value":2889},"1.2 有效提问的结构",{"type":26,"tag":2891,"props":2892,"children":2896},"pre",{"code":2893,"language":650,"meta":7,"className":2894},"## 高效的调试提问模板\n\n**问题描述**\n[简洁描述遇到的问题]\n\n**错误信息**\n",[2895],"language-markdown",[2897],{"type":26,"tag":905,"props":2898,"children":2899},{"__ignoreMap":7},[2900],{"type":31,"value":2893},{"type":26,"tag":27,"props":2902,"children":2903},{},[2904],{"type":26,"tag":2905,"props":2906,"children":2907},"span",{},[2908],{"type":31,"value":2909},"完整的错误信息，不要截断",{"type":26,"tag":2891,"props":2911,"children":2913},{"code":2912},"\n**相关代码**\n```javascript\n[精简但完整的相关代码]\n",[2914],{"type":26,"tag":905,"props":2915,"children":2916},{"__ignoreMap":7},[2917],{"type":31,"value":2912},{"type":26,"tag":27,"props":2919,"children":2920},{},[2921],{"type":26,"tag":711,"props":2922,"children":2923},{},[2924],{"type":31,"value":2925},"环境信息",{"type":26,"tag":293,"props":2927,"children":2928},{},[2929,2939,2949],{"type":26,"tag":261,"props":2930,"children":2931},{},[2932,2934],{"type":31,"value":2933},"运行环境：",{"type":26,"tag":2905,"props":2935,"children":2936},{},[2937],{"type":31,"value":2938},"Node 版本/浏览器版本",{"type":26,"tag":261,"props":2940,"children":2941},{},[2942,2944],{"type":31,"value":2943},"框架版本：",{"type":26,"tag":2905,"props":2945,"children":2946},{},[2947],{"type":31,"value":2948},"相关框架版本",{"type":26,"tag":261,"props":2950,"children":2951},{},[2952,2954],{"type":31,"value":2953},"操作系统：",{"type":26,"tag":2905,"props":2955,"children":2956},{},[2957],{"type":31,"value":2958},"如果相关",{"type":26,"tag":27,"props":2960,"children":2961},{},[2962],{"type":26,"tag":711,"props":2963,"children":2964},{},[2965],{"type":31,"value":2966},"已尝试的方案",{"type":26,"tag":293,"props":2968,"children":2969},{},[2970,2984],{"type":26,"tag":261,"props":2971,"children":2972},{},[2973,2978,2979],{"type":26,"tag":2905,"props":2974,"children":2975},{},[2976],{"type":31,"value":2977},"方案1",{"type":31,"value":1405},{"type":26,"tag":2905,"props":2980,"children":2981},{},[2982],{"type":31,"value":2983},"结果",{"type":26,"tag":261,"props":2985,"children":2986},{},[2987,2992,2993],{"type":26,"tag":2905,"props":2988,"children":2989},{},[2990],{"type":31,"value":2991},"方案2",{"type":31,"value":1405},{"type":26,"tag":2905,"props":2994,"children":2995},{},[2996],{"type":31,"value":2983},{"type":26,"tag":27,"props":2998,"children":2999},{},[3000,3005],{"type":26,"tag":711,"props":3001,"children":3002},{},[3003],{"type":31,"value":3004},"期望的结果",{"type":26,"tag":2905,"props":3006,"children":3007},{},[3008],{"type":31,"value":3009},"描述期望的行为",{"type":26,"tag":2891,"props":3011,"children":3013},{"code":3012},"\n### 1.3 分级调试策略\n\n",[3014],{"type":26,"tag":905,"props":3015,"children":3016},{"__ignoreMap":7},[3017],{"type":31,"value":3012},{"type":26,"tag":27,"props":3019,"children":3020},{},[3021],{"type":31,"value":3022},"┌───────────────────────────────────────────────────────────┐\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":26,"tag":2891,"props":3024,"children":3026},{"code":3025},"\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",[3027],{"type":26,"tag":905,"props":3028,"children":3029},{"__ignoreMap":7},[3030],{"type":31,"value":3025},{"type":26,"tag":27,"props":3032,"children":3033},{},[3034],{"type":26,"tag":711,"props":3035,"children":3036},{},[3037],{"type":31,"value":3038},"场景 2：Vue 响应式警告",{"type":26,"tag":2891,"props":3040,"children":3045},{"code":3041,"language":3042,"meta":7,"className":3043},"// 警告信息：\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","typescript",[3044],"language-typescript",[3046],{"type":26,"tag":905,"props":3047,"children":3048},{"__ignoreMap":7},[3049],{"type":31,"value":3041},{"type":26,"tag":1099,"props":3051,"children":3053},{"id":3052},"_22-后端错误分析",[3054],{"type":31,"value":3055},"2.2 后端错误分析",{"type":26,"tag":27,"props":3057,"children":3058},{},[3059],{"type":26,"tag":711,"props":3060,"children":3061},{},[3062],{"type":31,"value":3063},"场景 1：Node.js 内存问题",{"type":26,"tag":2891,"props":3065,"children":3070},{"code":3066,"language":3067,"meta":7,"className":3068},"// 错误信息：\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",[3069],"language-javascript",[3071],{"type":26,"tag":905,"props":3072,"children":3073},{"__ignoreMap":7},[3074],{"type":31,"value":3066},{"type":26,"tag":27,"props":3076,"children":3077},{},[3078],{"type":26,"tag":711,"props":3079,"children":3080},{},[3081],{"type":31,"value":3082},"场景 2：数据库连接问题",{"type":26,"tag":2891,"props":3084,"children":3087},{"code":3085,"language":3042,"meta":7,"className":3086},"// 错误信息：\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",[3044],[3088],{"type":26,"tag":905,"props":3089,"children":3090},{"__ignoreMap":7},[3091],{"type":31,"value":3085},{"type":26,"tag":39,"props":3093,"children":3095},{"id":3094},"第三部分日志分析与问题定位",[3096],{"type":31,"value":3097},"第三部分：日志分析与问题定位",{"type":26,"tag":1099,"props":3099,"children":3101},{"id":3100},"_31-结构化日志分析",[3102],{"type":31,"value":3103},"3.1 结构化日志分析",{"type":26,"tag":27,"props":3105,"children":3106},{},[3107],{"type":31,"value":3108},"当面对大量日志时，让 AI 帮你快速定位问题：",{"type":26,"tag":2891,"props":3110,"children":3113},{"code":3111,"language":3067,"meta":7,"className":3112},"// 提问示例：\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",[3069],[3114],{"type":26,"tag":905,"props":3115,"children":3116},{"__ignoreMap":7},[3117],{"type":31,"value":3111},{"type":26,"tag":1099,"props":3119,"children":3121},{"id":3120},"_32-创建调试日志",[3122],{"type":31,"value":3123},"3.2 创建调试日志",{"type":26,"tag":27,"props":3125,"children":3126},{},[3127],{"type":31,"value":3128},"让 AI 帮你生成调试用的日志代码：",{"type":26,"tag":2891,"props":3130,"children":3133},{"code":3131,"language":3042,"meta":7,"className":3132},"// 请求：\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",[3044],[3134],{"type":26,"tag":905,"props":3135,"children":3136},{"__ignoreMap":7},[3137],{"type":31,"value":3131},{"type":26,"tag":39,"props":3139,"children":3141},{"id":3140},"第四部分性能问题排查",[3142],{"type":31,"value":3143},"第四部分：性能问题排查",{"type":26,"tag":1099,"props":3145,"children":3147},{"id":3146},"_41-前端性能分析",[3148],{"type":31,"value":3149},"4.1 前端性能分析",{"type":26,"tag":2891,"props":3151,"children":3154},{"code":3152,"language":3042,"meta":7,"className":3153},"// 场景：页面加载慢，需要分析原因\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",[3044],[3155],{"type":26,"tag":905,"props":3156,"children":3157},{"__ignoreMap":7},[3158],{"type":31,"value":3152},{"type":26,"tag":1099,"props":3160,"children":3162},{"id":3161},"_42-内存泄漏排查",[3163],{"type":31,"value":3164},"4.2 内存泄漏排查",{"type":26,"tag":2891,"props":3166,"children":3169},{"code":3167,"language":3042,"meta":7,"className":3168},"// 场景：应用运行一段时间后变卡\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",[3044],[3170],{"type":26,"tag":905,"props":3171,"children":3172},{"__ignoreMap":7},[3173],{"type":31,"value":3167},{"type":26,"tag":1099,"props":3175,"children":3177},{"id":3176},"_43-数据库查询优化",[3178],{"type":31,"value":3179},"4.3 数据库查询优化",{"type":26,"tag":2891,"props":3181,"children":3186},{"code":3182,"language":3183,"meta":7,"className":3184},"-- 场景：查询很慢，让 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",[3185],"language-sql",[3187],{"type":26,"tag":905,"props":3188,"children":3189},{"__ignoreMap":7},[3190],{"type":31,"value":3182},{"type":26,"tag":39,"props":3192,"children":3194},{"id":3193},"第五部分复杂-bug-排查",[3195],{"type":31,"value":3196},"第五部分：复杂 Bug 排查",{"type":26,"tag":1099,"props":3198,"children":3200},{"id":3199},"_51-竞态条件",[3201],{"type":31,"value":3202},"5.1 竞态条件",{"type":26,"tag":2891,"props":3204,"children":3207},{"code":3205,"language":3042,"meta":7,"className":3206},"// 场景：偶发的数据不一致问题\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",[3044],[3208],{"type":26,"tag":905,"props":3209,"children":3210},{"__ignoreMap":7},[3211],{"type":31,"value":3205},{"type":26,"tag":1099,"props":3213,"children":3215},{"id":3214},"_52-分布式系统问题",[3216],{"type":31,"value":3217},"5.2 分布式系统问题",{"type":26,"tag":2891,"props":3219,"children":3222},{"code":3220,"language":3042,"meta":7,"className":3221},"// 场景：微服务间的数据不一致\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",[3044],[3223],{"type":26,"tag":905,"props":3224,"children":3225},{"__ignoreMap":7},[3226],{"type":31,"value":3220},{"type":26,"tag":39,"props":3228,"children":3230},{"id":3229},"第六部分ai-调试工作流",[3231],{"type":31,"value":3232},"第六部分：AI 调试工作流",{"type":26,"tag":1099,"props":3234,"children":3236},{"id":3235},"_61-我的调试流程",[3237],{"type":31,"value":3238},"6.1 我的调试流程",{"type":26,"tag":2891,"props":3240,"children":3242},{"code":3241},"┌────────────────────────────────────────────────────────────┐\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",[3243],{"type":26,"tag":905,"props":3244,"children":3245},{"__ignoreMap":7},[3246],{"type":31,"value":3241},{"type":26,"tag":1099,"props":3248,"children":3250},{"id":3249},"_62-调试对话模板",[3251],{"type":31,"value":3252},"6.2 调试对话模板",{"type":26,"tag":2891,"props":3254,"children":3257},{"code":3255,"language":650,"meta":7,"className":3256},"## 第一轮：问题描述\n\n我遇到了一个问题：[简述问题]\n\n错误信息：\n",[2895],[3258],{"type":26,"tag":905,"props":3259,"children":3260},{"__ignoreMap":7},[3261],{"type":31,"value":3255},{"type":26,"tag":27,"props":3263,"children":3264},{},[3265],{"type":26,"tag":2905,"props":3266,"children":3267},{},[3268],{"type":31,"value":3269},"粘贴完整错误",{"type":26,"tag":2891,"props":3271,"children":3273},{"code":3272},"\n相关代码：\n```javascript\n[粘贴代码]\n",[3274],{"type":26,"tag":905,"props":3275,"children":3276},{"__ignoreMap":7},[3277],{"type":31,"value":3272},{"type":26,"tag":772,"props":3279,"children":3280},{},[],{"type":26,"tag":39,"props":3282,"children":3284},{"id":3283},"第二轮补充信息",[3285],{"type":31,"value":3286},"第二轮：补充信息",{"type":26,"tag":27,"props":3288,"children":3289},{},[3290],{"type":31,"value":3291},"根据你的建议，我添加了日志，发现：",{"type":26,"tag":293,"props":3293,"children":3294},{},[3295,3303],{"type":26,"tag":261,"props":3296,"children":3297},{},[3298],{"type":26,"tag":2905,"props":3299,"children":3300},{},[3301],{"type":31,"value":3302},"发现 1",{"type":26,"tag":261,"props":3304,"children":3305},{},[3306],{"type":26,"tag":2905,"props":3307,"children":3308},{},[3309],{"type":31,"value":3310},"发现 2",{"type":26,"tag":27,"props":3312,"children":3313},{},[3314,3316,3321],{"type":31,"value":3315},"这是否说明问题出在 ",{"type":26,"tag":2905,"props":3317,"children":3318},{},[3319],{"type":31,"value":3320},"你的猜测",{"type":31,"value":3322},"？",{"type":26,"tag":772,"props":3324,"children":3325},{},[],{"type":26,"tag":39,"props":3327,"children":3329},{"id":3328},"第三轮确认修复",[3330],{"type":31,"value":3331},"第三轮：确认修复",{"type":26,"tag":27,"props":3333,"children":3334},{},[3335],{"type":31,"value":3336},"我按照你的建议修改了代码：",{"type":26,"tag":2891,"props":3338,"children":3341},{"code":3339,"language":3067,"meta":7,"className":3340},"[粘贴修改后的代码]\n",[3069],[3342],{"type":26,"tag":905,"props":3343,"children":3344},{"__ignoreMap":7},[3345],{"type":31,"value":3339},{"type":26,"tag":27,"props":3347,"children":3348},{},[3349],{"type":31,"value":3350},"请确认这个修复是否正确，以及是否有其他潜在问题。",{"type":26,"tag":772,"props":3352,"children":3353},{},[],{"type":26,"tag":39,"props":3355,"children":3357},{"id":3356},"第四轮预防",[3358],{"type":31,"value":3359},"第四轮：预防",{"type":26,"tag":27,"props":3361,"children":3362},{},[3363],{"type":31,"value":3364},"这个问题已解决。请建议：",{"type":26,"tag":257,"props":3366,"children":3367},{},[3368,3373,3378],{"type":26,"tag":261,"props":3369,"children":3370},{},[3371],{"type":31,"value":3372},"如何防止类似问题再次发生？",{"type":26,"tag":261,"props":3374,"children":3375},{},[3376],{"type":31,"value":3377},"应该添加什么测试用例？",{"type":26,"tag":261,"props":3379,"children":3380},{},[3381],{"type":31,"value":3382},"有什么最佳实践可以参考？",{"type":26,"tag":2891,"props":3384,"children":3386},{"code":3385},"\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",[3387],{"type":26,"tag":905,"props":3388,"children":3389},{"__ignoreMap":7},[3390],{"type":31,"value":3385},{"title":7,"searchDepth":637,"depth":637,"links":3392},[3393,3394,3395,3400,3404,3409,3413,3417,3418,3419],{"id":2775,"depth":640,"text":2778},{"id":2781,"depth":640,"text":2784},{"id":2802,"depth":640,"text":2805,"children":3396},[3397,3398,3399],{"id":2808,"depth":637,"text":2811},{"id":2886,"depth":637,"text":2889},{"id":3052,"depth":637,"text":3055},{"id":3094,"depth":640,"text":3097,"children":3401},[3402,3403],{"id":3100,"depth":637,"text":3103},{"id":3120,"depth":637,"text":3123},{"id":3140,"depth":640,"text":3143,"children":3405},[3406,3407,3408],{"id":3146,"depth":637,"text":3149},{"id":3161,"depth":637,"text":3164},{"id":3176,"depth":637,"text":3179},{"id":3193,"depth":640,"text":3196,"children":3410},[3411,3412],{"id":3199,"depth":637,"text":3202},{"id":3214,"depth":637,"text":3217},{"id":3229,"depth":640,"text":3232,"children":3414},[3415,3416],{"id":3235,"depth":637,"text":3238},{"id":3249,"depth":637,"text":3252},{"id":3283,"depth":640,"text":3286},{"id":3328,"depth":640,"text":3331},{"id":3356,"depth":640,"text":3359},"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":3424,"image":17,"imageQuery":18,"pexelsPhotoId":19,"pexelsUrl":20,"featured":6,"readingTime":21,"body":3425,"_type":650,"_id":651,"_source":652,"_file":653,"_stem":654,"_extension":655},[13,14,15,16],{"type":23,"children":3426,"toc":3919},[3427,3431,3435,3439,3503,3507,3511,3515,3600,3604,3608,3612,3623,3627,3631,3635,3639,3654,3658,3662,3681,3685,3689,3704,3708,3712,3716,3743,3747,3751,3755,3808,3812,3816,3820,3839,3843,3847,3891,3895],{"type":26,"tag":27,"props":3428,"children":3429},{},[3430],{"type":31,"value":32},{"type":26,"tag":27,"props":3432,"children":3433},{},[3434],{"type":31,"value":37},{"type":26,"tag":39,"props":3436,"children":3437},{"id":41},[3438],{"type":31,"value":41},{"type":26,"tag":45,"props":3440,"children":3441},{},[3442,3456],{"type":26,"tag":49,"props":3443,"children":3444},{},[3445],{"type":26,"tag":53,"props":3446,"children":3447},{},[3448,3452],{"type":26,"tag":57,"props":3449,"children":3450},{},[3451],{"type":31,"value":61},{"type":26,"tag":57,"props":3453,"children":3454},{},[3455],{"type":31,"value":66},{"type":26,"tag":68,"props":3457,"children":3458},{},[3459,3470,3481,3492],{"type":26,"tag":53,"props":3460,"children":3461},{},[3462,3466],{"type":26,"tag":75,"props":3463,"children":3464},{},[3465],{"type":31,"value":79},{"type":26,"tag":75,"props":3467,"children":3468},{},[3469],{"type":31,"value":84},{"type":26,"tag":53,"props":3471,"children":3472},{},[3473,3477],{"type":26,"tag":75,"props":3474,"children":3475},{},[3476],{"type":31,"value":92},{"type":26,"tag":75,"props":3478,"children":3479},{},[3480],{"type":31,"value":97},{"type":26,"tag":53,"props":3482,"children":3483},{},[3484,3488],{"type":26,"tag":75,"props":3485,"children":3486},{},[3487],{"type":31,"value":105},{"type":26,"tag":75,"props":3489,"children":3490},{},[3491],{"type":31,"value":110},{"type":26,"tag":53,"props":3493,"children":3494},{},[3495,3499],{"type":26,"tag":75,"props":3496,"children":3497},{},[3498],{"type":31,"value":118},{"type":26,"tag":75,"props":3500,"children":3501},{},[3502],{"type":31,"value":123},{"type":26,"tag":27,"props":3504,"children":3505},{},[3506],{"type":31,"value":128},{"type":26,"tag":39,"props":3508,"children":3509},{"id":131},[3510],{"type":31,"value":134},{"type":26,"tag":27,"props":3512,"children":3513},{},[3514],{"type":31,"value":139},{"type":26,"tag":45,"props":3516,"children":3517},{},[3518,3540],{"type":26,"tag":49,"props":3519,"children":3520},{},[3521],{"type":26,"tag":53,"props":3522,"children":3523},{},[3524,3528,3532,3536],{"type":26,"tag":57,"props":3525,"children":3526},{},[3527],{"type":31,"value":153},{"type":26,"tag":57,"props":3529,"children":3530},{},[3531],{"type":31,"value":158},{"type":26,"tag":57,"props":3533,"children":3534},{},[3535],{"type":31,"value":163},{"type":26,"tag":57,"props":3537,"children":3538},{},[3539],{"type":31,"value":168},{"type":26,"tag":68,"props":3541,"children":3542},{},[3543,3562,3581],{"type":26,"tag":53,"props":3544,"children":3545},{},[3546,3550,3554,3558],{"type":26,"tag":75,"props":3547,"children":3548},{},[3549],{"type":31,"value":179},{"type":26,"tag":75,"props":3551,"children":3552},{},[3553],{"type":31,"value":184},{"type":26,"tag":75,"props":3555,"children":3556},{},[3557],{"type":31,"value":189},{"type":26,"tag":75,"props":3559,"children":3560},{},[3561],{"type":31,"value":194},{"type":26,"tag":53,"props":3563,"children":3564},{},[3565,3569,3573,3577],{"type":26,"tag":75,"props":3566,"children":3567},{},[3568],{"type":31,"value":202},{"type":26,"tag":75,"props":3570,"children":3571},{},[3572],{"type":31,"value":207},{"type":26,"tag":75,"props":3574,"children":3575},{},[3576],{"type":31,"value":212},{"type":26,"tag":75,"props":3578,"children":3579},{},[3580],{"type":31,"value":217},{"type":26,"tag":53,"props":3582,"children":3583},{},[3584,3588,3592,3596],{"type":26,"tag":75,"props":3585,"children":3586},{},[3587],{"type":31,"value":225},{"type":26,"tag":75,"props":3589,"children":3590},{},[3591],{"type":31,"value":230},{"type":26,"tag":75,"props":3593,"children":3594},{},[3595],{"type":31,"value":207},{"type":26,"tag":75,"props":3597,"children":3598},{},[3599],{"type":31,"value":239},{"type":26,"tag":27,"props":3601,"children":3602},{},[3603],{"type":31,"value":244},{"type":26,"tag":39,"props":3605,"children":3606},{"id":247},[3607],{"type":31,"value":250},{"type":26,"tag":27,"props":3609,"children":3610},{},[3611],{"type":31,"value":255},{"type":26,"tag":257,"props":3613,"children":3614},{},[3615,3619],{"type":26,"tag":261,"props":3616,"children":3617},{},[3618],{"type":31,"value":265},{"type":26,"tag":261,"props":3620,"children":3621},{},[3622],{"type":31,"value":270},{"type":26,"tag":27,"props":3624,"children":3625},{},[3626],{"type":31,"value":275},{"type":26,"tag":39,"props":3628,"children":3629},{"id":278},[3630],{"type":31,"value":281},{"type":26,"tag":27,"props":3632,"children":3633},{},[3634],{"type":31,"value":286},{"type":26,"tag":27,"props":3636,"children":3637},{},[3638],{"type":31,"value":291},{"type":26,"tag":293,"props":3640,"children":3641},{},[3642,3646,3650],{"type":26,"tag":261,"props":3643,"children":3644},{},[3645],{"type":31,"value":300},{"type":26,"tag":261,"props":3647,"children":3648},{},[3649],{"type":31,"value":305},{"type":26,"tag":261,"props":3651,"children":3652},{},[3653],{"type":31,"value":310},{"type":26,"tag":27,"props":3655,"children":3656},{},[3657],{"type":31,"value":315},{"type":26,"tag":39,"props":3659,"children":3660},{"id":318},[3661],{"type":31,"value":318},{"type":26,"tag":293,"props":3663,"children":3664},{},[3665,3669,3673,3677],{"type":26,"tag":261,"props":3666,"children":3667},{},[3668],{"type":31,"value":328},{"type":26,"tag":261,"props":3670,"children":3671},{},[3672],{"type":31,"value":333},{"type":26,"tag":261,"props":3674,"children":3675},{},[3676],{"type":31,"value":338},{"type":26,"tag":261,"props":3678,"children":3679},{},[3680],{"type":31,"value":343},{"type":26,"tag":27,"props":3682,"children":3683},{},[3684],{"type":31,"value":348},{"type":26,"tag":39,"props":3686,"children":3687},{"id":351},[3688],{"type":31,"value":351},{"type":26,"tag":293,"props":3690,"children":3691},{},[3692,3696,3700],{"type":26,"tag":261,"props":3693,"children":3694},{},[3695],{"type":31,"value":361},{"type":26,"tag":261,"props":3697,"children":3698},{},[3699],{"type":31,"value":366},{"type":26,"tag":261,"props":3701,"children":3702},{},[3703],{"type":31,"value":371},{"type":26,"tag":27,"props":3705,"children":3706},{},[3707],{"type":31,"value":376},{"type":26,"tag":39,"props":3709,"children":3710},{"id":379},[3711],{"type":31,"value":379},{"type":26,"tag":27,"props":3713,"children":3714},{},[3715],{"type":31,"value":386},{"type":26,"tag":293,"props":3717,"children":3718},{},[3719,3723,3727,3731,3735,3739],{"type":26,"tag":261,"props":3720,"children":3721},{},[3722],{"type":31,"value":394},{"type":26,"tag":261,"props":3724,"children":3725},{},[3726],{"type":31,"value":399},{"type":26,"tag":261,"props":3728,"children":3729},{},[3730],{"type":31,"value":404},{"type":26,"tag":261,"props":3732,"children":3733},{},[3734],{"type":31,"value":409},{"type":26,"tag":261,"props":3736,"children":3737},{},[3738],{"type":31,"value":414},{"type":26,"tag":261,"props":3740,"children":3741},{},[3742],{"type":31,"value":419},{"type":26,"tag":27,"props":3744,"children":3745},{},[3746],{"type":31,"value":424},{"type":26,"tag":39,"props":3748,"children":3749},{"id":427},[3750],{"type":31,"value":430},{"type":26,"tag":27,"props":3752,"children":3753},{},[3754],{"type":31,"value":435},{"type":26,"tag":45,"props":3756,"children":3757},{},[3758,3772],{"type":26,"tag":49,"props":3759,"children":3760},{},[3761],{"type":26,"tag":53,"props":3762,"children":3763},{},[3764,3768],{"type":26,"tag":57,"props":3765,"children":3766},{},[3767],{"type":31,"value":449},{"type":26,"tag":57,"props":3769,"children":3770},{},[3771],{"type":31,"value":454},{"type":26,"tag":68,"props":3773,"children":3774},{},[3775,3786,3797],{"type":26,"tag":53,"props":3776,"children":3777},{},[3778,3782],{"type":26,"tag":75,"props":3779,"children":3780},{},[3781],{"type":31,"value":465},{"type":26,"tag":75,"props":3783,"children":3784},{},[3785],{"type":31,"value":470},{"type":26,"tag":53,"props":3787,"children":3788},{},[3789,3793],{"type":26,"tag":75,"props":3790,"children":3791},{},[3792],{"type":31,"value":478},{"type":26,"tag":75,"props":3794,"children":3795},{},[3796],{"type":31,"value":483},{"type":26,"tag":53,"props":3798,"children":3799},{},[3800,3804],{"type":26,"tag":75,"props":3801,"children":3802},{},[3803],{"type":31,"value":491},{"type":26,"tag":75,"props":3805,"children":3806},{},[3807],{"type":31,"value":496},{"type":26,"tag":27,"props":3809,"children":3810},{},[3811],{"type":31,"value":501},{"type":26,"tag":39,"props":3813,"children":3814},{"id":504},[3815],{"type":31,"value":504},{"type":26,"tag":27,"props":3817,"children":3818},{},[3819],{"type":31,"value":511},{"type":26,"tag":257,"props":3821,"children":3822},{},[3823,3827,3831,3835],{"type":26,"tag":261,"props":3824,"children":3825},{},[3826],{"type":31,"value":519},{"type":26,"tag":261,"props":3828,"children":3829},{},[3830],{"type":31,"value":524},{"type":26,"tag":261,"props":3832,"children":3833},{},[3834],{"type":31,"value":529},{"type":26,"tag":261,"props":3836,"children":3837},{},[3838],{"type":31,"value":534},{"type":26,"tag":27,"props":3840,"children":3841},{},[3842],{"type":31,"value":539},{"type":26,"tag":39,"props":3844,"children":3845},{"id":542},[3846],{"type":31,"value":545},{"type":26,"tag":293,"props":3848,"children":3850},{"className":3849},[549],[3851,3859,3867,3875,3883],{"type":26,"tag":261,"props":3852,"children":3854},{"className":3853},[554],[3855,3858],{"type":26,"tag":557,"props":3856,"children":3857},{"disabled":559,"type":560},[],{"type":31,"value":563},{"type":26,"tag":261,"props":3860,"children":3862},{"className":3861},[554],[3863,3866],{"type":26,"tag":557,"props":3864,"children":3865},{"disabled":559,"type":560},[],{"type":31,"value":572},{"type":26,"tag":261,"props":3868,"children":3870},{"className":3869},[554],[3871,3874],{"type":26,"tag":557,"props":3872,"children":3873},{"disabled":559,"type":560},[],{"type":31,"value":581},{"type":26,"tag":261,"props":3876,"children":3878},{"className":3877},[554],[3879,3882],{"type":26,"tag":557,"props":3880,"children":3881},{"disabled":559,"type":560},[],{"type":31,"value":590},{"type":26,"tag":261,"props":3884,"children":3886},{"className":3885},[554],[3887,3890],{"type":26,"tag":557,"props":3888,"children":3889},{"disabled":559,"type":560},[],{"type":31,"value":599},{"type":26,"tag":27,"props":3892,"children":3893},{},[3894],{"type":31,"value":604},{"type":26,"tag":293,"props":3896,"children":3897},{},[3898,3905,3912],{"type":26,"tag":261,"props":3899,"children":3900},{},[3901],{"type":26,"tag":612,"props":3902,"children":3903},{"href":614},[3904],{"type":31,"value":617},{"type":26,"tag":261,"props":3906,"children":3907},{},[3908],{"type":26,"tag":612,"props":3909,"children":3910},{"href":623},[3911],{"type":31,"value":626},{"type":26,"tag":261,"props":3913,"children":3914},{},[3915],{"type":26,"tag":612,"props":3916,"children":3917},{"href":632},[3918],{"type":31,"value":635},{"title":7,"searchDepth":637,"depth":637,"links":3920},[3921,3922,3923,3924,3925,3926,3927,3928,3929,3930],{"id":41,"depth":640,"text":41},{"id":131,"depth":640,"text":134},{"id":247,"depth":640,"text":250},{"id":278,"depth":640,"text":281},{"id":318,"depth":640,"text":318},{"id":351,"depth":640,"text":351},{"id":379,"depth":640,"text":379},{"id":427,"depth":640,"text":430},{"id":504,"depth":640,"text":504},{"id":542,"depth":640,"text":545},1780533122506]