CodeGemma初探

什么是 CodeGemma

CodeGemma是一系列强大而轻量级的模型的集合,可以执行各种编码任务,包括填充中间代码补全、代码生成、自然语言理解、数学推理和指令跟随。

版本:

  • instruct:7B, 这个版本专门针对自然语言到代码聊天和指令跟随进行了调整。它的目标是能够理解自然语言输入,并根据指令生成相应的代码。

  • code:7B,这个版本是一个预训练的模型,专门用于代码补全和根据代码前缀和/或后缀生成代码。它的目标是提供更好的代码自动补全和生成功能。

  • 2b:2B, 这个版本是一个最新的预训练模型,提供了最多两倍更快的代码自动补全功能。它的目标是提高代码补全的速度和效率。

优势:

  • 智能代码补全和生成:无论你是在本地工作还是使用 Google Cloud 资源,都可以完成代码行、函数,甚至生成整个代码块。这意味着 CodeGemma 可以帮助你更快地编写代码,提高生产效率。

  • 增强的准确性:CodeGemma 模型是基于主要来源于网络文档、数学和代码的 5000 亿令牌的数据进行训练的。因此,生成的代码不仅在语法上更加正确,而且在语义上更有意义,从而减少错误和调试时间。

  • 多语言能力:CodeGemma 支持多种编程语言,包括 Python、JavaScript、Java、Kotlin、C++、C#、Rust、Go 等,这使得它适用于不同的项目和团队。

  • 简化的工作流程:将 CodeGemma 模型集成到你的开发环境中,可以帮助你减少样板代码的编写,更快地专注于重要的和不同的代码编写,从而提高工作效率。

1. 安装

测试机环境:MacBook Air M1 16G
在使用CodeGemma之前,我们需要先安装Ollama,Ollama可以运行本地大语言模型,例如:Llama3、Gemma、qwen:7B等。

1.1 安装Ollama

Ollama官网:https://ollama.com/
进入官网后根据自己的操作系统,一顿无脑下载安装即可

请添加图片描述

1.2 安装

安装完成之后进入命令行工具,输入安装CodeGemma的命令,这里为了体验完整的功能,并且能与它进行自然语言交互,安装默认的 instruct 版本

ollama run codegemma

当看到如下界面则表示安装已完成
请添加图片描述

2. 使用

这里我们直接在命令行测试

2.1 PHP基础路由

CodeGemma支持多种编程语言,这里我们以PHP为例,尝试生成一个简单的路由

请添加图片描述
结果还是不错,结构很清晰,代码逻辑也是正确的,并且附有代码说明和注释。对中文的理解和输出也是到位的。

同样的提示词,我们再让ChatGPT 3.5 来帮我们生成一个路由,对比下:
请添加图片描述
可以看出CodeGemma使用类的方式,而ChatGPT使用的是纯函数的方式。都完成得不错。

2.2 Vue3基础组件

提示词:请使用vue3生成一个带prop emit的组件

CodeGemma生成结果:

以下是一个使用 Vue3 生成带 prop emit 的组件的示例:<template><div><input v-model="inputValue" @input="emitInput"><button @click="emitButton">按钮</button></div>
</template><script>
export default {props: {initialValue: String,},data() {return {inputValue: this.initialValue,};},methods: {emitInput() {this.$emit('input', this.inputValue);},emitButton() {this.$emit('button-click', this.inputValue);},},
};
</script>

说明:

  • 该组件有两个 prop:initialValue 用于初始化输入框的值,emitInput 用于触发自定义事件。
  • 组件使用 v-model 指令绑定输入框的值,并使用 @input 事件监听器监听输入框的变化。
  • 当输入框的值发生变化时,emitInput 方法会触发自定义事件 input,并将新的值作为参数传递。
  • 组件使用 @click 事件监听器监听按钮的点击事件,并使用 emitButton 方法触发自定义事件 button-click,并将当前输入框的值作为参数传递。

使用该组件:

<template><my-component v-model:input-value="message" @input="handleInput" 
@button-click="handleButtonClick"></my-component>
</template><script>
import MyComponent from './MyComponent.vue';export default {components: {MyComponent,},data() {return {message: '',};},methods: {handleInput(value) {this.message = value;},handleButtonClick(value) {console.log('按钮被点击,当前输入框的值为:', value);},},
};
</script>

说明:

  • 该示例展示了如何使用 v-model 指令绑定输入框的值,并使用自定义事件监听器监听输入框的变化和按钮的点击事件。
  • handleInput 方法会更新 message 数据,并将新的值传递给 MyComponent 组件。
  • handleButtonClick 方法会打印出当前输入框的值。

希望这能够帮到您!

ChatGPT 3.5 生成结果:

<template><div><h1>{{ title }}</h1><button @click="increment">{{ buttonText }}</button></div>
</template><script>
import { defineComponent } from 'vue';export default defineComponent({props: {title: {type: String,required: true},initialCount: {type: Number,default: 0},buttonText: {type: String,default: 'Click me'}},emits: ['incremented'],data() {return {count: this.initialCount};},methods: {increment() {this.count++;this.$emit('incremented', this.count);}}
});
</script>

