Claude API 写代码实战:2026 最顺手的配置方案和踩坑全记录

8 阅读1分钟

上周接了个私活,甲方要求做一个合同解析工具,核心逻辑是把 PDF 合同丢给大模型,让它提取关键条款、识别风险点,再生成结构化 JSON。我一开始用 DeepSeek V3 写了个初版,效果还行但在复杂嵌套逻辑上老是出幺蛾子。后来换成 Claude Opus 4.6 的 API 来辅助写代码,对长上下文的理解能力和代码生成的准确率确实是目前第一梯队。这篇文章把我这一周用 Claude API 写代码的完整流程、配置方案和踩过的坑全部记录下来。

直接回答标题问题:用 Claude API 写代码,核心是调用 Claude Opus 4.6 或 Sonnet 4.6 的 Messages API,通过 system prompt 设定编程助手角色,把需求描述和已有代码作为 user message 传入,模型会返回完整可运行的代码。你可以用官方 SDK 直连,也可以通过兼容 OpenAI 协议的聚合平台(改个 base_url 就行),后者对网络环境没要求,延迟也更稳定。

先说结论

折腾了一周,我的最终方案和关键数据:

维度我的选择原因
模型Claude Opus 4.6复杂逻辑生成准确率最高,长上下文不迷路
调用方式OpenAI 兼容协议代码改动最小,切模型只改 model 参数
接入方案聚合 API 平台免代理直连,延迟约 300ms,省心
日均花费≈ 15-25 元人民币中等强度使用,主要是 Opus 贵
代码一次通过率约 78%比我之前用的方案高了 20 个百分点

环境准备

Python 3.10+,装两个包就够了:

pip install openai anthropic

为什么装两个?因为我会演示两种调用方式,你根据自己情况选一种就行。

方案一:用 Anthropic 官方 SDK 直连

最"正统"的方式,直接用 Anthropic 的 Python SDK:

from anthropic import Anthropic

client = Anthropic(api_key="your-anthropic-key")

def ask_claude_to_code(requirement: str, existing_code: str = "") -> str:
 """让 Claude 根据需求生成/修改代码"""
 
 system_prompt = """你是一个资深 Python 开发者。要求:
1. 生成完整可运行的代码,不要省略任何部分
2. 包含类型注解和简洁的 docstring
3. 考虑边界情况和错误处理
4. 如果是修改已有代码,只输出修改后的完整版本"""

 user_message = f"需求:{requirement}"
 if existing_code:
 user_message += f"\n\n已有代码:\n```python\n{existing_code}\n```"

 response = client.messages.create(
 model="claude-opus-4-6-20260201",
 max_tokens=4096,
 system=system_prompt,
 messages=[
 {"role": "user", "content": user_message}
 ]
 )
 
 return response.content[0].text


# 实测:让它写一个合同条款提取器
result = ask_claude_to_code(
 requirement="""写一个 ContractParser 类:
 - 输入是合同文本字符串
 - 提取所有金额(支持万元、亿元等中文单位)
 - 提取所有日期(支持 yyyy-mm-dd 和 yyyy年mm月dd日)
 - 提取甲乙方名称
 - 返回结构化的 dict"""
)

print(result)

跑出来的代码质量确实可以,它给我生成了一个完整的类,连正则表达式都写对了(这在以前几乎不可能一次对)。但这个方案有个问题:你得能直连 Anthropic 的 API 端点,网络环境不行的话请求会超时。

方案二:用 OpenAI 兼容协议调用(推荐)

这是我最终采用的方案。很多聚合平台都兼容 OpenAI 的接口协议,意味着你用 openai 这个 SDK 就能调 Claude,改个 base_urlmodel 参数就行:

from openai import OpenAI

client = OpenAI(
 api_key="your-key",
 base_url="https://api.ofox.ai/v1" # 聚合接口,一个 Key 调所有模型
)

