如何安全高效地使用 AI 辅助编程
像交代同事一样提需求,像审查员一样严谨核对。涵盖调试、新代码编写、测试与审查的提示词,以及关键安全检查。

AI 聊天在编程中确实非常实用:解释陌生代码、排查报错原因、编写样板代码、起草测试用例,以及帮你学习新语言或新库。但它也经常会“自信地给出错误答案”,因此你应该像对待一个手速飞快却粗心大意的同事提交的 PR 一样,审视每一条回复。本指南将教你如何精准提问,以及如何验证生成的结果。
AI 聊天在编程中擅长什么
- 解释代码:“逐行帮我梳理这个函数的功能”。
- 调试排错:阅读报错信息和堆栈跟踪,指出可能的出错原因。
- 编写简单且定义明确的函数:解析日期、校验输入、转换数据结构。
- 编写样板代码:配置文件、命令行参数解析、基础 API 处理程序。
- 编写测试:起草单元测试,包括你可能遗漏的边界情况。
- 正则表达式、SQL 和 Shell 单行脚本,并详细解释每一部分的含义。
- 辅助学习:“我熟悉 Python,请展示在 Go 中该怎么写,并解释两者的区别”。
- 代码审查:发现可读性问题、遗漏的错误处理以及明显的安全隐患。
在依赖整个代码库的大型架构设计、它可能尚未了解的极新版本库,以及任何它看不到的内容上,它的表现往往较弱。在 ChatG 这样的聊天工具中,AI 只能看到你粘贴的内容,无法直接打开你的项目文件或运行你的代码。
如何提问以排查 Bug
多数低质量的代码回答都源于上下文缺失。一个优秀的调试提示词应包含五个要素:编程语言及版本、相关代码、完整报错信息、预期结果与实际表现的差异,以及你已经尝试过的解决方法。
效果不佳的提问: 我的代码跑不通,帮我修一下。 [直接粘贴了 200 行代码]
效果出色的提问: Python 3.12,pandas 2.x。这个函数本应返回每个客户的平均订单金额,但抛出了 KeyError: 'customer_id'。 代码: [仅粘贴该函数以及 5 行数据示例] 完整堆栈跟踪: [粘贴报错内容] 我已经确认 CSV 文件中存在 customer_id 列。可能的原因是什么?在给出修改后的代码前,请先解释修复思路。
尽量将代码精简到能复现问题的最小片段。这个过程往往能直接帮你找出 Bug,同时也能让 AI 聚焦于关键代码行。你也可以在聊天中打开调试提示词并填入相关信息。
如何让 AI 编写新代码
写一份微型需求规范。你对输入、输出和边界情况的描述越精准,后续需要修补的地方就越少。
编写一个 TypeScript 函数 slugify(title: string): string。 - 全小写,仅限 ASCII;转换常见的重音字母(例如 é 转为 e)。 - 将连续的非字母数字字符替换为单个连字符。 - 去除首尾的连字符;最大长度 60,切勿在单词中间截断。 - 不使用任何外部依赖库。 然后使用 Vitest 编写 8 个单元测试,需包含空字符串以及含 emoji 表情符号的输入。
要求在生成代码的同时附带测试。如果 AI 生成的测试与它自己的代码产生冲突,你就能在上线前提前发现问题。
上线前必须严格验证
AI 生成的代码即使看起来整洁规范,也可能存在错误。请在开发流程中养成以下检查习惯:
- 实际运行。切勿在未运行代码和相关测试的情况下,直接将代码合入项目。
- 确认每个函数和配置选项均真实存在。AI 有时会凭空捏造方法、参数或配置项,或使用旧版本的内容。请查阅你所使用版本的官方文档进行核对。
- 在安装任何依赖包前核对其名称。安全研究人员发现,AI 助手有时会推荐不存在的软件包,攻击者可能会抢注这些名称并植入恶意代码(即所谓的“依赖包抢注”攻击)。在安装前,请务必在官方仓库确认该包真实存在且有人维护。
- 进行安全审查。留意通过字符串拼接构建的 SQL、缺失的输入校验、被禁用的证书检查、硬编码的敏感信息以及过宽的权限设置。可以直接向 AI 提问:“假设所有输入都具有恶意,请审查这段代码的安全隐患。”
- 仔细阅读直至完全理解。如果你无法解释某段代码的作用,可以向 AI 提问,或者切勿将其合并。毕竟后续负责维护它的人是你自己。
切勿在聊天中泄露机密与私有代码
切勿将 API Key、密码、Token、私钥或数据库连接字符串粘贴到任何 AI 聊天中。请用 YOUR_API_KEY 等占位符替换它们。如果你不慎将真实机密泄露到私有系统之外,请立即轮换重置凭证。
如果你在为雇主或客户编写代码,将代码粘贴到外部 AI 服务前,请务必确认相关企业政策。许多公司仅允许使用经过批准的工具处理专有代码。如有疑虑,可将问题简化为一个不涉及任何项目细节的通用示例。我们的 AI 隐私与安全指南对此有更详尽的说明。
开发实用提示词示例
请向一位熟悉 [语言] 但不了解该库的开发者解释这段代码。逐块进行讲解,然后列出所有看起来有风险或已过时的内容。 [粘贴代码]
请像资深工程师一样审查这段 Diff。将意见归类为:Bug、安全性、性能和可读性。请具体指出并引用涉及的代码行。 [粘贴 diff]
编写一个用于匹配 [描述] 的正则表达式。解释各个部分的作用,并提供 5 个应该匹配成功的字符串和 5 个不应匹配的字符串。
我精通 Python,正在学习 Rust。请演示如何在 Rust 中实现 [任务],并假设我完全没接触过所有权和借用机制来进行讲解。
更多提示词请见 编程提示词 合集。对于临时任务,代码助手 工具只需输入描述或代码片段即可返回带有解析的代码;而内置的 编程助手 则能在整个对话过程中始终保持专注开发的交流风格。
常见误区
- 粘贴整个项目。长篇大论的粘贴容易淹没重点,甚至超出 AI 的单次处理上限。请只发送相关的具体文件或函数。
- 采用仅掩盖表象的“修复方案”。用 try/except 把所有代码包起来只是让报错消失了,并没解决 Bug 本身。多问问报错产生的根本原因。
- 陷入反复无效的尝试。如果连续两三次尝试都未能解决,请暂停并更换思路:补充更多上下文、提供更小的复现用例,或开启新对话并清晰概括问题。
- 未明确说明版本。框架的 API 在大版本之间可能差异巨大,因此务必注明你使用的版本。
- 忽略开源许可证。如果 AI 生成了明显属于他人项目的代码片段,在使用前请确认其开源许可证。
另请参阅 开发者如何使用 ChatG 以及通用的 提示词编写指南。
保持掌控的高效开发工作流
- 先描述目标,暂不涉及具体代码。在动手写代码前,先让 AI 给出两到三种可行的方案并分析利弊权衡。
- 选定一种方案,从最小步骤切入。一次只处理一个函数或一个文件,审查起来远比处理一整项功能更轻松。
- 运行代码并反馈结果。粘贴真实的输出内容或报错信息,而不是简单说一句“跑不通”。
- 要求编写测试,随后进行代码审查。询问“这遗漏了哪些边界情况?”,通常能帮你提前抓出下一个 Bug。
- 自己撰写 Commit 提交信息。如果你无法概括改动了什么以及为什么改动,说明你对这次变更的理解还不够透彻。
常见问题
AI 能取代学习编程吗?
不能。它只是让能够看懂并判断代码优劣的人效率翻倍。如果你无法辨别答案的对错,就无法安全地使用它。用 AI 来加速学习吧:不仅要问它“怎么做”,更要问它“为什么”。
它支持哪些编程语言?
AI 聊天对 Python、JavaScript、TypeScript、Java、C#、C++、Go、PHP、SQL 和 Shell 脚本等流行语言支持极佳,但对于冷门语言的可靠性相对较低。此外,面对极新的库和版本时,生成质量也会有所下滑。
ChatG 能运行我的代码或读取我的代码仓库吗?
不能。ChatG 是一款纯文本对话工具:它只能看到你粘贴给它的内容,无法直接执行代码。所有运行和测试均需在你自己的本地环境中完成。
AI 生成的代码可以安全用于商业项目吗?
请像对待任何外部来源的代码一样审慎处理:做好审查、充分测试、检查依赖项以及疑似抄录代码的开源许可证,并严格遵守你所在公司的规范政策。以上内容仅供参考,不构成法律建议。


