Post

关于ollama模型笔记本部署评测

最近deepseek挺火的,但是官网动不动就无响应,还是有点恼火。于是我计划在本地部署一个,来测试下笔记本机器和显卡能部署多大的模型,以及模型之间的细微区别。

笔记本 i510400+gtx1060 4G+32G内存

问题. 麻烦帮我写一个建表语句,表名称叫 用户表,字段有年龄,性别,生日,住址,手机号,id, 帐号,密码,余额。使用英文建表,建表语句符合mysql语法,多个单词之间使用驼峰

1.5b回答如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
age, gender, birthday, address,
phone_number, id, account,
password, balance
);```

这个语句中:
- `users` 是表名;
- 每个字段用逗号分隔,没有空格;
- 表结构符合驼峰格式。

如果你希望按字母顺序排列字段,可以这样写:

```create table users (
age, gender, birthday, address,
phone_number, id, account,
password, balance
);```

但根据你提供的要求,使用驼峰格式的话,上面的版本更为准确。

1.5b的回答看起来是完全用不了。哈哈

7b回答:

1
2
3
4
5
6
7
8
9
10
11
12
CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    age INT,
    gender VARCHAR(50),
    birthday DATE,
    address VARCHAR(255),
    phone VARCHAR(30),
    account VARCHAR(255),
    password VARCHAR(100) DEFAULT '',  -- Use InnoDB engine for secure password handling
    balance DECIMAL(10, 2)
);

8B回答:

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
-- MySQL 创建用户表 的 SQL 语句
/*
用户表用于存储用户信息,包括基本信息、联系方式和登录凭证等。
字段说明:
- id: 用户ID(主键)
- username: 用户名
- password: 密码
- age: 年龄
- gender: 性别(male或female)
- birthday: 生日(日期格式)
- address: 住址
- phone: 电话号码
- balance: 余额
*/

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(255) COMMENT '用户名',
    password VARCHAR(255) COMMENT '密码',
    age INT COMMENT '年龄',
    gender ENUM('male', 'female') COMMENT '性别(male或female)',
    birthday DATE COMMENT '生日(日期格式)',
    address VARCHAR(500) COMMENT '住址',
    phone VARCHAR(20) COMMENT '电话号码',
    balance DECIMAL(10, 2) DEFAULT 0 COMMENT '余额'
);
*/

这里还是能够看出有些区别的,8B回答加上了注释,而7B并没有。

问题. 请把下面建表语句转为java实体类

建表语句如下:

1
2
3
4
5
6
7
8
9
10
CREATE TABLE `members` (
  `name` varchar(255) DEFAULT NULL,
  `phone` varchar(255) DEFAULT NULL,
  `birthday` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
  `create_time` datetime DEFAULT NULL,
  `birthyear` int DEFAULT NULL,
  `year` varchar(4) DEFAULT NULL,
  `id` int NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=39 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

1.5b回答转的代码:

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
public class Members {

    private String name;
    
    private char[] phone;
    
    private java.Date birthday;
    
    private java.sql.Timestamp createTime;
    
    private int birthyear;
    
    private java.util.Date year;
    
    private int id;

    public void setName(String name) {
        this.name = name;
    }

    public void setPhone(char[] phone) {
        this.phone = phone;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public void setCreateTime(jdbc.sql.Timestamp createTime) {
        this.createTime = createTime;
    }

    public int getBirthyear() {
        return birthyear;
    }

    public void setYear(Date year) {
        this.year = year;
    }

    public int getId() {
        return id;
    }
}

这里有个小问题,生成了get/set,而且把phone 搞成数组类型了。但是下划线他使用驼峰了。

7B生成的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class Members {
    private String name;
    private String phone;
    private String birthday;
    private LocalDateTime create_time;
    private int birthyear;
    private String year;
    private int id;

    public Members(String name, String phone, String birthday, LocalDateTime create_time, int birthyear, String year) {
        this.name = name == null ? null : name;
        this.phone = phone == null ? null : phone;
        this.birthday = birthday == null ? null : birthday;
        this.create_time = create_time != null ? create_time : null;
        this.birthyear = birthyear != null ? birthyear : 0; // 假设默认值为0,或者保持null
        this.year = year == null ? null : year;
        this.id = id != null ? id : Integer.MIN_VALUE; // 根据实际情况设置默认值或不赋值
    }
}

这里create_time并没有使用驼峰

8B生成的代码:

1
2
3
4
5
6
7
8
9
10
public class Members {
    private Long id;
    private String name;
    private String phone;
    private String birthday;
    private LocalDateTime create_time;
    private Integer birthyear;
    private String year;
}

这里create_time并没有使用驼峰

7B,8B生成的依然慢,回答一个问题几乎要一分钟,不过还是能回答出来,不同的是3个思考过程。1.5b思考过程大概100字,7B200字左右,8B得有1000字了,思考的真复杂,思考过程如下:

1.5b

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<think>
嗯,用户希望把给定的SQL转为Java实体类,而且不要生成get/set方法。首先,我需要理解用户的需求是什么。他们可能是在进行数据模型转换,或者在开发一个数据库相关的项目。

看到用户的输入是创建了一个Members表的SQL语句,里面有很多字段和数据类型的定义。我的任务是从这个SQL中提取出Java实体类的数据结构,并且不写任何 getter或setter方法。

接下来,我应该分析每个字段的具体用途,确定它们作为实体类中的哪个属性。例如,name是字符串类型,可能作为String字段存储;phone也是字符串,可以考虑为Character数组或者String类型;birthday是一个日期格式的字符串,需要转化为日期对象;create_time和birthyear都是时间戳,可能作为Timestamp类型存储。

对于id,因为它是主键,必须被定义为Integer类型,并且不能为空。这将确保每个用户只有一个id属性。

然后,我需要把这些字段整理成一个Java实体类结构,确保所有字段都正确对应到数据库表中的列名。同时,注意数据库的配置是否支持这些数据类型的存储和访问,比如是否有适当的索引或索引策略。

最后,检查整个转换过程是否符合用户的要求,特别是不要添加get或set方法,并且所有字段都被准确地映射到了实体类中。
</think>

7B

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<think>
嗯,用户让我把一个SQL表结构转成Java实体类,而且不需要生成get/set方法。好的,我得先仔细看看这个SQL表的定义。

首先,表名是members,然后看各个字段。name是varchar(255),默认null,所以Java里应该是String类型,长度不超过255。phone也是varchar(255),同样处理。birthday的话,是varchar(4)而且用的是utf8mb4字符集,还有特定的排序策略。这可能意味着在存储的时候需要特别处理,或者直接影响构造方法中的参数顺序。

create_time是datetime类型,默认null,所以应该是日期时间对象。birthyear是整数,default null没问题。year是varchar(4),这也需要注意数据格式和长度。id是int,并且not null,auto increment。主键是id。引擎是InnoDB,排序策略是utf8mb4_0900_ai_ci。

接下来,我需要把这些字段转化为Java的属性。name和phone都是字符串类型,直接用String即可。birthday的话,因为用了utf8mb4和特定的排序策略,可能在构造函数中需要注意参数顺序是否正确,或者是否需要提供自定义的排序处理。这里应该直接传入一个String,长度为4。

create_time是datetime,所以Java中应该是LocalDateTime对象。birthyear是int类型,没问题。year作为varchar(4),在构造函数里需要传入字符串,并且长度不能超过4字符。id则是普通的int类型。

记得不要生成get和set方法,只需要定义属性即可。主键是id,但不需要显式处理,因为默认自动生成。表结构里的 CHARSET=utf8mb4,所以可能需要在构造函数中设置编码,或者让字符串自动处理。另外,排序策略utf8mb4_0900_ai_ci可能会对字符串的比较有影响,特别是在排序时,这可能会影响对象的顺序。

考虑到这些因素,Java类应该包含所有这些字段,并且在构造函数中提供相应的参数类型和长度限制。比如,year只能接受长度为4的字符串,否则会报错。此外,在构造函数中需要正确排列参数的顺序,特别是birthday这个字段因为用了特定字符集和排序策略。

最后,确保每个字段的默认值是null,这在Java中会自动处理,只要它们没有指定default value类型的话。
</think>

8B

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
<think>
嗯,我现在要把给定的SQL转换成Java实体类。首先,我需要理解这个表的结构和各个字段的含义。

看一下CREATE TABLE语句,表名是members。里面有几个字段:name、phone、birthday、create_time、birthyear、year和id。id是自增的主键,所以在Java中应该用Long来表示。其他字段都是varchar或者datetime类型。

首先,name对应的是用户的姓名,可能是一个String。phone是电话号码,也是String。birthday看起来像日期,但这里存储的是4个字符,可能是指年份,比如1990,所以birthyear是int,而birthday这个字段可能不是完整的日期而只是年份。但根据表结构,birthday字段的长度是4,这通常表示四位数字,也就是年份。所以在Java中,我可以把birthday设为String,或者用Integer来保存四位数的年份。这需要看具体需求,但通常日期处理会比较复杂,所以可能还是用String更合适。

create_time是datetime类型,这里应该对应于Java中的LocalDateTime对象。我需要注意数据库的时间格式是否与Java的Date相关,可能需要使用相应的类转换工具,比如JDBC里的PreparedStatement来设置参数。

birthyear和year看起来很像,都是一年份。但仔细看,birthyear是int,而year是varchar(4)。这可能是一个冗余字段,或者是不同的表示方式。比如,如果birthyear存储的是四位数的字符串,那么year字段可能只是同样的值。这可能需要进一步确认,但在这个例子中,我假设birthyear和year都是用来表示年份的不同类型,可能是为了方便查询或其他原因。

接下来,id是一个自增的整数,所以在Java中应该使用Long作为主键。因为Java中的int最大值是2^31-1,而数据库中的自增可能会超过这个范围,所以用Long更安全。

现在,我需要为每个字段创建一个对应的属性,并决定它们的数据类型:

- id:Long
- name:String
- phone:String
- birthday:String(或Integer,根据实际情况)
- create_time:LocalDateTime
- birthyear:Integer 或者 String?这里可能需要看数据库设计,如果birthyear是int,那么用Integer更合适,但如果只是存储四位数字,可能直接作为String处理。
- year:String,因为它也是varchar(4)
- 可能还有create_time,对应LocalDateTime。

我还注意到,create_time的默认值是null,所以在Java中可以使用LocalDateTime对象,并允许null值。同样,其他字段如birthday、phone等都是可null的,所以实体类中的这些属性都应该有null的可能性。

接下来,考虑如何处理数据库连接的问题,但根据题目要求,不需要处理,这里只需将SQL转换为JavaBean模式,也就是POJO类。

现在,我可以开始编写Java代码了。每个字段对应一个private成员变量,然后用getters来访问。这部分不需要生成set方法,所以只需要提供get方法即可,或者只是字段本身。

所以,实体类会是:

public class Members {
private Long id;
private String name;
private String phone;
// 处理birthday是否为String或Integer,这里假设它是一个String
private String birthday;
private LocalDateTime create_time;
// birthyear可能需要处理,比如作为Integer或者String
private Integer birthyear;
private String year;
}

不过,根据数据库的birthyear是int,而year是varchar(4),这可能意味着两者都是用来表示年份。比如,如果用户的出生年份是1990,那么birthyear字段存储的是整数1990,而year字段存储的是"1990"作为字符串。这在某些情况下可能会有不同的处理方式,比如查询时使用year字段,或者根据需要进行转换。

另外,create_time的类型是datetime,对应LocalDateTime对象。所以在Java中,这个字段应该用LocalDateTime来表示,并且允许null。

总结一下,我需要把每个字段映射到对应的Java属性,并决定它们的数据类型。我可能还需要处理一些转换,比如将birthyear和year统一为某种格式,但根据题目要求,不需要生成get/set方法,所以这部分可以留空,或者让用户自己处理。

最后,我会编写一个简单的实体类,包含这些属性,并用正确的Java类型表示。
</think>

问题. 静夜思是谁写的?全文是什么?

首先 这个问题1.5b模型响应约3s, 思考过程如下:

1
2
3
4
好,用户问的是“静夜思是谁写的?全文是什么?”看起来他们可能在学习中文诗歌。首先,我需要确认“静夜思”是谁的诗。
记得以前学过,这句诗出自李商隐的《静夜思》。那么,我应该解释清楚作者和诗句的内容,让用户明白这是李商隐的作品。
接下来,要详细描述整首诗的内容,包括李白、杜甫、王维的作品,以及在《静夜思》中的具体描绘。这样用户不仅知道是谁写的,还能理解诗歌的意思。
最后,确保用词准确,结构清晰,让用户能够轻松掌握这句诗的精髓和背景故事

好吧,搞了半天静夜思是李商隐的了。汗!

然后7B模型,思考过程如下:

1
2
3
4
5
6
7
8
9
10
11
好的,用户问的是“静夜思是谁写的?全文是什么?”这个问题看起来是关于唐诗的。首先,我得确认用户的需求是否准确,可能他们对李白的《静夜思》比较熟悉,因为这首诗确实很经典。

接下来,我要分析用户的问题是否有遗漏。用户提到“静夜思”,而我知道这是李白的作品,但用户还问是谁写的,所以可能需要更详细的作者信息,不过李白已经是主要作者了,可能用户只是想确认。

然后,我应该考虑用户的使用场景。他们可能是学生、教师或者对唐诗感兴趣的人,想了解这首诗的内容和背景。也许用户正在学习古诗,或者准备教学内容,需要引用这首诗。

接下来,分析用户的真实需求。用户不仅想知道作者,还想看全文。所以,除了回答李白是作者外,还需要提供完整的诗句,并且可能解释诗的含义或来源。

我还要考虑是否需要额外的信息,比如创作背景、历史影响等,但可能用户只需要基本内容。因此,回应时要简洁明了,直接给出李白和诗的内容即可。

最后,检查信息的准确性,确保提到的诗人和诗篇正确无误,避免误导用户。

8B模型,思考过程如下

1
2
3
4
5
6
7
好的,我现在要回答用户关于《静夜思》的相关问题。首先,用户问“静夜思是谁写的?”以及全文是什么。根据我的知识库,这首诗是李白创作的,出自他的《诗经·零月》。我需要确认这点是否正确,没有记错。

接下来,我要提供全文,所以得回忆一下原句:“床前明月光,疑是地上霜。举头望明月,低头思故乡。”然后可能用户还想了解更多,比如赏析或者创作背景。

我应该先回答作者和全文,然后如果有需要,再扩展其他方面。但用户的问题中没有提到这些,所以或许保持简洁即可。不过,如果有后续问题,我可以再详细解释。

总结一下,结构是首先给出信息,然后提供额外的内容以满足可能的深层需求。确保回答清晰、准确,并且易于理解。

7B,8B模型回答准确的,但是回答过程中,思考大约花了1分钟

问题. 我明天要去打篮球,但是天气预报说有雷阵雨,我应该注意什么?

这个问题1.5b模型响应约3s, 思考过程如下:

1
2
3
4
5
6
7
8
9
10
11
好的,我现在要帮用户分析明天去打篮球遇到雷阵雨的情况。首先,用户提到天气预报有雷阵雨,所以他需要了解应该如何应对这一可能性。

我记得打篮球通常是晴朗的天气,所以雷阵雨可能会对他的训练产生影响。接下来,我应该考虑雷电的危害,比如电流、静电,以及这些可能带来的物理伤害,比如 electrocute(电击)和 electric shock(静电交响)。

然后,用户可能关心如何预防受伤。雷电是一种强电场,尤其是在雷雨天气中,所以预防措施很重要。比如穿合适的鞋袜、使用防静电衣料,或者在训练前做好准备活动。

不过,我也要考虑实际的打篮球环境是否有雷电的可能性。如果他打的是快节奏的比赛,可能需要更谨慎地选择场地或时间安排,避免在同一地点多次暴露于高电流环境中。

此外,我应该提醒用户注意身体安全,比如保持冷静,避免过度运动,或者在训练前使用护目镜等医疗物品。

最后,总结一下雷阵雨带来的潜在伤害,并提供预防建议,帮助用户更有效地应对这次可能的挑战。

然后7B模型,思考过程如下:

1
2
3
好,用户明天要去打篮球,但天气预报有雷阵雨,需要准备一些东西。

首先,提醒他带伞,防止淋湿和遮阳。然后建议穿运动鞋,避免滑倒。提醒他注意天气变化,可能要取消或推迟活动。还要提醒他随身携带雨具和备用衣物。最后,确保手机保持联系,以防紧急情况。

然后8B模型,思考过程如下:

1
2
3
4
5
6
7
8
9
嗯,用户明天要去打篮球,但最近的天气预报说有雷阵雨。这对他来说是个问题,因为打篮球需要在户外,而且天气变化可能会影响比赛。首先,他需要了解雷阵雨的具体情况,比如暴雨大作、雷电频发,或者只是有阵雨。

然后,我应该考虑以下几点:首先是安全性,如果真的下雨了,打篮球场地会变得泥泞,有滑倒的风险。其次是比赛可能会被取消或延迟,这影响到了他的计划和准备。接下来,他可能需要带一些雨具,比如雨衣、雨靴等,以防万一。

还有,如果他决定冒雨去打篮球,应该注意一些预防措施,比如避免在低洼地带活动,远离建筑物避免被雷击中,同时关注天气变化。另外,他还可以与其他队友或组织者沟通,看看是否有调整比赛安排的可能。

此外,用户可能担心比赛时间和场地的变动,这时候他需要保持联系,及时获取最新信息。如果真的无法打篮球,他也许会转而寻找其他娱乐方式,比如在家里观看电影或电视剧,或者进行室内锻炼。

总的来说,用户需要综合考虑安全与兴趣之间的平衡,做出最适合自己的决定。

这里总结来看,几个回答都还是没有太大问题的,都比较说的过去,但是7B,8B模型回答看起来更偏向人性场景一点。这里回答的时候也是78b的模型偏慢,不过不知道为什么,思考过程比第一个问题快多了,花了30S左右就开始回答了。

总结

看起来模型参数越大,确实提升越高。主要还是体现在一些问题细节的方面。 1.5b如果不问一些具体的问题,基本上还是能用的。 比如稍微训练下充当家庭助手,开灯关灯什么的没问题。

最重要的是这些模型在我4G显存的显卡上都能运行。

This post is licensed under CC BY 4.0 by the author.