[{"data":1,"prerenderedAt":1250},["ShallowReactive",2],{"header-counts":3,"prompts-list":6,"footer-counts":1249},{"tools":4,"reviews":5},65,7,[7,82,139,182,249,290,510,573,671,712,778,832,898,1134,1176],{"id":8,"title":9,"body":10,"description":65,"extension":66,"meta":67,"navigation":68,"path":69,"seo":70,"stem":71,"tags":72,"targetTools":76,"__hash__":81},"prompts\u002Fprompts\u002Fapi-design.md","API 设计 Prompt：从需求到 RESTful API 规范",{"type":11,"value":12,"toc":58},"minimark",[13,17,21,25,36,39],[14,15,16],"h2",{"id":16},"用法",[18,19,20],"p",{},"描述你的功能需求，AI 生成完整的 API 设计文档。",[14,22,24],{"id":23},"prompt","Prompt",[26,27,33],"pre",{"className":28,"code":30,"language":31,"meta":32},[29],"language-text","你是一个资深后端架构师。请根据以下需求，设计 RESTful API。\n\n## 需求描述\n\n{{描述你要实现什么功能，比如\"用户注册登录、文章 CRUD、评论系统\"}}\n\n## 已有约束\n\n- 框架：{{Express \u002F FastAPI \u002F Go Gin \u002F Spring Boot}}\n- 认证方式：{{JWT \u002F Session \u002F API Key}}\n- 数据库：{{PostgreSQL \u002F MySQL \u002F MongoDB}}\n\n## 要求\n\n1. 遵循 RESTful 规范（资源名复数、HTTP 方法语义正确）\n2. 统一的响应格式（成功\u002F失败）\n3. 合理的状态码（不要全用 200）\n4. 分页、排序、筛选的 query 参数规范\n5. 错误响应包含 error code + message + details\n6. 标注哪些接口需要认证\n\n## 输出格式\n\n### API 概览\n| 方法 | 路径 | 描述 | 认证 |\n|---|---|---|---|\n\n### 详细设计\n\n对每个接口：\n- 路径参数 \u002F Query 参数 \u002F Body 字段（含类型和校验规则）\n- 请求示例\n- 响应示例（成功 + 错误）\n- 状态码列表\n\n### 统一规范\n- 响应格式\n- 错误码定义\n- 分页格式\n","text","",[34,35,30],"code",{"__ignoreMap":32},[14,37,38],{"id":38},"设计原则提醒",[40,41,42,46,49,52,55],"ul",{},[43,44,45],"li",{},"GET 不改数据，POST 创建，PUT 全量更新，PATCH 部分更新，DELETE 删除",[43,47,48],{},"资源名用复数（\u002Fusers 不是 \u002Fuser）",[43,50,51],{},"嵌套关系最多 2 层（\u002Fusers\u002F:id\u002Fposts 合理，\u002Fusers\u002F:id\u002Fposts\u002F:id\u002Fcomments\u002F:id 太深）",[43,53,54],{},"分页用 offset+limit 或 cursor（大数据量用 cursor）",[43,56,57],{},"时间字段用 ISO 8601（不要用时间戳）",{"title":32,"searchDepth":59,"depth":59,"links":60},3,[61,63,64],{"id":16,"depth":62,"text":16},2,{"id":23,"depth":62,"text":24},{"id":38,"depth":62,"text":38},"描述你要做什么功能，AI 帮你设计 RESTful API：路由、请求\u002F响应格式、状态码、错误处理、分页规范，直接输出 OpenAPI 风格文档。","md",{},true,"\u002Fprompts\u002Fapi-design",{"title":9,"description":65},"prompts\u002Fapi-design",[73,74,75],"API","REST","后端设计",[77,78,79,80],"Claude","Cursor","ChatGPT","GLM","B0HGcZ68vbsPRtN14180LcLX7GgQYlT_CAQeZ0TsB2w",{"id":83,"title":84,"body":85,"description":128,"extension":66,"meta":129,"navigation":68,"path":130,"seo":131,"stem":132,"tags":133,"targetTools":137,"__hash__":138},"prompts\u002Fprompts\u002Fcode-migration.md","代码迁移 Prompt：从 X 语言迁移到 Y 语言",{"type":11,"value":86,"toc":123},[87,89,92,94,100,103],[14,88,16],{"id":16},[18,90,91],{},"粘贴源语言代码，指定目标语言。适合单文件\u002F单模块迁移，大项目请分批处理。",[14,93,24],{"id":23},[26,95,98],{"className":96,"code":97,"language":31,"meta":32},[29],"你是一个精通多种编程语言的资深工程师。请把以下代码从 {{源语言}} 迁移到 {{目标语言}}。\n\n## 源代码\n\n{{粘贴代码}}\n\n## 迁移要求\n\n1. **逻辑等价**：保留原始逻辑，不要\"优化\"或\"改进\"——除非目标语言必须如此\n2. **惯用写法**：用目标语言的惯用风格，不要写出\"翻译腔\"代码\n3. **类型系统**：如果目标语言有类型系统（TypeScript\u002FRust\u002FGo），补全类型标注\n4. **错误处理**：适配目标语言的错误处理方式（try-catch \u002F Result \u002F panic）\n5. **标准库**：用目标语言的标准库替代源语言的依赖\n\n## 输出格式\n\n### 迁移后代码\n```{{目标语言}}\n\u002F\u002F 迁移后的代码\n```\n\n### 差异说明\n| 源语言写法 | 目标语言写法 | 原因 |\n|---|---|---|\n\n### 需手动调整\n- {{列出 AI 无法自动迁移、需要人工处理的点}}\n\n### 依赖映射\n| 源语言依赖 | 目标语言替代 | 说明 |\n|---|---|---|\n\n### 注意事项\n- {{迁移后可能的行为差异}}\n- {{需要更新的测试}}\n",[34,99,97],{"__ignoreMap":32},[14,101,102],{"id":102},"常见迁移场景",[40,104,105,108,111,114,117,120],{},[43,106,107],{},"Python → Go（API 服务重写）",[43,109,110],{},"JavaScript → TypeScript（加类型）",[43,112,113],{},"Java → Kotlin（Android 开发）",[43,115,116],{},"PHP → Python（后端迁移）",[43,118,119],{},"Vue 2 → Vue 3（Composition API）",[43,121,122],{},"REST API → GraphQL",{"title":32,"searchDepth":59,"depth":59,"links":124},[125,126,127],{"id":16,"depth":62,"text":16},{"id":23,"depth":62,"text":24},{"id":102,"depth":62,"text":102},"把一种语言的代码转成另一种语言，保留逻辑正确性，适配目标语言惯用写法，标注差异点和需手动调整的地方。",{},"\u002Fprompts\u002Fcode-migration",{"title":84,"description":128},"prompts\u002Fcode-migration",[134,135,136],"迁移","重构","多语言",[77,78,79,80],"evCYYDSvF3rWwIimU9NOZYwU2TMCN-mz2XXKdzpcQas",{"id":140,"title":141,"body":142,"description":171,"extension":66,"meta":172,"navigation":68,"path":173,"seo":174,"stem":175,"tags":176,"targetTools":180,"__hash__":181},"prompts\u002Fprompts\u002Fcode-review-staff-level.md","Code Review Prompt：让 AI 像 Staff Engineer 一样审查代码",{"type":11,"value":143,"toc":166},[144,146,149,151,157,160,163],[14,145,16],{"id":16},[18,147,148],{},"把需要 review 的代码 \u002F PR diff 粘进来，配合下面的 prompt。",[14,150,24],{"id":23},[26,152,155],{"className":153,"code":154,"language":31,"meta":32},[29],"请像 Staff Engineer 一样审查以下代码。不要评论代码风格、命名偏好、注释多少——这些交给 linter。只报真正的问题。\n\n## 审查层级（按严重度排序）\n\n### 🔴 严重（必须修复，否则不能合并）\n- Bug：空指针、越界、竞态条件、资源泄露\n- 安全：SQL 注入、XSS、密钥泄露、权限绕过\n- 数据丢失风险：未处理的异常导致数据不一致\n\n### 🟡 重要（建议修复，不阻塞合并）\n- 性能：O(n²) 循环、N+1 查询、不合理的内存使用\n- 错误处理：吞异常、缺少重试、没有超时\n- 并发：缺少锁、死锁风险\n\n### 🟢 建议（可选，有空再改）\n- 可维护性：函数过长、职责不清、缺少抽象\n- 测试：边界 case 未覆盖、缺少异常路径测试\n\n### ❌ 不要报\n- 代码风格（空格、括号位置）\n- 命名偏好（除非真的有歧义）\n- 注释多少\n- 个人偏好\n\n## 输出格式\n\n对每个问题：\n- **[层级] 文件:行号** — 问题描述\n- 原因：为什么这是问题\n- 建议：怎么改（给代码示例）\n\n如果某个层级没有问题，明确写「无」。\n\n## 最后\n列出你看完后不确定的地方（需要更多上下文才能判断的点）。不要猜。\n\n---\n\n代码：\n（粘贴代码或 PR diff）\n",[34,156,154],{"__ignoreMap":32},[14,158,159],{"id":159},"效果",[18,161,162],{},"不加 prompt 时 AI 的 review 通常 20+ 条评论，一半是风格建议，开发者很快就忽略所有评论。",[18,164,165],{},"加了这条 prompt 后输出变成：3-5 个真问题，每个都有行号 + 原因 + 修复代码。信噪比大幅提升，开发者愿意看。",{"title":32,"searchDepth":59,"depth":59,"links":167},[168,169,170],{"id":16,"depth":62,"text":16},{"id":23,"depth":62,"text":24},{"id":159,"depth":62,"text":159},"让 AI review 代码常常得到一堆风格建议？这条 prompt 强制 AI 按 4 个层级审查（正确性 \u002F 安全 \u002F 性能 \u002F 可维护性），只报真正的问题，不评论主观风格。",{},"\u002Fprompts\u002Fcode-review-staff-level",{"title":141,"description":171},"prompts\u002Fcode-review-staff-level",[177,178,179],"code review","审查","质量",[77,78,79],"YfmZZtnVqzSlsTsOIbb9zrmw-APjCWXXF7VduiEfIm8",{"id":183,"title":184,"body":185,"description":237,"extension":66,"meta":238,"navigation":68,"path":239,"seo":240,"stem":241,"tags":242,"targetTools":245,"__hash__":248},"prompts\u002Fprompts\u002Fdebug-systematic.md","Bug 定位 Prompt：让 AI 像高级工程师一样诊断",{"type":11,"value":186,"toc":231},[187,189,192,194,200,203,214,217,220],[14,188,16],{"id":16},[18,190,191],{},"把出错信息和相关代码粘进来，配合下面的 prompt：",[14,193,24],{"id":23},[26,195,198],{"className":196,"code":197,"language":31,"meta":32},[29],"我遇到了一个 bug，请按以下步骤诊断（不要跳步）：\n\n1. **复述现象**：用 1-2 句话总结这个错误是什么。\n2. **列出 5 个可能原因**：从最可能到最不可能排序。每条 1 句话。\n3. **要求验证**：对最可能的 2 个原因，告诉我需要看哪些代码 \u002F 跑什么命令来确认。**不要直接猜结论。**\n4. **等我反馈**：在我提供验证结果之前，**不要给修复方案**。\n\n如果信息不够诊断，告诉我**具体缺什么**，不要泛泛说\"提供更多上下文\"。\n\n错误信息：\n```\n\u003Cpaste here>\n```\n\n相关代码（可选）：\n```\n\u003Cpaste here>\n```\n",[34,199,197],{"__ignoreMap":32},[14,201,202],{"id":202},"为什么有效",[40,204,205,208,211],{},[43,206,207],{},"\"5 个可能原因排序\"逼 AI 做 hypothesis ranking，而不是抓第一个想法",[43,209,210],{},"\"等我反馈\"切断了 AI 一上来就给伪修复的冲动",[43,212,213],{},"\"具体缺什么\"避免 AI 说\"need more context\"这种废话",[14,215,216],{"id":216},"进阶",[18,218,219],{},"如果是诡异 bug（错误信息不指向真正原因），追加：",[221,222,223],"blockquote",{},[18,224,225,226,230],{},"\"这个错误的",[227,228,229],"strong",{},"真实原因可能不在堆栈最上层","。请考虑：是不是上游某个数据 \u002F 配置 \u002F 环境差异导致下游表现出这个错误？列出 3 种这类间接原因。\"",{"title":32,"searchDepth":59,"depth":59,"links":232},[233,234,235,236],{"id":16,"depth":62,"text":16},{"id":23,"depth":62,"text":24},{"id":202,"depth":62,"text":202},{"id":216,"depth":62,"text":216},"粘贴错误信息让 AI 帮你 debug 时常常拿到泛泛回答？这条 prompt 强制 AI 走完整诊断流程。",{},"\u002Fprompts\u002Fdebug-systematic",{"title":184,"description":237},"prompts\u002Fdebug-systematic",[243,244],"debug","诊断",[246,78,247],"Claude Code","Trae","EMOXSvof5W8Rw8Ia8VUCZ-rRgLvBobzZ41BJYkP95X4",{"id":250,"title":251,"body":252,"description":280,"extension":66,"meta":281,"navigation":68,"path":282,"seo":283,"stem":284,"tags":285,"targetTools":288,"__hash__":289},"prompts\u002Fprompts\u002Fdoc-generation.md","技术文档生成 Prompt：让 AI 写出人能看懂的文档",{"type":11,"value":253,"toc":275},[254,256,259,261,267,269,272],[14,255,16],{"id":16},[18,257,258],{},"把代码 \u002F API \u002F 功能描述粘进来，配合下面的 prompt。",[14,260,24],{"id":23},[26,262,265],{"className":263,"code":264,"language":31,"meta":32},[29],"帮我把以下内容写成技术文档。不要写成说明书（「X 是一个用于 Y 的工具」），写成任务指南（「你想做 Z？这样做」）。\n\n## 文档结构\n\n### 这个文档解决什么问题\n（1 句话：读者看完能做什么）\n\n### 30 秒上手\n（最小可运行示例，不超过 5 步，能 copy-paste 直接跑）\n\n### 常用操作\n（按使用频率排序，不是按功能分类排序。每个操作格式：）\n- **做 X**：`命令或代码` → 预期结果\n- **做 Y**：`命令或代码` → 预期结果\n\n### 常见问题\n（列出 3 个最可能遇到的报错，每个给解决方案。不要列「什么是 X」这种概念问题）\n\n### 进阶\n（只给链接和一句话描述，不要在这里展开。读者需要时会自己点进去）\n\n## 规则\n- 不要写「概述」「背景」「设计理念」——没人看\n- 代码示例必须能直接运行，不能有伪代码\n- 如果某个操作需要前置条件，在步骤里写明\n- 中文输出，代码注释也用中文\n\n---\n\n内容来源：\n（粘贴你的代码 \u002F API 定义 \u002F 功能描述）\n",[34,266,264],{"__ignoreMap":32},[14,268,159],{"id":159},[18,270,271],{},"不加 prompt 时 AI 写的文档通常是：「X 是一个强大的工具，它提供了 A、B、C 功能……」——正确但没人看。",[18,273,274],{},"加了这条 prompt 后输出变成任务导向：「你想部署？这样做。你想调试？这样做。」——读者可以直接找到自己要做的事。",{"title":32,"searchDepth":59,"depth":59,"links":276},[277,278,279],{"id":16,"depth":62,"text":16},{"id":23,"depth":62,"text":24},{"id":159,"depth":62,"text":159},"让 AI 写文档经常得到一堆正确的废话？这条 prompt 强制 AI 写「任务导向」的文档——读者要做什么、怎么做、出错怎么办。",{},"\u002Fprompts\u002Fdoc-generation",{"title":251,"description":280},"prompts\u002Fdoc-generation",[286,287],"文档","写作",[77,78,79],"xX6RP5p3rfZBcAinqMoi6uO6AXqqeLsB_0-4RvXcNZ4",{"id":291,"title":292,"body":293,"description":500,"extension":66,"meta":501,"navigation":68,"path":502,"seo":503,"stem":504,"tags":505,"targetTools":507,"__hash__":509},"prompts\u002Fprompts\u002Fgit-commit-message.md","Git Commit Message Prompt：写出团队能读懂的 commit",{"type":11,"value":294,"toc":493},[295,297,338,341,343,349,351,366,370,381,444,451,455,473,476,489],[14,296,16],{"id":16},[26,298,302],{"className":299,"code":300,"language":301,"meta":32,"style":32},"language-bash shiki shiki-themes github-light github-dark","git add -p          # stage 你想 commit 的部分\ngit diff --cached   # 看 staged diff\n","bash",[34,303,304,325],{"__ignoreMap":32},[305,306,309,313,317,321],"span",{"class":307,"line":308},"line",1,[305,310,312],{"class":311},"sScJk","git",[305,314,316],{"class":315},"sZZnC"," add",[305,318,320],{"class":319},"sj4cs"," -p",[305,322,324],{"class":323},"sJ8bj","          # stage 你想 commit 的部分\n",[305,326,327,329,332,335],{"class":307,"line":62},[305,328,312],{"class":311},[305,330,331],{"class":315}," diff",[305,333,334],{"class":319}," --cached",[305,336,337],{"class":323},"   # 看 staged diff\n",[18,339,340],{},"把 diff 粘进 AI 配合 prompt：",[14,342,24],{"id":23},[26,344,347],{"className":345,"code":346,"language":31,"meta":32},[29],"请基于下面的 git diff 生成 commit message，要求：\n\n**格式**：Conventional Commits\n\n```\n\u003Ctype>(\u003Cscope>): \u003Csubject>\n\n\u003Cbody>\n\n\u003Cfooter>\n```\n\n**type**：feat \u002F fix \u002F refactor \u002F docs \u002F test \u002F chore \u002F perf \u002F style\n\n**铁律**：\n1. **subject ≤ 60 字符**，祈使句（\"add X\" 不是 \"added X\"）\n2. **不要写\"update XX 文件\"**。要写**改了什么行为**。\"update userService.ts\" ❌；\"add retry logic to userService.fetch\" ✅\n3. **body 解释 why，不是 what**——what 看 diff 就知道，why 看不出来\n4. **如果是 fix，body 必须说**：(a) 现象、(b) 根本原因、(c) 修复方式\n5. **scope 取自 diff 涉及的目录\u002F模块**，不要瞎编\n6. **如果 diff 包含多个不相关改动**，告诉我\"建议拆成 N 个 commit\"，**不要硬拼成一条 message**\n\ndiff：\n```\n\u003Cpaste here>\n```\n",[34,348,346],{"__ignoreMap":32},[14,350,202],{"id":202},[40,352,353,360,363],{},[43,354,355,356,359],{},"\"解释 why 不是 what\"是核心——好 commit message 让 6 个月后 ",[34,357,358],{},"git blame"," 的人能立刻理解决策",[43,361,362],{},"\"建议拆 commit\"防止 AI 把混乱的 diff 强行总结成一条空泛的 message",[43,364,365],{},"对 fix 强制\"现象 \u002F 根因 \u002F 修复\"三段式 = 直接可读的事故记录",[14,367,369],{"id":368},"进阶自动化","进阶（自动化）",[18,371,372,373,376,377,380],{},"把这个 prompt 存成 ",[34,374,375],{},".git\u002Fhooks\u002Fprepare-commit-msg"," 或 ",[34,378,379],{},"claude-code"," 的别名脚本：",[26,382,384],{"className":299,"code":383,"language":301,"meta":32,"style":32},"# ~\u002F.local\u002Fbin\u002Faicommit\ngit diff --cached | claude-code --prompt-file=~\u002F.config\u002Fclaude\u002Fcommit-prompt.md \\\n  | tee \u002Ftmp\u002Fmsg && git commit -F \u002Ftmp\u002Fmsg\n",[34,385,386,391,418],{"__ignoreMap":32},[305,387,388],{"class":307,"line":308},[305,389,390],{"class":323},"# ~\u002F.local\u002Fbin\u002Faicommit\n",[305,392,393,395,397,399,403,406,409,412,415],{"class":307,"line":62},[305,394,312],{"class":311},[305,396,331],{"class":315},[305,398,334],{"class":319},[305,400,402],{"class":401},"szBVR"," |",[305,404,405],{"class":311}," claude-code",[305,407,408],{"class":319}," --prompt-file=",[305,410,411],{"class":401},"~",[305,413,414],{"class":319},"\u002F.config\u002Fclaude\u002Fcommit-prompt.md",[305,416,417],{"class":319}," \\\n",[305,419,420,423,426,429,433,435,438,441],{"class":307,"line":59},[305,421,422],{"class":401},"  |",[305,424,425],{"class":311}," tee",[305,427,428],{"class":315}," \u002Ftmp\u002Fmsg",[305,430,432],{"class":431},"sVt8B"," && ",[305,434,312],{"class":311},[305,436,437],{"class":315}," commit",[305,439,440],{"class":319}," -F",[305,442,443],{"class":315}," \u002Ftmp\u002Fmsg\n",[18,445,446,447,450],{},"跑 ",[34,448,449],{},"aicommit"," 就 = 自动 staged diff → AI 写 message → commit。",[14,452,454],{"id":453},"反例ai-默认会写的烂-message","反例（AI 默认会写的烂 message）",[18,456,457,458,461,462,461,465,468,469,472],{},"❌ ",[34,459,460],{},"Update auth.ts and config.ts","\n❌ ",[34,463,464],{},"Various improvements",[34,466,467],{},"Fix bug"," （fix 什么 bug？）\n❌ ",[34,470,471],{},"feat: add new feature","（什么 feature？）",[18,474,475],{},"我们要的好例子：",[18,477,478,479,482,483,482,486],{},"✅ ",[34,480,481],{},"fix(auth): handle 401 from token refresh endpoint","\n✅ ",[34,484,485],{},"refactor(api): extract pagination logic into useCursor hook",[34,487,488],{},"feat(rankings): add real-time tool ranking from db click counts",[490,491,492],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}",{"title":32,"searchDepth":59,"depth":59,"links":494},[495,496,497,498,499],{"id":16,"depth":62,"text":16},{"id":23,"depth":62,"text":24},{"id":202,"depth":62,"text":202},{"id":368,"depth":62,"text":369},{"id":453,"depth":62,"text":454},"让 AI 基于 git diff 写 commit message，不再是 ",{},"\u002Fprompts\u002Fgit-commit-message",{"title":292,"description":500},"prompts\u002Fgit-commit-message",[312,506],"commit",[246,78,508],"Aider","BgWh3nf3cAize1XJ2qw-oP4rGmt3TJZzfszIRlIPyNc",{"id":511,"title":512,"body":513,"description":562,"extension":66,"meta":563,"navigation":68,"path":564,"seo":565,"stem":566,"tags":567,"targetTools":571,"__hash__":572},"prompts\u002Fprompts\u002Fperformance-optimization.md","性能优化 Prompt：让 AI 像性能工程师一样定位瓶颈",{"type":11,"value":514,"toc":557},[515,517,520,522,528,531,534],[14,516,16],{"id":16},[18,518,519],{},"把需要优化的代码粘进来。说明当前性能指标（耗时、内存）和目标。",[14,521,24],{"id":23},[26,523,526],{"className":524,"code":525,"language":31,"meta":32},[29],"你是一个性能优化专家。请分析以下代码的性能问题，并给出优化方案。\n\n## 代码\n\n{{粘贴代码}}\n\n## 当前表现\n\n- 输入规模：{{比如 10 万条数据}}\n- 耗时：{{比如 15 秒}}\n- 内存：{{比如 2GB}}\n- 目标：{{比如 1 秒内完成}}\n\n## 分析要求\n\n1. **复杂度分析**\n   - 时间复杂度（大 O 表示）\n   - 空间复杂度\n   - 瓶颈在哪里（哪一行\u002F哪个循环）\n\n2. **优化方案**\n   - 按优先级排序（收益最大的排前面）\n   - 每个方案说明预期效果（时间\u002F空间）\n   - 给出优化后的完整代码\n\n3. **权衡说明**\n   - 优化后是否有 trade-off（可读性、内存换时间等）\n   - 是否需要额外依赖\n\n## 输出格式\n\n### 复杂度分析\n- 当前：O(???)\n- 瓶颈：第 X 行的 YYY 循环\n\n### 优化方案\n\n#### 方案 1：{{方案名}}（推荐）\n- 预期效果：耗时从 15s → 0.8s\n- 原理：...\n- 代码：\n```{{语言}}\n\u002F\u002F 优化后的代码\n```\n\n#### 方案 2：{{方案名}}（备选）\n- ...\n\n### Before \u002F After 对比\n| 指标 | 优化前 | 优化后 | 提升 |\n|---|---|---|---|\n\n### 注意事项\n- 优化后需要更新的测试\n- 需要注意的 edge case\n",[34,527,525],{"__ignoreMap":32},[14,529,530],{"id":530},"常见优化模式",[18,532,533],{},"AI 会检查以下常见性能问题：",[40,535,536,539,542,545,548,551,554],{},[43,537,538],{},"O(n²) 循环 → 哈希表降为 O(n)",[43,540,541],{},"N+1 查询 → JOIN 或批量查询",[43,543,544],{},"递归无记忆化 → 加 memo\u002Fcache",[43,546,547],{},"不必要的全量加载 → 分页\u002F懒加载",[43,549,550],{},"字符串拼接 → 用 StringBuilder \u002F join",[43,552,553],{},"重复计算 → 预计算 + 缓存",[43,555,556],{},"同步阻塞 → 异步\u002F并发",{"title":32,"searchDepth":59,"depth":59,"links":558},[559,560,561],{"id":16,"depth":62,"text":16},{"id":23,"depth":62,"text":24},{"id":530,"depth":62,"text":530},"把慢代码或慢查询粘进来，AI 分析时间复杂度、空间复杂度、瓶颈点，给出优化方案和优化后的代码，附 before\u002Fafter 对比。",{},"\u002Fprompts\u002Fperformance-optimization",{"title":512,"description":562},"prompts\u002Fperformance-optimization",[568,569,570],"性能","优化","复杂度分析",[77,78,79,80],"rP4jQ8RWR512gmYpyeGk8P34xWajAzaQUTqVg2j5VxU",{"id":574,"title":575,"body":576,"description":661,"extension":66,"meta":662,"navigation":68,"path":663,"seo":664,"stem":665,"tags":666,"targetTools":668,"__hash__":670},"prompts\u002Fprompts\u002Fpr-review-first-pass.md","PR Review Prompt：让 AI 做第一道筛",{"type":11,"value":577,"toc":655},[578,580,613,616,618,624,626,640,643,652],[14,579,16],{"id":16},[26,581,583],{"className":299,"code":582,"language":301,"meta":32,"style":32},"git fetch origin main\ngit diff main...HEAD > \u002Ftmp\u002Fpr.diff\n",[34,584,585,598],{"__ignoreMap":32},[305,586,587,589,592,595],{"class":307,"line":308},[305,588,312],{"class":311},[305,590,591],{"class":315}," fetch",[305,593,594],{"class":315}," origin",[305,596,597],{"class":315}," main\n",[305,599,600,602,604,607,610],{"class":307,"line":62},[305,601,312],{"class":311},[305,603,331],{"class":315},[305,605,606],{"class":315}," main...HEAD",[305,608,609],{"class":401}," >",[305,611,612],{"class":315}," \u002Ftmp\u002Fpr.diff\n",[18,614,615],{},"把 diff 粘给 AI 配下面 prompt：",[14,617,24],{"id":23},[26,619,622],{"className":620,"code":621,"language":31,"meta":32},[29],"请审视下面的 PR diff，按以下结构输出 review：\n\n## 1. 改动分类\n\n输出一张表，每行一个改动单元：\n\n| 文件 | 类型 | 摘要 |\n|---|---|---|\n| ... | feat \u002F fix \u002F refactor \u002F test \u002F docs \u002F config | 1 句话 |\n\n## 2. 高风险点\n\n逐条列出，每条带文件:行号：\n\n- ⚠️ 业务逻辑改动但**没有对应测试**\n- ⚠️ 看起来是重构但行为可能被**无意改变**\n- 🛑 **secret \u002F API key** 出现在 diff 里\n- 🛑 **不可逆操作**（DB migration \u002F 删字段 \u002F 二进制格式变更）\n- ⚠️ **null deref \u002F 类型转换**等运行时风险\n\n如果某类没问题，明确写\"无\"，不要省略。\n\n## 3. 一致性扫描\n\n- PR 改了某函数签名 → 所有调用方都改了吗？\n- PR 加了新 pattern → 类似地方需要同步吗？\n- PR 改了某常量 → 相关常量同步了吗？\n\n逐条列出\"可能漏改\"的地方，给 文件:行号。\n\n## 4. 测试评估\n\n- 新增\u002F修改的测试**真的覆盖了业务逻辑改动**吗？还是只 happy path？\n- 断言够强吗？有\"修测试让它通过\"的痕迹吗？\n- 哪些 edge case 没被测到？\n\n## 5. 回滚成本\n\n- 单纯 git revert 能回滚吗？\n- 有不可逆改动吗？\n- 客户端\u002F服务端解耦了吗？\n\n## 6. 最终建议\n\n输出三段：\n- ✅ 没问题的部分（简短）\n- ⚠️ 需要 author 回应的问题（每条带 文件:行号）\n- 🛑 阻塞合并的问题（如有）\n\n**不要客套话，不要\"LGTM\"。具体、有依据、可行动。**\n\nPR diff:\n```\n\u003Cpaste here>\n```\n",[34,623,621],{"__ignoreMap":32},[14,625,202],{"id":202},[40,627,628,631,634,637],{},[43,629,630],{},"结构化输出强制 AI 走完所有维度，不能光说\"看起来还行\"",[43,632,633],{},"\"如果没问题明确写'无'\"防止 AI 偷懒省略",[43,635,636],{},"\"一致性扫描\"是 AI 的杀手锏——人类 review 容易盯着 diff 看，AI 会去看 diff 之外",[43,638,639],{},"\"回滚成本\"维度对 PR author 极有价值",[14,641,642],{"id":642},"配套工作流",[18,644,645,646,651],{},"完整流程见 ",[647,648,650],"a",{"href":649},"\u002Fplaybook\u002Freview\u002Fai-code-review-workflow","AI 做 PR review 工作流","。",[490,653,654],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":32,"searchDepth":59,"depth":59,"links":656},[657,658,659,660],{"id":16,"depth":62,"text":16},{"id":23,"depth":62,"text":24},{"id":202,"depth":62,"text":202},{"id":642,"depth":62,"text":642},"把整个 PR diff 丢给 AI，让它先给出结构化 review，人脑只看高价值部分。",{},"\u002Fprompts\u002Fpr-review-first-pass",{"title":575,"description":661},"prompts\u002Fpr-review-first-pass",[177,667],"PR",[246,78,669],"Augment","ZMT1cgA7zYQ9VAf15ld9dbWEE5giC-WrUG-Tn10Fq_U",{"id":672,"title":673,"body":674,"description":702,"extension":66,"meta":703,"navigation":68,"path":704,"seo":705,"stem":706,"tags":707,"targetTools":710,"__hash__":711},"prompts\u002Fprompts\u002Frefactor-large-safe.md","代码重构 Prompt：让 AI 做安全的大规模重构",{"type":11,"value":675,"toc":697},[676,678,681,683,689,691,694],[14,677,16],{"id":16},[18,679,680],{},"对需要重构的代码，配合下面的 prompt。适合跨文件重构、改接口签名、提取公共逻辑等场景。",[14,682,24],{"id":23},[26,684,687],{"className":685,"code":686,"language":31,"meta":32},[29],"我需要重构以下代码，请按安全重构流程执行，不要跳步：\n\n## 1. 影响分析（先做这个，不要改代码）\n列出这次重构会影响的所有文件和函数：\n- 直接影响：被改的文件 \u002F 函数\n- 间接影响：调用方 \u002F 被调用方\n- 测试影响：哪些测试需要更新\n\n## 2. 测试基线（确保重构前测试通过）\n- 跑一遍现有测试，确认全绿\n- 如果没有测试，先帮我写覆盖当前行为的测试（不要写期望行为）\n- 测试不过就停下，不要继续重构\n\n## 3. 重构计划\n把重构拆成 N 个小步骤，每步：\n- 改什么（具体到文件 + 函数）\n- 为什么这步是安全的\n- 这步后测试应该仍然全绿\n\n## 4. 分步执行\n按计划逐步执行，每步完成后：\n- 跑测试\n- 如果测试失败，立即回滚这一步，告诉我原因\n- 测试全绿才继续下一步\n\n## 5. 清理\n- 删除废弃的旧代码\n- 更新相关注释和文档\n- 跑完整测试套件最终确认\n\n## 规则\n- 不要一次性改超过 3 个文件\n- 不要改变公共 API 的行为（签名可以加可选参数，不能删\u002F改已有参数）\n- 不要在重构时顺便修 bug（另开任务）\n- 每一步都要可独立提交\n\n---\n\n需要重构的代码：\n（粘贴代码或描述重构需求）\n",[34,688,686],{"__ignoreMap":32},[14,690,159],{"id":159},[18,692,693],{},"不加 prompt 时 AI 经常一把梭——一次改 10 个文件，测试挂了不知道哪步出错。",[18,695,696],{},"加了这条 prompt 后 AI 被迫分步执行，每步验证，出问题能立即定位到具体步骤。大幅降低重构引入 bug 的概率。",{"title":32,"searchDepth":59,"depth":59,"links":698},[699,700,701],{"id":16,"depth":62,"text":16},{"id":23,"depth":62,"text":24},{"id":159,"depth":62,"text":159},"让 AI 重构代码经常改出新 bug？这条 prompt 强制 AI 先分析影响范围、生成测试、分步重构、每步验证。适合大规模重构（跨文件、改接口签名）。",{},"\u002Fprompts\u002Frefactor-large-safe",{"title":673,"description":702},"prompts\u002Frefactor-large-safe",[135,708,709],"安全","测试",[246,78,247],"-WnfJXinkgbM_la8oWZ3lB4t_cJD1IqmI5sVbW3N8Gg",{"id":713,"title":714,"body":715,"description":769,"extension":66,"meta":770,"navigation":68,"path":771,"seo":772,"stem":773,"tags":774,"targetTools":775,"__hash__":777},"prompts\u002Fprompts\u002Frefactor-safe.md","重构 Prompt：安全改一段代码",{"type":11,"value":716,"toc":763},[717,719,722,724,730,732,743,745,748,760],[14,718,16],{"id":16},[18,720,721],{},"选中要重构的代码段，配合下面的 prompt：",[14,723,24],{"id":23},[26,725,728],{"className":726,"code":727,"language":31,"meta":32},[29],"请重构下面这段代码，要求：\n\n**目标**：{改进可读性 \u002F 提取函数 \u002F 消除重复 \u002F 改名 — 选 1}\n\n**铁律**：\n1. **不改变行为**。重构前后所有可观测行为必须 100% 一致（输入 → 输出 \u002F 副作用）。\n2. **不增加新功能**。如果你看到一个 bug，**告诉我但不要修**。\n3. **不改 public API**（函数签名、导出名）。\n4. **保留所有错误处理**。即使原代码错误处理写得很烂，也保留。修是另一个 PR 的事。\n5. **保留所有注释**（除非注释明显不再准确）。\n\n**输出**：\n- 重构后的完整代码\n- 一份 changelog：每条说明你**做了什么** + **为什么不破坏行为**\n- 如果你看到 bug 或可疑代码，列在最后，**不要顺手改**\n\n代码：\n```\n\u003Cpaste here>\n```\n",[34,729,727],{"__ignoreMap":32},[14,731,202],{"id":202},[40,733,734,737,740],{},[43,735,736],{},"\"铁律\"列得越具体，AI 越不容易\"自作主张\"",[43,738,739],{},"\"看到 bug 也不修\"是关键——AI 经常把重构 + bug fix 混在一起，让 review 变噩梦",[43,741,742],{},"\"changelog 解释为什么不破坏行为\"逼 AI 真正思考等价性，而不是拍脑袋改",[14,744,216],{"id":216},[18,746,747],{},"如果代码段大、不放心 AI 一次改完，分两步：",[749,750,751,757],"ol",{},[43,752,753,754],{},"第一轮 prompt 加：",[227,755,756],{},"\"不要写代码，先告诉我你打算做哪些改动，列清单。\"",[43,758,759],{},"看清单 → 删掉你不同意的项 → 再让它执行剩下的",[18,761,762],{},"更安全。",{"title":32,"searchDepth":59,"depth":59,"links":764},[765,766,767,768],{"id":16,"depth":62,"text":16},{"id":23,"depth":62,"text":24},{"id":202,"depth":62,"text":202},{"id":216,"depth":62,"text":216},"让 AI 重构代码时不要顺手改行为？用这条 prompt 强制它",{},"\u002Fprompts\u002Frefactor-safe",{"title":714,"description":769},"prompts\u002Frefactor-safe",[135],[246,78,776],"Windsurf","yYZ5mbpy8o88JySD2OQPueTfy-tWBRoIlzw7Ajb7frI",{"id":779,"title":780,"body":781,"description":821,"extension":66,"meta":822,"navigation":68,"path":823,"seo":824,"stem":825,"tags":826,"targetTools":830,"__hash__":831},"prompts\u002Fprompts\u002Fregex-generation.md","Regex 生成 Prompt：用自然语言生成和解释正则表达式",{"type":11,"value":782,"toc":816},[783,785,788,790,796,799],[14,784,16],{"id":16},[18,786,787],{},"描述你要匹配\u002F替换\u002F提取什么内容，AI 生成正则并解释。",[14,789,24],{"id":23},[26,791,794],{"className":792,"code":793,"language":31,"meta":32},[29],"你是一个正则表达式专家。请根据我的需求生成正则表达式。\n\n## 需求\n\n{{描述你要匹配什么，比如\"匹配中国大陆手机号，1开头11位\"}}\n\n## 语言\u002F环境\n\n{{JavaScript \u002F Python \u002F Go \u002F Java \u002F grep \u002F sed}}\n\n## 要求\n\n1. 生成正则表达式\n2. 逐段解释每个部分的含义\n3. 给出测试用例（匹配 + 不匹配）\n4. 如果需求有歧义，列出假设\n5. 如果有多种写法，给推荐方案 + 备选方案\n\n## 输出格式\n\n### 正则表达式\n```\n{{正则}}\n```\n\n### 逐段解释\n| 部分 | 含义 |\n|---|---|\n| `^1` | 以 1 开头 |\n| `[3-9]` | 第二位 3-9 |\n| `\\d{9}` | 后面 9 位数字 |\n| `$` | 结束 |\n\n### 测试用例\n| 输入 | 匹配？ | 说明 |\n|---|---|---|\n| 13800138000 | ✅ | 标准手机号 |\n| 12345678901 | ❌ | 第二位是 2，不合法 |\n| 1380013800 | ❌ | 只有 10 位 |\n\n### 使用示例\n```{{语言}}\n\u002F\u002F JavaScript\nconst re = \u002F^1[3-9]\\d{9}$\u002F;\nconsole.log(re.test('13800138000')); \u002F\u002F true\n```\n\n### 注意事项\n- {{边界 case}}\n- {{性能提醒（如果有回溯风险）}}\n",[34,795,793],{"__ignoreMap":32},[14,797,798],{"id":798},"常见场景",[40,800,801,804,807,810,813],{},[43,802,803],{},"邮箱\u002F手机号\u002F身份证验证",[43,805,806],{},"URL 解析",[43,808,809],{},"日志提取",[43,811,812],{},"代码重构（批量替换）",[43,814,815],{},"数据清洗",{"title":32,"searchDepth":59,"depth":59,"links":817},[818,819,820],{"id":16,"depth":62,"text":16},{"id":23,"depth":62,"text":24},{"id":798,"depth":62,"text":798},"描述你要匹配什么，AI 生成正则 + 逐段解释 + 测试用例。再也不用对着正则发呆了。",{},"\u002Fprompts\u002Fregex-generation",{"title":780,"description":821},"prompts\u002Fregex-generation",[827,828,829],"正则","Regex","文本处理",[77,78,79,80],"TE8xE5MUgTMuIPgeyiMixMQZvprT4a2v3m1uMDiQj2M",{"id":833,"title":834,"body":835,"description":888,"extension":66,"meta":889,"navigation":68,"path":890,"seo":891,"stem":892,"tags":893,"targetTools":896,"__hash__":897},"prompts\u002Fprompts\u002Fsecurity-audit.md","安全审计 Prompt：让 AI 找出代码里的安全漏洞",{"type":11,"value":836,"toc":883},[837,839,842,844,850,853],[14,838,16],{"id":16},[18,840,841],{},"把需要审计的代码粘进来。适合 review 一个文件或一个模块，不要一次粘整个项目。",[14,843,24],{"id":23},[26,845,848],{"className":846,"code":847,"language":31,"meta":32},[29],"你是一个应用安全专家。请对以下代码进行安全审计，按 OWASP Top 10 逐项检查。\n\n## 代码\n\n{{粘贴代码}}\n\n## 技术栈\n\n- 语言：{{Python \u002F JavaScript \u002F Go \u002F Java}}\n- 框架：{{Express \u002F FastAPI \u002F Django \u002F Spring}}\n- 数据库：{{PostgreSQL \u002F MySQL \u002F MongoDB}}\n\n## 检查清单\n\n### A01 — 访问控制失效\n- 未授权可访问的接口\n- 越权（水平\u002F垂直）风险\n- IDOR（不安全直接对象引用）\n\n### A02 — 加密失败\n- 明文传输敏感数据\n- 弱加密算法（MD5、DES）\n- 硬编码密钥\u002F密码\n\n### A03 — 注入\n- SQL 注入（拼接 SQL 语句）\n- 命令注入（拼接 shell 命令）\n- LDAP\u002FXPath 注入\n\n### A04 — 不安全设计\n- 敏感操作缺少速率限制\n- 缺少 CSRF 防护\n- 不安全的文件上传\n\n### A05 — 安全配置错误\n- 调试模式未关闭\n- 不安全的默认配置\n- 错误信息泄露堆栈\n\n### A06 — 易受攻击的组件\n- 已知漏洞的依赖版本\n\n### A07 — 认证失败\n- 弱密码策略\n- 会话管理缺陷\n- JWT 配置问题\n\n### A08 — 数据完整性失败\n- 反序列化漏洞\n- 不安全的 CI\u002FCD\n\n### A09 — 日志监控不足\n- 安全事件未记录\n- 日志包含敏感信息\n\n### A10 — SSRF\n- 服务端发起未验证的 HTTP 请求\n\n## 输出格式\n\n对每个发现：\n- **[严重度] 漏洞类型 — 文件:行号**\n- 问题描述：为什么这是漏洞\n- 攻击场景：怎么利用\n- 修复建议：给出修复后的代码\n\n如果没有发现问题，明确写「未发现 A0X 风险」。\n",[34,849,847],{"__ignoreMap":32},[14,851,852],{"id":852},"严重度定义",[40,854,855,862,869,876],{},[43,856,857,858,861],{},"🔴 ",[227,859,860],{},"严重"," — 可直接被利用，导致数据泄露或 RCE",[43,863,864,865,868],{},"🟡 ",[227,866,867],{},"高危"," — 需要特定条件才能利用，但影响严重",[43,870,871,872,875],{},"🟢 ",[227,873,874],{},"中危"," — 增加攻击面，但单独无法直接利用",[43,877,878,879,882],{},"⚪ ",[227,880,881],{},"低危"," — 最佳实践问题，建议修复",{"title":32,"searchDepth":59,"depth":59,"links":884},[885,886,887],{"id":16,"depth":62,"text":16},{"id":23,"depth":62,"text":24},{"id":852,"depth":62,"text":852},"把代码粘进来，AI 按 OWASP Top 10 逐项检查：SQL 注入、XSS、CSRF、认证绕过、密钥泄露、路径穿越，输出带行号的修复建议。",{},"\u002Fprompts\u002Fsecurity-audit",{"title":834,"description":888},"prompts\u002Fsecurity-audit",[708,894,895],"审计","OWASP",[77,78,79,80],"JZ1UkdpsqL6Ip5gpjxiR1kKvdRpXh9xvbr9kleVPjAc",{"id":899,"title":900,"body":901,"description":1124,"extension":66,"meta":1125,"navigation":68,"path":1126,"seo":1127,"stem":1128,"tags":1129,"targetTools":1132,"__hash__":1133},"prompts\u002Fprompts\u002Fsql-generation.md","SQL 查询生成 Prompt：从自然语言到优化 SQL",{"type":11,"value":902,"toc":1114},[903,905,908,910,916,919,929,935,939,947,951,1089,1092,1100,1103,1111],[14,904,16],{"id":16},[18,906,907],{},"把表结构（DDL）和你的需求描述粘进来，AI 会生成带注释的 SQL + 性能建议。",[14,909,24],{"id":23},[26,911,914],{"className":912,"code":913,"language":31,"meta":32},[29],"你是一个资深 DBA。请根据以下表结构，把我描述的需求转成 SQL 查询。\n\n## 表结构\n\n{{粘贴你的 CREATE TABLE 语句，或表名+字段说明}}\n\n## 需求\n\n{{用自然语言描述你要查什么，比如\"查上个月销售额前十的用户\"}}\n\n## 要求\n\n1. 生成标准 SQL（MySQL \u002F PostgreSQL，说明你选了哪个方言）\n2. 所有字段名用反引号包裹\n3. 每个关键步骤加注释说明逻辑\n4. 如果需要 JOIN，说明为什么选这种 JOIN 类型\n5. 如果查询可能慢，给出索引建议\n6. 如果需求有歧义，先列出你的假设，再给 SQL\n\n## 输出格式\n\n### 假设（如果有歧义）\n- 假设 1：...\n- 假设 2：...\n\n### SQL\n```sql\n-- 你的 SQL\n```\n\n### 索引建议（如果需要）\n- `CREATE INDEX idx_xxx ON table(column)` — 理由\n\n### 性能说明\n- 预估扫描行数：...\n- 是否走索引：...\n",[34,915,913],{"__ignoreMap":32},[14,917,918],{"id":918},"示例对话",[18,920,921,924,925,928],{},[227,922,923],{},"输入","：\n表结构：",[34,926,927],{},"orders(id, user_id, amount, created_at, status)","\n需求：查上个月每个用户的总消费，取前 10 名",[18,930,931,934],{},[227,932,933],{},"输出","：",[936,937,938],"h3",{"id":938},"假设",[40,940,941,944],{},[43,942,943],{},"\"上个月\"指自然月（非最近 30 天）",[43,945,946],{},"只统计已支付订单（status = 'paid'）",[936,948,950],{"id":949},"sql","SQL",[26,952,955],{"className":953,"code":954,"language":949,"meta":32,"style":32},"language-sql shiki shiki-themes github-light github-dark","SELECT\n  user_id,\n  SUM(amount) AS total_spent\nFROM `orders`\nWHERE `status` = 'paid'\n  AND `created_at` >= DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 1 MONTH), '%Y-%m-01')\n  AND `created_at` \u003C DATE_FORMAT(CURDATE(), '%Y-%m-01')\nGROUP BY `user_id`\nORDER BY `total_spent` DESC\nLIMIT 10;\n",[34,956,957,962,967,981,990,1005,1038,1056,1065,1077],{"__ignoreMap":32},[305,958,959],{"class":307,"line":308},[305,960,961],{"class":401},"SELECT\n",[305,963,964],{"class":307,"line":62},[305,965,966],{"class":431},"  user_id,\n",[305,968,969,972,975,978],{"class":307,"line":59},[305,970,971],{"class":319},"  SUM",[305,973,974],{"class":431},"(amount) ",[305,976,977],{"class":401},"AS",[305,979,980],{"class":431}," total_spent\n",[305,982,984,987],{"class":307,"line":983},4,[305,985,986],{"class":401},"FROM",[305,988,989],{"class":315}," `orders`\n",[305,991,993,996,999,1002],{"class":307,"line":992},5,[305,994,995],{"class":401},"WHERE",[305,997,998],{"class":315}," `status`",[305,1000,1001],{"class":401}," =",[305,1003,1004],{"class":315}," 'paid'\n",[305,1006,1008,1011,1014,1017,1020,1023,1026,1029,1032,1035],{"class":307,"line":1007},6,[305,1009,1010],{"class":401},"  AND",[305,1012,1013],{"class":315}," `created_at`",[305,1015,1016],{"class":401}," >=",[305,1018,1019],{"class":401}," DATE_FORMAT",[305,1021,1022],{"class":431},"(DATE_SUB(CURDATE(), INTERVAL ",[305,1024,1025],{"class":319},"1",[305,1027,1028],{"class":401}," MONTH",[305,1030,1031],{"class":431},"), ",[305,1033,1034],{"class":315},"'%Y-%m-01'",[305,1036,1037],{"class":431},")\n",[305,1039,1040,1042,1044,1047,1049,1052,1054],{"class":307,"line":5},[305,1041,1010],{"class":401},[305,1043,1013],{"class":315},[305,1045,1046],{"class":401}," \u003C",[305,1048,1019],{"class":401},[305,1050,1051],{"class":431},"(CURDATE(), ",[305,1053,1034],{"class":315},[305,1055,1037],{"class":431},[305,1057,1059,1062],{"class":307,"line":1058},8,[305,1060,1061],{"class":401},"GROUP BY",[305,1063,1064],{"class":315}," `user_id`\n",[305,1066,1068,1071,1074],{"class":307,"line":1067},9,[305,1069,1070],{"class":401},"ORDER BY",[305,1072,1073],{"class":315}," `total_spent`",[305,1075,1076],{"class":401}," DESC\n",[305,1078,1080,1083,1086],{"class":307,"line":1079},10,[305,1081,1082],{"class":401},"LIMIT",[305,1084,1085],{"class":319}," 10",[305,1087,1088],{"class":431},";\n",[936,1090,1091],{"id":1091},"索引建议",[40,1093,1094],{},[43,1095,1096,1099],{},[34,1097,1098],{},"CREATE INDEX idx_status_created ON orders(status, created_at)"," — 覆盖时间范围筛选",[936,1101,1102],{"id":1102},"性能说明",[40,1104,1105,1108],{},[43,1106,1107],{},"走 idx_status_created 索引，避免全表扫描",[43,1109,1110],{},"GROUP BY user_id 需要临时表排序，数据量大时考虑分页",[490,1112,1113],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":32,"searchDepth":59,"depth":59,"links":1115},[1116,1117,1118],{"id":16,"depth":62,"text":16},{"id":23,"depth":62,"text":24},{"id":918,"depth":62,"text":918,"children":1119},[1120,1121,1122,1123],{"id":938,"depth":59,"text":938},{"id":949,"depth":59,"text":950},{"id":1091,"depth":59,"text":1091},{"id":1102,"depth":59,"text":1102},"把'帮我查上个月销售额前十的用户'这种自然语言转成 SQL，自动选 JOIN 类型、加索引建议、防 SQL 注入。",{},"\u002Fprompts\u002Fsql-generation",{"title":900,"description":1124},"prompts\u002Fsql-generation",[950,1130,1131],"数据库","代码生成",[77,78,79,80],"ZEhqRRzNv7wieRUjt-YmGhzX4utjO3EejSdsrMyC32E",{"id":1135,"title":1136,"body":1137,"description":1165,"extension":66,"meta":1166,"navigation":68,"path":1167,"seo":1168,"stem":1169,"tags":1170,"targetTools":1174,"__hash__":1175},"prompts\u002Fprompts\u002Ftech-architecture-eval.md","技术方案评估 Prompt：让 AI 像架构师一样评估方案",{"type":11,"value":1138,"toc":1160},[1139,1141,1144,1146,1152,1154,1157],[14,1140,16],{"id":16},[18,1142,1143],{},"把两个或多个备选方案的技术背景粘进来，配合下面的 prompt。",[14,1145,24],{"id":23},[26,1147,1150],{"className":1148,"code":1149,"language":31,"meta":32},[29],"我正在评估以下技术方案，请像资深架构师一样帮我分析。不要给泛泛的建议，按以下结构输出：\n\n## 方案概要\n（每个方案 1 句话总结核心思路）\n\n## 五维评分（1-5 分）\n\n| 维度 | 方案 A | 方案 B | 说明 |\n|---|---|---|---|\n| 开发效率 | ? | ? | 搭起来快不快 |\n| 可维护性 | ? | ? | 半年后好不好改 |\n| 性能 | ? | ? | 预期吞吐量级 |\n| 生态成熟度 | ? | ? | 社区\u002F文档\u002F工具链 |\n| 团队匹配度 | ? | ? | 现有团队技能栈是否匹配 |\n\n## 风险矩阵\n\n列出每个方案的 Top 3 风险，按「概率 × 影响」排序：\n- 风险描述\n- 概率（高\u002F中\u002F低）\n- 影响（高\u002F中\u002F低）\n- 缓解措施\n\n## 迁移成本\n如果现在从方案 A 切到方案 B，需要改什么？列出具体的改动点和工作量估算。\n\n## 你的推荐\n基于以上分析，你推荐哪个方案？给出理由（不超过 3 条）。\n\n## 你不确定的地方\n列出你在评估中信息不足、需要我补充确认的点。不要猜。\n\n---\n\n方案背景：\n（粘贴你的方案详情）\n",[34,1151,1149],{"__ignoreMap":32},[14,1153,159],{"id":159},[18,1155,1156],{},"不加 prompt 时 AI 通常说「两个都很好，看你的需求」——正确但没用。",[18,1158,1159],{},"加了这条 prompt 后 AI 被迫给出具体评分、风险和推荐，而且最后的「不确定的地方」经常能帮你发现自己遗漏的考量点。",{"title":32,"searchDepth":59,"depth":59,"links":1161},[1162,1163,1164],{"id":16,"depth":62,"text":16},{"id":23,"depth":62,"text":24},{"id":159,"depth":62,"text":159},"选型时让 AI 帮你评估技术方案，常常拿到一堆正确但没用的废话？这条 prompt 强制 AI 从 5 个维度打分、给出风险矩阵和迁移成本。",{},"\u002Fprompts\u002Ftech-architecture-eval",{"title":1136,"description":1165},"prompts\u002Ftech-architecture-eval",[1171,1172,1173],"架构","选型","评估",[77,78,79],"se7MVQ8tk2uWOvn5iJwqASB688Vgv_lvnfay0y5g1ZY",{"id":1177,"title":1178,"body":1179,"description":1241,"extension":66,"meta":1242,"navigation":68,"path":1243,"seo":1244,"stem":1245,"tags":1246,"targetTools":1247,"__hash__":1248},"prompts\u002Fprompts\u002Ftest-generation.md","测试生成 Prompt：写出真正能 catch bug 的测试",{"type":11,"value":1180,"toc":1235},[1181,1183,1186,1188,1194,1196,1214,1216,1219,1228],[14,1182,16],{"id":16},[18,1184,1185],{},"选中要测的函数，配合下面的 prompt：",[14,1187,24],{"id":23},[26,1189,1192],{"className":1190,"code":1191,"language":31,"meta":32},[29],"请为下面这个函数生成单元测试。要求：\n\n**测试框架**：{vitest \u002F jest \u002F pytest \u002F go test — 替换}\n\n**必须覆盖**：\n1. **Happy path**：典型输入 → 期望输出\n2. **Edge cases**（每条单独一个 test）：\n   - 空输入（`null` \u002F `undefined` \u002F `[]` \u002F `''`）\n   - 极小值 \u002F 极大值（如果是数值\u002F字符串长度有意义）\n   - 边界值（off-by-one 候选）\n   - 异常输入（类型错误 \u002F 格式错误）\n3. **错误处理**：触发函数内部 error path，断言抛出正确的错误类型 + message\n\n**铁律**：\n1. **断言要强**。不要只 `expect(result).toBeDefined()`——要 `toEqual` \u002F `toBe` 具体值\n2. **每个 test 一个 assertion focus**。不要一个 `it()` 测三件事\n3. **测试名要描述行为**：\"returns null when input is empty array\"，**不是** \"test 1\"\n4. **不要 mock 不必要的东西**。能用真实输入就用真实输入\n\n**输出**：\n- 完整的 test 文件\n- 列出\"我故意没测的场景\" + 原因（性能测试 \u002F 集成测试 \u002F 不可达分支）\n\n函数：\n```\n\u003Cpaste here>\n```\n",[34,1193,1191],{"__ignoreMap":32},[14,1195,202],{"id":202},[40,1197,1198,1201,1211],{},[43,1199,1200],{},"\"必须覆盖\"列出具体类型，避免 AI 只写 happy path",[43,1202,1203,1204,1207,1208],{},"\"断言要强\"是关键——AI 默认倾向 ",[34,1205,1206],{},"toBeDefined","，但这种断言",[227,1209,1210],{},"捕捉不到 bug",[43,1212,1213],{},"\"故意没测的场景 + 原因\"暴露 AI 的盲点，给你机会补全",[14,1215,216],{"id":216},[18,1217,1218],{},"如果是改 bug 后想加防回归测试：",[221,1220,1221],{},[18,1222,1223,1224,1227],{},"\"我刚修了一个 bug：{bug 描述}。请只写",[227,1225,1226],{},"能 catch 这个 bug 回归","的最小测试集。不要写覆盖整个函数的全套测试——那是别的 PR。\"",[18,1229,1230,1231,1234],{},"防回归测试要",[227,1232,1233],{},"精准","，不要被全套测试稀释。",{"title":32,"searchDepth":59,"depth":59,"links":1236},[1237,1238,1239,1240],{"id":16,"depth":62,"text":16},{"id":23,"depth":62,"text":24},{"id":202,"depth":62,"text":202},{"id":216,"depth":62,"text":216},"AI 写的测试经常是",{},"\u002Fprompts\u002Ftest-generation",{"title":1178,"description":1241},"prompts\u002Ftest-generation",[709],[246,78,508],"Cj9Pd9Rw2F3EXHtYnM1tmg0sdbhm-U-Ww2TDgiyraws",{"tools":4,"reviews":5,"playbooks":1079,"news":1058},1782316491488]