DeepSeek-R1模型效果展示:1.5B参数也能做数学题和写代码

张开发
2026/4/11 8:36:16 15 分钟阅读

分享文章

DeepSeek-R1模型效果展示:1.5B参数也能做数学题和写代码
DeepSeek-R1模型效果展示1.5B参数也能做数学题和写代码1. 小模型的大惊喜DeepSeek-R1-Distill-Qwen-1.5B初印象你可能觉得一个只有15亿参数的AI模型能干得了什么大事毕竟现在动辄几百亿、上千亿参数的大模型满天飞。但今天我要给你展示的DeepSeek-R1-Distill-Qwen-1.5B绝对会让你改变这个看法。这个模型就像AI界的“小钢炮”——个头不大威力不小。它基于Qwen2.5-Math-1.5B基础模型通过DeepSeek团队的知识蒸馏技术把R1架构的优势“浓缩”到了这个小巧的身体里。最让我惊讶的是它居然能在数学推理和代码生成这两个硬核任务上达到很多大模型都做不到的水平。想象一下一个能在你的笔记本电脑上流畅运行只占用不到3GB显存的模型却能解高中数学题、写Python代码、做逻辑推理这听起来是不是有点不可思议但这就是DeepSeek-R1-Distill-Qwen-1.5B带给我们的现实。2. 数学能力实测1.5B参数如何解数学题2.1 基础数学运算测试我们先从最简单的开始。我让模型计算一个基础的代数表达式from openai import OpenAI client OpenAI( base_urlhttp://localhost:8000/v1, api_keynone ) # 测试基础数学运算 response client.chat.completions.create( modelDeepSeek-R1-Distill-Qwen-1.5B, messages[ {role: user, content: 请计算(3 5) × 2 ÷ 4 - 1} ], temperature0.6 ) print(问题请计算(3 5) × 2 ÷ 4 - 1) print(f模型回答{response.choices[0].message.content})模型给出的回答是让我们一步步计算 1. 先计算括号内的加法3 5 8 2. 然后乘法8 × 2 16 3. 接着除法16 ÷ 4 4 4. 最后减法4 - 1 3 所以答案是3不仅给出了正确答案还展示了完整的计算步骤。这对于一个1.5B参数的模型来说已经相当不错了。2.2 方程求解能力接下来我们测试一下解方程的能力。我选择了一个一元二次方程# 测试方程求解 response client.chat.completions.create( modelDeepSeek-R1-Distill-Qwen-1.5B, messages[ {role: user, content: 请解方程 x² - 5x 6 0请逐步推理并将最终答案放在\\boxed{}内。} ], temperature0.6 ) print(\n问题请解方程 x² - 5x 6 0) print(f模型回答{response.choices[0].message.content})模型的表现让我有点惊喜让我们解这个一元二次方程x² - 5x 6 0 第一步识别系数 a 1, b -5, c 6 第二步使用求根公式 判别式 Δ b² - 4ac (-5)² - 4×1×6 25 - 24 1 第三步计算根 x₁ (-b √Δ) / (2a) (5 1) / 2 6 / 2 3 x₂ (-b - √Δ) / (2a) (5 - 1) / 2 4 / 2 2 所以方程的解为x₁ 3, x₂ 2 最终答案\boxed{x 2 \text{ 或 } x 3}完全正确而且它按照我的要求把最终答案放在了\boxed{}里面。这说明模型不仅能正确解题还能很好地遵循指令格式。2.3 几何问题挑战让我们再提高一点难度测试一个几何问题# 测试几何问题 response client.chat.completions.create( modelDeepSeek-R1-Distill-Qwen-1.5B, messages[ {role: user, content: 一个直角三角形的两条直角边分别是3厘米和4厘米求斜边的长度。请逐步推理并将最终答案放在\\boxed{}内。} ], temperature0.6 ) print(\n问题一个直角三角形的两条直角边分别是3厘米和4厘米求斜边的长度。) print(f模型回答{response.choices[0].message.content})模型回答这是一个直角三角形问题我们可以使用勾股定理。 已知 直角边 a 3 cm 直角边 b 4 cm 斜边 c ? 根据勾股定理c² a² b² 计算 c² 3² 4² 9 16 25 c √25 5 所以斜边的长度是5厘米。 最终答案\boxed{5 \text{ cm}}完美模型不仅正确应用了勾股定理还给出了完整的计算过程并且再次正确使用了\boxed{}格式。3. 代码生成能力展示从简单到复杂3.1 基础Python函数编写现在让我们看看这个模型在代码生成方面的表现。先从简单的开始# 测试基础代码生成 response client.chat.completions.create( modelDeepSeek-R1-Distill-Qwen-1.5B, messages[ {role: user, content: 写一个Python函数计算斐波那契数列的第n项。} ], temperature0.6, max_tokens512 ) print(问题写一个Python函数计算斐波那契数列的第n项。) print(f模型生成的代码\n{response.choices[0].message.content})模型生成的代码def fibonacci(n): 计算斐波那契数列的第n项 参数: n (int): 要计算的项数索引从0开始 返回: int: 斐波那契数列的第n项 if n 0: return 0 elif n 1: return 1 else: # 使用迭代方法计算避免递归的深度限制 a, b 0, 1 for _ in range(2, n 1): a, b b, a b return b # 测试函数 if __name__ __main__: # 测试前10项 for i in range(10): print(ffibonacci({i}) {fibonacci(i)})这个代码质量相当不错它使用了迭代方法而不是递归避免了递归深度限制的问题还包含了完整的文档字符串和测试代码。3.2 数据处理任务让我们测试一个更实用的数据处理任务# 测试数据处理代码生成 response client.chat.completions.create( modelDeepSeek-R1-Distill-Qwen-1.5B, messages[ {role: user, content: 写一个Python函数读取CSV文件计算每列的平均值并找出平均值最大的列。} ], temperature0.6, max_tokens1024 ) print(\n问题写一个Python函数读取CSV文件计算每列的平均值并找出平均值最大的列。) print(f模型生成的代码\n{response.choices[0].message.content})模型生成的代码import csv import statistics from typing import Dict, Tuple def analyze_csv_file(file_path: str) - Tuple[Dict[str, float], str]: 分析CSV文件计算每列的平均值并找出平均值最大的列 参数: file_path (str): CSV文件的路径 返回: Tuple[Dict[str, float], str]: - 第一个元素是字典键为列名值为该列的平均值 - 第二个元素是平均值最大的列名 column_data {} column_sums {} column_counts {} try: with open(file_path, r, encodingutf-8) as file: reader csv.DictReader(file) # 初始化数据结构 for column in reader.fieldnames: column_data[column] [] column_sums[column] 0 column_counts[column] 0 # 读取数据 for row in reader: for column in reader.fieldnames: value row[column] try: # 尝试转换为浮点数 num_value float(value) column_data[column].append(num_value) column_sums[column] num_value column_counts[column] 1 except ValueError: # 如果无法转换为数字跳过 continue # 计算平均值 column_averages {} for column in reader.fieldnames: if column_counts[column] 0: column_averages[column] column_sums[column] / column_counts[column] else: column_averages[column] 0.0 # 找出平均值最大的列 max_column max(column_averages.items(), keylambda x: x[1])[0] return column_averages, max_column except FileNotFoundError: print(f错误文件 {file_path} 未找到) return {}, except Exception as e: print(f读取文件时发生错误{e}) return {}, # 使用示例 if __name__ __main__: # 假设有一个名为data.csv的文件 averages, max_avg_column analyze_csv_file(data.csv) print(各列平均值) for column, avg in averages.items(): print(f{column}: {avg:.2f}) print(f\n平均值最大的列是{max_avg_column})这个代码的质量超出了我的预期它使用了类型提示typing有完善的错误处理考虑了非数值数据的处理提供了清晰的使用示例代码结构清晰逻辑完整对于一个1.5B参数的模型来说能生成这样质量的代码真的很难得。3.3 算法实现挑战让我们再挑战一个中等难度的算法问题# 测试算法实现 response client.chat.completions.create( modelDeepSeek-R1-Distill-Qwen-1.5B, messages[ {role: user, content: 实现一个函数判断一个字符串是否是有效的括号序列。有效的括号序列要求1. 左括号必须用相同类型的右括号闭合2. 左括号必须以正确的顺序闭合。} ], temperature0.6, max_tokens512 ) print(\n问题实现一个函数判断一个字符串是否是有效的括号序列。) print(f模型生成的代码\n{response.choices[0].message.content})模型生成的代码def is_valid_parentheses(s: str) - bool: 判断括号字符串是否有效 参数: s (str): 只包含字符 (, ), {, }, [ 和 ] 的字符串 返回: bool: 如果字符串是有效的括号序列则返回True否则返回False # 定义括号匹配关系 bracket_pairs { ): (, }: {, ]: [ } # 使用栈来跟踪未匹配的左括号 stack [] for char in s: if char in ({[: # 如果是左括号入栈 stack.append(char) elif char in )}]: # 如果是右括号 if not stack: # 栈为空说明没有对应的左括号 return False # 弹出栈顶元素检查是否匹配 top stack.pop() if top ! bracket_pairs[char]: return False # 最后栈应该为空所有括号都匹配完成 return len(stack) 0 # 测试用例 if __name__ __main__: test_cases [ ((), True), (()[]{}, True), ((], False), (([)], False), ({[]}, True), (, True), # 空字符串视为有效 (((())), True), (([{}]), True), (([)], False), ] for test_str, expected in test_cases: result is_valid_parentheses(test_str) status ✓ if result expected else ✗ print(f{status} {test_str} - {result} (期望: {expected}))这个实现非常标准且正确它使用了栈数据结构时间复杂度O(n)空间复杂度O(n)是最优解。测试用例也很全面覆盖了各种边界情况。4. 综合能力测试数学与代码结合4.1 数学问题编程求解现在让我们测试一个结合数学和编程的问题# 测试数学编程问题 response client.chat.completions.create( modelDeepSeek-R1-Distill-Qwen-1.5B, messages[ {role: user, content: 写一个Python程序找出1000以内所有能被3或5整除的数的和。} ], temperature0.6, max_tokens512 ) print(问题写一个Python程序找出1000以内所有能被3或5整除的数的和。) print(f模型生成的代码\n{response.choices[0].message.content})模型生成的代码def sum_multiples_of_3_or_5(limit: int 1000) - int: 计算在给定范围内所有能被3或5整除的数的和 参数: limit (int): 范围上限不包含 返回: int: 所有满足条件的数的和 total_sum 0 for num in range(limit): if num % 3 0 or num % 5 0: total_sum num return total_sum def sum_multiples_optimized(limit: int 1000) - int: 使用数学公式优化版本时间复杂度O(1) 思路 1. 计算能被3整除的数的和3 6 9 ... 2. 计算能被5整除的数的和5 10 15 ... 3. 减去能被15整除的数的和因为被重复计算了 def sum_of_multiples(n: int, limit: int) - int: 计算在limit以内所有n的倍数的和 p (limit - 1) // n # n的倍数的个数 return n * p * (p 1) // 2 sum_3 sum_of_multiples(3, limit) sum_5 sum_of_multiples(5, limit) sum_15 sum_of_multiples(15, limit) return sum_3 sum_5 - sum_15 if __name__ __main__: # 方法1直接循环 result1 sum_multiples_of_3_or_5(1000) print(f方法1直接循环结果{result1}) # 方法2数学公式优化 result2 sum_multiples_optimized(1000) print(f方法2数学优化结果{result2}) # 验证两个方法结果是否一致 print(f结果一致{result1 result2}) # 计算具体值 print(f\n1000以内所有能被3或5整除的数的和是{result1})这真是太棒了模型不仅给出了直接的循环解法还提供了一个使用数学公式的优化版本时间复杂度从O(n)降到了O(1)。这种思维深度对于1.5B参数的模型来说非常难得。4.2 实际应用场景数据分析任务让我们测试一个更接近实际工作的场景# 测试数据分析任务 response client.chat.completions.create( modelDeepSeek-R1-Distill-Qwen-1.5B, messages[ {role: user, content: 我需要分析一组销售数据。请写一个Python函数输入是一个包含日期和销售额的字典列表输出是1总销售额2平均日销售额3销售额最高的日期4按月份统计的销售额。请确保处理可能的异常情况。} ], temperature0.6, max_tokens1024 ) print(问题销售数据分析任务) print(f模型生成的代码\n{response.choices[0].message.content})模型生成的代码from typing import List, Dict, Any, Tuple from datetime import datetime from collections import defaultdict def analyze_sales_data(sales_data: List[Dict[str, Any]]) - Dict[str, Any]: 分析销售数据 参数: sales_data: 销售数据列表每个元素是包含date和amount的字典 date格式应为YYYY-MM-DDamount应为数值 返回: 包含分析结果的字典 if not sales_data: return { error: 销售数据为空, total_sales: 0, average_daily_sales: 0, top_sales_date: None, monthly_sales: {} } total_sales 0 daily_sales {} monthly_sales defaultdict(float) max_sales 0 top_date None try: for record in sales_data: # 检查必要字段 if date not in record or amount not in record: continue date_str record[date] amount record[amount] # 验证金额是否为数值 try: amount_float float(amount) except (ValueError, TypeError): continue # 验证日期格式 try: date_obj datetime.strptime(date_str, %Y-%m-%d) except ValueError: continue # 累加总销售额 total_sales amount_float # 记录每日销售额 daily_sales[date_str] daily_sales.get(date_str, 0) amount_float # 记录月度销售额 month_key date_obj.strftime(%Y-%m) monthly_sales[month_key] amount_float # 更新最高销售额日期 if daily_sales[date_str] max_sales: max_sales daily_sales[date_str] top_date date_str # 计算平均日销售额 num_days len(daily_sales) average_daily_sales total_sales / num_days if num_days 0 else 0 # 准备结果 result { total_sales: round(total_sales, 2), average_daily_sales: round(average_daily_sales, 2), top_sales_date: top_date, top_sales_amount: round(max_sales, 2) if max_sales 0 else 0, monthly_sales: dict(sorted(monthly_sales.items())), data_points_processed: len(sales_data), valid_data_points: len(daily_sales) } return result except Exception as e: return { error: f分析过程中发生错误: {str(e)}, total_sales: 0, average_daily_sales: 0, top_sales_date: None, monthly_sales: {} } # 测试数据 test_data [ {date: 2024-01-15, amount: 1500.50}, {date: 2024-01-15, amount: 800.25}, # 同一天另一笔销售 {date: 2024-01-16, amount: 1200.00}, {date: 2024-01-17, amount: 950.75}, {date: 2024-02-01, amount: 1800.00}, {date: 2024-02-01, amount: 750.50}, {date: 2024-02-02, amount: 1300.25}, {date: invalid-date, amount: 500}, # 无效日期 {date: 2024-02-03, amount: not-a-number}, # 无效金额 ] if __name__ __main__: result analyze_sales_data(test_data) print(销售数据分析结果) print(f总销售额: ${result[total_sales]}) print(f平均日销售额: ${result[average_daily_sales]}) print(f销售额最高的日期: {result[top_sales_date]} (${result[top_sales_amount]})) print(f处理的数据点: {result[data_points_processed]}个) print(f有效数据点: {result[valid_data_points]}个) print(\n月度销售额统计) for month, sales in result[monthly_sales].items(): print(f{month}: ${sales:.2f})这个代码的质量非常高它有完善的类型提示考虑了各种异常情况空数据、无效日期、无效金额使用了defaultdict简化月度统计提供了清晰的测试数据输出格式友好包含四舍五入甚至统计了有效数据点的数量这样的代码质量完全可以直接用在生产环境中。5. 总结小身材大能量经过这一系列的测试DeepSeek-R1-Distill-Qwen-1.5B给我留下了深刻的印象。这个只有1.5B参数的“小模型”在数学推理和代码生成方面的表现完全超出了我对这个规模模型的预期。5.1 核心优势总结数学能力方面能正确解答高中级别的数学问题能按照要求展示完整的推理步骤能正确使用指定的答案格式如\boxed{}在代数、几何、基础计算等方面表现稳定代码生成方面生成的Python代码质量高结构清晰有良好的错误处理和边界情况考虑能理解复杂需求并给出合理实现代码注释和文档字符串完整甚至能提供优化版本如数学公式优化综合表现响应速度快在普通GPU上就能流畅运行显存占用低FP16精度下只需约3GB支持4096 tokens的上下文长度遵循指令能力强能按要求格式输出5.2 实际应用价值对于开发者来说这个模型有几个特别实用的场景本地开发助手在你的开发环境中部署一个本地AI助手随时帮你写代码片段、调试、解释算法教育工具帮助学生理解数学概念提供解题思路数据分析快速生成数据处理脚本进行初步的数据分析原型开发在资源有限的环境下快速验证想法最重要的是它不需要昂贵的硬件普通的游戏显卡甚至一些集成显卡就能运行。这意味着更多的开发者、学生、研究者都能用上这样的AI能力。5.3 使用建议根据我的测试经验给你几个使用建议温度设置保持在0.5-0.7之间0.6是个不错的选择能平衡创造性和稳定性提示工程对于数学问题明确要求“逐步推理”和指定答案格式代码生成尽量详细描述需求模型能理解复杂的编程任务硬件要求FP16精度下需要约3GB显存量化后可以更低这个模型证明了参数规模不是决定模型能力的唯一因素。通过精心的架构设计和知识蒸馏小模型也能在特定任务上达到令人满意的效果。如果你正在寻找一个既轻量又实用的AI助手DeepSeek-R1-Distill-Qwen-1.5B绝对值得一试。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

更多文章