本文约 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 个技巧,核心就是三点:
- 给上下文:角色、约束、示例,越具体越好
- 分步骤:复杂任务拆开做,每步验证再进入下一步
- 迭代改进:初版 → 自我 Review → 修复 → 测试,不要一步到位
Claude 本质上是一个"懂很多但不了解你的场景"的协作者,你给的信息越多、越准确,它的输出就越有用。
有什么问题评论区聊,我会回复。
工具推荐
本文中使用 Claude Code,是通过 玉兔AI 连接使用的,国内直连比较稳定