大模型代码实战:GLM5 vs DeepSeek 3.2
同样的提示词,不同的模型,代码质量差多少?我用 5 个真实任务做了对比测试。
测试环境
项目
配置
GLM5
智谱 AI 官方 API,temperature=0.7
DeepSeek 3.2
官方 API,temperature=0.7
测试时间
2026-03-05
评判标准
正确性、可读性、健壮性、注释质量
任务一:Python 数据处理 需求: 读取 CSV 文件,统计每列缺失值比例,输出可视化图表。
GLM5 表现 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 import pandas as pdimport matplotlib.pyplot as pltdef analyze_missing_data (file_path ): """分析数据缺失情况""" df = pd.read_csv(file_path) missing_ratio = df.isnull().sum () / len (df) * 100 plt.figure(figsize=(10 , 6 )) missing_ratio.plot(kind='bar' ) plt.title('Missing Data Ratio by Column' ) plt.ylabel('Percentage (%)' ) plt.tight_layout() plt.savefig('missing_data.png' ) return missing_ratio
优点: 代码简洁,注释清晰缺点: 没有异常处理,文件不存在时会崩溃
DeepSeek 3.2 表现 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 import pandas as pdimport matplotlib.pyplot as pltfrom pathlib import Pathdef analyze_missing_data (file_path, output_path='missing_data.png' ): """ 分析 CSV 文件的缺失数据情况 Args: file_path: CSV 文件路径 output_path: 输出图片路径 Returns: pd.Series: 各列缺失值比例 Raises: FileNotFoundError: 文件不存在时 ValueError: 文件为空或不是有效 CSV """ path = Path(file_path) if not path.exists(): raise FileNotFoundError(f"文件不存在: {file_path} " ) try : df = pd.read_csv(file_path) except Exception as e: raise ValueError(f"无法读取 CSV 文件: {e} " ) if df.empty: raise ValueError("CSV 文件为空" ) missing_ratio = (df.isnull().sum () / len (df) * 100 ).round (2 ) missing_ratio = missing_ratio[missing_ratio > 0 ] if len (missing_ratio) == 0 : print ("数据完整,无缺失值" ) return pd.Series() plt.figure(figsize=(12 , 6 )) ax = missing_ratio.plot(kind='bar' , color='coral' ) plt.title('Missing Data Ratio by Column' , fontsize=14 ) plt.xlabel('Columns' , fontsize=12 ) plt.ylabel('Missing Percentage (%)' , fontsize=12 ) plt.xticks(rotation=45 , ha='right' ) for i, v in enumerate (missing_ratio): ax.text(i, v + 0.5 , f'{v} %' , ha='center' , va='bottom' ) plt.tight_layout() plt.savefig(output_path, dpi=150 , bbox_inches='tight' ) plt.close() print (f"图表已保存至: {output_path} " ) return missing_ratioif __name__ == "__main__" : result = analyze_missing_data("data.csv" ) print (result)
优点: 异常处理完善,文档字符串详细,可视化更美观缺点: 代码量较大,对于简单任务可能过于复杂
第一轮评分
维度
GLM5
DeepSeek 3.2
正确性
⭐⭐⭐⭐⭐
⭐⭐⭐⭐⭐
可读性
⭐⭐⭐⭐
⭐⭐⭐⭐⭐
健壮性
⭐⭐⭐
⭐⭐⭐⭐⭐
注释质量
⭐⭐⭐⭐
⭐⭐⭐⭐⭐
综合
4.0
4.75
任务二:React 组件开发 需求: 实现一个带搜索过滤的下拉选择组件。
GLM5 表现 生成了功能完整的组件,使用了 useState 和 useEffect,但 useEffect 的依赖项处理有问题,可能导致不必要的重渲染。
DeepSeek 3.2 表现 不仅代码正确,还主动提供了:
TypeScript 类型定义
键盘导航支持(上下箭头、回车选择)
防抖处理优化搜索性能
无障碍属性(aria-*)
第二轮评分
维度
GLM5
DeepSeek 3.2
功能完整度
⭐⭐⭐⭐
⭐⭐⭐⭐⭐
React 最佳实践
⭐⭐⭐
⭐⭐⭐⭐⭐
TypeScript 支持
⭐⭐
⭐⭐⭐⭐⭐
性能优化
⭐⭐⭐
⭐⭐⭐⭐⭐
综合
3.25
4.75
任务三:SQL 查询优化 需求: 找出连续 3 天登录的用户。
GLM5 表现 使用了窗口函数,思路正确,但 SQL 可读性一般,且没有考虑性能优化。
DeepSeek 3.2 表现 提供了两种方案:
窗口函数方案(简洁)
自连接方案(兼容旧版 MySQL)
还附带了执行计划分析和索引建议。
任务四:算法题 需求: 实现 LRU 缓存。
两者都能正确实现,但 DeepSeek 3.2 的代码更 Pythonic,使用了 OrderedDict,并分析了时间复杂度。
任务五:代码审查 需求: 找出以下代码的问题并优化。
1 2 3 4 5 def get_user_data (user_id ): conn = sqlite3.connect('db.sqlite' ) cursor = conn.cursor() cursor.execute(f"SELECT * FROM users WHERE id = {user_id} " ) return cursor.fetchone()
GLM5 发现的问题:
SQL 注入风险 ✅
连接未关闭 ✅
没有错误处理 ✅
DeepSeek 3.2 发现的问题:
SQL 注入风险 ✅
连接未关闭 ✅
没有错误处理 ✅
使用 SELECT * 不优雅 ✅
没有类型注解 ✅
建议改用 ORM 或上下文管理器 ✅
最终评分
任务
GLM5
DeepSeek 3.2
Python 数据处理
4.0
4.75
React 组件
3.25
4.75
SQL 查询
3.75
4.5
算法实现
4.0
4.5
代码审查
4.0
4.75
总分
19.0/25
23.25/25
结论 GLM5 适合:
快速原型开发
简单的脚本任务
对代码健壮性要求不高的场景
DeepSeek 3.2 适合:
生产级代码开发
需要完整异常处理的场景
团队协作项目(代码规范性好)
一句话总结: GLM5 能写代码,DeepSeek 3.2 能写好代码。
系列文章:
你用过这两个模型吗?体验如何?欢迎留言讨论。