Claude 编程实战 32 个技巧:用了三个月总结出来的,建议收藏

0 阅读13分钟

本文约 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>
将以下函数改写为异步版本,保持接口不变
</task>

<constraints>
- 使用 asyncio,不用 concurrent.futures
- Python 3.10+
- 不要修改函数签名
</constraints>

<code>
def fetch_user_data(user_id: int) -> dict:
    response = requests.get(f"/api/users/{user_id}")
    return response.json()
</code>

XML 标签在 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
- 相关包版本:numpy==1.24.0, pandas==2.0.1

问题:[...]

很多 bug 是版本兼容性导致的,环境信息是关键。


技巧 22:让 Claude 写"防御性代码"

调试完后让它加防御:

这个函数现在能正常运行了。请帮我加上防御性代码:
1. 对所有入参进行合法性校验
2. 对可能的异常情况加 try-except,给出有意义的错误信息
3. 加上关键步骤的日志输出(用 logging,不用 print)

四、Claude API 调用技巧(技巧 23-28)

技巧 23:合理设置 max_tokens

import anthropic

client = anthropic.Anthropic()

# 根据任务类型设置合适的 max_tokens
MAX_TOKENS_MAP = {
    "code_generation": 4096,    # 代码生成需要更多空间
    "explanation": 1024,         # 解释类不需要太长
    "summary": 512,              # 摘要更短
    "chat": 2048,                # 对话适中
}

def call_claude(task_type: str, prompt: str) -> str:
    response = client.messages.create(
        model="claude-opus-4-6",
        max_tokens=MAX_TOKENS_MAP.get(task_type, 2048),  # 默认 2048
        messages=[{"role": "user", "content": prompt}]
    )
    return response.content[0].text

max_tokens 设太小会截断输出,设太大浪费钱。按任务类型分档管理。


技巧 24:用 temperature 控制输出风格

# 代码生成:低 temperature,确定性更高,减少幻觉
response = client.messages.create(
    model="claude-opus-4-6",
    max_tokens=4096,
    temperature=0.2,  # 低温度,代码逻辑更稳定
    messages=[{"role": "user", "content": "写一个快速排序算法"}]
)

# 头脑风暴:高 temperature,更多创意
response = client.messages.create(
    model="claude-opus-4-6",
    max_tokens=2048,
    temperature=0.8,  # 高温度,更多创意
    messages=[{"role": "user", "content": "给这个功能想 10 个命名方案"}]
)

技巧 25:用 system prompt 保持一致性

CODING_SYSTEM_PROMPT = """
你是一个 Python 高级工程师。回答遵循以下规范:
1. 代码使用 Python 3.10+ 语法
2. 所有函数必须有类型注解
3. 错误信息必须具体,不能只写 "Error"
4. 代码示例必须可以直接运行
5. 如果有多种实现方式,先给最简单的,再说其他
"""

def ask_code_question(question: str) -> str:
    response = client.messages.create(
        model="claude-opus-4-6",
        max_tokens=4096,
        system=CODING_SYSTEM_PROMPT,  # 每次都带上,保持风格一致
        messages=[{"role": "user", "content": question}]
    )
    return response.content[0].text

技巧 26:流式输出提升用户体验

等 Claude 生成完整回复才显示,用户会以为卡住了。用流式输出:

import anthropic

client = anthropic.Anthropic()

def stream_code_generation(prompt: str):
    """流式输出代码,实时显示生成过程"""
    with client.messages.stream(
        model="claude-opus-4-6",
        max_tokens=4096,
        messages=[{"role": "user", "content": prompt}]
    ) as stream:
        for text in stream.text_stream:
            print(text, end="", flush=True)  # 实时打印
        print()  # 换行

    # 获取完整消息(包含 usage 信息)
    final_message = stream.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 是无状态的,每次调用都是独立的。要实现多轮对话,需要自己维护历史:

class ClaudeChatSession:
    def __init__(self, system_prompt: str = ""):
        self.client = anthropic.Anthropic()
        self.system_prompt = system_prompt
        self.history: list[dict] = []

    def chat(self, user_message: str) -> str:
        # 加入历史
        self.history.append({
            "role": "user",
            "content": user_message
        })

        response = self.client.messages.create(
            model="claude-opus-4-6",
            max_tokens=4096,
            system=self.system_prompt,
            messages=self.history  # 带上完整历史
        )

        assistant_reply = response.content[0].text

        # 把 Claude 的回复也加入历史
        self.history.append({
            "role": "assistant",
            "content": assistant_reply
        })

        return assistant_reply

    def clear_history(self):
        """上下文太长时清空,防止超出 context window"""
        self.history = []

# 使用示例
session = ClaudeChatSession(system_prompt="你是一个代码 Review 助手")
print(session.chat("帮我 review 这个函数:[代码]"))
print(session.chat("第二点能展开说说吗?"))  # Claude 知道"第二点"指什么

技巧 28:用 Prompt Caching 降低成本

如果你的请求里有大量重复内容(比如长的 system prompt 或者代码库),用 Prompt Caching 可以省很多钱:

# Prompt Caching:对重复的长内容标记 cache_control
response = client.messages.create(
    model="claude-opus-4-6",
    max_tokens=4096,
    system=[
        {
            "type": "text",
            "text": very_long_system_prompt,  # 很长的系统提示
            "cache_control": {"type": "ephemeral"}  # 标记为可缓存
        }
    ],
    messages=[{"role": "user", "content": question}]
)

# 检查缓存命中情况
usage = response.usage
print(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,不要任何解释。

代码:
[你的代码]
"""

import json
response_text = call_claude("code_review", prompt)
result = json.loads(response_text)  # 直接解析

技巧 31:生成代码文档

为以下代码生成文档,格式要求:
1. 模块级 docstring:说明功能和使用场景
2. 每个公共函数的 Google 风格 docstring
3. 复杂逻辑处的内联注释
4. 一个完整的使用示例(放在模块末尾的 if __name__ == "__main__" 里)

[代码]

技巧 32:建立专属代码风格档案

把你的代码风格要求整理成一份"风格文档",每次对话都带上:

# 把风格要求存成文件
with open("code_style.md", "r") as f:
    style_guide = f.read()

system_prompt = f"""
你是我的编程助手,所有代码必须遵循以下风格规范:

{style_guide}
"""

# 每次对话都使用这个 system_prompt

这样你不用每次都重复说规范,Claude 的输出风格也会保持一致。我的风格文档大概 200 行,覆盖命名规范、错误处理、日志格式等,省了很多反复纠正的时间。


小结

32 个技巧,核心就是三点:

  1. 给上下文:角色、约束、示例,越具体越好
  2. 分步骤:复杂任务拆开做,每步验证再进入下一步
  3. 迭代改进:初版 → 自我 Review → 修复 → 测试,不要一步到位

Claude 本质上是一个"懂很多但不了解你的场景"的协作者,你给的信息越多、越准确,它的输出就越有用。

有什么问题评论区聊,我会回复。


工具推荐

本文中使用 Claude Code,是通过 玉兔AI 连接使用的,国内直连比较稳定