DeepSeek 写代码翻车之后:AI 编程助手最该补上的工程基本功

2026-07-08 24 预计阅读时间: 1 分钟
来源: oschina.net AI 摘要 Original link

Disclaimer: This article is an AI-assisted summary. Read it together with the original source when precision matters. The summary may omit context, version differences, or edge cases and is not official documentation.

预计阅读时间:8 分钟

用 AI 写代码最怕的不是它不会做复杂算法,而是它在工程日常里把简单事做坏:用字符串硬拼 YAML、改完代码不跑编译、看到版本号数字小就机械升级。这类问题不够“炫”,但足够伤人,因为它们会直接进入仓库、CI 和线上配置。

这篇文章不讨论模型排名,也不把一次体验放大成绝对结论。更有价值的问题是:当 AI 编程助手在一周实测里暴露出这些低级错误时,团队应该怎样约束它、验证它,并决定哪些任务能交给它。

翻车点不高级,但很工程

摘要里提到的几个问题有共同特征:它们不是“智力题”,而是工程习惯。

用字符串拼结构化数据,是典型例子。YAML、JSON、TOML 都有自己的转义、缩进、类型规则。AI 如果直接写:

config = "name: " + name + "\nimage: " + image + "\n"

看上去能跑,遇到冒号、换行、布尔值、空字符串、缩进层级时就可能出错。更糟的是,配置文件通常会被部署系统消费,错误不一定在生成时爆炸,可能在发布时才爆炸。

“改完不编译”则是另一个信号:模型完成的是文本编辑,不是工程闭环。一个人类工程师写完会至少跑一次单测、类型检查或构建;AI 如果只交 diff,不交验证结果,就等于把验证成本转嫁给使用者。

至于“看到版本号数字小就往上加”,问题在于它没有尊重兼容性语义。版本不是分数,1.10 不比 1.9 “小”,主版本升级也不等于更好。依赖升级要看 changelog、约束范围、锁文件和测试结果。

AI 适合写草稿,不适合裸奔进主干

这类翻车说明,AI 编程助手更像一个速度很快但缺少项目上下文的初级合作者。它可以帮你起草函数、补测试样例、解释错误栈、生成迁移脚本草案;但它不应该绕过项目已有的质量闸门。

比较稳妥的分工是:

  • 让 AI 生成局部实现,而不是直接重排大面积架构。
  • 让 AI 给出验证命令,而不是只给“已完成”。
  • 让 AI 修改结构化文件时使用结构化库,而不是字符串拼接。
  • 让 AI 升级依赖时说明原因、范围、风险和回滚方式。

这里的关键不是“信不信 AI”,而是把 AI 产物当成普通代码处理:能 lint、能 test、能 review、能回滚。

可以这样实践:给 AI 产物加一道本地验收脚本

下面是一个可以直接运行的最小示例:它演示如何用 Python 安全生成 YAML,并在生成后立刻解析校验。你可以把它改造成项目里的配置生成脚本,替换掉字符串拼接。

运行前需要安装 PyYAML:

python -m pip install pyyaml

保存为 generate_deployment.py 后运行:

from pathlib import Path
import yaml

config = {
    "apiVersion": "apps/v1",
    "kind": "Deployment",
    "metadata": {
        "name": "demo-api",
        "labels": {"app": "demo-api"},
    },
    "spec": {
        "replicas": 2,
        "selector": {"matchLabels": {"app": "demo-api"}},
        "template": {
            "metadata": {"labels": {"app": "demo-api"}},
            "spec": {
                "containers": [
                    {
                        "name": "demo-api",
                        "image": "ghcr.io/example/demo-api:1.4.2",
                        "ports": [{"containerPort": 8080}],
                    }
                ]
            },
        },
    },
}

output = Path("deployment.yaml")
output.write_text(yaml.safe_dump(config, sort_keys=False), encoding="utf-8")

loaded = yaml.safe_load(output.read_text(encoding="utf-8"))
assert loaded["kind"] == "Deployment"
assert loaded["spec"]["template"]["spec"]["containers"][0]["image"].endswith(":1.4.2")

print(f"wrote and validated {output}")

执行:

python generate_deployment.py
python - <<'PY'
import yaml
from pathlib import Path
print(yaml.safe_load(Path('deployment.yaml').read_text())['metadata']['name'])
PY

如果你的项目已经使用 Kubernetes,还可以继续加服务端校验或 dry-run:

kubectl apply --dry-run=client -f deployment.yaml

这段示例的重点不是 Kubernetes,而是工作方式:AI 可以帮你写 config 结构,但最终必须经过解析器和验证命令,而不是靠肉眼看缩进。

给 AI 的提示词也要带验收条件

很多人让 AI 写代码时,只说“帮我实现 X”。这会鼓励模型尽快吐出代码,而不是完成工程任务。可以把提示词改成下面这种形式:

请修改这个 Python 项目中的配置生成逻辑:
1. 不允许用字符串拼接生成 YAML,必须使用 PyYAML 或项目中已有的 YAML 库。
2. 修改后补一个最小测试,覆盖包含冒号、空字符串、数字版本号的字段。
3. 给出你建议我运行的验证命令,例如 pytest、ruff、mypy 或项目已有构建命令。
4. 如果需要升级依赖,先说明原因和兼容性风险,不要直接改版本号。

这不是保证 AI 不犯错的魔法,但它能把输出从“代码片段”拉回“可验证变更”。尤其是在 DeepSeek 或其他模型容易犯低级工程错误的场景里,提示词里的约束比泛泛地要求“写得健壮”有效得多。

落地建议:把 AI 当加速器,不当合并权限

一周实测暴露的问题提醒我们:AI 编程助手的价值和风险通常同时出现。它能快速生成代码,也能快速制造看似合理的坏代码。

团队可以用一个简单清单控制风险:

  • 结构化数据必须用结构化库生成和解析。
  • 每次 AI 修改后必须跑编译、测试、lint 中至少一项。
  • 依赖升级必须说明版本语义、兼容性和回滚方案。
  • 大改动拆小提交,避免一次性接受大段 diff。
  • 对配置、部署、权限、数据迁移类变更提高 review 等级。

AI 写代码翻车并不稀奇,真正危险的是我们把它的输出当成已经完成的工程结果。让 AI 负责提速,让工具链负责验收,让工程师负责判断边界,这才是当前更现实的用法。


相关推荐