使用Llama3/Qwen2等开源大模型,部署团队私有化Code Copilot和使用教程
目前市面上有不少基于大模型的 Code Copilot 产品,部分产品对于个人开发者来说可免费使用,比如阿里的通义灵码、百度的文心快码等。这些免费的产品均通过 API 的方式提供服务,因此调用时均必须联网、同时需要把代码、提示词等内容作为 API 的入参在网络中传输和 API 服务器中进行处理,这里就涉及到一个比较重要的问题:隐私安全
针对小团队私有保密项目、创新团队孵化新产品,隐私安全问题就显得格外重要。因此,团队内部部署私有的Code Copilot方案就应运而出了:
今天老牛同学和大家一起来使用Qwen2-7构建个人或者团队专属的私有化 Code Copilot,除了代码生成之外,还可以是支持 AI 问答、代码解释、语言转换、生成单元测试用例等功能。不但可以提高我们的研发效率,还可以保护我们的代码隐私。
第一步:部署私有的大模型(Qwen2-7B)
前面老牛同学介绍了本地部署大模型和使用教程,包括Llama3-8B、Qwen2-7B、GLM4-9B、和Phi3等。大家可以看一下之前的部署教程,老牛同学今天使用Qwen2-7B作为我们 Copilot 底层大模型,对于本文Code Copilot的部署和使用,其他大模型都是一样的,看大家的喜好,没有特殊要求。
老牛同学这里简单列一下部署教程:
环境安装: 主要是Miniconda包管理安装,参见教程,注意只需要安装Miniconda和Python即可,其他非必须:大模型应用研发基础环境配置(Miniconda、Python、Jupyter Lab、Ollama 等):https://mp.weixin.qq.com/s/P_ufvz4MWVSqv_VM-rJp9w
Code Copilot底层大模型的部署方式,老牛同学验证主要以下 2 种,任选一种即可:
方式一 基于 Ollama 部署:
- 下载并安装Ollama本地模型管理软件(Windows/Mac/Linux 均支持):https://ollama.com/download
- 通过 Ollama 下载并启动大模型:
ollama run qwen2:7b
通过以上 2 步,即完成了大模型的部署。特别注意的是:GLM系列大模型还不支持 Ollama 管理!因此如果你希望用 GLM 系列(如:GLM4-9B)大模型,那么请看方式二。
方式二 通过 Python 部署:通用方法,所有模型都支持,以下是老牛同学验证过的部署教程
- Phi3:Phi-3 模型手机部署教程(微软发布的可与 GPT-3.5 媲美的小模型)
- Qwen2-7B:Qwen2 阿里最强开源大模型(Qwen2-7B)本地部署、API 调用和 WebUI 对话机器人
- Llama3-8B:玩转 AI,笔记本电脑安装属于自己的 Llama 3 8B 大模型和对话客户端
- GLM4-9B:本地部署 GLM-4-9B 清华智谱开源大模型方法和对话效果体验
第二步:IDE 安装和配置 Continue 插件
Code Copilot Continue是目前最受欢迎的插件之一,它插件的形式使用,目前支持VS Code和JetBrains 全家桶这 2 个主流 IDE 的扩展,可以在对应的插件市场中直接搜索Continue下载安装。Continue插件的一个最大优势在于它可以指定连接本地或者局域网内的大模型,所以对于信息安全高的项目,我们完全可以在本地或者局域网内部署大模型,然后用Continue插件连接使用,在提高开发生产效率同时保护了研发代码的隐私。目前Continue插件的社区活跃,GitHub 仓库已达12K星,插件版本更新频繁,越来越成熟。
因为老牛同学日常使用VS Code较多,因此下面的安装和配置,基于VS Code完成,JetBrains(如:PyCharm 等)的方式类同。
安装 Continue 插件: 插件管理器中,搜索Continue,点击安装,安装成功之后重启 IDE 即可。
Continue 插件状态: 安装成功并重启之后,可以看到VS Code的左侧多了一个Continue按钮。同时,右下角也多了一个Continue状态图标:√ Continue则代表Continue在 IDE 中生效了,🚫Continue则代表Continue在 IDE 未启用。
配置 Continue 插件: 点击左下角启用Continue插件,然后点击左侧的Continue按钮,可以看到一个对话界面,点击左下角齿轮形状的配置图标,则打开了一个 JSON 格式的配置文件,在这里可以配置Continue底层使用的大模型信息:
{"models": [{"title": "Qwen2:7B","provider": "ollama","model": "qwen2:7b"},{"title": "Llama3-8B","provider": "openai","model": "Local-Model","apiBase": "http://127.0.0.1:8000/v1","apiKey": "EMPTY","completionOptions": {"stop": ["<|eot_id|>"]}}],"customCommands": [{"name": "test","prompt": "{{{ input }}}\n\nWrite a comprehensive set of unit tests for the selected code. It should setup, run tests that check for correctness including important edge cases, and teardown. Ensure that the tests are complete and sophisticated. Give the tests just as chat output, don't edit any file.","description": "Write unit tests for highlighted code"}],// "tabAutocompleteModel": {// "title": "Qwen2:7B",// "provider": "ollama",// "model": "qwen2:7b"// },"tabAutocompleteModel": {"title": "Llama3-8B","model": "Local-Model","apiBase": "http://127.0.0.1:8000/v1","provider": "openai","apiKey": "EMPTY"},"allowAnonymousTelemetry": true,"embeddingsProvider": {"provider": "transformers.js"}
}
Continue插件的配置信息主要分为 3 块:
- models 代表所有的模型列表:上面样例配置文件,老牛同学分别配置了基于Ollama部署的Qwen2-7B大模型和基于OpenAI客户端部署的Llama3-7B大模型(也就是涵盖了上面大模型的 2 种不同部署方式的不同配置方式)
- customCommands 自定义给大模型的提示词格式,input代表输入内容(代码或者文本等),可以按照实际需求进行调整
- tabAutocompleteModel 代码编写过程中,当按下代码生成快捷键时,Continue生成代码的大模型,从models列表里面指定一个即可,当然也可以设置一个其他的大模型(注意: 只能选择一个模型,上面样例配置注释掉了一个,在实际使用时需要删除掉,因为 JSON 不支持注释!)
第三步:使用 Code Copilot Continue 插件
首先,启动大模型(如:Qwen2-7B);其次,点击 IDE 左下角图标,以启用Continue插件;然后,选择一个对话大模型(默认选中第 1 个大模型):
使用方式一: 我们可以选择不同的大模型进行对话,相当于Continue插件提供了一个可视化对话客户端
使用方式二: 代码生成,也是本文的重点,下面老牛同学以快速排序算法为例,来如何利用Continue完成代码编写:
【场景一:AI 对话代码同步】
- 使用大模型对话能力,写出快速排序算法代码,Prompt 提示词:请提供一下功能代码:Python 实现快速排序算法函数,大模型很好的实现了算法逻辑,并且给了很多的说明和解释
- 选中快速排序算法函数的代码,然后按下
CTRL+Shift+L
快捷键,或者点击代码框右上角的Apply to current file按钮,Python 自动同步到了编辑器中了:
【场景二:代码自动补全】
- 在编辑器中,只需要输入注释内容(不要按回车键):
# Python实现快速排序算法函数
- 然后按下
CTRL+Shift+L
快捷键,然后在按下回车键,可以看到代码已经生成,可以按Tab键
使用代码
【场景三:增加单元测试代码】
- 在编辑器中,选中一段代码函数,然后按下
CTRL+I
快捷键 - 然后,在弹出的Ctrl+I指令框中输入:
增加代码测试代码
,然后按下回车键,可以看到生成了测试用例代码
【场景四:代码自动填充对话框】
- 在编辑器中,选中一段代码,然后按下
Ctrl+L
快捷键,代码自动填充到了左侧的对话框中 - 可以在对话框中继续输入指令,如:
请解释一下这段代码
,然后按回车键提交大模型:
【其他场景】
- 增加注释
- 代码异常堆栈分析
- …… 其他请大家补充
最后:
使用开源大模型作为团队的 Code Copilot 工具,可以提高团队的开发效率,同时也可以保护团队的代码隐私。虽然目前开源的 LLM 相比闭源商用的 LLM 还有一些差距,但是随着开源 LLM 的不断发展,相信两者的差距以后会越来越小。以上就是今天介绍的内容,希望对大家有所帮助。
关注本公众号,我们共同学习交流进步 👇🏻👇🏻👇🏻
Phi-3 开源大模型
Phi-3 模型手机部署教程(微软发布的可与 GPT-3.5 媲美的小模型)
Qwen2-7B 开源大模型
Qwen2 阿里最强开源大模型(Qwen2-7B)本地部署、API 调用和 WebUI 对话机器人
Llama-3-8B 开源大模型
玩转 AI,笔记本电脑安装属于自己的 Llama 3 8B 大模型和对话客户端
一文彻底整明白,基于 Ollama 工具的 LLM 大语言模型 Web 可视化对话机器人部署指南
基于 Llama 3 搭建中文版(Llama3-Chinese-Chat)大模型对话聊天机器人
GLM-4-9B 开源大模型
本地部署 GLM-4-9B 清华智谱开源大模型方法和对话效果体验
ChatTTS 文本转语音模型
ChatTTS 开源文本转语音模型本地部署、API 使用和搭建 WebUI 界面
Stable Diffusion 3 文生图模型
Stable Diffusion 3 文生图“开源英雄”大模型本地部署和使用教程,轻松实现 AI 绘图自由
大模型应用实战
大模型应用研发基础环境配置(Miniconda、Python、Jupyter Lab、Ollama 等)
借助 AI 大模型,三分钟原创一部儿童故事短视频(附完整操作步骤)
高效编写大模型 Prompt 提示词,解锁 AI 无限创意潜能
Python 小游戏
AI 已来,我与 AI 一起用 Python 编写了一个消消乐小游戏
Python 游戏编程:一步步用 Python 打造经典贪吃蛇小游戏
相关文章:

