本报告基于 challenge.md 的任务要求和 evaluation.md 的评分标准,对8个AI模型完成的 Cloudflare Workers 学习卡片应用进行全面评估。
评估日期: 2026-01-11 评估者: Claude Sonnet 4.5 评估标准: 总分100分(可加分至110分) 参与模型: 8个 有效作品: 8个
| 排名 | 模型 | 总分 | 分级 | 代码行数 | 状态 |
|---|---|---|---|---|---|
| 🥇 1 | gpt-5.2-codex | 97/100 | S级 | 1,105行 | ✅ 优秀 |
| 🥈 2 | Sonnet-4.5 | 96/100 | S级 | 1,549行 | ✅ 优秀 |
| 🥉 3 | Gemini-3 | 93/100 | A级 | 836行 | ✅ 良好 |
| 🥉 3 | GLM-4.7 | 93/100 | A级 | 1,808行 | ✅ 良好 |
| 5 | Qwen3-Coder-Plus | 58/100 | D级 | 1,525行 | ❌ 不及格 |
| 6 | iFlow-ROME-30BA3B | 56/100 | D级 | 2,286行 | ❌ 不及格 |
| 7 | Kimi-K2-0905 | 54/100 | D级 | 2,171行 | ❌ 不及格 |
| 8 | MiniMax-M2.1 | 48/100 | F级 | 2,173行 | ❌ 不及格 |
分级标准:
- S级 (95-110分): 生产级,可直接部署
- A级 (85-94分): 优秀,稍作调整可部署
- B级 (75-84分): 良好,需要完善
- C级 (60-74分): 及格,需要重构
- D级 (50-59分): 不及格,严重缺陷
- F级 (<50分): 失败,基本不可用
| 评分维度 | gpt-5.2-codex | Sonnet-4.5 | Gemini-3 | GLM-4.7 | Qwen3 | iFlow | Kimi | MiniMax |
|---|---|---|---|---|---|---|---|---|
| A. 指令遵从 (15分) | 15✅ | 15✅ | 15✅ | 15✅ | 8❌ | 7❌ | 7❌ | 6❌ |
| - 单一JS文件 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 |
| - 无外部依赖 | 3 | 3 | 3 | 3 | 0 | 1 | 1 | 0 |
| - API路径一致 | 6 | 6 | 6 | 6 | 3 | 2 | 2 | 2 |
| - D1/KV/DO使用 | 3 | 3 | 3 | 3 | 2 | 1 | 1 | 1 |
| B. 后端能力 (20分) | 20✅ | 20✅ | 20✅ | 19 | 11❌ | 10❌ | 11❌ | 9❌ |
| - 数据库初始化 | 4 | 4 | 4 | 4 | 3 | 2 | 3 | 2 |
| - SQL安全 | 4 | 4 | 4 | 4 | 2 | 2 | 2 | 1 |
| - 鉴权完整 | 4 | 4 | 4 | 4 | 2 | 2 | 2 | 2 |
| - 分页/过滤 | 4 | 4 | 4 | 4 | 2 | 2 | 2 | 2 |
| - 错误处理 | 4 | 4 | 4 | 3 | 2 | 2 | 2 | 2 |
| C. 前端能力 (15分) | 15✅ | 15✅ | 14 | 14 | 8❌ | 6❌ | 5❌ | 5❌ |
| - SPA结构 | 6 | 6 | 5 | 6 | 3 | 2 | 2 | 2 |
| - 交互体验 | 4 | 4 | 4 | 4 | 2 | 2 | 1 | 1 |
| - 代码组织 | 3 | 3 | 3 | 3 | 2 | 1 | 1 | 1 |
| - 统计展示 | 2 | 2 | 2 | 1 | 1 | 1 | 1 | 1 |
| D. 算法能力 (20分) | 20✅ | 20✅ | 20✅ | 18 | 13❌ | 12❌ | 11❌ | 10❌ |
| - 初始化规则 | 4 | 4 | 4 | 4 | 3 | 3 | 2 | 2 |
| - 失败分支 | 8 | 8 | 8 | 8 | 5 | 4 | 4 | 3 |
| - 成功分支 | 6 | 6 | 6 | 6 | 3 | 3 | 3 | 3 |
| - 验证样例 | 2 | 2 | 2 | 0 | 2 | 2 | 2 | 2 |
| E. 实时同步 (10分) | 10✅ | 10✅ | 10✅ | 9 | 4❌ | 3❌ | 2❌ | 2❌ |
| - SSE建连 | 4 | 4 | 4 | 3.5 | 2 | 1 | 1 | 1 |
| - DO广播 | 4 | 4 | 4 | 3 | 1 | 1 | 0 | 0 |
| - 前端刷新 | 2 | 2 | 2 | 2.5 | 1 | 1 | 1 | 1 |
| F. 安全鲁棒 (10分) | 10✅ | 9 | 8 | 9 | 5❌ | 4❌ | 4❌ | 3❌ |
| - 密码哈希 | 4 | 4 | 4 | 4 | 1 | 0 | 1 | 0 |
| - Cookie安全 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 |
| - CSRF防护 | 2 | 1 | 1 | 2 | 1 | 1 | 0 | 0 |
| - 输入校验 | 2 | 2 | 1 | 1 | 1 | 1 | 1 | 1 |
| G. 性能工程 (10分) | 7 | 7 | 6 | 8 | 6 | 5 | 6 | 5 |
| - 缓存策略 | 0 | 0 | 0 | 2 | 1 | 0 | 1 | 0 |
| - 数据库索引 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 |
| - 代码可读性 | 3 | 3 | 3 | 2 | 2 | 2 | 2 | 2 |
| - 基本日志 | 2 | 2 | 1 | 2 | 1 | 1 | 1 | 1 |
| H. 加分项 (最多+10) | 0 | 0 | 0 | +1 | 0 | 0 | 0 | 0 |
| 总分 | 97 | 96 | 93 | 93 | 58 | 56 | 54 | 48 |
核心优势:
- ✅ 唯一获得安全满分(10/10):完整CSRF防护、Session签名、时序攻击防护
- ✅ 工程化最佳:10+工具函数,代码组织清晰
- ✅ 精确标签搜索:
(',' || tags || ',') LIKE '%,tag,%'避免误匹配 - ✅ 版本化密码哈希:
v1$iterations$salt$hash便于未来升级
代码亮点:
// 1. 完整的CSRF防护
function csrfOk(request) {
const origin = request.headers.get("Origin");
const referer = request.headers.get("Referer");
const url = new URL(request.url);
return (origin && origin === url.origin) ||
(referer && referer.startsWith(url.origin + "/"));
}
// 2. 时间安全比较(防时序攻击)
function timingSafeEqual(a, b) {
if (a.length !== b.length) return false;
let diff = 0;
for (let i = 0; i < a.length; i++) {
diff |= a.charCodeAt(i) ^ b.charCodeAt(i);
}
return diff === 0;
}
// 3. Interval严格递增保护
const next = Math.round(state.interval_days * result.ease_factor);
result.interval_days = Math.max(state.interval_days + 1, next);适用场景:生产环境、安全要求高、长期维护
核心优势:
- ✅ 前端体验最佳(15/15满分):完整分页、Modal弹窗、实时指示器
- ✅ 额外Stats API:
/api/stats返回详细统计 - ✅ 代码最详细:1549行,注释清晰,组织规范
- ✅ XSS防护完善:escapeHtml函数处理所有输出
代码亮点:
// 1. 完整的分页控制
function renderPagination() {
const totalPages = Math.ceil(cardsData.total / pageSize);
for (let i = 0; i < totalPages; i++) {
const btn = document.createElement('button');
btn.className = 'btn' + (i === currentPage ? ' btn-success' : ' btn-secondary');
btn.textContent = i + 1;
btn.onclick = () => loadCards(i);
pagination.appendChild(btn);
}
}
// 2. 额外的Stats API
async function handleStats(request, env, session, corsHeaders) {
const totalCards = await env.DB.prepare('SELECT COUNT(*) as count FROM cards WHERE user_id = ?')
.bind(session.userId).first();
const dueToday = await env.DB.prepare('SELECT COUNT(*) as count FROM sr_state WHERE user_id = ? AND due_at <= ?')
.bind(session.userId, now).first();
// ...
return jsonResponse({ ok: true, total_cards, due_today, reviewed_today, avg_grade });
}适用场景:产品级应用、用户体验优先、功能完整性重要
核心优势:
- ✅ 代码最简洁:仅836行实现所有核心功能
- ✅ SM-2标准公式:
delta = 0.1 - q * (0.08 + q * 0.02) - ✅ 核心功能完美:后端20/20、算法20/20、实时10/10
- ✅ 注释详细:包含3组验证样例
代码行数对比:
- Gemini-3: 836行(最少)⭐
- gpt-5.2-codex: 1,105行
- Sonnet-4.5: 1,549行
- GLM-4.7: 1,808行
不足:
⚠️ 前端分页UI不完整(-1分)⚠️ CSRF防护简单(-1分)⚠️ 缺少缓存策略(-3分)
适用场景:快速原型、学习参考、资源受限环境
核心优势:
- ✅ 密码哈希完美:PBKDF2 + 100k迭代 + 16字节salt
- ✅ CSRF防护完整:Origin + Referer双重检查
- ✅ SSE心跳机制:30秒keep-alive,连接更稳定
- ✅ 缓存策略:唯一实现HTTP缓存的模型(+2分)
独特亮点:
// 1. SSE心跳保活(30秒)
const keepAlive = setInterval(() => {
writer.write(encoder.encode(': keep-alive\n\n'));
}, 30000);
// 2. CSRF检查
if (['POST', 'PUT', 'DELETE'].includes(method)) {
const origin = request.headers.get('Origin');
const referer = request.headers.get('Referer');
if (!origin && !referer) return 403;
if (origin && !origin.includes(host)) return 403;
}
// 3. 详细的输入校验
function validateCardData(data) {
const errors = [];
if (!data.front || typeof data.front !== 'string') {
errors.push('front is required');
} else if (data.front.length > 2000) {
errors.push('front must be <= 2000 chars');
}
// ...
return errors;
}不足:
⚠️ 算法验证样例只有注释,无自测函数(-2分)⚠️ 统计缺少可视化(-1分)⚠️ SSE缺少自动重连(-1分)
适用场景:企业级应用、注重稳定性、需要详细错误提示
致命问题:
// ❌ 错误1:导入Node.js模块(Cloudflare Workers不支持)
import crypto from 'crypto'; // 这会导致运行时错误
// ❌ 错误2:密码哈希缺少salt
async function hashPassword(password) {
const hash = crypto.createHash('sha256');
hash.update(password);
return hash.digest('hex'); // 无salt,不安全!
}
// ❌ 错误3:WebSocket实现不完整
async handleWebSocket(request) {
// 空函数,没有实现
}主要缺陷:
- ❌ 使用Node.js
crypto模块(在Cloudflare Workers中会报错) - ❌ 密码哈希无salt,不符合PBKDF2要求
- ❌ WebSocket声称实现,实际为空函数
- ❌ 前端代码严重不完整,缺少关键交互
可用性:无法部署(import错误会导致Worker启动失败)
主要问题:
// ❌ 问题1:大量中文注释(专业性下降)
// 这是一个用于处理用户认证的函数
async function handleLogin(request, env) {
// 获取用户输入的用户名和密码
const { username, password } = await request.json();
// ... 更多中文注释
}
// ❌ 问题2:密码哈希只用SHA-256(无salt/迭代)
async function hashPassword(password) {
const msgBuffer = new TextEncoder().encode(password);
const hashBuffer = await crypto.subtle.digest('SHA-256', msgBuffer);
return bufferToHex(hashBuffer); // 无salt,极不安全!
}
// ❌ 问题3:Durable Object空壳实现
export class RealtimeSync {
async fetch(request) {
return new Response("Not implemented", { status: 501 });
}
}主要缺陷:
- ❌ 代码注释大量使用中文,降低国际化和专业性
- ❌ 密码哈希严重不规范(纯SHA-256,无salt/迭代)
- ❌ Durable Object返回501,实际未实现
- ❌ 错误处理不一致,部分端点返回纯文本
可用性:不可部署(密码安全问题 + 实时功能缺失)
主要问题:
// ❌ 问题1:前端XSS风险
function renderCard(card) {
return `
<div class="card">
<h3>${card.front}</h3> <!-- 未转义,XSS风险! -->
<p>${card.back}</p> <!-- 未转义,XSS风险! -->
</div>
`;
}
// ❌ 问题2:缺少/api/stats端点
// 前端调用了,但后端未实现
async function loadStats() {
const res = await fetch('/api/stats'); // 404错误!
}
// ❌ 问题3:算法验证示例缺失
// 完全没有Example注释或自测函数主要缺陷:
- ❌ 前端大量使用
${...}模板字符串,未做HTML转义(XSS高危) - ❌
/api/stats端点缺失,前端调用会404 - ❌ SM-2算法缺少验证示例
- ❌ SSE实现不完整,缺少错误处理
可用性:有安全风险(XSS + API缺失)
致命问题:
// ❌ 问题1:大量端点缺失
export default {
async fetch(request, env, ctx) {
const url = new URL(request.url);
if (url.pathname === '/api/register') {
// OK
}
// ... 缺少 /api/cards, /api/review/* 等多个端点
return new Response('Not Found', { status: 404 });
}
};
// ❌ 问题2:密码哈希完全不规范
function hashPassword(password) {
return password + 'some_salt'; // 明文拼接,极度不安全!
}
// ❌ 问题3:Durable Object空壳
export class SessionDO {
async queue() {} // 空函数
async alarm() {} // 空函数
}主要缺陷:
- ❌ 路由处理缺少多个关键端点(/api/cards CRUD、/api/review/*)
- ❌ 密码哈希完全错误(明文+字符串,无加密)
- ❌ Durable Object仅有空函数框架,无实际功能
- ❌ 前端功能严重缺失,无法完成基本流程
- ❌ 代码组织混乱,大量TODO注释
可用性:基本不可用(功能缺失 + 安全崩溃)
| 模型 | 密码哈希 | Salt | 迭代次数 | CSRF防护 | XSS防护 | 安全评级 |
|---|---|---|---|---|---|---|
| gpt-5.2-codex | PBKDF2+SHA-256 | ✅ 16字节 | 100,000 | ✅ Origin+Referer | ✅ escapeHtml | ⭐⭐⭐⭐⭐ |
| Sonnet-4.5 | PBKDF2+SHA-256 | ✅ username | 100,000 | ✅ escapeHtml | ⭐⭐⭐⭐ | |
| GLM-4.7 | PBKDF2+SHA-256 | ✅ 16字节 | 100,000 | ✅ Origin+Referer | ✅ escapeHtml | ⭐⭐⭐⭐⭐ |
| Gemini-3 | PBKDF2+SHA-256 | ✅ 16字节 | 100,000 | ⭐⭐⭐⭐ | ||
| Qwen3 | SHA-256 | ❌ 无 | 0 | ❌ 无 | ❌ 无 | ⭐ |
| iFlow | SHA-256 | ❌ 无 | 0 | ❌ 无 | ⭐ | |
| Kimi | PBKDF2 | 10,000 | ❌ 无 | ❌ 高危 | ⭐ | |
| MiniMax | 明文拼接 | ❌ 无 | 0 | ❌ 无 | ❌ 无 | ☆ |
结论:
- 顶级安全:gpt-5.2-codex、GLM-4.7
- 良好安全:Sonnet-4.5、Gemini-3
- 严重不安全:Qwen3、iFlow、Kimi、MiniMax(不可部署)
| 模型 | EF公式 | Interval递增 | 失败分支 | 验证样例 | 评级 |
|---|---|---|---|---|---|
| gpt-5.2-codex | (grade-3)*0.1 |
✅ +保护 | ✅ 完美 | ✅ 详细 | ⭐⭐⭐⭐⭐ |
| Sonnet-4.5 | 分级处理 | ✅ 正确 | ✅ 完美 | ✅ 详细 | ⭐⭐⭐⭐⭐ |
| Gemini-3 | SM-2标准 | ✅ 正确 | ✅ 完美 | ✅ 详细 | ⭐⭐⭐⭐⭐ |
| GLM-4.7 | SM-2标准 | ✅ 正确 | ✅ 完美 | ⭐⭐⭐⭐ | |
| Qwen3 | 简化版 | ✅ 有 | ⭐⭐⭐ | ||
| iFlow | 简化版 | ⭐⭐ | |||
| Kimi | 错误实现 | ❌ 不递增 | ❌ 错误 | ❌ 无 | ⭐ |
| MiniMax | 未实现 | ❌ 固定值 | ❌ 错误 | ❌ 无 | ☆ |
EF公式对比:
- gpt-5.2-codex:
delta = (grade - 3) * 0.1(线性,简洁) - Gemini-3/GLM-4.7:
delta = 0.1 - (5-grade) * (0.08 + (5-grade) * 0.02)(SM-2标准) - Sonnet-4.5:
grade 3:-0.08, 4:+0.05, 5:+0.1(分级处理)
| 模型 | SSE实现 | 心跳 | DO广播 | 前端自动刷新 | 评级 |
|---|---|---|---|---|---|
| gpt-5.2-codex | ✅ 完整 | ✅ hello | ✅ 完整 | ✅ 完整 | ⭐⭐⭐⭐⭐ |
| Sonnet-4.5 | ✅ 完整 | ❌ 无 | ✅ 完整 | ✅ +指示器 | ⭐⭐⭐⭐⭐ |
| Gemini-3 | ✅ 完整 | ❌ 无 | ✅ 完整 | ✅ 完整 | ⭐⭐⭐⭐⭐ |
| GLM-4.7 | ✅ 完整 | ✅ 30s | ✅ 完整 | ✅ 完整 | ⭐⭐⭐⭐⭐ |
| Qwen3 | ❌ 无 | ⭐⭐ | |||
| iFlow | ❌ 无 | ❌ 空壳 | ❌ 无 | ⭐ | |
| Kimi | ❌ 无 | ❌ 空壳 | ⭐ | ||
| MiniMax | ❌ 未实现 | ❌ 无 | ❌ 空壳 | ❌ 无 | ☆ |
结论:前4名模型实时同步都很完整,后4名严重不足。
| 模型 | 代码行数 | 简洁度 | 工具函数 | 注释质量 | 可维护性 | 评级 |
|---|---|---|---|---|---|---|
| Gemini-3 | 836 | ⭐⭐⭐⭐⭐ | 3个 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | 最简洁 |
| gpt-5.2-codex | 1,105 | ⭐⭐⭐⭐ | 10+个 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | 最工程化 |
| Sonnet-4.5 | 1,549 | ⭐⭐⭐ | 5个 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | 最详细 |
| GLM-4.7 | 1,808 | ⭐⭐⭐ | 7个 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | 最稳健 |
| Qwen3 | 1,525 | ⭐⭐ | 3个 | ⭐⭐ | ⭐⭐ | 有缺陷 |
| iFlow | 2,286 | ⭐ | 2个 | ⭐ | ⭐ | 最冗长 |
| Kimi | 2,171 | ⭐ | 2个 | ⭐⭐ | ⭐ | 混乱 |
| MiniMax | 2,173 | ⭐ | 1个 | ⭐ | ⭐ | 最差 |
代码行数悖论:
- 后4名代码最长(1525-2286行),但质量最差
- 前4名代码适中(836-1808行),质量最高
- 结论:代码行数与质量成反比(说明后4名有大量冗余/无效代码)
| 模型 | 致命问题1 | 致命问题2 | 致命问题3 | 可部署性 |
|---|---|---|---|---|
| Qwen3 | Node.js模块 | 密码无salt | WebSocket空壳 | ❌ 无法启动 |
| iFlow | 密码纯SHA-256 | DO返回501 | 大量中文注释 | ❌ 不安全 |
| Kimi | XSS高危 | /api/stats缺失 | SSE不完整 | |
| MiniMax | 密码明文拼接 | 端点大量缺失 | DO空壳 | ❌ 基本不可用 |
不合格原因分类:
- 安全问题(100%):所有不及格模型密码哈希都不合格
- 功能缺失(75%):3/4模型缺少关键API或前端功能
- 实时同步(75%):3/4模型DO未实际实现
- 代码质量(100%):所有不及格模型组织混乱
// ✅ 完整CSRF防护
function csrfOk(request) {
const origin = request.headers.get("Origin");
const referer = request.headers.get("Referer");
const url = new URL(request.url);
return (origin && origin === url.origin) ||
(referer && referer.startsWith(url.origin + "/"));
}
// ✅ 时间安全比较
function timingSafeEqual(a, b) {
if (a.length !== b.length) return false;
let diff = 0;
for (let i = 0; i < a.length; i++) {
diff |= a.charCodeAt(i) ^ b.charCodeAt(i);
}
return diff === 0;
}
// ✅ 版本化哈希
return `v1$${iterations}$${base64UrlEncode(salt)}$${hash}`;// ✅ 完整分页
function renderPagination() {
const totalPages = Math.ceil(total / pageSize);
for (let i = 0; i < totalPages; i++) {
const btn = document.createElement('button');
btn.className = 'btn' + (i === currentPage ? ' active' : '');
btn.onclick = () => loadCards(i);
pagination.appendChild(btn);
}
}
// ✅ XSS防护
function escapeHtml(text) {
const div = document.createElement('div');
div.textContent = text;
return div.innerHTML;
}// ✅ 简洁的SM-2算法
function calculateNextState(current, grade, now) {
if (grade < 3) {
return { lapses: lapses + 1, reps: 0, interval_days: 1, ease_factor: max(1.3, EF - 0.2) };
} else {
const delta = 0.1 - (5-grade) * (0.08 + (5-grade) * 0.02);
return { reps: reps + 1, ease_factor: max(1.3, EF + delta), ... };
}
}// ✅ SSE心跳
const keepAlive = setInterval(() => {
writer.write(encoder.encode(': keep-alive\n\n'));
}, 30000);
// ✅ 详细输入校验
function validateCardData(data) {
const errors = [];
if (!data.front || typeof data.front !== 'string') {
errors.push('front is required');
} else if (data.front.length > 2000) {
errors.push('front must be <= 2000 chars');
}
return errors;
}// ❌ 错误1:使用Node.js模块(Qwen3)
import crypto from 'crypto'; // Cloudflare Workers不支持!
// ✅ 正确:使用Web Crypto API
const hash = await crypto.subtle.deriveBits({ name: 'PBKDF2', ... });
// ❌ 错误2:密码无salt(iFlow)
async function hashPassword(password) {
return await crypto.subtle.digest('SHA-256', encoder.encode(password));
}
// ✅ 正确:PBKDF2 + salt
const salt = crypto.getRandomValues(new Uint8Array(16));
const hash = await crypto.subtle.deriveBits({ salt, iterations: 100000, ... });
// ❌ 错误3:XSS风险(Kimi)
element.innerHTML = `<h3>${card.front}</h3>`; // 未转义!
// ✅ 正确:转义HTML
element.innerHTML = `<h3>${escapeHtml(card.front)}</h3>`;
// ❌ 错误4:空壳DO(MiniMax)
export class SessionDO {
async queue() {} // 什么都不做
}
// ✅ 正确:完整实现
export class RealtimeDO {
async fetch(request) {
if (request.headers.get('Accept') === 'text/event-stream') {
return this.handleSSE(request);
}
// ... 完整的广播逻辑
}
}| 需求场景 | 推荐模型 | 理由 |
|---|---|---|
| 生产环境部署 | gpt-5.2-codex | 安全性最高(满分10/10) |
| 企业级应用 | GLM-4.7 | 稳健性强,错误提示详细 |
| 产品级体验 | Sonnet-4.5 | 前端体验最佳,功能最完整 |
| 快速原型 | Gemini-3 | 代码最简洁(836行) |
| 学习参考 | 所有及格模型 | 各有特色,互补学习 |
| 不建议使用 | 不及格4模型 | 严重安全缺陷,不可部署 |
最佳实践组合:
- 安全模块:采用 gpt-5.2-codex 的CSRF + 时序攻击防护
- 前端模块:采用 Sonnet-4.5 的分页 + Modal弹窗
- 算法模块:采用 Gemini-3 的简洁SM-2实现
- 稳健性模块:采用 GLM-4.7 的SSE心跳 + 输入校验
-
两极分化严重:
- 前4名(97/96/93/93分)接近完美
- 后4名(58/56/54/48分)严重不及格
- 分差高达49分,说明AI模型能力差异巨大
-
安全性是分水岭:
- 前4名:PBKDF2 + 100k迭代 + salt ✅
- 后4名:SHA-256/明文/无salt ❌
- 密码安全是能否及格的关键指标
-
代码行数悖论:
- 最优模型:836-1808行
- 最差模型:1525-2286行
- 更多代码≠更高质量,反而说明冗余/无效代码多
-
实时同步区分度高:
- 前4名:完整SSE + DO广播 + 前端自动刷新
- 后4名:空壳实现或501错误
- DO实现是区分高手和新手的关键
🏆 综合第一名:gpt-5.2-codex (97分)
- 理由:安全满分、工程化最佳、可直接生产部署
- 适合:对安全要求高、需要长期维护的项目
🥈 综合第二名:Sonnet-4.5 (96分)
- 理由:前端体验最佳、功能最完整、代码最详细
- 适合:产品级应用、注重用户体验的项目
🥉 性价比之选:Gemini-3 (93分)
- 理由:代码最简洁、核心功能完美、易于理解
- 适合:快速原型、学习参考、资源受限环境
🌟 稳健之选:GLM-4.7 (93分)
- 理由:SSE心跳、CSRF完整、错误提示详细
- 适合:企业级应用、注重稳定性的项目
- 理由:严重安全缺陷、功能不完整、无法部署
- 结论:需要大幅重构才能使用
| 评分项 | 满分模型数 | 满分模型列表 |
|---|---|---|
| A. 指令遵从 (15分) | 4 | gpt-5.2-codex, Sonnet-4.5, Gemini-3, GLM-4.7 |
| B. 后端能力 (20分) | 3 | gpt-5.2-codex, Sonnet-4.5, Gemini-3 |
| C. 前端能力 (15分) | 2 | gpt-5.2-codex, Sonnet-4.5 |
| D. 算法能力 (20分) | 3 | gpt-5.2-codex, Sonnet-4.5, Gemini-3 |
| E. 实时同步 (10分) | 3 | gpt-5.2-codex, Sonnet-4.5, Gemini-3 |
| F. 安全鲁棒 (10分) | 1 | gpt-5.2-codex ⭐ |
结论:gpt-5.2-codex 是唯一获得安全满分的模型,这是其获得第一名的关键因素。
报告生成时间: 2026-01-11 评估工具: Claude Sonnet 4.5 + Explore Agent 评估标准版本: evaluation.md (v1.0) 总参与模型: 8个 及格模型: 4个(50%) 优秀模型: 2个(25%)
★ Insight ─────────────────────────────────────
本次评估揭示了AI模型在实际工程能力上的巨大差距:
-
安全意识是分水岭:密码哈希实现成为区分顶级模型和不及格模型的关键。前4名都正确实现了PBKDF2+100k迭代,后4名全部失败(SHA-256/明文/无salt)。这说明安全编码能力是AI模型工程水平的试金石。
-
简洁≠简陋,冗长≠完整:Gemini-3用836行实现了93分的高质量代码,而后4名用1525-2286行却只得到48-58分。这印证了"代码质量与行数成反比"的工程真理——优秀的代码精炼高效,糟糕的代码冗余混乱。
-
Durable Object成为技术难点:前4名都完整实现了SSE+DO广播,后4名都是空壳或501错误。这说明分布式实时系统是区分高阶能力的关键指标,也是AI模型训练中需要加强的领域。
-
CSRF防护的稀缺性:8个模型中只有2个(gpt-5.2-codex、GLM-4.7)实现了完整的Origin+Referer校验,说明主动安全防护意识在AI模型训练数据中覆盖不足,这是未来需要改进的方向。
─────────────────────────────────────────────────