def code_with_claude(requirement: str, context_files: list[str] = None) -> str:
 """用 Claude 写代码,支持传入多个文件作为上下文"""
 
 messages = [
 {
 "role": "system",
 "content": "你是一个资深全栈开发者,擅长 Python/TypeScript/Go。生成完整可运行代码,包含错误处理和类型注解。"
 }
 ]
 
 # 如果有上下文文件,先传进去
 if context_files:
 context = "\n\n".join([
 f"文件:{f['name']}\n```\n{f['content']}\n```" 
 for f in context_files
 ])
 messages.append({
 "role": "user",
 "content": f"以下是项目中的相关文件,请先理解:\n{context}"
 })
 messages.append({
 "role": "assistant",
 "content": "我已经理解了这些文件的结构和逻辑,请告诉我你的需求。"
 })
 
 messages.append({
 "role": "user",
 "content": requirement
 })
 
 response = client.chat.completions.create(
 model="claude-opus-4-6-20260201",
 messages=messages,
 max_tokens=4096,
 temperature=0.3 # 写代码调低一点,减少"创意发挥"
 )
 
 return response.choices[0].message.content


# 实测:传入已有代码,让它加功能
existing_parser = {
 "name": "parser.py",
 "content": """
class ContractParser:
 def __init__(self, text: str):
 self.text = text
 
 def extract_amounts(self) -> list[dict]:
 # 已实现...
 pass
 
 def extract_dates(self) -> list[str]:
 # 已实现...
 pass
"""
}

result = code_with_claude(
 requirement="给 ContractParser 加一个 extract_risk_clauses 方法,识别合同中的违约金条款、免责条款、竞业限制条款,返回 list[dict],每个 dict 包含 type/content/risk_level 字段",
 context_files=[existing_parser]
)

print(result)

这个方案的好处是代码改动极小。我之前项目里用 GPT-5 的代码,只改了 model 参数就切到了 Claude,连 streaming 都是兼容的:

# Streaming 方式,适合实时显示生成过程
stream = client.chat.completions.create(
 model="claude-opus-4-6-20260201",
 messages=[
 {"role": "system", "content": "你是一个代码生成助手。"},
 {"role": "user", "content": "写一个异步爬虫框架的基础类,支持限速和重试"}
 ],
 max_tokens=4096,
 stream=True
)

for chunk in stream:
 if chunk.choices[0].delta.content:
 print(chunk.choices[0].delta.content, end="", flush=True)

整个调用链路长这样:

graph LR
 A[你的 Python 代码] -->|OpenAI SDK| B[ofox.ai 聚合网关]
 B -->|路由选择| C{模型分发}
 C --> D[Claude Opus 4.6]
 C --> E[Claude Sonnet 4.6]
 C --> F[GPT-5]
 C --> G[DeepSeek V3/V4]
 D -->|生成代码| B
 B -->|返回结果| A

ofox.ai 是一个 AI 模型聚合平台,一个 API Key 可以调用 Claude Opus 4.6、GPT-5、Gemini 3、DeepSeek V3 等 50+ 模型,低延迟直连无需代理,支持支付宝付款。我选它主要是因为不用操心网络问题,而且切模型不用换 Key。

我的实战 Prompt 模板

光会调 API 不够,prompt 写得好不好直接决定生成代码的质量。分享几个我反复调优后的模板:

模板 1:从零生成一个模块

prompt_new_module = """
## 任务
生成一个完整的 Python 模块:{module_name}

## 功能需求
{requirements}

## 技术约束
- Python 3.10+,使用 match-case 等新语法
- 用 pydantic v2 做数据校验
- 异步优先(async/await)
- 所有公开方法必须有类型注解和 docstring

## 输出格式
直接输出完整的 .py 文件内容,不要解释,不要分段,一个代码块搞定。
"""

模板 2:Debug 已有代码

prompt_debug = """
以下代码运行时报错:

```python
{code}

错误信息:

{error_message}

请:

  1. 分析错误原因(一句话)
  2. 给出修复后的完整代码
  3. 说明修改了哪几行 """

模板 3:Code Review + 重构

```python
prompt_review = """
请 review 以下代码,关注:
1. 潜在的 bug 和边界情况
2. 性能问题(N+1 查询、不必要的循环等)
3. 可读性和命名

```python
{code}

