ITPub博客

首页 > 数据库 > 数据库开发技术 > 致敬,马斯克开源大模型Grok,我也开源一个模型生成工具!

致敬,马斯克开源大模型Grok,我也开源一个模型生成工具!

原创 数据库开发技术 作者:皇子谈技术 时间:2024-03-20 17:25:15 0 删除 编辑

免费学习网站:itgogogo.cn

大家好,我叫皇子。

马斯克“怒喷”OpenAI,应该取名为“CloseAI”之后,6个月掏出3410亿参数自研大模型,还正式开源了,马斯克说到做到!

此次开源的Grok-1是一个3140亿参数的混合专家模型——就是说,这是当前开源模型中参数量最大的一个。

其代码和模型权重已上线GitHub,截止 3 月 20 日下午17时许,已揽获 38.2k 标星。

既然马斯克都开源了大模型,我也开源了一个模型生成工具gormstruct。说下,这两个开源项目的不同之处:

1、使用场景不同:Grok是 AI 大语言模型;gormstruct是模型生成工具:根据数据库表名生成 golang gorm 模型和 DAO 层数据操作方法。

2、发布时间不同:马斯克开源的时间,不如我早,我在 2 年前, 2022年1月11日就开源了,不过这个标星数少得可怜。

下面介绍下,模型生成工具gormstruct的功能、使用方式、注意点等,更多内容请查看 README 文档。

包含功能点

自动判断是否存在软删除字段,存在则默认过滤非软删除记录。

关于模型

  1. 生成模型 :生成模型,包含每个字段的注释,注释统一在右边//对齐,方便全局观察字段的定义情况。
  2. 生成表的所有字段映射:使用字段自定义查询时,统一使用映射的字段,在字段的维护上更方便;同时默认查询所有字段,不使用*,不使用反射查询所有字段。
  3. 为所有字段生成SetXxx()、GetXxx()方法:用户设置/获取模型下指定字段的值。

关于DAO层

生成操作表的基本方法,对应文件名:base_DAO.go 

对应的表 DAO 层:xxx_dao.go 里面包含多种操作表数据的简单、易用、易维护方法。

快速使用

使用步骤

  1. 克隆项目到本地(https://github.com/leeprince/gormstruct)
  2. 重命名./config/config.bak.yaml为./config/config.yaml
  3. 修改dbinfo为自己的数据库链接配置
# 数据库设置
dbinfo:
host: 127.0.0.1
port: 3306
username: root
password: root
database: ticket # 该参数可通过命令行设置,命令行设置会覆盖该值。如果未设置则必须在命令中指定
type: 0 # 数据库类型:0:mysql
  1. 运行指令go run main.go -t={数据库下的表名}会在./out/model下生成3个文件
  • 模型:表名xxx.go
  • DAO层:表名_DAO.go
  • 基础DAO层:base.go(只有在第一次该工具时生成)

帮助命令

go run main.go --help

go run main.go gen --help

表名参数(-t)必填!

go run main.go -t=users [-p=model] [-s=Users]
go run main.go --table=users [--packageName=model] [--structName=Users]
-d, --database string 指定连接的数据库名【在yaml配置时可选,命令设置优先级大于配置】
-t, --table string 指定的表名【必填】
-h, --help help for gen
-p, --packageName string 生成的包名【可选,默认:model】
-s, --structName string 表名对应结构体【可选,默认:表名的大驼峰命名】

注意点

❝

零值:0、''、false

更新 Updates

当通过表模型结构体更新数据时,

  • GORM Updates() 方法只会更新非零字段。该工具底层就是用了这个方法,如果您想确保指定字段被更新,你应该使用 Select 更新选定字段、或者允许为零值的字段设置为指针、或使用 map 来完成更新操作。

⚠️注意:工具会根据是否允许为空,判断允许为空则设置为指针,反之不设置;如果表设计是不允许为空,但是有存在零值,只能手动改为指针

保存或者更新 Save

gorm 原生的 Save 是一个组合函数。如果保存值不包含主键,它将执行 Create,否则它将执行 Update (包含所有字段)。

查询

当使用表模型结构体作为条件查询时,GORM 只会查询非零值字段。这意味着如果您的字段值为 0、''、false 或其他零值,该字段不会被用于构建查询条件。但通过该工具生成的DAO层WithXxx和WithXxxs作为条件则可以忽略这个,因为底层是用 map

创建时间/创建时间

CreatedAt/UpdatedAt:

  • 创建数据时:CreatedAt/UpdatedAt:设置非零值时覆盖,为零值时会自动生成
  • 更新数据时:CreatedAt 不变;UpdatedAt 自动更新为当前时间戳

最近更新部分

  • [x] 当时间格式未使用整型时间戳,而是 timestamp/datatiem 时:结构体字段类型使用 *time.Time,而不是 time.Time, 避免初始化变量或者数据json转化后使用time.Time的默认值:0001-01-01 00:00:00 +0000 插入数据,导致查询删除字段是否为空错误。

    另外一种方案是使用:gorm.DeletedAt 字段类型---本库未使用。

  • [x] UpdateOrCreate 方法中,Fixed #1:有些表的主键不是以id命名。这是针对下面的网友提的Issue 而解决的,在此感谢反馈,也欢迎大家参与。


最后贴一下马斯克和我的开源项目仓库地址。

马斯克的:https://github.com/xai-org/grok-1
我的:https://github.com/leeprince/gormstruct

推荐阅读

百度,别淘汰程序员,没人用 ping 了

AI 时代,一个程序员的觉悟

挺看好的一位阿里妹子,很上进

错过阿里,冲腾讯吧


点个在看或赞再走呀~这是我持续分享的动力

原文作者:皇子谈技术;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2023-12-21

  • 博文量
    113
  • 访问量
    56528