大家好,这里是程序员晚枫。
阿里云Coding Plan最大的卖点之一,就是通义千问系列的代码能力 。
尤其是Qwen3-Coder-Next和Qwen3-Coder-Plus,号称专为编程优化。今天我来实测一下,看看它们到底有多强。
一、评测维度说明 我从5个维度测试通义千问的代码能力:
代码生成质量 :生成的代码是否正确、规范中文理解能力 :对中文注释、需求描述的理解算法能力 :数据结构和算法题的解答代码解释能力 :对现有代码的分析和解释实际项目能力 :复杂业务场景的处理二、实测对比 测试1:Python数据处理 Prompt :写一个Python函数,读取Excel文件,筛选出某一列大于100的行,并保存为新文件
Qwen3-Coder-Plus 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 import pandas as pddef filter_excel_by_column (input_file, output_file, column_name, threshold=100 ): """ 读取Excel文件,筛选指定列大于阈值的行 Args: input_file: 输入Excel文件路径 output_file: 输出Excel文件路径 column_name: 要筛选的列名 threshold: 阈值,默认100 Returns: int: 筛选后的行数 """ try : df = pd.read_excel(input_file) if column_name not in df.columns: raise ValueError(f"列 '{column_name} ' 不存在,可用列:{list (df.columns)} " ) filtered_df = df[df[column_name] > threshold] filtered_df.to_excel(output_file, index=False ) print (f"筛选完成:原始 {len (df)} 行,筛选后 {len (filtered_df)} 行" ) return len (filtered_df) except Exception as e: print (f"处理出错:{e} " ) return 0 if __name__ == "__main__" : filter_excel_by_column("data.xlsx" , "filtered.xlsx" , "销售额" )
评价 :
✅ 代码完整,有异常处理 ✅ 注释详细,文档字符串规范 ✅ 中文注释自然流畅 ✅ 考虑了边界情况(列不存在) ✅ 有使用示例 Qwen3.5-Plus 1 2 3 4 5 6 7 import pandas as pddef filter_excel (input_file, column_name, threshold=100 ): df = pd.read_excel(input_file) filtered = df[df[column_name] > threshold] filtered.to_excel("output.xlsx" , index=False ) return filtered
评价 :
✅ 代码简洁,核心逻辑正确 ⚠️ 缺少异常处理 ⚠️ 注释较少 测试1结论 :Qwen3-Coder-Plus > Qwen3.5-Plus
测试2:算法题解答 Prompt :用Python实现快速排序,要求原地排序,并解释时间复杂度
Qwen3-Coder-Plus 不仅给出了正确的快速排序实现,还:
提供了递归和迭代两种写法 详细分析了时间复杂度(最好O(nlogn)、平均O(nlogn)、最坏O(n²)) 讨论了空间复杂度 给出了优化建议(三数取中法、随机化pivot) 附带了完整的测试代码 评价 :算法能力确实强,讲解清晰,考虑全面。
Qwen3-Max 代码正确,解释清晰,但优化建议较少。
测试2结论 :Qwen3-Coder-Plus > Qwen3-Max
测试3:中文需求理解 Prompt :帮我写一个Python脚本,把文件夹里的所有图片批量压缩,要求保持原格式,压缩后大小不超过500KB
Qwen3-Coder-Plus 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 66 67 68 69 70 71 72 73 74 75 import osfrom PIL import Imageimport globdef compress_images (folder_path, max_size_kb=500 , quality=85 ): """ 批量压缩文件夹中的图片 Args: folder_path: 图片文件夹路径 max_size_kb: 最大文件大小(KB) quality: 压缩质量(1-100) """ supported_formats = ('*.jpg' , '*.jpeg' , '*.png' , '*.bmp' , '*.tiff' ) image_files = [] for pattern in supported_formats: image_files.extend(glob.glob(os.path.join(folder_path, pattern))) print (f"找到 {len (image_files)} 张图片" ) for img_path in image_files: try : original_size = os.path.getsize(img_path) / 1024 file_ext = os.path.splitext(img_path)[1 ].lower() if original_size <= max_size_kb: print (f"跳过(已满足要求): {os.path.basename(img_path)} " ) continue with Image.open (img_path) as img: if img.mode in ('RGBA' , 'LA' , 'P' ): background = Image.new('RGB' , img.size, (255 , 255 , 255 )) background.paste(img, mask=img.split()[-1 ] if img.mode != 'P' else None ) img = background temp_quality = quality while temp_quality > 10 : temp_path = img_path + '.temp' if file_ext in ('.jpg' , '.jpeg' ): img.save(temp_path, 'JPEG' , quality=temp_quality, optimize=True ) elif file_ext == '.png' : img.save(temp_path, 'PNG' , optimize=True ) else : img.save(temp_path, quality=temp_quality) new_size = os.path.getsize(temp_path) / 1024 if new_size <= max_size_kb: os.replace(temp_path, img_path) print (f"压缩成功: {os.path.basename(img_path)} " f"({original_size:.1 f} KB -> {new_size:.1 f} KB)" ) break else : os.remove(temp_path) temp_quality -= 5 else : print (f"无法压缩到目标大小: {os.path.basename(img_path)} " ) except Exception as e: print (f"处理失败 {os.path.basename(img_path)} : {e} " ) if __name__ == "__main__" : compress_images("./images" , max_size_kb=500 )
评价 :
✅ 完整理解了"保持原格式"和"不超过500KB"两个需求 ✅ 考虑了多种图片格式 ✅ 有智能的压缩策略(逐步降低质量) ✅ 中文注释自然流畅 ✅ 有详细的进度输出 测试3结论 :中文需求理解能力非常出色
测试4:代码解释 Prompt :解释下面这段代码的作用,并指出潜在问题
1 2 3 4 5 6 def process_data (data ): result = [] for item in data: if item['status' ] == 'active' : result.append(item) return result
Qwen3-Coder-Plus的回答 代码作用 : 这段代码的功能是从一个字典列表中筛选出状态为'active'的项,返回一个新的列表。
潜在问题 :
空值检查缺失 :如果item没有'status'键,会抛出KeyError大小写敏感 :'active'和'Active'会被视为不同性能问题 :对于大数据量,使用生成器更高效没有输入验证 :data可能不是列表改进建议 :
1 2 3 4 5 6 7 8 9 10 def process_data (data ): if not isinstance (data, list ): raise ValueError("data必须是列表" ) for item in data: if not isinstance (item, dict ): continue status = item.get('status' , '' ).lower() if status == 'active' : yield item
评价 :分析全面,指出的问题都很实际,改进代码质量高。
三、综合评分 维度 Qwen3-Coder-Plus Qwen3-Coder-Next Qwen3.5-Plus Qwen3-Max 代码生成 ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐ 中文理解 ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ 算法能力 ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐ 代码解释 ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐ 项目实战 ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐
四、使用建议 日常开发 → Qwen3-Coder-Plus 理由:代码质量最高,注释规范,适合生产环境。
快速原型 → Qwen3-Coder-Next 理由:编程专项优化,响应速度快。
复杂业务 → Qwen3-Max 理由:综合能力最强,理解复杂需求更准确。
通用场景 → Qwen3.5-Plus 理由:速度快,成本低,日常够用。
五、怎么体验? 阿里云Coding Plan 👉 点击订阅阿里云Coding Plan
一个订阅,通义千问全系列随便用。
六、写在最后 通义千问的代码能力,尤其是Qwen3-Coder系列,确实给了我惊喜。
中文注释自然、代码规范、考虑周全——这些都是国内开发者真正需要的。
国产AI模型,真的站起来了。
说到这儿,插播一个消息。
4月12日,我会在郑州参加腾讯云社区的"龙虾公开课" ,现场分享《一人公司的AI实战指南》,包括怎么用通义千问这类国产模型提升开发效率。
如果你正好在郑州,欢迎来现场交流。
👉 报名链接:https://mp.weixin.qq.com/s/XQhCrkbumDqtOZXuapMpVg
AI是杠杆,不是对手。
选择权在你手里。
🎁 福利时间 送你一份**《通义千问编程技巧手册》**:
各模型适用场景速查表 Prompt优化技巧 实战代码示例 👉 点击免费领取
📚 想系统学习AI编程?
《30讲 · AI编程训练营》 —— 从0到1掌握AI编程实战。
另外,大家去给小明的小红书👇账号点点赞吧~!
【小红书二维码】
【公众号二维码】
🧧 领个红包再走呗~
【红包二维码】
程序员晚枫,专注AI编程培训,法学硕士转行的Python程序员,开源项目 python-office 作者。
🎓 AI 编程实战课程 想系统学习 AI 编程?程序员晚枫的 AI 编程实战课 帮你从零上手!
🤖 开发者效率工具推荐 👉 想体验 MiniMax Token Plan ?点击这里享受 9 折优惠
💡 按次计费,非常划算! 想象成去菜市场买菜——买张门票进去,菜随便拿。按使用次数收费,不限额度,用多少付多少,特别适合开发者!