输出格式:

  • 🔴 必须修复:...
  • 🟡 建议优化:...
  • 最后给出重构后的完整代码 """

## 踩坑记录

这一周踩的坑不少,挑几个最典型的。

**坑 1:max_tokens 设太小,代码被截断**

一开始我设了 `max_tokens=2048`,结果生成一个稍微复杂的类就被截断了,尾巴上的方法直接没了。Claude Opus 4.6 的输出上限是 32K tokens,写代码建议至少给 4096,复杂模块给 8192。

```python
# ❌ 别这样
response = client.chat.completions.create(model="claude-opus-4-6-20260201", messages=messages, max_tokens=1024)

# ✅ 写代码给够
response = client.chat.completions.create(model="claude-opus-4-6-20260201", messages=messages, max_tokens=8192)

坑 2:temperature 太高,代码"创意过头"

默认 temperature=1.0,Claude 会在代码里加各种"创意"——比如你让它写个简单的文件读取,它给你整个异步流式读取加内存映射。写代码建议 temperature 设 0.2-0.4,需要它想方案的时候再调高。

坑 3:多轮对话的上下文管理

连续让它改好几轮代码,到第 4-5 轮的时候它开始"忘记"前面的修改,又把已经修好的 bug 改回去了。我的解决办法是每 3 轮对话做一次"上下文压缩":

def compress_context(messages: list, client) -> list:
 """每隔几轮,让模型总结当前代码状态,重置对话"""
 
 summary_response = client.chat.completions.create(
 model="claude-sonnet-4-6-20260201", # 总结用便宜的 Sonnet
 messages=messages + [{
 "role": "user",
 "content": "请总结当前代码的最终版本和所有已确认的设计决策,用简洁的要点列出。"
 }],
 max_tokens=2048
 )
 
 # 用总结结果开启新对话
 return [
 {"role": "system", "content": "你是一个资深 Python 开发者。"},
 {"role": "user", "content": f"项目背景和当前状态:\n{summary_response.choices[0].message.content}"},
 {"role": "assistant", "content": "明白,我已了解当前项目状态,请继续提需求。"}
 ]

坑 4:Opus 和 Sonnet 混着用才划算

一开始我全程用 Opus 4.6,一天下来 token 费用快 50 块了。后来我做了个分流策略:

任务类型用哪个模型原因
复杂业务逻辑生成Opus 4.6准确率高,省返工时间
简单 CRUD / 工具函数Sonnet 4.6够用,便宜 5 倍
Debug / 错误分析Sonnet 4.6定位问题不需要太强的模型
Code ReviewOpus 4.6需要深度理解才能发现隐藏 bug
写测试用例Sonnet 4.6模式化任务,Sonnet 足够

这样调整后日均花费降到 15-20 块,代码质量没明显下降。

和 DeepSeek V4 的简单对比

最近 DeepSeek V4 预览版刚上线,热度很高(HN 1886 分,直接屠榜)。我顺手拿同一个需求测了下,简单说下感受:

  • Claude Opus 4.6:复杂嵌套逻辑几乎一次对,代码风格很"老练",但贵
  • DeepSeek V4(预览版):速度快、便宜,简单任务表现不错,复杂逻辑偶尔需要一轮修正
  • GPT-5:综合能力强,但代码生成这块我个人感觉略逊于 Claude

目前我的策略是 Claude 为主、DeepSeek V4 做简单任务的备选。等 V4 正式版出了再做一次完整评测。

小结

用 Claude API 写代码这事,说白了就三步:选对模型(复杂逻辑上 Opus,简单任务用 Sonnet)、写好 prompt(给约束、给上下文、要完整输出)、管好上下文(别让对话太长导致模型"失忆")。

接入方式我推荐用 OpenAI 兼容协议走聚合平台,改一行 base_url 就能跑,以后换模型也方便。

如果你也在用 Claude 写代码,欢迎评论区交流你的 prompt 模板,互相抄作业效率最高 🤝