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,进行生成代码和代码补全。期待它能不断优化,提供更优质的服务。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Linux高性能服务器编程】——高性能服务器框架

hello &#xff01;大家好呀&#xff01; 欢迎大家来到我的Linux高性能服务器编程系列之高性能服务器框架介绍&#xff0c;在这篇文章中&#xff0c;你将会学习到高效的创建自己的高性能服务器&#xff0c;并且我会给出源码进行剖析&#xff0c;以及手绘UML图来帮助大家来理解&…

解锁EDM设计秘籍:关键要素一览,邮件如何设计?

一个成功的EDM邮件需要包含多个关键元素&#xff0c;从内容、设计到呼唤行动&#xff0c;每个环节都至关重要。今天&#xff0c;我们就来探讨EDM邮件中应包含的关键元素&#xff1f;以及如何设计邮件&#xff1f; 一、EDM必备关键要素 1、吸引眼球的主题行 主题行应该简短明了…

NC398 腐烂的苹果

腐烂的苹果 一个腐烂的苹果每分钟可以向上下左右四个方向扩展&#xff0c;扩展之后&#xff0c;又会有新的腐烂的苹果&#xff0c;一直去腐蚀好的苹果&#xff0c;求多少分钟后&#xff0c;网格中全是烂苹果。 第一次做这道题的时候&#xff0c;想到这道题考察的其实是多源BFS…

C#版Facefusion:让你的脸与世界融为一体!-04 人脸替换

C#版Facefusion&#xff1a;让你的脸与世界融为一体&#xff01;-04 人脸替换 目录 说明 效果 模型信息 项目 代码 下载 说明 C#版Facefusion一共有如下5个步骤&#xff1a; 1、使用yoloface_8n.onnx进行人脸检测 2、使用2dfan4.onnx获取人脸关键点 3、使用arcface_w60…

网络基础之-IP地址

文章目录 1. IP地址&#xff1a;网络和主机1.1 A类IP地址1.2 B类IP地址1.3 C类IP地址1.4 D类和E类IP地址 2.几个特殊的IP地址2.1 私有地址2.2网关 1. IP地址&#xff1a;网络和主机 IP地址是用于在计算机网络中唯一标识设备的一组数字。它由32位&#xff08;IPv4&#xff09;或…

05_Flutter屏幕适配

05_Flutter屏幕适配 一.屏幕适配方案 通过指定基准屏宽度&#xff0c;进行适配&#xff0c;基准屏宽度取决于设计图的基准宽度&#xff0c;以iphone 14 pro max为例&#xff0c; devicePixelRatio 物理宽度 / 逻辑宽度(基准宽度) iphone 14 pro max的物理尺寸宽度为1290&…

创新入门|解锁您的潜在市场:探秘付费点击广告(PPC)的秘密武器

在我们的营销领域&#xff0c;按点击付费 &#xff08;PPC&#xff09; 广告是增加流量、提高知名度并最终将点击转化为客户的基石策略。这种有针对性的广告模式&#xff0c;即企业只在点击广告时付费&#xff0c;彻底改变了公司投资在线推广的方式。尽管它看起来很简单&#x…

手写Promise实现

手写Promise实现 一、前言二、代码三、测试四、测试结果 一、前言 阅读参考资料&#xff0c;本文整理出使用 构造函数 手撕出 Promise 的方法&#xff0c;在整理过程中不断添加注解以示思路。有错请指出哟&#xff0c;一起进步&#xff01;&#xff01;&#xff01;class 实现 …

2024接口自动化测试入门基础知识【建议收藏】

接口自动化测试是指通过编写测试脚本和使用相关工具&#xff0c;对软件系统的接口进行自动化测试的过程。 今天本文从4个方面来介绍接口自动化测试入门基础知识 一、接口自动化测试是什么&#xff1f; 二、接口自动化测试流程&#xff1f; 三、接口自动化测试核心知识点有那些…

开始Java之旅

