OpenAI: gpt-oss-20b 在「复杂路径动画」的评测结果
这是该 AI 模型在此测试用例上的详细评测结果。
基本信息
- 模型名称:OpenAI: gpt-oss-20b
- 用例名称:复杂路径动画
- 测试类型:网页生成
- 评测维度:动画效果
系统提示词(System Prompt)
这是给 AI 模型的背景设定和角色指令:
你是一名资深前端开发工程师,专精于 SVG 动画与 CSS 动画技术。 回答要求: 1. 所有代码(HTML、CSS、JavaScript)必须合并在单个 HTML 文件中,可直接在浏览器运行,不依赖任何外部库或 CDN。 2. 变形动画(Morphing)须使用锚点数量相同的预设 SVG path 数据,确保过渡平滑无畸变;若无法保证锚点匹配,可改用简单多边形(polygon/polyline)实现形状切换。 3. 描边动画必须基于 stroke-dasharray 与 stroke-dashoffset 属性实现,通过 CSS @keyframes 或 JavaScript 控制,禁止使用第三方动画库。 4. 代码结构清晰,关键逻辑需有简短注释,变量命名语义化,便于阅读与理解。 5. 每个动画模块须提供独立的「重播」触发方式(按钮点击或区域点击),重播时动画从头开始。 6. 页面布局整洁,各动画区域有明确标题标注,视觉风格统一。
用户提示词(User Prompt)
这是用户给 AI 模型的具体任务要求:
# SVG 路径动画展示页面(基础版) 请生成一个单 HTML 文件,展示以下 5 类 SVG 路径动画,每类动画独立展示在带标题的卡片区域内,并配有「重播」按钮。 ## 动画模块要求 ### 1. Logo 描边绘制动画 - 使用 SVG `<text>` 或手工绘制的路径呈现文字 「SLCT」 - 动画分两阶段:① 描边从无到有逐渐绘出(stroke-dashoffset 从总长度归零);② 描边完成后,文字填充颜色淡入 - 总时长约 2~3 秒,缓动自然 ### 2. 图标描边动画 - 展示 5 个图标:齿轮、心形、星星、箭头、对勾 - 每个图标使用 SVG path 绘制,依次触发描边动画(前一个完成后下一个开始,或同时带延迟) - 使用 stroke-dasharray / stroke-dashoffset 实现描边效果 - 图标尺寸约 60×60px,排列整齐 ### 3. 路径跟随动画 - 绘制一条可见的贝塞尔曲线路径 - 路径本身以描边动画「画出」 - 一个小圆形沿该路径匀速移动(使用 `animateMotion` 或 JavaScript 计算坐标) - 循环播放 ### 4. 形状变形动画 - 使用锚点数量相同的 SVG path,依次呈现:圆形 → 方形 → 三角形 - 通过 CSS animation 的 `d` 属性插值,或使用 JavaScript 逐帧插值路径数据 - 若浏览器不支持 `d` 属性动画,可改用 `<polygon>` 的 `points` 属性插值 - 过渡平滑,循环播放,每个形状停留约 1 秒 ### 5. 波浪流动动画 - 绘制 2~3 层 SVG 波浪线(使用 `<path>` 或 `<polyline>`) - 通过平移(translateX)或 stroke-dashoffset 变化实现持续流动效果 - 各层波浪速度不同(如 3s、5s、7s),颜色或透明度有所区分 - 无缝循环 ## 技术约束 - 核心描边动画必须使用 stroke-dasharray + stroke-dashoffset - 可使用 CSS @keyframes 或原生 JavaScript(requestAnimationFrame / setTimeout) - 不得引入任何外部 JS/CSS 库 - 变形动画的路径数据须保证各形状锚点数量一致 ## 页面要求 - 深色或浅色背景均可,整体风格统一 - 每个动画卡片有标题和「重播」按钮,点击按钮动画从头开始 - 页面标题:「SVG 路径动画演示」 请直接输出完整的、可独立运行的 HTML 代码。
任务要求
AI 模型需要满足以下要求:
- 五个动画模块均已实现(Logo 描边、图标描边、路径跟随、形状变形、波浪流动),且每个模块有独立的「重播」功能,点击后动画从头开始播放
- 描边动画正确使用 stroke-dasharray 与 stroke-dashoffset 属性,Logo 动画包含描边完成后的填充淡入效果,图标动画有明显的逐笔绘制感
- 形状变形动画过渡平滑无明显畸变,路径锚点数量一致或采用合理的替代方案(如 polygon points 插值)
- 路径跟随动画中小圆形能沿曲线路径流畅移动,路径本身有描边绘出效果,循环播放无跳帧
- 波浪动画包含至少 2 层不同速度的波浪,实现无缝循环流动效果
- 代码结构清晰,关键逻辑有注释,页面布局整洁,各模块有明确标题标注
评测结果
综合得分
该模型在此用例的得分为:84.1 分(满分 100 分),已通过
基础难度评测结果
- 得分:84.1 分
- 通过状态:已通过
模型生成产物
以下是该模型针对此任务的实际生成内容:
```html SVG 路径动画演示 body{ margin:0; padding:0; font-family:Arial,Helvetica,sans-serif; background:#111; color:#eee; display:flex; flex-direction:column; align-items:center; } h1{margin:20px 0;} .cards{display:flex; flex-wrap:wrap; justify-content:center; gap:20px;} .card{ background:#222; padding:15px; border-radius:8px; width:260px; text-align:center; position:relative; } .card h2{margin:10px 0 5px;} .replay{ margin-top:10px; padding:5px 10px; background:#444; color:#fff; border:none; border-radius:4px; cursor:pointer; } /* 1. Logo */ #logoText{stroke:#fff; stroke-width:2; fill:none; stroke-dasharray:var(--len); stroke-dashoffset:var(--len);} @keyframes drawStroke{0%{stroke-dashoffset:var(--len);}70%{stroke-dashoffset:0;}100%{stroke-dashoffset:0;}} @keyframes fadeFill{0%{fill-opacity:0;}100%{fill-opacity:1;}} .logoAnim{animation:drawStroke 2s ease-out forwards, fadeFill 1s ease-in 2s forwards;} /* 2. Icons */ .iconPath{stroke:#fff; stroke-width:2; fill:none; stroke-dasharray:var(--len); stroke-dashoffset:var(--len);} @keyframes drawIcon{0%{stroke-dashoffset:var(--len);}100%{stroke-dashoffset:0;}} .iconAnim{animation:drawIcon 1s ease-out forwards;} /* 3. Path follow */ #curvePath{stroke:#fff; stroke-width:2; fill:none; stroke-dasharray:var(--len); stroke-dashoffset:var(--len);} @keyframes drawCurve{0%{stroke-dashoffset:var(--len);}100%{stroke-dashoffset:0;}} .curveAnim{animation:drawCurve 2s ease-out forwards;} /* 5. Waves */ .wave{stroke:#fff; stroke-width:2; fill:none; stroke-dasharray:2000; stroke-dashoffset:0;} @keyframes wave1{0%{transform:translateX(0);}100%{transform:translateX(-50%);}} @keyframes wave2{0%{transform:translateX(0);}100%{transform:translateX(-50%);}} @keyframes wave3{0%{transform:translateX(0);}100%{transform:translateX(-50%);}} .wave1{animation:wave1 3s linear infinite;} .wave2{animation:wave2 5s linear infinite;} .wave3{animation:wave3 7s linear infinite;} SVG 路径动画演示 Logo 描边绘制 SLCT 重播 图标描边动画 重播 路径跟随动画 重播 形状变形动画 重播 波浪流动动画 重播 /* ----------...
AI 评审点评
以下是 AI 评审对该模型输出的点评:
【GEMINI】这是一个高质量的实现方案。技术难点如形状变形(Morphing)处理得非常稳健,通过 JS 手动插值 polygon 顶点规避了 CSS 直接操作路径数据的兼容性问题。Logo 描边与填充的衔接自然。唯一的瑕疵在于波浪动画模块的重播逻辑存在一个小 bug(类名移除后立即判断导致无法重新添加),但不影响整体核心功能的展示。 【KIMI】该实现基本满足了题目要求,动画效果和技术细节处理得当。主要扣分点在于波浪动画的实现方法较为简单,可能影响流畅度;代码中存在一些未使用的规则和不一致的命名,有优化空间。整体上是一个质量较高的实现。
困难难度评测结果
- 得分:55.5 分
- 通过状态:未通过
模型生成产物
以下是该模型针对此任务的实际生成内容:
```html SVG 路径动画系统(高难度版) body{margin:0;font-family:Arial,Helvetica,sans-serif;background:#111;color:#eee;overflow:hidden} #container{display:flex;height:100vh} #main{flex:1;position:relative;overflow:auto;padding:10px} #editor{width:300px;background:#222;padding:10px;overflow:auto} h2{margin:10px 0 5px;font-size:1.1rem;color:#fff} .section{border:1px solid #444;border-radius:4px;margin-bottom:10px;padding:10px} .section svg{width:100%;height:auto} button{margin:5px 0;padding:5px 10px;background:#444;color:#fff;border:none;border-radius:3px;cursor:pointer} button:hover{background:#555} input[type=range]{width:100%} #fps{position:fixed;top:5px;right:5px;background:#000;color:#0f0;padding:3px 5px;border-radius:3px;font-family:monospace} canvas{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none} 1. Logo 绘制动画 SLCT 重播 2. 图标绘制动画 3. 路径跟随动画 4. 变形动画 5. 波浪动画 8. 动画编辑器 全局速度倍率: 1x 主题颜色: 粒子上限: 500 波浪振幅: 10 导出配置 重置所有动画 音乐控制 播放 暂停 音量: FPS: 0 /* ---------- 全局配置 ---------- */ const config = { speed: 1, themeColor: '#00ff00', particleLimit: 500, waveAmplitude: 10 }; /* ---------- FPS 计数器 ---------- */ let lastTime = performance.now(), fps = 0; function updateFPS(){ const now = performance.now(); fps = Math.round(1000 / (now - lastTime)); lastTime = now; document.getElementById('fps').textContent = 'FPS: '+fps; requestAnimationFrame(updateFPS); } requestAnimationFrame(updateFPS); /* ---------- 粒子系统 ---------- */ class Particle{ constructor(x,y,dx,dy,color,life){ this.x=x; this.y=y; this.dx=dx; this.dy=dy; this.color=color; this.life=life; this.maxLife=life; } update(){ this.dy+=0.05; // gravity this.x+=this.dx; this.y+=this.dy; this.life--; } draw(ctx){ const alpha = this.life/this.maxLife; ctx.fillStyle = this.color.replace('1)',''+alpha+')'); ctx.fillRect(this.x, this.y, 2,2); } } class ParticleSystem{ constructor(canvas){ this.canvas=canvas; this.ctx=canvas.getContext('2d'); this.particles=[]; this.max=config.particleLimit; this.resize();...
AI 评审点评
以下是 AI 评审对该模型输出的点评:
【CLAUDE】该实现虽然覆盖了题目要求的大部分功能模块,具备基本的代码框架,但存在多处严重的技术错误,导致实际运行效果与预期相差甚远。最关键的问题包括:变形动画坐标计算错误导致形状畸变、Logo动画因text元素API限制而失效、粒子系统与SVG坐标系未对齐、路径插值算法对不等锚点数量的处理缺失。代码整体给人一种「快速拼凑」的感觉,缺乏对边界情况的处理和实际运行验证。若要达到题目要求的高难度标准,需要对变形动画、Logo逐字母动画、粒子坐标转换、Web Audio音乐序列等核心模块进行重写。 【GEMINI】这是一个高质量的实现方案,完全遵循了单文件、无外部依赖和程序化生成资源的苛刻要求。特别是在 Web Audio 和 Canvas 粒子系统的结合上表现出色。虽然变形动画的路径锚点对齐算法还有进一步精细化的空间(以消除极细微的畸变),但整体功能完整度、交互灵敏度以及代码的模块化注释均达到了专业评测的高分标准。 【KIMI】该实现完成了题目要求的基础功能框架,但在关键技术细节上存在多处严重缺陷:变形动画的锚点数量不匹配导致插值完全失效,图标路径数据错误,Web Audio 音乐系统过于简陋且存在资源管理问题。代码结构较为松散,缺乏真正的模块化设计,性能优化措施不足。作为「高难度版」要求,其技术实现深度明显不足,但基本功能可用,可作为原型演示。
相关链接
您可以通过以下链接查看更多相关内容: