过年八天乐 - DeepSeek 1.5b、7b 和官网模型快速对比
在昨天的文章(过年八天乐 - 在 Mac 上运行 DeepSeek-R1 模型)中,我们通过 ollma 在本地运行了 deepseek-r1:1.5b 模型,今天让我们对比一下 1.5b、7b 和官网模型。
我们使用同一个编程问题,然后来对比三个模型的输出,从而做一个初步的评价。
原文地址:
1. 在 Mac 上运行 DeepSeek-R1 模型:
https://github.com/ForceInjection/AI-fundermentals/blob/main/llm/mac-deepseek-r1.md2. DeepSeek 1.5b、7b 和官网模型快速对比:
https://github.com/ForceInjection/AI-fundermentals/blob/main/llm/deepseek-r1-cmp.md
问题
写一段 Python 代码计算斐波那契数列,并输出前 50 个数
总结
| 模型 | 代码 | 响应时间 | 评价 |
| 1.5b | 参见正文 | 13s | 不满足要求 |
| 7b | 参见正文 | 28s | 满足要求,可读性最佳 |
| 官网 | 参见正文 | 82s | 满足要求,但引入了变量 |
单从这次任务来说,7b 的表现非常优异,可以持续观察其后续在不同任务中的表现,看是否可以胜任大部分场景。如果可以胜任,那等于就不用花钱了。
电脑配置
• 生成年份:
2021• 芯片:
Apple M1 Pro• 内存:
16 GB• macOS:
15.2 (24C101)
deepseek-r1:1.5b
def fibonacci(n):
a, b = 0, 1
for _ in range(n - 2):
a, b = b, a + b
return [a, b]fib_numbers = fibonacci(50)
for num in fib_numbers:
print(num)
运行结果
4807526976
7778742049代码解释:
1. 递推公式生成函数
fibonacci:
• 初始化两个变量
a和b,分别表示斐波那契数列的前两项。• 使用一个循环从第3项开始计算到第50项(因为需要输出前50个数)。
• 在每次迭代中更新
a为当前的b,将b更新为新的值a + b。• 最后返回生成的斐波那契数列表。
2. 循环输出结果:
• 使用上述函数生成前50个斐波那契数。
• 遍历生成的列表并逐行打印每个数字。
这个方法利用了指数计算公式,可以在O(log n)的时间复杂度内计算出斐波那契数,适用于较大的 n 值。
代码分析
我们可以看到运行结果只有两个输出,这显然是不符合预期的,这说明 1.5b 其实没有理解需求。
错误分析:
1. 代码只返回最后两个数 [a, b],而不是完整的前50个数;
2. 定义了通用的函数,应该要考虑 n 为 0 或者 1 以及 n < 0 的情况;
3. 需要用一个数组来保存每一个序号的数。
基于上述的代码进行修改如下:
def fibonacci(n):
if n <= 0:
return []
fib_sequence = [0]
if n == 1:
return fib_sequence
a, b = 0, 1
for _ in range(n-1): # 已包含a=0,再生成n-1个数
fib_sequence.append(b)
a, b = b, a + b
return fib_sequencefib_numbers = fibonacci(50)
for num in fib_numbers:
print(num)
deepseek-r1:7b
# 初始化斐波那契数列
fib = [0, 1]# 计算前50个斐波那契数
for i in range(2, 50):
next_num = fib[i-1] + fib[i-2]
fib.append(next_num)
# 输出结果
print("\n前50个斐波那契数如下:")
for num in fib:
print(num)
输出结果:
前50个斐波那契数如下:
0
1
1
2
3
5
8
13
21
34
55
89
144
233
377
610
987
1597
2584
4181
6765
10946
17711
28657
46368
75025
121393
196418
317811
514229
832040
1346269
2178309
3524578
5702887
9227465
14930352
24157817
39088169
63245986
102334155
165580141
267914296
433494437
701408733
1134903170
1836311903
2971215073
4807526976
7778742049代码解释:
1. 初始化斐波那契数列:
fib = [0, 1]这里我们初始化了斐波那契数列的前两个数,分别是
0和1。2. 计算斐波那契数:
for i in range(2, 50):
next_num = fib[i-1] + fib[i-2]
fib.append(next_num)
• 使用一个循环从索引
2到49来计算斐波那契数。• 每次计算当前数为前两个数的和,并将其添加到列表中。
3. 输出结果:
for num in fib:
print(num)遍历列表并逐行打印每个数。
运行这段代码,会输出前 50 个斐波那契数。
官网 R1
以下是生成并输出前50个斐波那契数列的Python代码:
# 初始化前两个斐波那契数
a, b = 0, 1
n = 50# 生成前50个斐波那契数
fib_sequence = []
for _ in range(n):
fib_sequence.append(a)
a, b = b, a + b # 更新a和b的值
# 输出结果
for num in fib_sequence:
print(num)
代码说明:
1. 初始化变量:
a=0和b=1分别表示斐波那契数列的前两个数(从0开始)。2. 生成数列:
通过循环n=50次,每次将当前数a添加到列表,并通过a, b = b, a+b更新下一对数。这种方式避免了递归的低效问题,时间复杂度为 O(n)。3. 输出结果:
遍历生成的列表fib_sequence,逐行打印每个斐波那契数。
输出结果:
0
1
1
2
3
5
8
...
(中间省略)
...
7778742049该代码高效且简洁,直接通过迭代计算生成数列,能够正确输出前50个斐波那契数。