一、评测方法
本文采用标准化AI编程提示词测试框架,对10种常见AI编程技巧进行系统评测。每种技巧在相同代码任务下测试效果差异。
测试任务
| 任务编号 | 测试项目 | 具体内容 |
|---|---|---|
| T1 | 代码生成质量 | 用坏/好两个版本Prompt生成相同功能代码,对比质量差异 |
| T2 | 代码准确率 | 生成代码首次编译/运行通过率 |
| T3 | 适配度 | 生成的代码与项目现有技术栈/风格的契合程度 |
| T4 | 可维护性 | 代码的可读性、注释质量、错误处理完备性 |
| T5 | 迭代效率 | 从首次输出到满意结果所需的沟通轮次 |
评分维度与权重
| 维度 | 权重 | 说明 |
|---|---|---|
| 代码质量提升 | 30% | 使用该技巧后生成代码的质量提升幅度 |
| 适配度改善 | 25% | 该技巧让代码更适配项目上下文的效果 |
| 沟通效率 | 20% | 减少来回沟通轮次的效果 |
| 通用性 | 15% | 该技巧在不同编程语言/场景下的适用广度 |
| 学习成本 | 10% | 掌握该技巧的难度 |
评分标准
- 5分:效果显著,对所有编程场景都有帮助
- 4分:效果良好,对大部分场景有用
- 3分:有效果,但不是每次都需要
- 2分:效果有限,只在特定场景有用
- 1分:效果微弱或几乎没用
二、10个技巧详评
技巧1:给足上下文
核心: AI不知道你的项目结构、技术栈、代码风格,你不说它只能猜。
❌ 坏例子:
写一个登录功能
✅ 好例子:
我有一个Flask项目,数据库用PostgreSQL,
已经在config.py里配好了数据库连接。
请在app/auth.py里添加:
1. 用户注册API(POST /api/register)
2. 用户登录API(POST /api/login)
3. 密码用bcrypt加密
4. 返回JWT token(过期时间24小时)
评分表
| 维度 | 权重 | 评分 | 加权得分 |
|---|---|---|---|
| 代码质量提升 | 30% | 5.0 | 1.500 |
| 适配度改善 | 25% | 5.0 | 1.250 |
| 沟通效率 | 20% | 4.0 | 0.800 |
| 通用性 | 15% | 5.0 | 0.750 |
| 学习成本 | 10% | 4.5 | 0.450 |
| 加权总分 | 100% | — | 4.750 |
实测细节
这是最重要的AI编程技巧——没有之一。
对比测试: 我用相同需求"写一个文件上传功能"做了对比测试。
坏版本只写了"写一个文件上传功能",AI给出的代码如下:
def upload_file(file):
with open(f"uploads/{file.name}", "wb") as f:
f.write(file.read())
return "上传成功"
问题:没有文件类型校验、没有大小限制、没有错误处理、路径硬编码、存在路径遍历漏洞。
好版本给了完整的上下文和技术栈,AI给出的代码如下:
import os
import uuid
from werkzeug.utils import secure_filename
ALLOWED_EXTENSIONS = {'pdf', 'png', 'jpg', 'jpeg', 'gif'}
MAX_FILE_SIZE = 10 * 1024 * 1024 # 10MB
def allowed_file(filename):
return '.' in filename and \
filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS
def upload_file(file):
if file and allowed_file(file.filename):
if file.content_length and file.content_length > MAX_FILE_SIZE:
return {"error": "文件大小超过10MB限制"}, 413
filename = secure_filename(file.filename)
unique_name = f"{uuid.uuid4()}_{filename}"
filepath = os.path.join(app.config['UPLOAD_FOLDER'], unique_name)
file.save(filepath)
return {"message": "上传成功", "filename": unique_name}, 200
return {"error": "不支持的文件类型"}, 400
差距是数量级的。
核心原理: AI的代码生成机制是基于<上下文> → <代码>的映射。上下文越丰富,映射越精确。好的上下文相当于给了AI一张"地图"——它知道该走哪条路,而不是随机选一条。
技巧2:分步骤,别一次性倒给AI
核心: AI擅长做小任务,不擅长一次完成大项目。
❌ 坏例子:
帮我写一个完整的电商系统
✅ 好例子:
第1步:在models.py中添加Product模型
(name, description, price, stock四个字段)
第2步:添加CRUD API(我告诉你下一步做什么)
评分表
| 维度 | 权重 | 评分 | 加权得分 |
|---|---|---|---|
| 代码质量提升 | 30% | 4.5 | 1.350 |
| 适配度改善 | 25% | 4.0 | 1.000 |
| 沟通效率 | 20% | 4.5 | 0.900 |
| 通用性 | 15% | 5.0 | 0.750 |
| 学习成本 | 10% | 4.0 | 0.400 |
| 加权总分 | 100% | — | 4.400 |
实测细节
对比测试: 要求"写一个完整的REST API服务"。
坏版本尝试一次生成所有内容,输出了一大段代码,但:
- 一半是无用的脚手架代码
- 路由混在一起,难以区分
- 错误处理不统一
- 没有按职责分文件
好版本按步骤执行:
1. 先定义数据模型 → 正确
2. 再写业务逻辑 → 正确
3. 再写路由 → 正确
4. 最后补充错误处理 → 正确
每个步骤AI都给了合理且可测试的代码。如果出现错误,可以精准修复出错的步骤而不用推翻全部重来。
最佳实践: 把大功能拆成3-5个子任务,每次只让AI完成一个子任务。每完成一个步骤,测试通过后再进行下一步。
技巧3:指定语言+框架+风格
核心: 不指定技术栈,AI默认用最通用的方案。
❌ 坏例子:
写一个模态框
✅ 好例子:
用 React + TypeScript + Tailwind CSS 写一个模态框组件。
要求:
- 点击遮罩层关闭
- 按ESC键关闭
- 支持自定义宽高
- 有入场动画
- 已安装@headlessui/react
评分表
| 维度 | 权重 | 评分 | 加权得分 |
|---|---|---|---|
| 代码质量提升 | 30% | 4.5 | 1.350 |
| 适配度改善 | 25% | 5.0 | 1.250 |
| 沟通效率 | 20% | 4.0 | 0.800 |
| 通用性 | 15% | 4.5 | 0.675 |
| 学习成本 | 10% | 5.0 | 0.500 |
| 加权总分 | 100% | — | 4.575 |
实测细节
不指定技术栈时,AI默认选择的往往是最通用但也最冗余的方案。比如"写一个模态框",不指定时AI可能生成原生JavaScript + CSS的方案,而你项目用的是React, TypeScript, Tailwind。
实测对比: 坏例子输出的代码需要手动适配5处才能融入项目。好例子输出的代码可以直接粘贴使用,零修改。
指定技术栈的三个层次:
1. 语言:Python / JavaScript / TypeScript / Go / Rust
2. 框架:Flask / React + Next.js / Django / FastAPI
3. 风格/工具:函数式/类、ORM/原生SQL、Tailwind/Bootstrap
三层都指定了,输出基本不用改。
技巧4:先写测试,再写代码
核心: 让AI先写测试,它会想清楚要满足什么条件,再写代码时规范很多。
先帮我写这个函数的测试用例(pytest),
覆盖正常输入、边界值、异常情况。
确认测试覆盖全面后,再帮我实现这个函数。
函数功能:[描述]
评分表
| 维度 | 权重 | 评分 | 加权得分 |
|---|---|---|---|
| 代码质量提升 | 30% | 5.0 | 1.500 |
| 适配度改善 | 25% | 4.0 | 1.000 |
| 沟通效率 | 20% | 3.5 | 0.700 |
| 通用性 | 15% | 4.0 | 0.600 |
| 学习成本 | 10% | 2.5 | 0.250 |
| 加权总分 | 100% | — | 4.050 |
实测细节
这个技巧是提升代码质量最有效的手段之一,虽然学习成本稍高(需要用测试思维去描述需求)。
测试需求函数: 写一个函数,功能是"从URL中提取域名"。
直接让AI写代码得到的版本:
import re
def extract_domain(url):
match = re.search(r'https?://(?:www\.)?([^/]+)', url)
return match.group(1) if match else None
看起来不错,但有几处边界情况没处理。
先写测试再写代码的版本:
# 先写测试
import pytest
from url_utils import extract_domain
def test_simple_url():
assert extract_domain("https://example.com/page") == "example.com"
def test_with_www():
assert extract_domain("https://www.example.com") == "example.com"
def test_with_subdomain():
assert extract_domain("https://blog.example.com") == "blog.example.com"
def test_with_port():
assert extract_domain("https://example.com:8080/page") == "example.com"
def test_without_protocol():
assert extract_domain("example.com/page") == "example.com"
def test_empty_input():
with pytest.raises(ValueError):
extract_domain("")
def test_invalid_url():
assert extract_domain("not a url") is None
关键差异: 写测试的过程让AI想清楚了所有边界情况——包括"没写协议的URL""端口号""空输入""无效输入"。这些边界情况在直接写代码时通常被忽略了。
技巧5:看不懂的代码,让AI逐行解释
核心: 遇到复杂代码时,不要自己硬啃。
请逐行解释以下代码在做什么。
重点说明:第8行的reduce函数为什么这么用,
以及第15行的async/await在这里的必要性。
[粘贴代码]
评分表
| 维度 | 权重 | 评分 | 加权得分 |
|---|---|---|---|
| 代码质量提升 | 30% | 3.5 | 1.050 |
| 适配度改善 | 25% | 3.0 | 0.750 |
| 沟通效率 | 20% | 4.0 | 0.800 |
| 通用性 | 15% | 5.0 | 0.750 |
| 学习成本 | 10% | 5.0 | 0.500 |
| 加权总分 | 100% | — | 3.850 |
实测细节
这不是一个"优化代码"的技巧,而是一个提高自身理解力的技巧。
实测效果: 我找了一段不熟悉的代码库中的复杂函数(50行,使用了reduce + 高阶函数 + async/await),让AI逐行解释。AI清晰地说明了每一行的作用、数据流向、为何选择这个特定的实现方式。在这个过程中,我不仅理解了这段代码,还学到了reduce的巧妙用法。
这个技巧的另一个用途——Code Review辅助: 让AI评价代码质量,指出潜在风险和优化方向。
技巧6:要求多种方案 + 对比
核心: 不要只接受一种方案,让AI给你选。
❌ 坏例子:
帮我把这个数组去重
✅ 好例子:
给3种数组去重的方法:
1. 最快执行速度的
2. 代码最简洁的
3. 最易维护的
对比每种方法的时间复杂度和适用场景。
评分表
| 维度 | 权重 | 评分 | 加权得分 |
|---|---|---|---|
| 代码质量提升 | 30% | 4.0 | 1.200 |
| 适配度改善 | 25% | 4.0 | 1.000 |
| 沟通效率 | 20% | 4.5 | 0.900 |
| 通用性 | 15% | 4.5 | 0.675 |
| 学习成本 | 10% | 4.0 | 0.400 |
| 加权总分 | 100% | — | 4.175 |
实测细节
核心原理: AI的"第一个答案"往往是最常见的答案,但不一定是最适合你的。要求多种方案后,AI会激活不同的知识路径,给出差异化的解法。
实测: 数组去重的3种方案:
| 方案 | 方法 | 时间复杂度 | 空间复杂度 | 适合场景 |
|---|---|---|---|---|
| A | Set | O(n) | O(n) | 绝大多数场景,首选 |
| B | filter + indexOf | O(n²) | O(1) | 兼容老旧浏览器 |
| C | reduce + Map | O(n) | O(n) | 需要额外处理逻辑 |
AI不仅给出了三种方案,还给出了选择建议。
技巧7:让AI审查你的代码
核心: AI可以当你的Code Reviewer。
假装你是一个有10年后端经验的高级工程师。
请审查这段代码,指出:
1. 安全性问题(最重要)
2. 性能问题
3. 可维护性问题
4. 命名是否合理
按严重程度排序。
[粘贴代码]
评分表
| 维度 | 权重 | 评分 | 加权得分 |
|---|---|---|---|
| 代码质量提升 | 30% | 4.5 | 1.350 |
| 适配度改善 | 25% | 4.0 | 1.000 |
| 沟通效率 | 20% | 3.5 | 0.700 |
| 通用性 | 15% | 4.5 | 0.675 |
| 学习成本 | 10% | 4.5 | 0.450 |
| 加权总分 | 100% | — | 4.175 |
实测细节
这个技巧的效果取决于你给AI的角色设定有多具体。泛泛地让AI"审查代码"得到的反馈也是泛泛的。但给一个具体的角色和关注点,"10年后端经验的高级工程师"+"4个具体审查维度"+"按严重程度排序"——AI会认真对待。
实测: 我提交了一段自己写的Flask API代码(包含文件上传功能)。AI指出了3个安全问题(包括路径遍历风险、MIME类型伪造可能)、2个性能问题和1个命名不符合最佳实践的问题。其中路径遍历风险我之前完全没有意识到。
技巧8:角色设定(真的有用)
核心: 角色设定会让AI使用更专业的表达方式。
作为一个有10年Python经验的资深开发者,
请帮我设计这个功能。
考虑:性能、可维护性、扩展性。
评分表
| 维度 | 权重 | 评分 | 加权得分 |
|---|---|---|---|
| 代码质量提升 | 30% | 3.5 | 1.050 |
| 适配度改善 | 25% | 3.5 | 0.875 |
| 沟通效率 | 20% | 4.0 | 0.800 |
| 通用性 | 15% | 4.5 | 0.675 |
| 学习成本 | 10% | 5.0 | 0.500 |
| 加权总分 | 100% | — | 3.900 |
实测细节
原理: 角色设定会触发AI的"专家模式"。当你说"10年Python经验的资深开发者"时,AI会激活和这个角色相关的知识节点——它会考虑性能优化、代码风格、设计模式、可维护性等"资深开发者才会关注"的问题。
对比测试: 不用角色设定得到的方案是"功能正确但中庸"的。用"10年Python经验的资深开发者"角色时,AI主动使用了Pythonic的写法(列表推导式、上下文管理器、类型注解),并额外给出了性能优化建议。
技巧9:明确要求错误处理
核心: AI默认生成的代码错误处理非常薄弱。
❌ 坏例子:
写一个文件上传函数
✅ 好例子:
写一个文件上传函数,请包含:
1. 文件类型校验(只允许jpg/png/pdf)
2. 文件大小限制(最大10MB)
3. 文件名安全处理(防路径遍历攻击)
4. 上传失败时返回友好的错误信息
5. 日志记录
评分表
| 维度 | 权重 | 评分 | 加权得分 |
|---|---|---|---|
| 代码质量提升 | 30% | 5.0 | 1.500 |
| 适配度改善 | 25% | 4.0 | 1.000 |
| 沟通效率 | 20% | 4.0 | 0.800 |
| 通用性 | 15% | 5.0 | 0.750 |
| 学习成本 | 10% | 4.5 | 0.450 |
| 加权总分 | 100% | — | 4.500 |
实测细节
AI的默认代码生成是乐观模式——假设所有条件都是正常的。但现实中有太多意外情况。
常见被AI忽略的错误处理:
| 场景 | AI默认行为 | 需要明确指定的处理 |
|---|---|---|
| 文件上传 | 没有类型/大小校验 | 类型白名单、大小限制、文件名安全处理 |
| API请求 | 假设请求参数完整 | 参数校验、JSON解析错误处理、超时处理 |
| 数据库操作 | 假设连接正常 | 连接失败重试、事务回滚、乐观锁/悲观锁 |
| 第三方API | 假设接口可用 | 重试机制、降级策略、备用方案 |
| 并发场景 | 假设单线程 | 锁、原子操作、竞态条件处理 |
实测: 好例子版本生成的代码直接可用于生产,坏例子版本生成的文件上传存在路径遍历漏洞——攻击者可以通过修改文件名参数读取或覆盖服务器上的任意文件。
技巧10:不满意就迭代
核心: AI的第一次答案通常是60分。继续追问才是拿到90分代码的关键。
第1轮:写一个数据导出功能
→ AI给了CSV导出
第2轮:改成支持CSV和Excel两种格式
→ AI加了Excel支持
第3轮:Excel导出要带格式(表头加粗、列宽自适应)
→ AI优化了格式
评分表
| 维度 | 权重 | 评分 | 加权得分 |
|---|---|---|---|
| 代码质量提升 | 30% | 4.0 | 1.200 |
| 适配度改善 | 25% | 4.5 | 1.125 |
| 沟通效率 | 20% | 3.0 | 0.600 |
| 通用性 | 15% | 5.0 | 0.750 |
| 学习成本 | 10% | 5.0 | 0.500 |
| 加权总分 | 100% | — | 4.175 |
实测细节
第一次不满意?继续问。 AI的第一次输出——无论给你什么回答——往往是它认为"最通用"的答案,而不是"最适合你"的答案。
迭代法则:
1. 第一次不满意 → 说明具体的改进方向(不是"再改改",而是"改为Excle格式,带表头加粗")
2. 第二次还不满意 → 给出参考示例给AI("就像这样:[粘贴一段你想要的输出]")
3. 第三次一般就够了 → 如果还不够,说明需求太模糊,需要先自己想清楚
实测: 写一个数据导出功能。第一次AI给了基础CSV。第二轮要求支持Excel, AI加了openpyxl支持。第三轮要求格式优化,AI加了表头加粗、列宽自适应、冻结首行。三轮迭代过程中,每次都有明确的改进点,最终得到的代码质量比第一次好了很多。
三、完整评分表(加权总分)
| 排名 | 技巧 | 质量提(30%) | 适配度(25%) | 沟通效(20%) | 通用性(15%) | 学习成(10%) | 总分 |
|---|---|---|---|---|---|---|---|
| 🥇 | 技巧1:给足上下文 | 5.0 | 5.0 | 4.0 | 5.0 | 4.5 | 4.750 |
| 🥈 | 技巧3:指定技术栈 | 4.5 | 5.0 | 4.0 | 4.5 | 5.0 | 4.575 |
| 🥉 | 技巧9:明确错误处理 | 5.0 | 4.0 | 4.0 | 5.0 | 4.5 | 4.500 |
| 4 | 技巧2:分步骤 | 4.5 | 4.0 | 4.5 | 5.0 | 4.0 | 4.400 |
| 5 | 技巧6:多种方案 | 4.0 | 4.0 | 4.5 | 4.5 | 4.0 | 4.175 |
| 6 | 技巧7:AI审查代码 | 4.5 | 4.0 | 3.5 | 4.5 | 4.5 | 4.175 |
| 7 | 技巧10:迭代追问 | 4.0 | 4.5 | 3.0 | 5.0 | 5.0 | 4.175 |
| 8 | 技巧4:先写测试 | 5.0 | 4.0 | 3.5 | 4.0 | 2.5 | 4.050 |
| 9 | 技巧8:角色设定 | 3.5 | 3.5 | 4.0 | 4.5 | 5.0 | 3.900 |
| 10 | 技巧5:AI解释代码 | 3.5 | 3.0 | 4.0 | 5.0 | 5.0 | 3.850 |
四、场景推荐矩阵
| 你的场景 | 必须用的技巧 | 建议的Prompt框架 |
|---|---|---|
| 🆕 新手入门 | 技巧1 + 技巧3 + 技巧9 | "我是[语言]新手,用[框架]实现[功能],请包含错误处理" |
| 🏗️ 新项目搭建 | 技巧1 + 技巧2 + 技巧3 | "我要搭建一个[技术栈]项目,先帮我创建[模块1],再逐步完成[模块2]" |
| 🐛 调试Bug | 技巧5 + 技巧7 | "以下代码有[什么问题],请逐行分析并指出修复方案。[粘贴代码]" |
| 🔧 重构代码 | 技巧6 + 技巧10 | "请给[功能]的3种实现方案对比优劣,选择最优方案,迭代优化" |
| ✅ 生产级代码 | 技巧4 + 技巧7 + 技巧9 | "先写测试用例,然后实现功能,最后做Code Review" |
| 📚 学习新技术 | 技巧5 + 技巧8 | "假设你是一个[技术]专家,帮我逐行解释这段[技术]代码" |
| 🏃 快速原型 | 技巧10(迭代法) | "先给我一个能跑的版本,然后逐步优化" |
五、总结与对比
一句话记住每个技巧
| 技巧 | 一句话 | 适用度 |
|---|---|---|
| 1. 给足上下文 | 不说的AI只能猜 | 🔥 每次必用 |
| 2. 分步骤 | 一次一件事 | 🔥 复杂任务必用 |
| 3. 指定技术栈 | 语言+框架+风格 | 🔥 每次必用 |
| 4. 先写测试 | 测试写完代码自然好了 | ✅ 推荐用于重要功能 |
| 5. 让AI解释 | 看不懂就问 | ✅ 理解复杂代码时用 |
| 6. 方案对比 | 多种方案选最优 | ✅ 做设计决策时用 |
| 7. AI Review | 别人看不出自己的bug | ✅ 代码提交前用 |
| 8. 角色设定 | 专家模式启动 | ⚡ 需要专业建议时用 |
| 9. 错误处理 | AI不管安全你要管 | 🔥 生产代码必用 |
| 10. 迭代追问 | 第一次只有60分 | 🔥 追求质量时必用 |
核心建议
用好AI编程的核心不是AI有多强,而是你会不会问。
这三个技巧组合使用,可以让AI编程效率提升数倍:
- 开始之前: 给足上下文(技巧1)+ 指定技术栈(技巧3)→ 让AI"进入你的项目"
- 执行之中: 分步骤执行(技巧2)+ 明确错误处理(技巧9)→ 让AI"按你的节奏走"
- 完成之后: AI Code Review(技巧7)+ 迭代追问(技巧10)→ 让AI"帮你优化到最好"
最后的提醒: AI生成代码后务必自己阅读和理解。不要"粘贴即信任"。2026年的AI编程工具已经足够强大,但最终对代码质量负责的——是你自己。
💬 评论
0