跳到主要内容

提示工程 101:编程必备提示词模板

什么是提示工程?

提示工程是为 AI 工具编写清晰、具体指令以获得最佳输出的技能。可以把它看作是学习如何提出正确的问题。

为什么重要? 模糊提示和精心设计的提示之间的区别可能是:

  • 模糊:"给我写一个函数" → 通用、无法使用的代码
  • 精心设计:"编写一个 Python 函数,接受整数列表并返回偶数之和。包含空列表和非整数值的错误处理。" → 处理边缘情况的生产就绪代码

关键原则:你提供的上下文和具体性越多,AI 的响应就越好。这不是打字更多的问题 - 而是更聪明地打字。

在本指南中,你将学习 5 个基本提示词模板,它们将使你的编程效率提高 10 倍。


五大核心提示词模板

1. 像我 10 岁一样解释(ELI10)

用途:通过简单类比理解复杂概念

模板

用简单的语言解释 [概念],就像我只有 10 岁一样。
使用日常类比,避免技术术语。

示例:解释什么是 API。

何时使用

  • 学习新的编程概念
  • 理解不熟悉的技术术语
  • 向非技术利益相关者解释代码

示例用法

提示词

用简单的语言解释什么是 API,就像我只有 10 岁一样。
使用日常类比,避免技术术语。

AI 响应

想象你在餐厅。你(顾客)想要食物,但你不能进入厨房自己做。所以你看菜单,告诉服务员你想要什么,服务员给你端来。

API(应用程序编程接口)就像那个服务员。它是一个信使:

  1. 接收你的请求(你想要什么)
  2. 告诉系统(厨房)做某事
  3. 带回响应(你的食物)

例如,当你在手机上查看天气时,你的应用使用 API 向天气服务询问"纽约的天气如何?",API 带回答案。

专业提示:跟进问题"给我一个真实世界的编码示例"以实际看到它的应用。


2. 带注释的代码生成器

用途:生成功能性代码,同时在阅读时教你

模板

编写执行 [任务] 的 [语言] 代码。

要求:
- 包含详细注释解释每一步
- 使用清晰、描述性的变量名
- 添加边缘情况的错误处理
- 遵循 [样式指南] 最佳实践

示例:编写读取 CSV 文件并将其转换为 JSON 的 Python 代码。

何时使用

  • 快速构建功能
  • 学习新语言的语法
  • 实现你在概念上理解的算法

示例用法

提示词

编写读取 CSV 文件并将其转换为 JSON 的 Python 代码。

要求:
- 包含详细注释解释每一步
- 使用清晰、描述性的变量名
- 添加边缘情况的错误处理
- 遵循 PEP 8 样式指南

AI 响应

import csv
import json
import os

def csv_to_json(csv_file_path, json_file_path):
"""
将 CSV 文件转换为 JSON 格式。

参数:
csv_file_path (str): 输入 CSV 文件的路径
json_file_path (str): 输出 JSON 文件的路径

返回:
bool: 转换成功返回 True,否则返回 False
"""

# 检查 CSV 文件是否存在
if not os.path.exists(csv_file_path):
print(f"错误:未找到 {csv_file_path}")
return False

try:
# 以读模式打开 CSV 文件
with open(csv_file_path, 'r', encoding='utf-8') as csv_file:
# 创建 CSV DictReader 对象
# 这会自动使用第一行作为键
csv_reader = csv.DictReader(csv_file)

# 将所有行转换为字典列表
data = list(csv_reader)

# 将数据写入 JSON 文件
with open(json_file_path, 'w', encoding='utf-8') as json_file:
# indent=2 使 JSON 易于阅读
# ensure_ascii=False 保留非英文字符
json.dump(data, json_file, indent=2, ensure_ascii=False)

print(f"成功将 {csv_file_path} 转换为 {json_file_path}")
return True

except csv.Error as e:
print(f"CSV 错误:{e}")
return False
except json.JSONDecodeError as e:
print(f"JSON 错误:{e}")
return False
except Exception as e:
print(f"意外错误:{e}")
return False

# 使用示例
if __name__ == "__main__":
csv_to_json('data.csv', 'data.json')

为什么有效:注释解释"为什么",而不仅仅是"什么"。错误处理向你展示如何编写健壮的代码。


3. 代码审查与改进

用途:获得对你的代码的建设性反馈

模板

审查以下代码并建议改进:
- 可读性(命名、结构、注释)
- 性能(时间/空间复杂度)
- 最佳实践(设计模式、约定)
- 边缘情况(错误处理、验证)
- 安全性(如果适用)

[粘贴你的代码]

请清楚地解释每个建议。

何时使用

  • 独立编写代码后
  • 提交 pull request 之前
  • 学习代码质量标准
  • 准备代码面试

示例用法

提示词

审查以下代码并建议在可读性、性能、最佳实践和边缘情况方面的改进:

def calc(nums):
x = 0
for n in nums:
if n % 2 == 0:
x = x + n
return x

AI 响应

代码审查:

