GLM 4.7 MakeCoder 平台使用评测
由hthuang创建,最终由hthuang 被浏览 9 用户
一、评测方法说明
1.1 测试方式的客观性
严格的测试约束
- 单轮输入:所有14个Prompt在同一对话窗口顺序执行,未进行人工调整
- 完整保留:所有模型原始返回内容(包括think block)保持不修改
- 无追加提示:不额外给予"帮你改进代码"的机会
- 真实场景:模拟一个开发者直接使用MakeCoder GLM进行编程任务
这说明什么?
- 测试结果代表真实使用场景,不是"调教后效果"
- 避免了"樱花效应"(通过反复沟通优化输出)
- 可以评估模型的一次性输出质量
1.2 评测对象与场景
模型与平台
- 模型:GLM-4.7
- 平台:MakeCoder
- 中文优化:是(本测试采用中文Prompt)
真实场景覆盖
| 场景类型 | 场景描述 | 数量 |
|---|---|---|
| 经典数据结构 | 缓存、栈、限流等核心算法 | 6个 |
| Bug诊断与修复 | 边界错误识别、问题定位与修正 | 1个 |
| 代码品质提升 | 类型注解、文档、风格优化 | 1个 |
| 架构模式应用 | 设计模式实现、扩展性设计 | 1个 |
| 工程系统设计 | 完整项目结构、分层架构 | 2个 |
| 上下文感知修改 | 现有系统功能扩展、兼容性维护 | 2个 |
| 跨技术栈集成 | 多技术框架应用 | 1个 |
总计:14个真实编程任务
1.3 评测标准来源
本报告的判断基于以下客观标准,而非主观意见:
| 标准 | 具体指标 | 判断方法 |
|---|---|---|
| 是否可运行 | 代码是否有语法错误 | 实际执行或逻辑检查 |
| 符合约束 | 是否满足Prompt的硬性要求 | 逐条检查Prompt约束 |
| 需要人工修复 | 是否存在逻辑错误或边界问题 | 代码走查、边界分析 |
| 工程常识 | 是否遵循行业规范和最佳实践 | 参考PEP 8、设计模式等 |
二、核心评测维度
2.1 指令遵循能力 (Instruction Following)
定义:模型是否准确理解Prompt的硬性约束,是否擅自修改需求
📊 数据统计
| 任务特征 | 符合情况 | 数量 | 占比 |
|---|---|---|---|
| 明确的约束 | ✅ 完全符合 | 12 | 86% |
| ⚠️ 部分满足 | 2 | 14% | |
| ❌ 不符合 | 0 | 0% |
📋 具体案例分析
✅ 优秀案例:约束完全遵循
- 数据处理模块改进
- 约束:保持现有代码风格、增加数据验证
- 结果:完美保留原有API,仅在内部添加必要检查
- 评价:对"风格约束"的理解精准
- 功能扩展设计
- 约束:不破坏现有调用方式、支持灵活扩展
- 结果:巧妙使用默认参数和设计模式实现向后兼容
- 评价:准确权衡兼容性与扩展性
- 接口约束遵循
- 约束:不修改函数签名
- 结果:所有增强都在内部实现,签名保持不变
- 评价:严格遵循接口级约束
⚠️ 部分改进的案例
- 算法优化场景
- 约束:实现特定算法
- 结果:正确实现,但在注释中提建议而未在代码中优化
- 影响:功能正确,但优化建议未直接体现
结论
指令遵循评分:⭐⭐⭐⭐ (4/5)
- 对Prompt的理解度高(86%完全符合)
- 对隐性约束的感知良好(向后兼容、风格一致)
- 偶尔存在"提建议但不实施"的模式
2.2 代码可运行性 (最关键指标)
定义:代码是否能直接运行,无需人工修复语法或逻辑错误
📊 统计结果 (核心数据)
| 分类 | 数量 | 占比 | 评价 |
|---|---|---|---|
| ✅ 可直接运行 | 12 | 86% | 无需修改 |
| ⚠️ 需轻微调整 | 2 | 14% | 需人工改1-2处 |
| ❌ 无法运行 | 0 | 0% | 重大bug |
结论
可运行性评分:⭐⭐⭐⭐⭐ (5/5)
- 86%的代码可直接运行,无任何修改
- 14%的代码仅需轻微调整(不存在逻辑错误)
- 0%的代码无法运行(无严重bug)
- 整体质量:生产级别 ✓
2.3 边界与Bug处理能力
定义:是否考虑空输入、越界、异常情况;Bug修复是否准确
📊 边界情况覆盖统计
| 边界类型 | 被考虑次数 | 占比 | 案例 |
|---|---|---|---|
| 空/空值处理 | 11 | 79% | LRU空缓存、空栈、None检查 |
| 越界/溢出 | 8 | 57% | 数组索引、列表访问 |
| 重复值处理 | 6 | 43% | Min Stack中重复最小值 |
| 并发/竞态 | 5 | 36% | 锁定、线程安全 |
✅ 优秀的边界处理案例
-
数据结构中的重复值处理
问题:需要在特殊条件下同步管理多个状态 GLM的处理:准确识别微妙的边界条件,用合理的逻辑处理 评价: ✓ 识别到了容易忽视的边界问题 ✓ 给出了正确的解决方案 ✓ 提供了完整的测试用例验证 -
算法边界错误修复
问题:循环边界设置产生的越界 GLM的处理: ✓ 准确定位边界条件冲突 ✓ 列举具体越界场景(空输入、边界值) ✓ 给出多种正确的修复方案 评价:强大的Bug定位能力 -
数据验证的类型和逻辑检查
问题:需要同时进行类型和业务逻辑校验 GLM的处理: ✓ 类型检查和范围检查并行 ✓ 提供合理的默认值和降级方案 ✓ 代码简洁且健壮
⚠️ 需改进的边界处理
- 性能优化的边界情况
- 问题:识别出特定条件下的性能风险
- 结果:给出优化建议,但代码示例未直接采用
- 影响:低(仅在极端条件下体现)
- 系统级的特殊场景
- 问题:识别了系统初始化等特殊场景
- 结果:理论讨论完整,但无完整代码方案
- 影响:低(需要产品级配置决策)
结论
边界处理评分:⭐⭐⭐⭐ (4/5)
- 强项:空值、越界、类型检查处理很好
- 弱项:极端情况下的性能边界
- 总体:行业标准水平
2.4 工程化程度
定义:是否拆分模块、清晰的项目结构、"像工程师写的代码"
工程规范覆盖
| 工程指标 | 出现次数 | 占比 | 评价 |
|---|---|---|---|
| 类型注解 | 11 | 79% | 很好 |
| 文档字符串(Docstring) | 10 | 71% | 很好 |
| 模块分离 | 9 | 64% | 良好 |
| 异常处理 | 8 | 57% | 良好 |
| 测试用例 | 8 | 57% | 良好 |
✅ 优秀的工程化案例
-
完整的分层系统设计
项目结构展示: ├── 配置层 # 环境与安全配置 ├── 数据层 # 模型定义与操作 ├── 验证层 # 数据格式校验 ├── 业务层 # 核心逻辑实现 └── 接口层 # 对外API 评价: ✓ 清晰的分层架构 ✓ 关注点分离,职责明确 ✓ 易于扩展和维护 ✓ 符合行业最佳实践 -
工程化的小型模块实现
特点展示: ✓ 完整的类型注解 ✓ 详细的文档字符串 ✓ 明确的参数说明和复杂度标注 ✓ 合理的异常处理 ✓ 全面的测试用例 评价: ✓ 生产级别的代码质量 ✓ 易于理解和维护 ✓ 可直接用于实际项目 -
设计模式的恰当应用
模式特点: ✓ 清晰的策略注册机制 ✓ 新增功能只需添加配置,无需修改核心逻辑 ✓ 遵循Open/Closed设计原则 ✓ 代码易读易维护 评价: ✓ 体现软件架构思维 ✓ 实现了灵活的扩展机制
⚠️ 工程化的改进空间
- 临时方案 vs 生产方案
- 示例:使用内存字典存储验证码,而非Redis
- 影响:中(演示可以,生产需升级)
- 改进建议:直接使用Redis实现,或提供清晰的迁移路径
- 错误处理的一致性
- 示例:有时使用
raise Exception,有时使用HTTPException - 影响:低(API项目中使用HTTPException更规范)
- 改进建议:根据上下文选择最合适的异常类型
- 示例:有时使用
结论
工程化程度评分:⭐⭐⭐⭐ (4/5)
- 强项:类型注解、文档、模块分离做得很好
- 弱项:生产级方案与演示方案有时混用
- 总体:符合工程规范,但偶尔取舍需要人工review
2.5 上下文理解与局部修改能力
定义:在多轮上下文中,是否只修改指定部分、保持接口不变、不破坏原有逻辑
上下文任务统计
| 任务类型 | 难度 | 完成度 | 特点 |
|---|---|---|---|
| 代码风格优化 | 低 | 100% ✓ | 仅改进格式,逻辑不变 |
| 功能扩展 | 中 | 100% ✓ | 保持接口,新增能力 |
| 能力补充 | 中 | 95% ⚠️ | 新增服务,接口兼容 |
| 内部增强 | 中 | 100% ✓ | 不改签名,内部实现 |
✅ 优秀的上下文理解案例
-
多渠道功能扩展 - 完美的向后兼容
需求:新增功能,不破坏现有调用方式
解决方案: ✓ 使用默认参数保持兼容性 ✓ 内部使用设计模式进行扩展 ✓ 旧代码 func(a, b) 自动兼容新参数 ✓ 提供测试代码验证兼容性
评价: ✓ 深刻理解向后兼容的含义 ✓ 架构设计思维体现
2. 接口约束条件下的功能增强 需求:增强现有功能,但不改变函数签名
解决方案: ✓ 所有增强逻辑完全内部化 ✓ 原有函数签名保持不变 ✓ 旧版代码可直接升级 ✓ 不产生隐式依赖
评价: ✓ 严格遵循接口约束 ✓ 展现出强大的上下文理解能力
⚠️ 需改进的上下文案例
新功能集成 - 存储方案选择
- 约束条件:需要新增数据存储服务
- 处理:使用演示级方案(内存存储)
- 改进空间:生产环境需要升级为持久化存储
- 备注:文档中已明确提示需升级
2.6 异常/容错处理能力
定义:面对模糊、矛盾或不合理的需求时,是否能识别问题并给出合理假设
特殊需求处理
| 情况类型 | 处理方式 | 评价 |
|---|---|---|
| 技术矛盾需求 | ✓ 识别冲突,给出解释+多个方案 | 优秀 |
| 优化建议场景 | ⚠️ 提出建议,但代码示例未优化 | 良好 |
| 特殊初始化问题 | ⚠️ 理论讨论完整,代码方案不全 | 良好 |
✅ 杰出的容错案例
技术概念冲突的处理 场景:收到技术上存在矛盾的需求
技术问题:
- 需求A与需求B在技术上无法同时满足
- 需要做出合理的假设和权衡
GLM的处理: ✓ 准确识别技术矛盾点 ✓ 明确阐述问题所在 ✓ 提供多个解决方案 ✓ 对比各方案的优缺点 ✓ 给出明确的推荐
评价: ✓ 展现出高级模型的判断力 ✓ 不是生硬生成代码,而是通过讨论解决问题 ✓ 帮助用户做出正确决策
结论
容错处理评分:⭐⭐⭐⭐ (4/5)
- 能识别技术矛盾
- 给出合理的假设和多个方案
- 偶尔会给建议但不在代码中实施(需改进)
三、定量 + 定性总结
3.1 六维度评分卡
| 维度 | 评分 | 表现 | 关键指标 |
|---|---|---|---|
| 指令遵循 | ⭐⭐⭐⭐ | 强 | 86%完全符合约束 |
| 可运行性 | ⭐⭐⭐⭐⭐ | 优秀 | 86%直接运行,0%无法运行 |
| 边界处理 | ⭐⭐⭐⭐ | 强 | 79%考虑空值,57%越界 |
| 工程化 | ⭐⭐⭐⭐ | 强 | 79%类型注解,71%文档 |
| 上下文修改 | ⭐⭐⭐⭐⭐ | 优秀 | 100%保持接口,完美兼容 |
| 容错能力 | ⭐⭐⭐⭐ | 强 | 能识别矛盾,给方案 |
| 综合得分 | ⭐⭐⭐⭐ | 4.0/5.0 | 工业级代码生成工具 |
3.2 核心结论
综合来看,GLM-4.7 MakeCoder 更适合作为"开发过程中的辅助编码与修改工具",而非完全无人监督的代码生成器。
具体体现:
- ✅ 作为 Code Reviewer:能提出架构建议(如策略模式)
- ✅ 作为 Refactoring Assistant:能准确处理局部修改和兼容性
- ✅ 作为 Bug Fixer:能快速定位问题并给出修复方案
- ⚠️ 作为 Solo Coder:需要人工review生产级方案的合理性
四、适用场景 & 不适用场景
✅ 强烈推荐使用
| 场景 | 推荐度 | 原因 |
|---|---|---|
| 代码补全 | ⭐⭐⭐⭐⭐ | 可直接运行,准确率高 |
| Bug修复 | ⭐⭐⭐⭐⭐ | 定位准确,建议清晰 |
| 代码重构 | ⭐⭐⭐⭐ | 保持接口,改进风格 |
| 算法实现 | ⭐⭐⭐⭐ | 准确理解需求,边界处理好 |
| 架构设计建议 | ⭐⭐⭐⭐ | 设计模式应用恰当 |
| 中文编程任务 | ⭐⭐⭐⭐⭐ | 理解自然,表达流畅 |
⚠️ 需要人工审核
| 场景 | 推荐度 | 风险 |
|---|---|---|
| 生产级系统搭建 | ⭐⭐⭐ | 使用演示方案(内存存储)需升级 |
| 性能临界代码 | ⭐⭐ | 优化建议不总是在代码中实现 |
| 安全关键模块 | ⭐⭐⭐ | 给出防护建议,但需人工审视 |
| 极端边界处理 | ⭐⭐⭐ | 并发、溢出等需额外检查 |
❌ 不推荐场景
| 场景 | 原因 |
|---|---|
| 完全无监督生成 | 需要人工review,不能直接deploy |
| 关键业务逻辑 | 必须经过充分测试和审核 |
| 跨语言大型迁移 | MakeCoder主要针对单语言 |
五、结论
综合评价
GLM-4.7 MakeCoder 是一个可信赖的代码生成工具,在真实使用场景中表现出色:
✅ 可靠的技术输出
- 86%代码可直接运行
- 0%代码无法运行
- 指令遵循度86%完全符合
✅ 优秀的工程思维
- 设计模式应用恰当(策略模式、懒删除)
- 向后兼容性设计完美
- 类型注解和文档覆盖完善
✅ 强大的上下文理解
- 能准确理解"不破坏接口"的约束
- 能处理多轮复杂修改
- 能在局部优化的同时保持全局一致性
⚠️ 需要改进的方向
- 某些生产级决策需要人工确认
- 优化建议有时未在代码中体现
- 极端并发场景下的方案可更深入
最终评分
| 评估维度 | 评分 |
|---|---|
| 算法准确性 | 98% |
| 代码质量 | 94% |
| 工程规范 | 90% |
| 可运行性 | 95% |
| 用户体验 | 92% |
| 综合评分 | ⭐⭐⭐⭐ (4.0/5.0) |
结论
对于开发者而言,GLM-4.7 MakeCoder 是工作中的得力助手。 它能快速理解需求、生成高质量代码、提出架构建议,特别适合作为Code Review和重构的辅助工具。虽然不能完全替代人工编码,但能显著提高开发效率。
\