写点什么

当在本地就可以运行 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:088321

评论

发布
暂无评论

详解大集群通信建模理论公式

华为云开发者联盟

数据库 华为云 查询

Flink ML API,为实时机器学习设计的算法接口与迭代引擎

Apache Flink

大数据 flink 编程 流计算 实时计算

KusionStack 开源有感|历时两年,打破“隔行如隔山”困境

SOFAStack

开源 编程语言 语言 #Github 运维‘

架构实战营 - 第 6 期 模块八课后作业

乐邦

「架构实战营」

Go语言创造者回顾:是什么让GoLang如此受欢迎?

三石

go语言

Yarn的RM功能介绍

五分钟学大数据

6月月更

淘宝Native研发模式的演进与思考 | DX研发模式

阿里巴巴终端技术

ide 技术选型 native 客户端 动态化

手把手教你实战开发黑白棋实时对战游戏

华为云开发者联盟

云计算 软件开发 游戏开发 华为云

天翼云对象存储ZOS高可用的关键技术揭秘

天翼云开发者社区

Flutter 开发一个通用的购物车数量编辑组件

岛上码农

flutter 安卓开发 ios 开发 跨平台应用 6月月更

见微知著,细节上雕花:SVG生成矢量格式网站图标(Favicon)探究

刘悦的技术博客

前端 favicon SVG svg图 Icon Font

Streaming Data Warehouse 存储:需求与架构

Apache Flink

大数据 flink 编程 流计算 实时计算

一文读懂天翼云自研TeleDB 数据库五大关键特性

天翼云开发者社区

天翼云践行“双碳”目标 “东数西算”绘画绿色发展新蓝图

天翼云开发者社区

社区动态|SelectDB 联合传智教育推出免费 Apache Doris 中文视频教程

SelectDB

Doris 开源社区 Apaache Doris 开源治理

MASA Auth - 从用户的角度看整体设计

MASA技术团队

OKALEIDO的NFT聚合交易,打造面向艺术家的Web3商业生态

股市老人

四川21市州国家反诈中心APP覆盖情况,筑牢全民反诈“防护墙”

易观分析

反诈APP

中国企业数字化转型的十大趋势

小炮

知识图谱看高考,高考加油!高考学子金榜题名

清林情报分析师

数据分析 数据可视化 高考 知识图谱

昇腾AI的蝴蝶效应,从智能制造开始

脑极体

为什么我们总是说不清「需求是什么」

LigaAI

产品经理 需求 需求分析 产品设计与思考

TICS端到端实践:企业积分查询作业开发

华为云开发者联盟

云计算 华为云 安全计算

Web3生态龙头AQUANEE,即将登录Gate等平台

股市老人

作为软件工程师,给年轻时的自己的建议(下)

禅道项目管理

工程师 程序员进阶 程序员‘

SoFlu 软件机器人:辅助企业落地 DevOps 的自动化工具

SoFlu软件机器人

做多线程并发扩展,这两点你需要关注

华为云开发者联盟

spring 多线程 高并发 开发 华为云

MySql函数

工程师日月

6月月更

千万级高并发下看天翼云如何为“健康码”突破技术瓶颈

天翼云开发者社区

极客星球 | 开发者服务合规检测护航企业数字生态建设

MobTech袤博科技

信息安全 开发者服务 安全合规检测 SDK检测 数据健康

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