在这个示例中,我们定义了一个名为 Counter 的组件。它接受三个 props:title、initialCount 和 buttonText。title 是一个必需的字符串,initialCount 是一个可选的数字,默认值为 0,buttonText 是一个可选的字符串,默认值为 “Click me”。

在模板中,我们展示了一个标题和一个按钮,点击按钮会触发 increment 方法。在 increment 方法中,我们递增了 count 属性,并使用 $emit 方法触发了名为 incremented 的自定义事件,并传递了 count 值。

你可以在父组件中使用该组件,并监听 incremented 事件来获取递增后的值。例如:

<template><div><counter title="My Counter" :initial-count="5" @incremented="handleIncrement"></counter></div>
</template><script>
import { defineComponent } from 'vue';export default defineComponent({methods: {handleIncrement(value) {console.log('Counter incremented:', value);}}
});
</script>

在父组件中,我们使用 组件,并监听了 incremented 事件。当该事件触发时,我们调用了 handleIncrement 方法,并打印出递增后的值。

小结

从这两个示例可以看出,CodeGemma生成的代码还是Vue2的风格,而ChatGPT生成的代码是Vue3的,所以对于Vue3的组件,ChatGPT生成的代码可能更适合。

3. 性能

3.1 响应时间

尝试多次测试,CodeGemma平均响应时间在5S左右

3.2 资源占用

CPU运行前:
请添加图片描述
CPU运行后:
请添加图片描述
内存运行前:
请添加图片描述
内存运行后:
请添加图片描述

4. 总结

总体来说,CodeGemma还是比较好用,支持多语言准确性较高,而且它还包括一个code版本,可以快速接入IDE,进行生成代码和代码补全。期待它能不断优化,提供更优质的服务。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/1718.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

day83 AJAX

1什么是AJAX AJAX语法 AJAX Asynchronous JavaScript and XML 异步js和XML 实现页面某一部份更新&#xff0c;无需服务器转发或重定向 1 $.ajax() 语法: $.ajax( { "url" : "url&qu…

数据库主从复制

一、主从复制概述 1、介绍&#xff1a; 主从复制是指将主数据库的 DDL 和 DML 操作写入到二进制日志中&#xff0c;将二进制日志传送到从库服务器&#xff0c;然后在从库上对这些日志重新执行&#xff08;重做&#xff09;&#xff0c;从而使得从库和主库的数据保持同步。 M…

百面算法工程师 | 分类网络总结

欢迎大家订阅我的专栏一起学习共同进步&#xff0c;主要针对25届应届毕业生 祝大家早日拿到offer&#xff01; lets go http://t.csdnimg.cn/dfcH3 目录 4. 经典分类网络与发展 4.1 AlexNet 4.2 VGGNet 4.3 GoogLeNet Inception 4.4 ResNet 4.5 DenseNet 4.6 MobileN…

C#中的浅拷贝(Shallow Copy)和深拷贝(Deep Copy),深拷贝的集中实现方式,浅拷贝深拷贝的案例

C#中的浅拷贝&#xff08;Shallow Copy&#xff09;和深拷贝&#xff08;Deep Copy&#xff09; 拷贝就是创建一个对象&#xff0c;这个对象有着原始对象数据&#xff08;属性和字段&#xff09;的一份精确拷贝&#xff08;只针对Object和Array这样的引用数据类型&#xff09;…

截断堆积柱状图

本教程原文链接&#xff1a;截断堆积柱状图绘制教程 欢迎大家转载&#xff01;&#xff01;&#xff01;&#xff01; 本期教程 写在前面 堆积柱状图是柱状图的常见类型之一&#xff0c;也是平时使用概率较高的图形之一。我们前期发布了很多个柱状图的绘制教程&#xff0c;若你…

【工厂模式】简单工厂模式-简单例子

目录 一、简单介绍 二、未使用工厂模式之前 三、简单工厂模式 初始 优化 总结 一、简单介绍 工厂模式是一种软件设计模式&#xff0c;用于创建对象的方法。在工厂模式中&#xff0c;创建对象的逻辑被封装在一个单独的类中&#xff0c;该类负责根据特定条件或参数创建合适…

windows下使用命令uvicorn启动fastapi程序有乱码,方框形状奇怪字符

问题简述 执行命令uvicorn main:app --reload后出现的问题如图所示 这个问题非常容易解决&#xff01; 原因是windows控制台 默认未开启 ANSI颜色的支持 那么我们只需要开启就可以了 轻松解决 1 按下winR 打开运行 2 输入regedit 点击确定编辑注册表 3 新建值 值的名称为…

vue3组件封装系列-表单请求

