跳转到内容

6.2 代码调试与错误修复

R1 的推理能力在调试场景下特别有用——它会"深度思考"错误原因,给出更准确的根因分析。


这一节在讲什么?

调试是开发者最耗时的活动之一。DeepSeek 在调试场景下有两个优势:V3 快速分析简单错误,R1 深度推理复杂错误的根因。这一节我们学习用 DeepSeek 进行错误诊断、代码审查和测试驱动调试。


错误诊断

简单错误:用 V3

python
response = client.chat.completions.create(
    model="deepseek-chat",
    messages=[{
        "role": "user",
        "content": """以下代码报错:TypeError: Cannot read properties of undefined (reading 'id')
        
function getUser(req, res) {
    const user = users.find(u => u.email === req.body.email);
    return user.id;  // 第 3 行报错
}

请分析原因并修复"""
    }],
    temperature=0.1
)

V3 能快速识别问题:users.find() 可能返回 undefined,直接访问 user.id 会报错。修复方案是添加空值检查。

复杂错误:用 R1

python
response = client.chat.completions.create(
    model="deepseek-reasoner",
    messages=[{
        "role": "user",
        "content": """以下代码在并发场景下偶尔出现数据不一致的问题:

async function transfer(from, to, amount) {
    const sender = await db.findAccount(from);
    const receiver = await db.findAccount(to);
    if (sender.balance < amount) throw new Error("Insufficient");
    sender.balance -= amount;
    receiver.balance += amount;
    await db.updateAccount(sender);
    await db.updateAccount(receiver);
}

请分析并发问题的根因,并给出修复方案"""
    }],
    max_tokens=16384
)

R1 会深度推理:两个 findAccount 操作之间存在时间窗口,另一个并发请求可能在这期间修改了余额,导致数据不一致。R1 的思考过程会详细分析竞态条件的各种场景,最终给出加锁或使用事务的修复方案。


代码审查

python
response = client.chat.completions.create(
    model="deepseek-chat",
    messages=[{
        "role": "system",
        "content": "你是一个代码审查专家。请审查代码的安全性、性能和正确性。"
    }, {
        "role": "user",
        "content": "审查以下代码:\n" + code
    }],
    response_format={"type": "json_object"},
    temperature=0.1
)

测试驱动调试

python
# 第一步:让 DeepSeek 写复现测试
response = client.chat.completions.create(
    model="deepseek-chat",
    messages=[{
        "role": "user",
        "content": """用户报告了一个 bug:当购物车中有 0 元商品时,总价计算错误。
请写一个 Jest 测试来复现这个 bug。"""
    }]
)

# 第二步:运行测试确认失败

# 第三步:让 DeepSeek 根据失败信息修复
response = client.chat.completions.create(
    model="deepseek-chat",
    messages=[{
        "role": "user",
        "content": "测试失败了,错误信息:Expected 100, received 0。请修复 totalPrice 函数。"
    }]
)

常见误区

误区一:只给错误信息不给代码

DeepSeek 需要看到相关代码才能分析根因。只给错误信息,AI 只能给出泛泛的建议。

误区二:所有调试都用 R1

简单错误用 V3 就够了——更快更便宜。R1 的推理能力在复杂调试场景下才有价值。

误区三:AI 的修复方案直接用

AI 的修复可能引入新 bug。建议修复后运行测试,确认没有引入新问题。

误区四:R1 的思考过程不需要看

思考过程是 R1 调试的核心价值——它告诉你 AI 是怎么推导出根因的。如果 AI 的修复方案不对,你可以从思考过程中找到推理出错的步骤。


小结

这一节我们学习了用 DeepSeek 进行代码调试:简单错误用 V3 快速分析,复杂错误用 R1 深度推理根因;代码审查用 V3 + JSON Output 结构化输出;测试驱动调试先写复现测试再修复。核心原则是"给 AI 足够的上下文"——错误信息 + 相关代码 + 复现步骤,缺一不可。下一节我们看 DeepSeek 在 CI/CD 中的应用。

基于 MIT 许可发布