看下面的数据就知道目前AI代码质量有怎样的离谱
AI擅长的:目前这些场景可以放心用
1. 标准库API调用
// 场景:把 [{name, score}, ...] 转成 {name: score, ...}const students = [{ name: 'Alice', score: 92 },{ name: 'Bob', score: 85 }];// AI几乎完美完成这个任务const scoreMap = Object.fromEntries(students.map(s => [s.name, s.score]));// 结果:{ Alice: 92, Bob: 85 }
2. 简单算法的确定性实现
3. 代码模板生成
AI不擅长的:踩坑示例
坑1:边界条件漏掉
// AI生成的代码(看似正确)function parseParams(url) {const query = url.split('?')[1];const params = {};query.split('&').forEach(pair => {const [key, value] = pair.split('=');params[key] = value;});return params;}// 测试:parseParams('https://example.com/?name=Alice'); // 报错!// query是 undefined,undefined.split('&') 报错
function parseParams(url) {const queryString = url.split('?')[1];if (!queryString) return {};return queryString.split('&').reduce((params, pair) => {const [key, value = ''] = pair.split('=');// 解码URL编码params[decodeURIComponent(key)] = decodeURIComponent(value);return params;}, {});}
坑2:并发暴露的安全问题
// AI生成的缓存(危险!)const userCache = new Map();async function getUser(id) {if (userCache.has(id)) {return userCache.get(id);}// 这之间可能有其他请求也在查同一个idconst user = await fetchUser(id);userCache.set(id, user); // 可能重复请求return user;}
const userCache = new Map();const pendingRequests = new Map(); // 存储 Promiseasync function getUser(id) {if (userCache.has(id)) {return userCache.get(id);}// 如果已有请求在 pending时,直接复用if (pendingRequests.has(id)) {return pendingRequests.get(id);}const promise = fetchUser(id).then(user => {userCache.set(id, user);pendingRequests.delete(id);return user;});pendingRequests.set(id, promise);return promise;}
坑3:业务逻辑缺少情绪规则
// 场景:订单金额满1000减100或9折,订单数量大于5时减50// AI生成的折扣逻辑function calculateDiscount(order) {let discount = 0;if (order.total > 1000) {discount += order.total * 0.1; // 1000以上打9折}if (order.items.length > 5) {discount += 50; // 超过5件减50}return discount;}
坑4:安全漏洞
// AI会这样写const API_KEY = 'sk-1234567890abcdef';const DB_PASSWORD = 'admin123';// 正确做法如下const API_KEY = process.env.API_KEY;const DB_PASSWORD = process.env.DB_PASSWORD;if (!API_KEY) {throw new Error('API_KEY environment variable is required');}
// AI生成的(危险,有sql注入风险)const query = `SELECT * FROM users WHERE name = '${name}'`;// 正确做法:参数化查询const query = 'SELECT * FROM users WHERE name = $1';await db.query(query, [name]);
坑5:API版本和依赖幻觉
//AI生成的(2025年了还在用旧API)import { getServerSideProps } from 'next';// Next.js 15 App Router早就废弃了这个// AI说这个库版本存在,但我用npm install失败import { something } from 'fancy-library@99.99.99'; // 根本不存在// 正确import { cookies } from 'next/headers';export async function GET() {const cookieStore = cookies();const token = cookieStore.get('token');// ...}
SWE-bench:AI真实能力的天花板
需要理解整个代码库的隐式约定、用户群体、业务规则.....
跨多个代码仓的修改
处理CI/CD、部署、监控、体积等工程等问题
当前的边界图:什么时候用AI,什么时候自己写
┌─────────────────────────────────────────────────────────────┐│ AI适合的场景 │├─────────────────────────────────────────────────────────────┤│ • 标准库/框架API调用 ││ • 简单算法实现(排序、查找) ││ • 代码模板和脚手架 ││ • 解释现有代码逻辑 ││ • 生成测试用例骨架 ││ • 重构模式匹配(如class → hooks) │└─────────────────────────────────────────────────────────────┘┌─────────────────────────────────────────────────────────────┐│ 人类主导的场景 │├─────────────────────────────────────────────────────────────┤│ • 边界条件复杂的状态逻辑 ││ • 并发/异步竞态问题 ││ • 业务规则和领域逻辑 ││ • 安全敏感代码(认证、支付、数据处理) ││ • 跨模块架构决策 ││ • 性能优化和内存管理 │└─────────────────────────────────────────────────────────────┘
总结:
总之AI写代码的优势是速度和广度,劣势是深度和边界。用它生成初稿、模板、标准操作,然后用自己的经验过滤bug——这是当前AI编程的正确姿势。把AI当实习生看:能干活,但要review,不能放任。
夜雨聆风