我们在开发一些后台管理系统时&#xff0c;总是会写很多的列表查询页面&#xff0c;如果不封装组件&#xff0c;就会无限的复制粘贴&#xff0c;而且页面很冗余&#xff0c;正常情况下&#xff0c;我们都是要把组件进行二次封装&#xff0c;来达到我们想要效果。这里我分享一下…

《中学科技》是什么级别的刊物?如何投稿?

《中学科技》是什么级别的刊物&#xff1f;如何投稿&#xff1f; 《中学科技》创刊于1976年&#xff0c;由上海世纪出版&#xff08;集团&#xff09;有限公司主管&#xff0c;上海科技教育出版社有限公司主办的省级学术期刊&#xff0c;《中学科技》以传播科技知识、启迪智慧…

Centos安装软件失败There are no enabled repos.

这个错出现的原因可能是&#xff1a;没有先安装wget源&#xff0c;就把源给备份了 解决方案&#xff1a; 下载对应版本repo文件, 放入/etc/yum.repos.d/里&#xff0c;下载地址&#xff1a;CentOS镜像使用帮助 查看自己CentOS的版本&#xff0c;下载对应的repo文件&#xff…

spring boot中的标注@Component、@Service等

让我告诉你什么叫水货。 一、水货横行 一直以来&#xff0c;我对Spring Boot项目中的标注&#xff0c;像Component啦、Service啦、Configuration啦&#xff0c;甚至Autowired啦&#xff0c;等等&#xff0c;都似懂非懂。Autowired与Resource有什么区别也不清楚。 个中原因&a…

LearnOpenGL(三)之GLSL

一、GLSL 着色器是使用一种叫GLSL的类C语言写成的。 着色器的开头总是要声明版本&#xff0c;接着是输入和输出变量、uniform 和main函数。每个着色器的入口点都是main函数&#xff0c;在这个函数中 我们处理所有的输入变量&#xff0c;并将结果输出到输出变量中。 二、数据…

2-Embedding例子:简单NN网络、迁移学习例子(glove语料预训练)

一、简单例子&#xff1a;构造简单NN网络生成Embedding 1、pytorch例子 2、tensorflow例子 # 1导入模块 import tensorflow as tf from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Embedding import numpy as np# 2构建语料库 corpus[[…

Linux命令接着学习

which命令&#xff0c;找到各种命令程序所处在的位置 语法&#xff1a;which查找的命令 那么对于我们想查找其他类型文件所在的位置&#xff0c;我们可以用到find命令 find命令 选项为-name&#xff0c;表示按照文件名进行查找 find命令中通配符 find命令和前面rm命令一样&…

MT3023 歌词中找单词

1.暴力 10/12 #include <bits/stdc.h> using namespace std; int n; string a[10005]; int main() {cin >> n;for (int i 0; i < n; i)cin >> a[i];string ll;cin >> ll;for (int i 0; i < n; i){string u a[i];int num 0;int j 0;for (in…

解线性方程组——追赶法解三对角方程组 | 北太天元

一、问题描述 对于线性方程组 A x b , A ( b 1 c 1 a 2 b 2 c 2 ⋱ ⋱ ⋱ ⋱ ⋱ ⋱ a n − 1 b n − 1 c n − 1 a n b n ) , b ( f 1 f 2 ⋮ f n ) Axb,\quad A\begin{pmatrix}b_1&c_1&&&&\\a_2&b_2&c_2&&&\\&\ddots&\d…

CentOS 7安装、卸载MySQL数据库(一)

说明&#xff1a;本文介绍如何在CentOS 7操作系统下使用yum方式安装MySQL数据库&#xff0c;及卸载&#xff1b; 安装 Step1&#xff1a;卸载mariadb 敲下面的命令&#xff0c;查看系统mariadb软件包 rpm -qa|grep mariadb跳出mariadb软件包信息后&#xff0c;敲下面的命令…

mysql基础14——视图

视图 视图是一种虚拟表 可以把一段查询语句作为视图存储在数据库中 需要的时候把视图看作一个表&#xff0c;对里面的数据进行查询 视图并没有真正存储数据 避免了数据存储过程中可能产生的冗余 提高了存储的效率 子查询 嵌套在另一个查询中的查询 派生表 如果在查询中…

六、项目发布 -- 4. 电子书详情页API开发、电子书列表API开发

电子书详情页API的编写 同理如下app.get中路由、回调&#xff1b;回调中要连接数据库、接收前端传过来的值、到数据库中做查询&#xff0c;然后回调&#xff08;如果回调失败返回什么JSON&#xff0c;如果回调成功返回什么JSON&#xff09;&#xff1b;最后千万别忘记了关闭数…

怎样快速打造二级分销小程序

乔拓云是一个专门开发小程序模板的平台&#xff0c;致力于帮助商家快速上线自己的小程序。通过套用乔拓云提供的精美模板&#xff0c;商家无需具备专业的技术背景&#xff0c;也能轻松打造出功能齐全、美观大方的小程序。 在乔拓云的官网&#xff0c;商家可以免费注册账号并登录…