使用Llama3/Qwen2等开源大模型,部署团队私有化Code Copilot和使用教程
目前市面上有不少基于大模型的 Code Copilot 产品,部分产品对于个人开发者来说可免费使用,比如阿里的通义灵码、百度的文心快码等。这些免费的产品均通过 API 的方式提供服务,因此调用时均必须联网、同时需要把代码、提示词等内容作为 API 的…...

C语言_结构体初阶(还未写完)
结构体的声明 1. 什么是结构?结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量 数组:一组相同类型元素的集合 结构体:一组不一定相同类型元素的集 2. 结构的声明 struct tag //tag根据实际情况给名字…...

MyBatis-Plus:快速入门
1. 概念 MyBatis-Plus(简称 MP)是一个MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。其突出的特性如下: * **无侵入**:只做增强不做改变,引入它不会对现有…...

【高级篇】第9章 Elasticsearch 监控与故障排查
9.1 引言 在现代数据驱动的应用架构中,Elasticsearch不仅是海量数据索引和搜索的核心,其稳定性和性能直接影响到整个业务链路的健康度。因此,建立有效的监控体系和掌握故障排查技能是每一位Elasticsearch高级专家的必备能力。 9.2 监控工具:洞察与优化的利器 在Elastics…...

【前端】上传和下载zip文件,有进度条(el-progess)
文章目录 上传下载进度条 场景:要上传一个zip,调用接口,然后下载一个zip。调用接口的接口响应要显示在进度条中。 上传 上传用的是input原生控件,在页面中隐藏。accept"application/zip"限制只能上传zip。 点击button…...