可读性问题:

  1. 函数名 calc 太模糊 - 它计算什么?
  2. 变量名 xn 没有传达意义
  3. 没有文档字符串解释目的、参数或返回值

改进版本:

def sum_even_numbers(numbers):
"""
计算列表中所有偶数的和。

参数:
numbers (list): 整数列表

返回:
int: 偶数之和,如果列表为空则返回 0
"""
total = 0
for number in numbers:
if number % 2 == 0:
total += number
return total

性能优化(对于大列表):

def sum_even_numbers(numbers):
"""列表中所有偶数的和。"""
return sum(num for num in numbers if num % 2 == 0)

要处理的边缘情况:

  • 空列表 → 目前返回 0(很好!)
  • 包含非整数值的列表 → 会崩溃。添加类型检查:
if not all(isinstance(num, int) for num in numbers):
raise TypeError("所有元素必须是整数")

专业提示:让 AI 审查你的审查 - "还有什么我应该考虑的吗?"


4. 调试我的代码

用途:更快地诊断和修复错误

模板

我遇到此错误:
[粘贴完整错误消息]

这是我的代码:
[粘贴相关代码]

上下文:
- 我要做的事:[描述目标]
- 我尝试过的:[列出调试步骤]
- 我的环境:[PYTHON 3.9、WINDOWS 11 等]

请解释:
1. 导致错误的原因(根本原因)
2. 如何修复(逐步解决方案)
3. 为什么会发生这种情况(这样我将来可以避免它)

何时使用

  • 被 bug 困扰超过 15 分钟
  • 错误消息难以理解
  • 学习独立调试

示例用法

提示词

我遇到此错误:
TypeError: 'NoneType' object is not subscriptable

这是我的代码:
def get_weather(city):
data = fetch_weather_api(city)
return data['temperature']

result = get_weather('InvalidCity')

上下文:
- 我正在尝试从 API 获取天气数据
- 我已验证 API 密钥是正确的
- 环境:Python 3.10

请解释:
1. 导致错误的原因
2. 如何修复
3. 为什么会发生这种情况

AI 响应

根本原因: 函数 fetch_weather_api(city) 在城市无效时返回 None(而不是字典)。然后你尝试访问 None['temperature'],这会导致错误。

逐步修复:

def get_weather(city):
data = fetch_weather_api(city)

# 检查数据是否成功获取
if data is None:
return "错误:无法获取天气数据"

# 检查 'temperature' 键是否存在
if 'temperature' not in data:
return "错误:温度数据不可用"

return data['temperature']

为什么会发生这种情况: 当请求失败时(无效输入、网络问题、速率限制),API 通常返回 None 或空响应。在访问数据之前始终检查数据是否存在。

使用 try/except 的更好方法:

def get_weather(city):
try:
data = fetch_weather_api(city)
return data['temperature']
except (TypeError, KeyError) as e:
return f"获取天气错误:{e}"

专业提示:修复后,询问"还有其他我应该处理的边缘情况吗?"


5. 重构以提高清晰度

用途:将混乱的代码转换为干净、可维护的代码

模板

重构此代码使其更易读和可维护。
保持相同的功能但改进:
- 变量和函数名
- 代码结构(如果需要,拆分为更小的函数)
- 注释和文档
- 删除代码重复
- 遵循 [语言] 约定

[粘贴代码]

解释你做了什么改变以及为什么。

何时使用

  • 功能正常后(使其干净)
  • 继承遗留代码
  • 准备代码供团队审查
  • 学习干净代码原则

示例用法

提示词

重构此代码使其更易读和可维护:

def process(d):
r = []
for i in d:
if i['a'] > 18 and i['s'] == 'active':
r.append({'n': i['n'], 'e': i['e']})
return r

AI 响应

重构版本:

def filter_active_adults(users):
"""
筛选成年(年龄 > 18)且状态为活动的用户。

参数:
users (list): 用户字典列表,键包括:
'name'、'email'、'age'、'status'

返回:
list: 仅包含 'name' 和 'email' 的筛选字典列表
"""
filtered_users = []

for user in users:
is_adult = user['age'] > 18
is_active = user['status'] == 'active'

if is_adult and is_active:
filtered_users.append({
'name': user['name'],
'email': user['email']
})

return filtered_users

所做的更改:

  1. 函数名processfilter_active_adults(描述它做什么)
  2. 变量名dusersrfiltered_usersiuser
  3. 字典键'a''age''n''name'
  4. 可读性:将条件提取到命名变量
  5. 文档:添加了包含目的、参数和返回值的文档字符串

更好的方法(Pythonic 版本):

def filter_active_adults(users):
"""筛选年龄 > 18 且状态为活动的用户。"""
return [
{'name': user['name'], 'email': user['email']}
for user in users
if user['age'] > 18 and user['status'] == 'active'
]

高级技巧

技巧 1:链式提示(多步骤工作流)

对于复杂项目,将其分解为连续提示:

步骤 1 - 架构:

我想构建一个待办事项应用,包括:
- 添加/编辑/删除任务
- 标记完成
- 按状态筛选
- 保存到 localStorage

