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