2024年软件测试面试题,精选100+,附答案+文档
🍅 视频学习:文末有免费的配套视频可观看 🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 Part1 1、你的测试职业发展是什么? 测试经验越多,测试能力越高。所以我…...

在vue项目的.gitignore文件忽略不想要提交到git仓库的文件
在Vue项目中,使用.gitignore文件来忽略不需要提交到Git仓库的文件是一个常见的做法。.gitignore文件包含了一系列的规则,这些规则告诉Git哪些文件或目录应该被忽略。以下是一些Vue项目中常用的.gitignore文件示例和具体规则说明: 示例 .gitig…...

时序(流式)图谱数据仓库AbutionGraph功能介绍-Streaming Graph OLAM Database
AbutionGraph是一款端到端的流式数据实时分析的图谱数据库,实时(流式写入实时、高QPS决策分析实时、流式预处理实时)表现在: 构建实时查询QPS响应时长与历史数据量无关的图模型;接入流式数据并实时更新图计算指标&…...

windows实现Grafana+Loki+loki4j轻量级日志系统,告别沉重的ELK
文章目录 Loki下载Loki下载安装Loki添加Loki数据源springboot日志推送 Loki下载 下载地址:https://github.com/grafana/loki/releases/ 找到loki-windows-amd64.exe.zip点击开始下载,我这里下载的2.9.9版本 Loki下载 下载地址:https://gr…...

