2025 年 3 月 11 日的在线讨论中,关于使用大型语言模型(LLM)帮助编写代码,开发者的经历往往令人失望,他们常问自己做错了什么。使用 LLM 编写代码困难且不直观,需大量努力去摸索其使用的边界,且缺乏指导。若有人称用 LLM 编码容易,可能会误导人。
作者两年来从 LLM 获得了很好的代码结果,分享了经验和直觉:
- 设定合理预期:LLM 仍像高级自动补全,别期望其完美实现项目,应将其视为增强能力的工具,要注意其犯错,记下其做不到的事,这是宝贵经验。
- 考虑训练截止日期:模型的训练截止日期很重要,会影响对库的熟悉程度,选库时要考虑稳定性和流行度,对于训练数据外的库需提供更多示例。
- 上下文为王:获取 LLM 良好结果的技巧大多在于管理上下文,成功的交互通常是对话形式,之前的回复也属于上下文,可利用这一点,一些 LLM 工具能预填充上下文,直接使用 ChatGPT 和 Claude 界面便于理解上下文,还可通过多种方式引入额外文件或文档。
- 让它们提供选项:项目开始时用 LLM 进行初步研究,如询问 Rust 中的 HTTP 库或 JavaScript 中的拖放库等,要注意训练截止日期,对于新库需自行研究。
- 明确告诉它们做什么:完成初步研究后,在生产代码中更像独裁者,给 LLM 详细指令让其编写代码,如写特定签名的 Python 函数及测试用例,LLM 擅长填补代码空白,且更细心。
- 必须测试它们写的代码:不能将测试代码是否工作外包给机器,作为软件开发者有责任交付可工作的系统,这是发布好代码的关键部分。
- 记住这是对话:不喜欢 LLM 写的代码可让其重构,多次迭代可得到最终实现,初始结果不好不是失败,而是推动模型的起点。
- 使用能运行代码的工具:越来越多的 LLM 编码工具能运行代码,要选择安全的 sandbox 环境的工具,如 ChatGPT Code Interpreter、Claude Artifacts、ChatGPT Canvas 等,还有 Cursor、Windsurf、Aider 等,运行代码的循环模式很强大,是选择 LLM 工具的重要因素。
- 氛围编码是学习的好方法:Andrej Karpathy 提出氛围编码,即凭感觉编码,这是探索模型能力的好方法,作者通过提示 LLM 构建了 77 个 HTML + JavaScript 应用和 6 个 Python 应用,学习了很多。
- 详细示例:使用 Claude Code:作者用 Claude Code 构建tools.simonwillison.net/colophon页面,展示了从初始需求到最终实现的整个过程,包括多次修改提示和调试,还涉及部署到 GitHub Pages 的自定义流程,期间遇到一些问题并解决。
- 准备好让人类接管:示例中虽借助 LLM 完成项目,但最终还是需要人类介入,LLM 不能替代人类的直觉和经验。
- 最大优势是开发速度:新的colophon 页面从构思到完成部署仅用了不到半小时,若没有 LLM 协助可能不会去做,这体现了 LLM 对开发速度的提升,能让开发者实现更多想法,加速学习新事物。
- LLM 放大现有专业知识:只有有专业编码经验的人才能以这种方式使用 LLM 完成项目,提示反映了经验和自信,对于不熟悉的领域过程会不同。
- 额外奖励:回答关于代码库的问题:LLM 擅长回答关于代码的问题,如用 gemini-2.0-pro-exp-02-05 回答关于 monolith 工具的问题,这是开始深入研究新代码库的好方法。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。