写点什么

当在本地就可以运行 AI 代码助手时,谁还需要 GitHub Copilot 呢?

  • 2024-09-04
    北京
  • 本文字数:3741 字

    阅读完需:约 12 分钟

大小:1.76M时长:10:16
当在本地就可以运行AI代码助手时,谁还需要GitHub Copilot呢?

本文最初发布于 The Register。

 

作为生成式人工智能的早期用例,代码助手实践已经获得了相当多的关注——尤其是在微软推出 GitHub Copilot 之后。但是,如果你不喜欢让微软动你的代码,或者不愿意每月支付 10 美元的费用,那么你可以构建自己的助手。

 

虽然微软是最早将人工智能代码助手商业化并集成到 IDE 中的公司之一,但它远不是唯一选项。事实上,有许多为代码生成而训练的大型语言模型(LLM)。

 

而且,你现在正在使用的电脑很有可能就能够运行这些模型。关键是以一种有实际用处的方式将它们集成到 IDE 中。

 

这就轮到像 Continue 这样的应用程序发挥作用了。这个开源的代码助手被设计成可以嵌入流行的 IDE,如 JetBrains 或 Visual Studio Code,并连接到你可能已经比较熟悉的流行的 LLM 运行程序,如 Ollama、Llama.cpp 和 LM Studio。

 

像其他流行的代码助手一样,Continue 支持代码补全和生成,并且能够针对不同的用例优化、注释或重构代码。此外,Continue 还提供了一个具有 RAG 功能的集成聊天机器人,让你可以有效地与代码库对话。

 

在本指南中,我们将搭配使用 Continue 与 Ollama,但 Continue 也可以与多个专有模型(包括 OpenAI 和 Anthropic)搭配使用——通过各模型的 API,如果你愿意按令牌付费而不是每月支付固定费用的话。

你需要做好以下准备:

  1. 一台能够运行普通 LLM 的机器。一个处理器相对比较新的系统就可以,但为了获得最佳性能,我们建议使用 Nvidia、AMD 或 Intel GPU ,且 vRAM 至少为 6GB。如果你更喜欢用 Mac 电脑,那么任何 Apple Silicon 系统应该都可以,包括最初的 M1。不过,为了能达到最佳效果,我们建议内存至少要有 16GB。

  2. 本指南还假设,你已经在机器上安装并运行了 Ollama 模型运行程序。如果没有,可以看下我们提供的这份指南,它应该可以帮你在十分钟内运行起来。对于那些使用 Intel Integrated 或 Arc 显卡的用户,这里有一份使用 IPEX-LLM 部署 Ollama 的指南。

  3. 兼容的 IDE。在撰写本文时,Continue 支持JetBrainsVisual Studio Code。如果你想完全避开微软的遥测技术,像我们一样,开源社区构建的VSCodium是个不错的选择。

安装 Continue

在本指南中,我们将在 VSCodium 中部署 Continue。首先,启动 IDE 并打开扩展管理面板,搜索并安装 Continue。



几秒钟后,Continue 的初始设置向导启动,你可以选择是在本地托管模型还是使用另一个提供商的 API。

 

在这个例子中,我们将通过 Ollama 在本地托管我们的模型,因此,我们将选择“Local models(本地模型)”。该配置使 Continue 可以使用下列开箱即用的模型。稍后,我们会讨论如何将这些模型更换为其他选项,但现在,我们先从这些模型开始:

  • Llama 3 8B:来自 Meta 的通用 LLM,用于注释、优化和/或重构代码。要了解关于 Llama 3 的更多信息,请阅读我们的发布日报道

  • Nomic-embed-text:用于在本地索引代码库的嵌入式模型,使你能够在给集成聊天机器人提示时引用代码库。

  • Starcoder2:3B:这是 BigCode 的一个代码生成模型,为 Continue 的 Tab 自动补全功能提供支持。

 

如果因为某种原因,Continue 跳过了启动向导,不要担心,你可以在终端运行以下命令,使用 Ollama 手动拉取这些模型:

ollama pull llama3ollama pull nomic-embed-textollama pull starcoder2:3b
复制代码

 

有关使用 Ollama 设置和部署模型的更多信息,请查看我们的快速入门指南

遥测警告

在继续之前,需要提醒一下,在默认情况下,Continue 会收集匿名遥测数据,包括:

  • 是否接受或拒绝建议(不包括代码或提示);

  • 使用的模型名称和命令;

  • 生成的令牌数量;

  • 操作系统和 IDE 的名称;

  • 访问量。

 

如果你不想自己的数据被收集的话,则可以修改主目录下的.continue文件,或者取消 VS Code 设置中的“Continue: Telemetry Enabled”复选框。



