16-配置人工智能
第 16 章 配置人工智能
这本书最初写于 2024 年,我预测今年将是世界从对 AI 做出疯狂预测转向将其融入我们日常生活的一年。如果我有机会出版第二版,重温这句话会很有趣。我知道我们都对听到 AI 感到厌烦透顶,所以这一章完全是关于现在的 AI 。
不幸的是,AI 的现状有点混乱。我们还不知道各种 AI 工具中哪一个会成为主导。所以这些内容很快就会过时。希望它描述的技术和经验教训能适用于下一代 AI 编码平台。
LazyVim 对几种 AI 编码工具有很好的支持。你可能需要尝试每一种,找出最适合你的那一种,而“最好”在未来几个月可能会改变很多次(这让我想起了世纪之交的浏览器大战)。
在撰写本文时,GitHub Copilot 可能是开始的最佳选择。它有免费套餐,而且 Copilot chat 插件体验不错。最重要的是,如果你的组织已经在使用 GitHub,Copilot 最有可能已经通过了你的安全团队的审查。不要允许你的编辑器将知识产权发送给任意的 AI!
16.1. 基本构成
大多数 AI 编码工具都与 nvim-cmp
(译者注:原文是 blink.cmp,但 LazyVim 默认使用 nvim-cmp) 集成,这是 LazyVim 用于补全和代码片段的插件,这也是开始使用它们的最简单方式。
一些插件还有一个“聊天”功能,允许你以更互动的方式与 AI 交流。根据我的经验,这些功能目前效果不是很好,只有一个例外,我们将介绍它。
16.2. Codeium
如果你以前从未使用过 AI 编码,你可能会怀疑它是否值得付费。事实上,我广泛使用它,但我仍然持怀疑态度!Codeium 是一个很好的起点,因为免费的“个人”套餐“足够智能,足够有用”。
它也更快、响应更灵敏,而在等待补全菜单弹出时,不准确但快速通常比准确但缓慢更有用。
要开始使用,你需要在 codeium.com 上注册一个账户。
在 LazyVim 中启用 Codeium 非常简单:只需打开 :LazyExtras
命令并找到 coding.codeium
。像往常一样按 x
安装它,然后重启 Neovim。
你应该会自动看到一个用于验证 Codeium 的窗口。如果没有,请输入命令 :Codeium Auth
。你会看到一个简单的菜单:
图 86. Codeium 验证
选择最适合你的选项,在网络浏览器中打开一个 URL。默认选项对大多数人来说都有效,但如果你是在 SSH 或 docker 容器中运行 Neovim,你可能需要更有创意一点。
登录后,你会看到一个包含令牌的页面以及将其复制到剪贴板的说明。照做,然后将其粘贴到 Neovim 中等待的 Token
框中。如果你丢失了此框,可以通过输入 :Codeium Auth
并选择“I already have a key”(我已有密钥)再次找到它。
你可能需要再次重启编辑器。现在,当你编码时,你会在补全菜单中看到 Codeium 的条目:
图 87. Codeium 补全
正如右侧预览所示,补全可能是多行的。有时,它们准确且有用。其他时候,就不那么有用了。(我曾经试图让 ChatGPT 告诉我它准确的百分比,它断然拒绝给我一个数字)。
与所有 AI 一样,不要依赖答案,但它偶尔可以为你节省几次按键,这正是任何 Vim 用户真正想要的。
16.2.1. Codeium Chat
Codeium 有一个聊天功能,你可以通过他们的 Web UI 访问。听说最近 Codeium.nvim 添加了“编辑器内”聊天体验,我很兴奋,但它所做的只是打开一个指向聊天窗口的网络浏览器。Codeium 聊天(在撰写本文时)不是特别复杂,我发现使用它几乎和使用 Eliza 一样令人沮丧,所以我的建议是:别费事了。
16.3. GitHub Copilot
在撰写本文时,GitHub Copilot 被认为是当前 AI 驱动编码的黄金标准。从企业角度来看,它的主要优势在于,如果你已经在使用 GitHub,你的安全团队就已经审查过它了。从开发者角度来看,我觉得它有点慢,但比我尝试过的其他 AI 工具更准确。
首先,在 GitHub 上注册一个账户。它可以免费试用 30 天,所以你可以在向雇主报销之前决定它是否值得。
有几个不同的 LazyVim 插件支持 Copilot。最简单的是使用 :LazyExtras
命令并启用 coding.copilot
。这将启用 zbirenbaum/copilot.lua
插件,它创建了类似于 codeium 插件提供的 nvim-cmp
补全。
与 Codeium 类似,输入命令 :Copilot auth
来启用你的账户并按照提示操作。你会得到一个代码,需要在 GitHub 的浏览器窗口中输入。
之后,你应该会在你的 nvim-cmp
弹出窗口中看到 Copilot 补全,就像你使用 Codeium 时一样。你可以同时使用两者,但请注意,这对环境和你的网络连接都是负担!
16.3.1. Copilot Chat
copilot.lua 插件提供补全功能,仅此而已。然而,你可以启用第二个我非常喜欢的 LazyVim extra:coding.copilot-chat
。
重启 Neovim,如果一切设置正确,你应该能够使用快捷键 <Space>aa
打开一个聊天会话(其中 a
打开“ai”菜单)。这将是一个普通的 Neovim 缓冲区,你可以在插入模式下向其追加文本。有几个键盘快捷键可以帮助你聊天,聊天窗口中就直接总结了这些快捷键:
图 88. Copilot Chat 帮助菜单
在正常使用中,你会正在编辑一个文件,然后意识到你想把文件的一部分发送给 Copilot 让它重写。在可视模式下选择代码,然后按 <Space>aa
。这将存储选定的代码并显示 copilot 聊天窗口。
输入一个关于你选择的代码的问题,然后在插入模式或普通模式下按 Control-s
(s 代表“send”,发送),或者在普通模式下按 <Enter>
来提交。插件会自动将代码添加到你的查询中。然后(耐心)等待回应。回应将包含典型的 AI 废话,描述它做了什么,并且很可能包含一些代码。
如果代码符合你的要求,只需按 Control-y
(y 代表“yes”,是的)接受它,用 AI 文本替换你选择的内容。如果不符合,进入插入模式并提出后续问题,引导 AI 找到你真正想要的东西。
如果聊天失控了,就像生成式 AI 经常发生的那样,按 Control-l
重置它。这比对 AI 输入一堆诅咒是更安全的做法(译者注:辱骂AI没有用,等AI统治世界了,第一个处决你!)。
Extra 配置了一些其他方便的快捷键用于与 copilot-chat 交互,它们都在 <Space>a
子模式下。带有 <Space>ap
的“提示”菜单在你想要指示 Copilot 做一些具体的事情,比如编写测试或提交信息时特别有帮助。你也可以在显示诊断信息时使用 <Space>ad
来获取关于该诊断信息的更多信息。
你甚至可以用 CopilotChat 更改你使用的模型!在撰写本文时,Claude 似乎是帮助最少的编码助手(译者注:原文写的是 least unhelpful,意为最有用,这里可能有误解或作者想表达反讽,2025年最好用的是Claude 3.7 )。要切换到 Claude 或其他几个模型之一,请输入 :CopilotChatModels
命令并选择你喜欢的模型。
16.4. TabNine
TabNine 的优势在于它可以在你的设备上本地运行,这对于某些企业情况或任何知识产权重要的地方来说是一个非常重要的特性(如果 AI 彻底摧毁了知识产权的概念,我也不会感到惊讶。蜂巢思维的优势很可能超过企业所有权的长期优势)。
你可以在 Neovim 中配置 Tabnine,方式与 Codeium 和 Copilot 类似。LazyVim 自带支持将 TabNine 与 nvim-cmp
集成以获取补全源。你可以使用 :LazyExtras
命令并在 coding.tabnine
行上按 x
来启用它。
重启 Neovim。你可能需要等待一段时间让插件下载并安装 TabNine,但它应该都为你处理好了。一旦插件安装完毕,运行 :CmpTabnineHub
来验证你的身份,然后再次重启 Neovim。
现在你应该能在列表中看到 TabNine 的补全项了。我发现在Free套餐上它们几乎毫无用处。
TabNine 还有一个较新的官方 Neovim 插件叫做 tabnine-nvim。它甚至有聊天模式,但这种模式需要运行一个单独的二进制文件来在你的编辑器旁边显示聊天窗口。如果你想在 ssh 或 docker 会话中使用 Neovim,这显然是有问题的,而且安装它需要设置整个 Rust 和 GTK 工具链,所以这超出了本书的范围。
16.5. Sourcegraph Cody
理论上,Cody 相对于其他一些 AI 工具有优势,因为它可以访问 Sourcegraph 对你代码库结构的洞察。他们最近更新到了 Claude V3 进行聊天,所以与它的对话相当自然。
与其他提到的工具不同,目前没有针对 Sourcegraph 或 Cody 的 LazyVim Extra。相反,你需要手动安装 sg.nvim 插件:
列表 57. Source Graph Cmp 配置
-- lua/plugins/sourcegraph.lua
return {
-- 配置 nvim-cmp 以添加 cody 作为源
{
"hrsh7th/nvim-cmp", -- 假设你使用 nvim-cmp
dependencies = { "sourcegraph/sg.nvim" }, -- 依赖 sg.nvim
opts = function(_, opts)
opts.sources = opts.sources or {}
-- 将 cody 添加到补全源列表,可以调整优先级
table.insert(opts.sources, 1, { name = "cody" })
end,
},
-- 配置 sg.nvim (Sourcegraph Cody)
{
"sourcegraph/sg.nvim",
dependencies = {
"nvim-lua/plenary.nvim", -- sg.nvim 的依赖
"nvim-telescope/telescope.nvim", -- 可选,用于某些 UI 功能
},
config = function()
require("sg").setup({}) -- 使用默认配置或传入你的选项
end,
-- 建议延迟加载
-- event = "VeryLazy",
-- cmd = { "CodyAsk", "CodyChat", ... }, -- 根据需要添加命令
},
}
译者注: 更新了配置示例,使其更符合 Lazy.nvim 的风格,并使用了推荐的
config
函数。添加了依赖和加载建议。
在 https://sourcegraph.com/ 上注册一个账户,然后运行 :SourcegraphLogin
命令。注意 g
没有大写;我曾以为我的插件没安装对,花了半小时调试那个拼写错误。
这个插件不仅仅是一个 AI 补全工具;它还让你能够访问使用 Sourcegraph 浏览代码的命令。然而,它们依赖于 Telescope 选择器而不是 Snacks.nvim。你可以在 Lazy Extras 中用 Telescope 替换选择器,但我只建议在你真的非常喜欢 Sourcegraph 的情况下才走那么远。该产品有一些非常酷的功能,但那些超出了本书的范围。你可以通过阅读 :help sg.nvim
来了解更多可用的功能。
如果没有正常工作,使用 :checkhealth sg
来帮助理解哪里出了问题。
通过上述配置,nvim-cmp
补全应该与其他工具类似地工作。要与 Cody 聊天助手互动,请使用带有提示的命令 :CodyAsk
。例如,选择一些代码然后输入 :CodyAsk 这个是做什么的?
一个看起来像聊天界面的窗口会弹出在你的代码前面,右侧有一些快捷键提示:
图 89. Cody Ask 聊天
你可能想在帮助文件中阅读的其他聊天命令包括 :CodyChat!
、:CodyTask
、:CodyToggle
、:CodyExplain
和 :CodyRestart
。
16.6. Supermaven AI
Supermaven 声称在各种 AI 编码助手中拥有最快的响应时间。它的优势在于可以在不设置账户的情况下使用Free套餐,但如果你注册付费账户,据说你会得到更好的结果。
启用该插件与其他工具一样简单。只需按 :LazyExtras
,搜索 ai.supermaven
并按 x
。重启 Neovim 并稍等片刻,让它在后台为你下载 Supermaven 二进制文件。
你应该会自动看到一个激活链接,看起来像这样:
图 90. Supermaven 激活链接
如果你想使用专业版套餐,点击链接(如果你的终端支持点击链接)或将链接复制粘贴到浏览器并按照说明操作。如果你想要免费版本,用 :q
关闭弹出窗口,然后输入 :SupermavenUseFree
命令。
现在你应该能在你输入时在你的 nvim-cmp
弹出窗口中看到 Supermaven 的补全项了。
Supermaven 没有聊天界面。有一些命令用于诸如重启 Supermaven 之类的事情,如果你输入 :Supermaven<Tab>
就能看到。
如果你试用了免费套餐并决定升级到专业版,你可能会感到困惑!你需要使用 :SupermavenLogout
后跟 :SupermavenUsePro
来再次获取激活链接。
16.7. ChatGPT 怎么样?
ChatGPT 是一个好的编码助手,有几个插件能很好地与编辑器集成。然而,没有一个作为 LazyExtras 提供。它们都需要 OpenAI API 密钥,这往往比在浏览器中打开 ChatGPT 并在付费套餐上问它问题,然后用最糟糕的方式复制代码要昂贵得多。
在大多数情况下,我认为 GitHub Copilot 和 ChatGPT 一样智能(至少在编码方面是这样),而且 CopilotChat 插件是一个不错的界面,所以我推荐它。
如果你想探索将 ChatGPT、Claude、Gemini 或其他几个 AI 引擎集成到 Neovim 中,请查看 parrot.nvim 插件。配置方式与上述其他工具类似。
16.8. 总结
本章全部是关于 AI。考虑到它抽象掉的复杂性,AI 是一个异常简单的话题。在底层,大语言模型 (LLM) 非常酷,但与它们交互的接口通常只是对某个地方的某个 API 的简单 HTTP 请求(一个如此有用以至于我们集体没有足够认真地思考我们有多信任它的 API)。
各种 Neovim 插件已经为这些 API 创建了接口。LazyVim 使得将它们中的许多与 nvim-cmp
集成变得容易,其他服务则由第三方插件覆盖。
在各种选项之间做出选择是困难的部分。没有一个AI助手能完全达到我期望的效果,我发现它们节省的时间大约等于它们出错时浪费的时间。我目前使用 Copilot 是因为我的雇主为其付费,但我以前禁用过它并且没有想念它。
接下来,我们将讨论从 LazyVim 内部运行调试器。