
本文约 4200 字预计阅读 15 分钟。所有技巧均在实际项目中验证有效。用 Claude 辅助编程三个多月了期间踩了不少坑也摸索出来一套用起来顺手的方法。网上关于 Claude 的文章要么太基础就说个写代码让 Claude 帮你要么太学术全是论文里的 prompt 理论。这篇就写实战的。32 个技巧全部来自真实开发场景没有废话。一、Prompt 基础技巧技巧 1-8技巧 1先给角色再给任务不要直接甩代码问这是什么意思。先给 Claude 一个上下文角色回答质量会明显提升。# 差的写法 帮我解释这段代码 # 好的写法 你是一名有 10 年经验的 Python 后端工程师擅长性能优化。 请解释以下代码的逻辑并指出可以优化的地方。 [代码]角色设定不是魔法本质是给 Claude 一个预期输出标准——你希望它像一个专家一样回答它就会用专家的视角组织内容。技巧 2明确输出格式模糊的问题得到模糊的答案。加上格式要求Claude 的输出可以直接用。请分析以下代码的问题输出格式要求 1. 问题列表用 Markdown 无序列表 2. 每个问题包含问题描述、影响、修复方案 3. 最后给出修复后的完整代码 4. 代码加上注释 [代码]特别是要生成 JSON、YAML、SQL 这类结构化内容时一定要明确说只输出 JSON不要解释否则 Claude 会在代码块前后加很多解释文字还要自己处理。技巧 3用 XML 标签隔离输入内容当你的请求里包含多个部分代码需求约束用 XML 标签分隔Claude 理解起来更准确task将以下函数改写为异步版本保持接口不变/taskconstraints- 使用 asyncio不用 concurrent.futures - Python 3.10 - 不要修改函数签名/constraintscodedef fetch_user_data(user_id: int) - dict: response requests.get(f/api/users/{user_id}) return response.json()/codeXML 标签在 Claude 这里效果比 Markdown 分隔符稳定尤其是处理包含特殊字符的代码时。技巧 4分步骤提问不要一次问太多一次让 Claude 写一个完整的复杂系统大概率会得到一个看起来能用但细节全是坑的结果。正确姿势拆分任务第一轮先设计数据结构和接口 第二轮实现核心逻辑 第三轮加错误处理和边界情况 第四轮写测试用例 第五轮Review 整体找潜在问题每一步验证后再进入下一步。我做一个 3000 行的项目一般分 15-20 轮对话比一次让它写完然后改 bug 效率高很多。技巧 5给示例Few-shot Prompting告诉 Claude 你想要什么风格的代码最快的方式是给示例按照以下风格改写函数 # 示例输入 def add(a, b): return a b # 示例输出我想要的风格 def add(a: int, b: int) - int: 将两个整数相加。 Args: a: 第一个加数 b: 第二个加数 Returns: 两数之和 if not isinstance(a, int) or not isinstance(b, int): raise TypeError(f参数必须是整数收到: {type(a)}, {type(b)}) return a b # 现在请按同样的风格改写这个函数 def process_order(order_id, items): ...技巧 6用让我们一步步分析解决复杂问题对于 bug 排查、算法设计这类需要推理的任务在末尾加上这句话效果明显请一步步分析这个问题写出你的推理过程最后给出结论。这就是所谓的 Chain-of-Thought思维链让 Claude 把中间步骤都输出来不仅答案更准确你也能看到它的推理哪里出了问题。技巧 7提供负面约束不要做什么开发中很多时候你有明确的限制直接写出来帮我实现一个用户认证模块要求 - 使用 JWT - 不要引入 Redis我们的部署环境没有 - 不要使用 OAuth 第三方登录 - session 存储用本地文件不用数据库Claude 默认会给最佳实践方案但你的场景有约束时不说出来它不知道。技巧 8让 Claude 先问问题再写代码对于复杂需求先让 Claude 澄清问题比直接让它开始写要好我要写一个文件处理系统。在开始写代码前请先问我 5 个关键问题 确认你完全理解需求后再开始。这招特别适合需求模糊的场景Claude 问出来的问题往往能帮你发现自己没想清楚的地方。二、代码生成技巧技巧 9-16技巧 9生成代码时要求附带测试写一个 Python 函数解析 IP 地址范围字符串如 192.168.1.0-192.168.1.255 为 IP 列表。**同时写 pytest 测试用例**至少覆盖正常情况、边界值、无效输入。一起生成省得你再回来要测试。测试代码有时候还能发现主函数的逻辑漏洞。技巧 10指定依赖版本避免过期代码用 Python 3.11 aiohttp 3.9 pydantic v2 实现一个异步 HTTP 客户端不指定版本Claude 可能给你用 pydantic v1 的语法或者用了某个 3.8 才有的特性本地跑起来一堆报错。技巧 11要求生成可运行的完整代码给我一个完整可运行的示例包含 1. 所有 import 2. 依赖安装命令pip install xxx 3. 完整的 main() 函数 4. 运行方式说明完整可运行这四个字很重要不然 Claude 会给你省略号版本。技巧 12分模块生成复杂系统大系统一次生成质量差按模块来我要构建一个 API 网关包含以下模块 1. 请求路由 2. 认证中间件 3. 限流器 4. 日志记录 先只实现第 1 个请求路由模块。接口设计要考虑后续其他模块能方便接入。每个模块生成后测试通过再进入下一个。技巧 13让 Claude 解释关键决策实现这个功能时对于并发控制的方式你选择了什么 为什么选这个而不是 [备选方案]有什么 trade-off这不只是学习是让你知道能不能信任这段代码。技巧 14用从简到繁生成代码先要最简单版本确认思路对了再加功能第一步写一个最简单的 WebSocket 服务器只实现 echo 功能 不需要认证、不需要房间管理、不需要断线重连验证核心逻辑后再让它加功能。一上来就要完整版容易翻车。技巧 15让 Claude 写代码后立即 Review生成完让它马上审查自己写的代码好现在请以一个挑剔的高级工程师视角找出你刚才写的代码中的 1. 潜在 bug 2. 性能问题 3. 安全漏洞 4. 可维护性问题 找到后立即修复。这招很有用Claude 在自我 Review 时经常能找出它第一次没写好的地方。技巧 16生成代码风格迁移有旧代码想升级风格将以下 Python 2 风的代码迁移到 Python 3.10 - 使用 f-string 替代 % 格式化 - 使用 pathlib 替代 os.path - 使用 dataclass 替代手写 __init__ - 添加类型注解 [旧代码]三、调试与排查技巧技巧 17-22技巧 17粘贴完整报错不要描述# 差的写法 我的代码报了个 KeyError怎么解决 # 好的写法 运行时报错如下请帮我分析原因和解决方案 Traceback (most recent call last): File main.py, line 45, in process_data value data[user][profile][avatar] KeyError: profile 相关代码 [代码] 数据示例 [数据]完整的 traceback 能让 Claude 精准定位问题不然它只能猜。技巧 18描述预期行为 vs 实际行为问题描述 - 预期调用 save_user() 后数据库中的 updated_at 字段更新为当前时间 - 实际updated_at 一直是用户创建时间没有更新 - 已排查确认 SQL 语句有 UPDATE事务也 commit 了 [相关代码]为什么不对比帮我看看这段代码更有助于 Claude 聚焦问题。技巧 19让 Claude 生成调试代码我怀疑这个函数在处理大数据量时有内存泄漏但不确定在哪里。 请帮我在关键位置插入内存监控代码使用 memory_profiler 或 tracemalloc 让我能定位泄漏点。技巧 20二分法排查——让 Claude 帮你缩小范围这段 500 行的数据处理代码有 bug输出结果不对。 你能帮我设计一个排查方案在不逐行 debug 的情况下 用最少的步骤定位到出错的函数技巧 21提供运行环境信息环境 - OS: Ubuntu 22.04 - Python: 3.11.4 - 虚拟环境conda - 相关包版本numpy1.24.0, pandas2.0.1 问题[...]很多 bug 是版本兼容性导致的环境信息是关键。技巧 22让 Claude 写防御性代码调试完后让它加防御这个函数现在能正常运行了。请帮我加上防御性代码 1. 对所有入参进行合法性校验 2. 对可能的异常情况加 try-except给出有意义的错误信息 3. 加上关键步骤的日志输出用 logging不用 print四、Claude API 调用技巧技巧 23-28技巧 23合理设置 max_tokensimportanthropic clientanthropic.Anthropic()# 根据任务类型设置合适的 max_tokensMAX_TOKENS_MAP{code_generation:4096,# 代码生成需要更多空间explanation:1024,# 解释类不需要太长summary:512,# 摘要更短chat:2048,# 对话适中}defcall_claude(task_type:str,prompt:str)-str:responseclient.messages.create(modelclaude-opus-4-6,max_tokensMAX_TOKENS_MAP.get(task_type,2048),# 默认 2048messages[{role:user,content:prompt}])returnresponse.content[0].textmax_tokens 设太小会截断输出设太大浪费钱。按任务类型分档管理。技巧 24用 temperature 控制输出风格# 代码生成低 temperature确定性更高减少幻觉responseclient.messages.create(modelclaude-opus-4-6,max_tokens4096,temperature0.2,# 低温度代码逻辑更稳定messages[{role:user,content:写一个快速排序算法}])# 头脑风暴高 temperature更多创意responseclient.messages.create(modelclaude-opus-4-6,max_tokens2048,temperature0.8,# 高温度更多创意messages[{role:user,content:给这个功能想 10 个命名方案}])技巧 25用 system prompt 保持一致性CODING_SYSTEM_PROMPT 你是一个 Python 高级工程师。回答遵循以下规范 1. 代码使用 Python 3.10 语法 2. 所有函数必须有类型注解 3. 错误信息必须具体不能只写 Error 4. 代码示例必须可以直接运行 5. 如果有多种实现方式先给最简单的再说其他 defask_code_question(question:str)-str:responseclient.messages.create(modelclaude-opus-4-6,max_tokens4096,systemCODING_SYSTEM_PROMPT,# 每次都带上保持风格一致messages[{role:user,content:question}])returnresponse.content[0].text技巧 26流式输出提升用户体验等 Claude 生成完整回复才显示用户会以为卡住了。用流式输出importanthropic clientanthropic.Anthropic()defstream_code_generation(prompt:str):流式输出代码实时显示生成过程withclient.messages.stream(modelclaude-opus-4-6,max_tokens4096,messages[{role:user,content:prompt}])asstream:fortextinstream.text_stream:print(text,end,flushTrue)# 实时打印print()# 换行# 获取完整消息包含 usage 信息final_messagestream.get_final_message()print(f\n[Token 使用: 输入{final_message.usage.input_tokens}f输出{final_message.usage.output_tokens}])stream_code_generation(用 Python 实现一个 LRU 缓存)技巧 27多轮对话要手动管理上下文Claude API 是无状态的每次调用都是独立的。要实现多轮对话需要自己维护历史classClaudeChatSession:def__init__(self,system_prompt:str):self.clientanthropic.Anthropic()self.system_promptsystem_prompt self.history:list[dict][]defchat(self,user_message:str)-str:# 加入历史self.history.append({role:user,content:user_message})responseself.client.messages.create(modelclaude-opus-4-6,max_tokens4096,systemself.system_prompt,messagesself.history# 带上完整历史)assistant_replyresponse.content[0].text# 把 Claude 的回复也加入历史self.history.append({role:assistant,content:assistant_reply})returnassistant_replydefclear_history(self):上下文太长时清空防止超出 context windowself.history[]# 使用示例sessionClaudeChatSession(system_prompt你是一个代码 Review 助手)print(session.chat(帮我 review 这个函数[代码]))print(session.chat(第二点能展开说说吗))# Claude 知道第二点指什么技巧 28用 Prompt Caching 降低成本如果你的请求里有大量重复内容比如长的 system prompt 或者代码库用 Prompt Caching 可以省很多钱# Prompt Caching对重复的长内容标记 cache_controlresponseclient.messages.create(modelclaude-opus-4-6,max_tokens4096,system[{type:text,text:very_long_system_prompt,# 很长的系统提示cache_control:{type:ephemeral}# 标记为可缓存}],messages[{role:user,content:question}])# 检查缓存命中情况usageresponse.usageprint(f缓存命中:{usage.cache_read_input_tokens}tokens)print(f缓存写入:{usage.cache_creation_input_tokens}tokens)缓存命中后这部分 token 的费用会大幅降低约降低 90%。适合长 system prompt、代码库上下文、文档分析等场景。五、高级技巧技巧 29-32技巧 29让 Claude 自我批评再迭代请先写一个解决方案然后以一个挑剔的技术评审者身份批评它 指出 3 个最大的缺陷最后给出改进后的最终版本。初稿 → 自我批评 → 迭代这个流程比直接要最终版本质量高很多。技巧 30用结构化输出方便程序处理让 Claude 输出 JSON方便你的程序解析prompt 分析以下代码以 JSON 格式输出结构如下 { bugs: [{line: int, description: str, severity: high|medium|low}], improvements: [{description: str, priority: high|medium|low}], overall_quality_score: int // 1-10 } 只输出 JSON不要任何解释。 代码 [你的代码] importjson response_textcall_claude(code_review,prompt)resultjson.loads(response_text)# 直接解析技巧 31生成代码文档为以下代码生成文档格式要求 1. 模块级 docstring说明功能和使用场景 2. 每个公共函数的 Google 风格 docstring 3. 复杂逻辑处的内联注释 4. 一个完整的使用示例放在模块末尾的 if __name__ __main__ 里 [代码]技巧 32建立专属代码风格档案把你的代码风格要求整理成一份风格文档每次对话都带上# 把风格要求存成文件withopen(code_style.md,r)asf:style_guidef.read()system_promptf 你是我的编程助手所有代码必须遵循以下风格规范{style_guide}# 每次对话都使用这个 system_prompt这样你不用每次都重复说规范Claude 的输出风格也会保持一致。我的风格文档大概 200 行覆盖命名规范、错误处理、日志格式等省了很多反复纠正的时间。小结32 个技巧核心就是三点给上下文角色、约束、示例越具体越好分步骤复杂任务拆开做每步验证再进入下一步迭代改进初版 → 自我 Review → 修复 → 测试不要一步到位Claude 本质上是一个懂很多但不了解你的场景的协作者你给的信息越多、越准确它的输出就越有用。有什么问题评论区聊我会回复。工具推荐本文中使用 Claude Code是通过 玉兔AI 连接使用的国内直连比较稳定