要进一步了解 Continue 的数据收集政策,可以查看这里

请求就会有结果。有效吗?那是另外一回事了

安装完成后,我们可以开始深入研究将 Continue 集成到工作流中的各种方法了。第一种方法可以说显而易见:从零开始生成代码片段。

 

例如,如果你想为一个项目生成一个基本的网页,只需按下键盘上的Ctrl-ICommand-I,然后在操作栏中输入提示。



在这里,我们的提示是“Generate a simple landing page in HTML with inline CSS(使用 HTML 生成一个包含内联 CSS 的简单登录页)”。提交提示后,Continue 将加载相关模型(这可能需要几秒钟,取决于你的硬件),然后它会向我们提供一个代码片段,我们可以选择接受或拒绝。


在 Continue 中生成的代码将以绿色代码块的形式出现在 VS Code 中,你可以接受或拒绝。

重写你的代码

Continue 还可以用于重构、注释、优化或编辑现有代码。

 

例如,假设你有一个用于在 PyTorch 中运行 LLM 的 Python 脚本,你想重构它然后在 Apple Silicon Mac 上运行。首先,选择需要重构的文档,按下键盘上的Ctrl-I并给助手输入提示。



几秒钟后,Continue 会传出模型的建议——新生成代码用绿色高亮显示,而需要删除的代码则用红色标记。



除了重构现有代码外,该功能还可用于事后生成注释和/或文档字符串。这些功能可以在右键菜单中的“Continue”下找到。

Tab 自动补全

虽然代码生成对于快速实现模型进行概念验证或重构现有代码很有用,但根据所使用的模型的不同,仍然可能存在一些偶然性。

 

任何曾经要求 ChatGPT 生成代码块的人都知道,有时它会产生幻觉包或函数。这些幻觉相当明显,因为糟糕的代码往往会导致令人印象深刻的失败。但是,正如我们之前讨论过的那样,如果频繁提供这样的幻觉包,可能会造成安全威胁。

 

如果不需要 AI 模型为你编写代码,那么 Continue 还支持代码补全功能。这让你可以更好地控制模型进行或不进行哪些编辑或更改。



这个功能的工作方式有点像终端中的 Tab 补全。当你进行输入时,Continue 会自动将你的代码输入到一个模型中——比如 Starcoder2 或 Codestral——并提供补全字符串或函数的建议。

 

建议显示为灰色,并且会随着你每次敲击键盘而更新。如果 Continue 猜测正确,那么你可以按下键盘上的Tab键来接受建议。

与代码库对话

除了代码生成和预测之外,Continue 还提供了一个集成聊天机器人。该机器人具有 RAG 风格的功能。要了解更多关于 RAG 的信息,可以在这里查看我们的实践指南,但在 Continue 中,它综合运用 Llama 38b 和 nomic-embed-text 嵌入式模型来实现代码库可搜索。


Continue 提供了一个集成聊天机器人,它可以接入你选择的 LLM。

 

诚然,这个功能存在一些不确定性,但下面这几个例子可以说明如何使用它来提高工作流效率:

  • 输入@docs,然后输入你的应用程序或服务的名称—— 例如Docker,最后输入你的请求。

  • 要查询关于工作目录的信息,输入@codebase ,然后输入你的请求。

  • 将文件或文档加入模型的上下文:输入@files ,然后选择你想要添加到下拉选项中的文件。

  • 按 Ctrl-L将你在编辑器中选中的代码添加到聊天机器人。

  • Ctrl-Shift-R 将来自 VS Code 终端模拟器的错误信息直接发送给聊天机器人进行诊断。

更换模型

在实践中,Continue 的可靠性实际上取决于你选用的模型,因为这个插件本身实际上更像是一个将 LLM 和代码模型集成到 IDE 中的框架。虽然它定义了用户如何与这些模型交互,但它无法控制所生成代码的实际质量。

 

好消息是,Continue 没有与任何一种模式或技术绑定。正如我们前面提到的,它可以接入各种 LLM 运行程序和 API。如果有新发布的模型针对你的首选编程语言进行了优化,那么除了硬件之外,没有什么可以阻止你使用它。

 

由于我们使用 Ollama 作为模型服务器,所以在大多数情况下,更换模型是一项相对比较简单的任务。例如,如果你想把 Llama 3 换成谷歌的 Gemma 29b,把 Starcoder2 换成 Codestral,则可以运行以下命令:

ollama pull gemma2ollama pull codestral
复制代码