规划架构:
1. 我需要哪些组件/函数?
2. 我应该使用什么数据结构?
3. 用户流程是什么?

步骤 2 - 实现:

基于架构计划,编写带有语义标签的待办事项列表 UI 的 HTML 结构。

步骤 3 - 功能:

编写添加任务的 JavaScript 函数。
使用上一步的 HTML 结构。

步骤 4 - 持久化:

添加 localStorage 支持以保存/加载任务。
与现有的 addTask() 函数集成。

为什么有效:将复杂任务分解为更小的提示为 AI 提供更好的上下文并产生更准确的代码。


技巧 2:迭代细化

从宽泛开始,然后通过后续问题缩小范围:

初始提示:

解释数据库如何工作。

跟进 1:

这很有帮助。现在解释 SQL 和 NoSQL 数据库之间的区别。

跟进 2:

对于 Web 应用,我应该何时选择 PostgreSQL 而不是 MongoDB?

跟进 3:

给我一个在 Node.js 中连接到 PostgreSQL 的代码示例。

为什么有效:每个响应都建立在先前的上下文之上,创建个性化的学习路径。


技巧 3:基于角色的提示

要求 AI 采用特定角色以获得定制的响应:

作为老师:

你是一位耐心的编程老师。向一个理解同步代码但对 Promise 感到困惑的
初学者解释 JavaScript 中的 async/await。使用类比和简单示例。

作为代码审查员:

你是一位审查初级开发者 pull request 的高级开发者。
审查此代码并提供建设性反馈:
[粘贴代码]

作为面试官:

你是初级开发者职位的技术面试官。
向我提出一个涉及数组的中等难度编程问题。
等待我的解决方案,然后提供反馈。

常见错误及修复方法

错误 1:太模糊

❌ 不好的提示:

给我写一个程序

✅ 好的提示:

编写一个 Python 脚本:
1. 读取名为 'users.csv' 的 CSV 文件,列:name、age、city
2. 筛选 age > 18 的行
3. 将结果保存到 'adults.csv'
4. 打印筛选了多少用户

为什么更好:具体要求消除歧义。


错误 2:没有提供上下文

❌ 不好的提示:

修复此错误:第 12 行的 TypeError

✅ 好的提示:

我正在学习 Python。我正在尝试连接字符串和整数,
但在第 12 行得到"TypeError: can only concatenate str (not "int") to str"。

这是我的代码:
name = "Age: " + 25

如何修复?为什么会发生此错误?

为什么更好:上下文帮助 AI 提供相关的教育性答案。


错误 3:接受第一个响应而不迭代

❌ 不好的方法: AI 给出代码 → 复制/粘贴 → 继续

✅ 好的方法: AI 给出代码 → 阅读并理解 → 提出澄清问题:

  • "为什么这里使用字典而不是列表?"
  • "你能解释这个解决方案的时间复杂度吗?"
  • "这处理了哪些边缘情况?"

为什么更好:学习发生在后续问题中。


错误 4:不指定你的水平

❌ 不好的提示:

解释机器学习

✅ 好的提示:

向一个了解 Python 基础但没有统计学背景的初学者程序员解释机器学习。
使用简单的类比。

为什么更好:根据你的知识水平量身定制。


练习题

将每个模板应用于实际问题:

练习 1:ELI10

使用 ELI10 模板理解:
1. 什么是递归?
2. JavaScript 中 == 和 === 的区别是什么?
3. 什么是 Docker 容器?

练习 2:代码生成器

生成代码:
1. 检查字符串是否为回文的函数
2. 从新闻网站抓取标题的脚本
3. 带验证的登录表单的 React 组件

练习 3:调试

调试这段故意破坏的代码:
def calculate_average(numbers):
return sum(numbers) / len(numbers)

result = calculate_average([])
# 这会崩溃!使用调试模板修复它。

练习 4:重构

重构这个混乱的函数:
def f(x):
y=0
for i in x:
if i>0:y+=i
return y

练习 5:代码审查

编写一个简单函数(任何语言),然后使用代码审查模板获取反馈。
实现建议。

下一步

你已经学会了 5 个核心模板。以下是如何掌握它们:

  1. 每天练习:每次编码会话至少使用 1 个模板
  2. 建立提示库:将你最好的提示保存在笔记本中
  3. 实验:根据你的特定需求修改模板
  4. 分享知识:向其他学习者教授这些模板

继续你的学习:

记住:提示工程是一项技能。你练习得越多,就越擅长与 AI 工具沟通。从简单开始,迭代和细化。


快速参考卡

将此添加到书签以供日常使用:

模板何时使用关键要素
ELI10学习新概念"像我 10 岁一样解释"、类比、无术语
代码生成器构建功能语言、任务、注释、错误处理
代码审查改进代码可读性、性能、最佳实践
调试修复错误错误消息、代码、上下文、环境
重构清理代码结构、命名、文档

专业提示:组合模板!示例:"生成代码(模板 2),然后审查它(模板 3),然后解释关键概念(模板 1)。"


最后更新:2025 年 10 月