Blog›Guides

如何为编码和调试编写提示词

掌握编码与调试的提示工程。学会编写精确、上下文丰富的提示,以获得更优质的AI生成代码和更快的错误修复。

如何为编码和调试编写提示词

如何为编码和调试编写提示词

AI 编码助手已经改变了开发者的工作方式。但它们生成的代码质量在很大程度上取决于你如何表述请求。像“修复这个 bug”这样模糊的提示词往往会导致通用或错误的解决方案,而结构良好的提示词可以精确定位问题并提出可靠的修复方案。本指南教你为编码和调试编写有效提示词的艺术,并提供实用示例和可操作的建议。

为什么提示词质量在编码中很重要

大型语言模型(LLM)通过根据你的输入预测最可能的下一个 token 来生成代码。如果你的提示词缺乏上下文,模型就会猜测。那个猜测可能能编译,但它可能无法解决你的实际问题。对于调试,风险更高:错误的修复可能引入新 bug 或掩盖根本原因。正如 OpenAI 的提示工程指南 所指出的,提供清晰的指令和上下文能显著提高输出准确性。同样,Anthropic 的概述 强调模型对明确、结构化的请求响应更好。

把提示词看作一份规格说明。你的规格说明越精确,实现就越接近你的意图。

编码提示词的核心原则

1. 具体说明任务

不要写“编写一个对数组排序的函数”,而是说:

编写一个 JavaScript 函数,按给定属性对对象数组进行排序(例如,sortBy(array, 'age'))。该函数不应修改原始数组,并应优雅地处理缺失属性。

这包括了语言、输入/输出、边界情况和约束。模型就能生成更量身定制的解决方案。

2. 提供上下文和约束

