跳到主要内容

AI 生成:https://chatgpt.com/c/680defd7-d154-8010-b666-e18122828983

生成式 AI 时代:程序员向 AI 提问高质量问题指南

为什么提问质量重要:随着 ChatGPT、GitHub Copilot 等生成式 AI 辅助工具的普及,提问质量直接影响 AI 输出代码的可用性和开发效率。一篇文章指出:“ 编写合适的 AI 提示词能决定生成代码是可用还是不可用”。具体而明确的问题可以让 AI 更准确地理解需求,从而生成符合预期的代码;相反,模糊或缺乏细节的提问往往导致无用甚至错误的答案,浪费大量调试时间。

提问基本原则

  • 清晰具体:提问要目标明确、具体详细,避免笼统。例如不要只说“写个排序算法”,而应说明算法类型、使用的语言、输入输出格式等。一位开发者也强调:“越精确详细的请求,AI 生成代码能力越强”。
  • 角色与背景:可以在提示中指定 AI 扮演的角色(如“扮演一名资深的 Python 开发者”),并提供必要的背景信息(编程语言、框架、版本等)。例如说明“在 Python 3.9 环境下使用 Django”,让 AI 理解上下文,有助于生成贴合项目需求的解决方案。
  • 分步思考:对于复杂任务,引导 AI 分步骤思考。可以提示“请逐步分析”或使用思维链(Chain-of-Thought) 模式,让模型先推理再回答,这在需要分解问题或判断时效果更佳。例如先让 AI 给出解决方案思路,再进一步要求实现细节。
  • 上下文信息:提供与任务相关的上下文(如已有的代码片段、错误日志、需求描述等),切勿假设模型知道所有细节。例如在调试时粘贴相关代码和错误信息,并说明当前结果与预期的差异,有助于 AI 快速定位问题。
  • 指定格式:明确期望的输出形式或格式。例如如果需要特定结构(表格、JSON、注释风格等),可在提示词中提出。例如“请以 JSON 格式返回结果”或“返回的代码请带有详细注释”,让 AI 按照要求组织输出内容。

常用提问技巧

  • 提供示例(Few-shot 提示):给出示例输入–输出或参考代码样本,让 AI 学习预期的输出模式。例如给出示例:“示例1:输入 [2,1,4,3],输出[4,3,2,1]”,然后让模型生成类似输出。这种方式在要求标准化输出时非常有效。
  • 明确需求细节:详细描述功能要求和业务逻辑,包括输入输出的数据类型、边界条件、错误处理方式等。如提到“输入是整数列表,输出按降序排列”、“如果输入为空列表应返回空”,让 AI 更好地满足所有需求。
  • 指定语言/版本:提前说明使用的编程语言及版本、框架等。例如“使用 Python 3.8”或“基于 React 18”。这样 AI 不会使用不兼容的语法或库,生成的代码更符合项目环境。
  • 单一任务聚焦:每次提问集中解决一个问题,不要一次性塞入多个独立任务。例如先询问“如何实现排序算法”,待结果满意后再单独提问“怎样在网页中调用该算法”。分开提问可以避免混淆,提高回答准确度。
  • 利用上下文和反馈:对于调试或优化问题,粘贴现有的代码片段和错误信息,并说明出错现象与预期结果的区别。在得到初步答案后,如果有需要可进一步跟进提问,指导 AI 改正错误或补充遗漏,像与人对话一样迭代交流。
  • 指定输出格式:如果需要特定的返回格式,应在提示中说明。例如“返回结果请使用 JSON 数组”或“请给出包含注释的代码”,避免 AI 给出不符合要求的输出。

常见错误示例与改进建议

  • 错误示例:提问过于模糊。 例如“写一个排序算法”没有说明语言、算法类型或输出格式,AI 容易给出不符合预期的答案。
    改进: 增加细节,如“请帮我用 Python 实现一个对整数数组进行降序排序的冒泡算法”,明确算法、语言和排序方式,让 AI 生成准确的代码示例。
  • 错误示例:多个任务混合提问。 例如“帮我写一个网站的前端和后端代码”一次性包含前后端两个独立功能,AI 难以同时兼顾。
    改进: 将问题拆分为多个单独提问,逐一解决。例如先提问前端页面实现,再提问后端接口设计。这样模型聚焦于一个任务,回答质量更高。
  • 错误示例:缺少关键信息。 例如只描述“代码出错”但未提供代码段和环境信息,AI 无法判断问题所在。
    改进: 指定相关上下文,如编程语言、框架及版本,并粘贴出错的代码片段和完整的错误信息。例如“在 Python 3.9 的 Django 项目中,以下视图函数报了错误:……”,帮助 AI 精准定位并解答。
  • 错误示例:未说明输出格式。 如果没有明确要求格式,AI 可能给出冗长说明而非代码或不符合格式的回答。
    改进: 提前说明输出格式或举例,例如“请以 JSON 格式返回结果”或给出示例模板。这样可以让 AI 输出符合预期格式的答案。

提问模板示例

  • 功能实现请帮我用【语言】实现一个【功能】,例如“请帮我用 Python 实现一个冒泡排序算法”。
  • 错误分析下面是我的错误信息:……请帮我分析原因并解决,同时附上相关代码片段和完整报错,便于 AI 理解问题。
  • 角色扮演你是一名【角色】,请帮我……。例如“你是一名前端专家,请帮我用 React 实现一个登录页面并做表单验证”。
  • API 调用请帮我用【语言】调用【API 名称】获取【数据】。如“请帮我用 JavaScript 调用 GitHub API 获取我的仓库列表”。
  • 算法/数据结构请帮我用【语言】实现【算法名称】,如“请帮我用 C++ 实现快速排序算法”。
  • 前端示例请你作为一名前端开发工程师,用【框架】实现一个【功能】。例如“请你作为资深 React 工程师,使用 React 实现一个 TODO 列表组件,包括添加和删除功能”。
  • 其它约束请在不使用第三方库的情况下,用【语言】……请限制时间复杂度为 O(n) …… 等,用于指定特殊要求。
  • 输出要求请以【格式】格式返回结果请对生成的代码逐行添加注释,明确输出形式。

通过遵循以上原则和技巧,并结合具体示例和模板,程序员可以更高效地与 AI 协作,获得准确、可用的代码和建议,实现事半功倍的开发效果。

参考资料: 提示工程相关实践指南,以及相关博客和专家建议。