跟《经济学人》学英文:2024年06月01日这期 The side-effects of the TikTok tussle
The side-effects of the TikTok tussle tussle:美 [ˈtəsəl] 激烈扭打;争夺 注意发音 side-effects:副作用;(side-effect的复数) As the app’s future hangs in the balance, the ramifications of …...

Ubuntu安装PostgreSQL
Ubuntu(在线版) 更新软件源 sudo apt-get update 添加PostgreSQL官方数字签名 wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add - 将地址添加到系统的软件包源列表中 echo "deb http://apt.postgresql.org/pub/repos/a…...

【HarmonyOS NEXT】鸿蒙如何让List组件不满一屏时,还要能滑动和回弹
当List组件不满一屏时,还要能滑动和回弹,就向系统设置 - 移动网络 页面一样 List设置如下属性: .edgeEffect(EdgeEffect.Spring, {alwaysEnabled: true}) edgeEffect edgeEffect(value: EdgeEffect, options?: EdgeEffectOptions) 设置边缘滑动效果。…...

JDK-SPI-服务提供者接口
归档 GitHub: JDK-SPI-服务提供者接口 SPI 源码说明 java.util.ServiceLoader /*** 服务加载器:给定接口,查找实现类。实现可迭代接口 */ public final class ServiceLoader<S> implements Iterable<S> {/*** 返回 ServiceLoader 实例 *…...

【docker】容器内配置环境变量
背景: 我要把下面的环境变量写到bash脚本里,起名叫environment_start.sh。 目的: 用于每次进入容器dev_into.sh的时候,让系统获取到环境变量。 操作步骤: 先在容器外找个合适的位置写环境变量bash脚本,…...

Java 乐观锁与悲观锁
1. 前言 本节内容主要是对 Java 乐观锁与悲观锁进行更加深入的讲解,本节内容更加偏重于对乐观锁的讲解,因为 synchronized 悲观锁对于大部分学习者并不陌生,本节主要内容如下: 乐观锁与悲观锁的概念,之前有所讲解,这里用很小的篇幅进行知识的回顾,巩固;乐观锁与悲观锁…...

python学习2-数据结构与算法-链表
单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) 指针(指示后继元素存储位置),元素就是存储数据的存储单元,指…...

项目一 nfs 共享服务器 Haproxy 代理 Keepalive 高可用集群
深入理解程序的数据存储 配置NFS服务器 配置ansible环境...

TCP粘包解决方法
一. 产生原因及解决方法 产生原因:TCP是面向连接、基于字节流的协议,其无边界标记。当服务端处理速度比不其接收速度时,就很容易产生粘包现象。 解决方法:目前主要有两种解决方法,一个是在内容中添加分割标识…...

高职人工智能专业实训课之“生成对抗网络(GAN)”
一、前言 生成对抗网络(GAN)作为人工智能领域的一项重要技术,已经在图像生成、风格迁移、数据增强等多个领域展现出巨大的潜力和应用价值。为了满足高职院校对GAN专业实训课程的需求,唯众人工智能教学实训凭借其前沿的教育技术平…...

【MySQL系列】隐式转换
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

亿发:信息化建设or面子工程?究竟什么才是真正的信息化解决方案
在现代企业的竞争中,信息化建设扮演着越来越重要的角色。信息化技术不仅是企业提升管理效率、优化运营模式的利器,更是企业在市场竞争中脱颖而出的关键。然而,许多企业在推进信息化的过程中,往往容易陷入“面子工程”的误区。那么…...

【微信小程序开发实战项目】——如何制作一个属于自己的花店微信小程序(1)
👨💻个人主页:开发者-曼亿点 👨💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨💻 本文由 曼亿点 原创 👨💻 收录于专栏:…...

树形结构C语言的实现
一.什么是树: 树形结构是一层次的嵌套结构。一个树形结构的外层和内层有相似的结构,所以这种结构多可以递归的表示。经典数据结构中的各种树状图是一种典型的树形结构:一棵树可以简单的表示为根,左子树,右子树。左子树…...

小程序渗透测试的两种方法——burpsuite、yakit
首先呢主要是配置proxifier,找到小程序的流量,然后使用burpsuite或者yakit去抓包。 一、使用burpsuiteproxifier的抓包测试 1、先配置proxifier,开启http流量转发 勾选确定 2、配置burp对应代理端口,选择profile,点…...

代码随想录训练营Day56
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、搜索插入位置二、在排序数组中查找元素的第一个和最后一个位置 前言 提示:这里可以添加本文要记录的大概内容: 今天是跟着代码随想…...

S32K3 工具篇4:如何在S32DS中使用lauterbach下载
S32K3 工具篇4:如何在S32DS中使用lauterbach下载 1. TRACE32软件下载与配置2. 如何在S32DS里面构建劳德巴赫的接口2.1 新建工程带有lauterbach2.2 已有工程没有lauterbach 劳德巴赫lauterbach是一款非常经典强悍的调试器,还带有trace功能,在汽…...

深度神经网络语言识别
「AI秘籍」系列课程: 人工智能应用数学基础人工智能Python基础人工智能基础核心知识人工智能BI核心知识人工智能CV核心知识 使用 DNN 和字符 n-gram 对一段文本的语言进行分类(附 Python 代码) 资料来源,flaticon:htt…...

STM32自己从零开始实操07:电机电路原理图
一、LC滤波电路 其实以下的滤波都可以叫低通滤波器。 1.1倒 “L” 型 LC 滤波电路 1.1.1定性分析 1.1.2仿真实验 电感:通低频阻高频的。仿真中高频信号通过电感,因为电感会阻止电流发生变化,故说阻止高频信号 电容:隔直通交。…...

网页计算器的实现
简介 该项目实现了一个功能完备、交互友好的网页计算器应用。只使用了 HTML、CSS 和 JavaScript ,用于检验web前端基础水平。 开发环境:Visual Studio Code开发工具:HTML5、CSS3、JavaScript实现效果 功能设计和模块划分 显示模块&#…...

JAVA设计模式-监听者模式
什么是监听者模式 监听器模式是一种观察者模式的扩展,也被称为发布-订阅模式。在监听器模式中,存在两类角色:事件源(Event Source)和监听器(Listener)。事件源负责产生事件,而监听器…...