包含相关细节,例如:

  • 编程语言和版本(例如,Python 3.11)
  • 框架或库(例如,React 18,Express)
  • 编码风格(例如,启用严格模式的 TypeScript)
  • 性能要求(例如,O(n log n))
  • 安全考虑(例如,清理用户输入)
  • 例如:

    编写一个使用类型提示的 Python 函数,读取 CSV 文件并返回字典列表。使用 csv 模块。将缺失值设置为 None。包含 docstring 和单元测试。

    3. 对复杂项目使用系统提示词

    对于较大的任务,定义一个设置角色和指导原则的系统提示词。面向代理编码的高级软件工程师系统提示词 是一个很好的例子。它指示 AI 扮演高级工程师的角色,遵循最佳实践,并询问澄清性问题。同样,面向 AI 编码代理的 CLAUDE.md 架构师提示词 有助于为 AI 代理构建项目级指令。这些模板节省时间并确保一致性。

    4. 分解大型任务

    不要一次性要求整个应用程序,而是将其分解为更小、更易管理的提示词。例如:

  • 首先:“为带有用户、任务和标签的待办事项应用设计数据库模式。”
  • 然后:“编写一个 SQL 查询,获取用户的所有任务及其标签。”
  • 最后:“在 Express 中实现一个 REST API 端点,返回用户的任务。”
  • 这种方法减少错误并使迭代更容易。

    编写有效的调试提示词

    调试提示词需要不同的方法。你需要给模型足够的信息来诊断问题,而不会让它不堪重负。

    1. 包含错误消息和堆栈跟踪

    始终粘贴确切的错误消息和相关的堆栈跟踪。例如:

    我的 Node.js 应用中出现这个错误:TypeError: Cannot read property 'map' of undefined。这是堆栈跟踪:[粘贴]。代码是:[粘贴相关片段]。可能是什么原因导致的,我该如何修复?

    2. 提供最小可复现示例

    能复现 bug 的最小代码片段非常有价值。全面的 TypeScript 代码库审查提示词 展示了如何构建代码审查请求,这也可以适用于调试。例如:

    这是一个触发问题的最小示例:[代码]。预期输出是 X,但我得到的是 Y。为什么?

    3. 描述预期行为与实际行为

    清楚说明你期望什么以及实际发生了什么。这有助于模型推理逻辑。例如:

    我的函数 calculateTotal 应该返回所有价格的总和,但当数组为空时它返回 0。我期望它返回 0,但它返回 undefined。这是代码:[代码]。

    4. 要求解释,而不仅仅是修复

    有时你想理解根本原因。请求解释:

    解释为什么这段代码会导致竞态条件,并使用 async/await 或 promises 建议修复方案。

    这不仅修复了问题,还能教育你。

    更好的代码生成的高级技术

    1. 使用少样本示例

    提供输入-输出对的示例来引导模型。例如:

    编写一个函数 formatDate,将 Date 对象转换为 'YYYY-MM-DD' 格式的字符串。示例:formatDate(new Date('2025-01-15')) 返回 '2025-01-15'。现在实现它。

    2. 指定输出格式

    如果你需要特定结构的代码,请说明:

    生成一个 Python 类 User,具有属性 name 和 email、构造函数以及方法 to_dict()。包含类型提示和 __repr__ 方法。

    3. 使用后续提示词进行迭代

    不要期望一次就能完美。使用后续提示词,例如:

  • “你能优化这个以提高性能吗?”
  • “为网络故障添加错误处理。”
  • “重构这个以使用更函数式的风格。”
  • 4. 利用现有的提示词库

    查看 Anthropic 提示词库 获取现成的编码任务提示词。同样,Google 的提示策略 提供了为 Gemini 构建提示词的见解。这些资源可以启发你自己的提示词。

    常见陷阱及如何避免

    1. 过于模糊

    不要: “让这段代码更好。”

    要: “重构这个函数以降低复杂度并提高可读性。使用提前返回并提取辅助函数。”

    2. 用无关细节过载

    只包含相关上下文。太多噪音会混淆模型。坚持任务所需的内容。

    3. 忽略安全性和最佳实践

    始终要求安全的代码。例如:

    编写一个 SQL 查询,使用参数化查询安全地处理用户输入以防止 SQL 注入。

    4. 不测试输出

    始终审查和测试生成的代码。AI 并非万无一失。将输出作为起点,而不是最终答案。

    示例提示词模板

    功能实现模板

    实现一个 [语言] 函数,[描述任务]。要求:
    - 输入:[描述输入]
    - 输出:[描述输出]
    - 约束:[列出约束]
    - 为 [边界情况] 包含错误处理。
    - 遵循 [风格指南]。
    - 提供示例用法。

    调试模板

    我遇到以下错误:[错误消息]。这是堆栈跟踪:[堆栈跟踪]。相关代码是:[代码片段]。预期行为是 [预期],但我看到 [实际]。根本原因是什么,我该如何修复?

    实际应用

    AI 提示词不仅适用于简单脚本。它们可以帮助构建复杂系统。例如,自包含的 Three.js 体素山地谷世界构建器 提示词可以用单个提示词生成整个 3D 世界。同样,Kubernetes 与 Docker RPG 学习引擎 使用提示词创建交互式学习游戏。这些示例展示了详细的提示词如何产生复杂的应用程序。

    对于商业场景,Anthropic 关于提示工程提升业务绩效的文章 强调了精心设计的提示词如何提高企业环境中的生产力和代码质量。

    编写编码提示词的检查清单

  • [ ] 定义编程语言和版本。
  • [ ] 明确指定任务(实现、重构、调试)。
  • [ ] 提供输入/输出示例。
  • [ ] 列出约束(性能、安全、风格)。
  • [ ] 为调试包含相关代码片段。
  • [ ] 描述预期行为与实际行为。
  • [ ] 在需要时要求解释。
  • [ ] 审查和测试生成的代码。
  • 更多资源

  • 提示工程指南 - 关于技术的综合指南。
  • Learn Prompting - 适合初学者的教程。
  • Google Vertex AI 提示设计 - 来自 Google 的实用建议。
  • 在我们的 编码类别 中探索更多编码提示词,或 搜索与代码相关的提示词。
  • 结论

    为编码和调试编写有效的提示词是一项通过练习不断提高的技能。通过具体化、提供上下文和结构化你的请求,你可以释放 AI 编码助手的全部潜力。今天就开始应用这些技巧,你会看到更准确的代码和更快的调试会话。记住始终审查输出,AI 是工具,而不是你专业知识的替代品。

    祝提示愉快!

    Tags
    coding·debugging·prompt-engineering·ai·programming·llm