1.Java语言 java是一门优秀的程序设计语言&#xff0c;并且是一种半编译型&#xff0c;半解释型语言。 Java 语言源于 1991 年 4 月&#xff0c;Sun 公司 James Gosling博士 领导的绿色计划(Green Project) 开始启动&#xff0c;此计划最初的目标是开发一种能够在各种消费性电…

Threejs绘制传送带

接下来会做一个MES场景下的数字孪生&#xff0c;所以开始做车间相关的模型&#xff0c;不过还是尽量少用建模&#xff0c;纯代码实现&#xff0c;因为一方面可以动态使用&#xff0c;可以调节长度和宽度等&#xff0c; 下面这节就做一个简单的传送带&#xff0c;这是所有车间都…

学之思考试系统环境启动QA

学之思考试系统环境启动Q&A 目录 学之思考试系统环境启动Q&A后台代码启动失败:前台代码启动失败常见解决方式参考资料后台代码启动失败: 后端代码启动不成功,不能够自动导入maven,配置依赖; 使用idea打开到:\xzs-master\xzs-mysql-master\source\xzs这个路径下;…

函数的创建和调用及删除

Oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645 函数和存储过程非常类似&#xff0c;也是可以存储在 Oracle 数据库中的 PL/SQL代码块&#xff0c;但是有返回值。 可以把经常使用的功能定义为一个函数&#xff0c;就像系统…

使用Flask部署ppocr模型_3

PaddleOCR环境搭建、模型训练、推理、部署全流程&#xff08;Ubuntu系统&#xff09;_1_paddle 多进程推理-CSDN博客 PP-Structure 文档分析-CSDN博客 Pycharm的Terminal进入创建好的虚拟环境 有时候Pycharm的terminal中显示的是硬盘中的项目路径&#xff0c;但没有进入创建好…

Python 开发实现登陆和注册模块

Python 开发实现登陆和注册模块 一、案例介绍 本例设计一个用户登录和注册模块&#xff0c;使用Tkinter框架构建界面&#xff0c;主要用到画布、文本框、按钮等组件。涉及知识点&#xff1a;Python Tkinter界面编程、pickle数据存储。本例实现了基本的用户登录和注册互动界面…

ic基础|时序篇:握手协议valid和ready的时序优化

大家好&#xff0c;我是数字小熊饼干&#xff0c;一个练习时长两年半的ic打工人。我在两年前通过自学跨行社招加入了IC行业。现在我打算将这两年的工作经验和当初面试时最常问的一些问题进行总结&#xff0c;并通过汇总成文章的形式进行输出&#xff0c;相信无论你是在职的还是…

网络安全的守护者:防火墙的五个主要功能解析

防火墙是一种网络安全设备&#xff0c;用于保护计算机网络免受未经授权的访问、攻击和恶意软件的侵害。它通过监控、过滤和控制网络流量&#xff0c;实施安全策略&#xff0c;防止不安全的数据包进入或离开受保护的网络。 防火墙的五个主要功能&#xff1a; 1. 访问控制&#…

Web入门-Tomecat

黑马程序员JavaWeb开发教程 文章目录 一、简介1、Web服务器2、Tomcat 二、基本使用三、入门程序解析 一、简介 1、Web服务器 对HTTP协议操作进行封装&#xff0c;简化web程序开发部署Web项目&#xff0c;对外提供网上信息浏览服务 2、Tomcat 概念&#xff1a;Tomcat是Apach…

(回溯)记忆化搜索和dp

动态规划的核心就是 状态的定义和状态的转移 灵神 的 回溯改递归思路 首先很多动态规划问题都可以采用 回溯 的思想 回溯主要思想就是把 一个大问题分解成小问题 比如 采用子集类回溯问题中的核心思想-> 选或不选 或者 选哪个 记忆化搜索之后 我们可以发现 每个新节点依…

深度图转点云

一、理论分析 二、其他分析 1、相机内参 相机内参主要是四个参数fx,fy,u0,v0。要明白相机内参就是相机内部参数&#xff0c;是参考像素坐标系而言&#xff0c;有了这个前提&#xff0c;这四个参数也就很好理解了。 &#xff08;1&#xff09;首先&#xff0c;。其中F是相机的…