注意:Codestral 有 220 亿个参数和 32000 个令牌的上下文窗口,即使精度量化到 4 位,在本地运行的话,也是一个相当庞大的模型。如果遇到了程序崩溃的问题,那么你可能会想试一下小一点的东西,比如DeepSeek Coder的 1B 或 7B 变体。

 

要更换用于聊天机器人和代码生成器的模型,你可以在 Continue 的选择菜单中选择它。或者,你可以使用Ctrl-'循环遍历下载好的模型。



更改 Tab 自动补全功能使用的模型有点麻烦,需要修改插件的配置文件。



拉取选择的模型后[1],点击 Continue 侧边栏右下角的齿轮图标[2],修改“tabAutocompleteModel”小节下的“title”和“model”条目[3]。如果你使用的是 Codestral,那么这一部分配置应该是这样的:

  "tabAutocompleteModel": {    "title": "codestral",    "provider": "ollama",    "model": "codestral"  },
复制代码

自定义编码模型调优

默认情况下,Continue 会自动收集有关你如何构建软件的数据。这些数据可用于根据你的特定风格和工作流进行自定义模型调优。

 

需要说明的是,这些数据存储在本地主目录下的.continue/dev_data文件夹下。而且,据我们所知,默认情况下,这些数据并没有包含在 Continue 收集的遥测数据中。不过,如果你还是担心的话,建议你把它关掉。

 

大型语言模型调优的具体内容超出了本文的范围,但你可以读下这篇文章,从中了解 Continue 收集了哪类数据以及如何利用这些数据。

 

我们希望可以在未来的实践中进一步探索调优过程,所以请务必在评论区分享你对本地 AI 工具(如 Continue)的看法以及你希望我们下一步做何种尝试。

 

声明:本文为 InfoQ 翻译,未经许可禁止转载。

 

原文链接:https://www.theregister.com/2024/08/18/self_hosted_github_copilot/?td=rt-3a

2024-09-04 18:088901

评论

发布
暂无评论
发现更多内容

PostgreSQL插件之TimescaleDB

华为云数据库小助手

postgresql 插件 GaussDB 华为云数据库

ReScript 与 TypeScript,谁是前端圈的“当红辣子鸡”

华为云开发者联盟

Java JavaScript typescript 大前端 ReScript

学习-2

4anonymous

架构实战训练营模块 2 作业

Sonichen

50亿海量数据如何高效存储和分析? GaussDB (for Cassandra) 3个秘诀搞定

华为云开发者联盟

存储 华为云 海量数据 分析 GaussDB (for Cassandra)

Go- 文件读写-1

HelloBug

文件读写 Go 语言

模块七

SAKIN

解读顶会CIKM'21 Historical Inertia论文

华为云开发者联盟

华为云 论文 长序列时间 时间序列预测 CIKM’21

书单 | 做数字化转型,离不开这10本书!

博文视点Broadview

模块二作业

bin

【Flutter 专题】55 日常问题小结 (二)

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 9月日更

杀疯了,编程语言还能卷成这样❓❗【话题讨论】

InfoQ写作社区官方

话题讨论 话题

学校疫苗中心管理应用搭建心得

明道云

微信朋友圈高性能复杂度分析

看,有只猪

朋友圈高性能复杂度分析

陈家豪

架构实战营

微信朋友圈的高性能复杂度分析与设计

眼镜盒子

架构实战营

架构训练营 模块二

初一

转型 Golang 开发的心路历程

baiyutang

php 云原生 求职 Go 语言 9月日更

模块二

树建

架构实战营

揭秘盒马鲜生 Android 短视频秒播优化方案

阿里云CloudImagine

android 音视频 短视频 Video播放器 移动端

Go的测试框架

Rayjun

Go 语言

自己动手写个微型博客吧,还能实现网页版 Blink,No.1

梦想橡皮擦

9月日更

【VueRouter 源码学习】第四篇 - 创建路由映射表

Brave

源码 vue-router 9月日更

架构实战营 - 模块七作业

思梦乐

微信PaxosStore:深入浅出Paxos算法协议

OpenIM

华云大咖说 | 业务转型中的IT云化服务——安超云基座方案介绍

华云数据

Node.js 应用全链路追踪技术——[全链路信息获取]

vivo互联网技术

node.js 大前端 编程语言 全链路追踪 语言 & 开发

当视频恋爱 App 用上了 Serverless

Serverless Devs

Serverless 云原生

11. 有大数据就有人工智能的机会

Databri_AI

人工智能

微信朋友圈高性能复杂度分析

Geek_85eb5f

Vue进阶(九十六):VuePress 详解

No Silver Bullet

Vue 9月日更

当在本地就可以运行AI代码助手时,谁还需要GitHub Copilot呢?_生成式 AI_Tobias Mann_InfoQ精选文章