新添“代理”概念,用 GitHub Copilot 追求极致编码智能

本文介绍了GitHubCopilot在VisualStudioCode中的最新进展,包括使用代理机制解决大型语言模型的上下文问题,如@workspace和@vscode代理。这些代理能利用AI增强代码理解和建议,如代码片段检索、上下文搜索和VSCode内部工具整合,以提供更智能的开发体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

企业申请Azure OpenAI绿色通道

→记得评论私信~还可加入交流群~

如果您前段时间关注了 GitHub Universe,您应该看到了人工智能在整个开发者工作流程中取得的巨大进展、创新和愿景。在这篇文章中,我们将专注于介绍过去几个月以来在 Visual Studio Code 上取得的进展,这些进展有助于实现更广泛的愿景。 

大型语言模型(LLM)是在某个时间点上使用公共存储库数据进行训练的。这意味着它们对当前的代码一无所知。它们只了解一般的代码,但它们没有足够的上下文来准确回答关于代码的问题,或者建议符合您工作区形式和功能的新代码。 

为解决这一问题,GitHub Copilot Chat 发送一些代码片段,帮助模型更好地回答问题(这被称为检索增强生成,或者"RAG")。通过查看最相关的代码,给出最佳答案。但它发送给 LLM 的代码量(以及通过提示提供的指导)方面存在一些限制。对于小型项目来说,这通常不是问题。但对于任何大型源代码存储库,您将会意识到不可能将每个文件的内容都发送给模型。要想获得更好的答案,就必须在合理的时间内使用适当的资源发送相关上下文。为了帮助实现这一目标并解锁许多其他场景,我们在 Copilot Chat 中添加了代理的概念。

图片

 什么是代理?

代理是领域专家,可以根据用户的查询方式进行回答,可以完全利用人工智能进行查询处理,也可以以传统的方式将查询转发到后端服务。代理还可以为大型语言模型提供访问领域特定工具的权限。在 LLM 的帮助下,代理可以选择工具并定义如何调用它。以 @workspace  代理为例,@workspace 代理了解您的工作区,并可以回答相关问题。在内部,代理由不同的工具支持:GitHub 的知识图谱结合语义搜索、本地代码索引和 VS Code 的语言服务。 

代理可以由客户端或服务端提供。GitHub Universe 大会上演示了一个服务端代理,即 github.com 聊天体验中的“Docs代理”,它知道如何搜索存储库中的文档(即将应用于 VS Code)。 

客户端代理可以通过传统的 VS Code 扩展来实现。有关这方面的更多信息,请参阅下方“可扩展性”部分,我们先来看看目前 VS Code 中可用的两个代理:@workspace 和 @vscode. 

🔵   @workspace

🔗 复制链接至浏览器打开 

https://code.visualstudio.com/blogs/2023/11/13/vscode-copilot-smarter#_workspace

 @workspace 代理知道如何收集有关您工作区代码的上下文,可以帮助您浏览代码,找到相关的类、文件等。想象一下,您在 VS Code 存储库里,想了解负责当前 ICodeEditor 的服务更多信息;您可以像这样使用代理:

图片

用自然语言向 workspace 代理提问:“我应该使用什么服务类来获取当前的 ICodeEditor”。在此基础上,代理会执行以下操作,以获得恰到好处的上下文,并将其发送给 LLM:

🔵  vscode 代码库已被 GitHub Search Blackbird 服务编入索引。@workspace 代理使用该索引作为工具来挖掘版本库知识图谱。@workspace 代理会运行语义搜索,返回相关的代码片段和元数据。GitHub 搜索服务已经对前 10000 个 GitHub 存储库进行了索引,并计划添加更多。

🔵  @workspace 代理使用的下一个工具是对本地索引进行词法文本搜索,以查找额外的代码,如本地、未提交的更改和 Copilot 对话历史记录。

🔵   @workspace 使用最后一个工具是 VS Code 的语言智能,以添加关键的细节,如函数签名、参数,甚至是内联文档。

所有这些上下文片段都由 @workspace 代理进行排名、切片和总结,然后发送给 LLM 以回答问题。

由于掌握了所有必要的上下文,@workspace 代理可以回答开发人员更有可能提出的问题。

例如,有关代码不同部分如何交互的问题: 

🔵@workspace 通知是如何安排的?

或者需要指导相关代码、依赖关系和设计模式的问题:

🔵@workspace 添加表单验证,类似于时事通讯页面

🔵  vscode

🔗 复制链接至浏览器打开 

https://code.visualstudio.com/blogs/2023/11/13/vscode-copilot-smarter#_vscode

VS Code 可以通过多种方式进行定制,甚至 VS Code 团队的成员还将发现一些令人惊喜的隐藏功能。为了帮助用户和团队成员充分发挥 VS Code 的全部潜力,我们创建了 @vscode 代理。 

该代理对 VS 代码了如指掌,可帮助您在自然语言与 VS 代码命令和自定义之间架起一座桥梁。@vscode 代理内部使用一些工具,这些工具让它能够访问所有设置和命令的索引。且我们正在添加一个工具,以便该代理还可以使用 VS Code 的文档。现在您可以提出模糊的问题,比如“@vscode  vscode 假装打开文件时那个东西的名字是什么?以及如何禁用它?”。 

图片

注意,响应中有一个“在设置编辑器中显示”按钮。这是因为 @vscode 代理不仅了解  VS Code 的工作原理,还具有调用设置编辑器或命令面板的工具。

此外,命令面板现在支持相似性搜索,因此在搜索命令时,您不再需要知道命令的确切名称。您不再需要使用专属的 VS Code 术语就能轻松掌握团队每月发布的所有功能。 

这只是 @vscode 代理的开始。我们计划支持越来越多的场景,让用户更好地了解和完全掌控 VS Code。 

🔵  / 斜杠命令

代理还可以提供我们称之为“斜杠命令”的功能,它们是代理提供的特定功能的快捷方式。回答问题的任务之一是确定意图,了解您想要做什么。 

我们可以推断出,“用 Node.js Express Pug TypeScript 创建一个新工作区” 表示您想要一个新项目,但“@workspace /new  Node.js Express Pug TypeScript” 则明确、简洁,还能节省键入时间。

图片

一旦意图明确,尽管自然语言存在固有的模糊性,但 @workspace 代理将更有可能满足用户的需求。@workspace 代理可以建议一个目录结构,用户可以点击建议的文件进行预览。还有一个“创建工作区”按钮,可以在一个新文件夹中生成这些文件。

图片

图片

可扩展性

“VS Code 就像一个外壳,您需要扩展才能让它大放异彩!”这是微软团队在致力于 VS Code 插件的座右铭,他们自豪地展示了自己在 VS Code 成功中的角色。作为 VS Code 核心团队,我们完全同意他们的说法——没有丰富的扩展生态系统,VS Code 不会有今天的成功!AI 也不例外,在核心人工智能体验与 Copilot 相得益彰的同时,我们的愿景是让生态系统中的所有扩展都能参与进来,让 LLM 模型尽可能拥有最佳的上下文和基础。 

今天,我们通过在建议状态下添加代理 API,为实现这一愿景奠定了基础。代理 API 允许扩展程序提供代理,以回答用户提出的特定问题。@workspace 和 @vscode 代理都是使用该 API 实现的。通过代理,用户可以在编辑器流程中保持不变的同时,将来自其内部和外部工具的丰富和最新信息带入 AI 对话。代理就像某个领域的专家,当用户在提示中明确提到 @ 代理时,该提示会被转发到贡献了该具体代理的扩展插件。 

代理可以使用 Markdown 进行简单文本和图像响应,也可以使用文件树或按钮形式进行更具交互性的体验。例如,当代理建议为用户创建新工作区时,文件树可以用作预览。代理可以为每个响应提供跟进,将其想象为如何进一步开展对话的建议。为了提供流畅的用户体验,整个 API 基于流式传输。正如前面提到的,代理可以引入斜杠命令——特定功能的快捷方式。例如,@docker 代理可能提供 /generate 斜杠命令,从而产生以下示例用户提示“@docker /generate a DOCKERFILE for workspace”。当前的语法简洁明了,可以节省很多时间。不过,我们仍在努力进行意图检测,以便让 VS Code core 根据用户的自然语言提示自动选择正确的代理和斜杠命令。 

想象一下,在 VS 代码中安装一个对 Azure 或 Docker 了如指掌的代理。或者,您可能需要一个 DALL-E 代理,将图像生成作为一种工具,展示一只可爱的动物。 

图片

代理在访问该域的工具时,可以带入任何特定域的内容。例如,1ES 代表 One Engineering System,是微软的内部工程系统。1ES VS Code 扩展插件提供了一个 @1es 代理,可以回答微软内部工程师的特定问题。@1es 代理可动态规划并显示其实际工作。它使用 LLM 模型中的一些公共数据,但也能识别微软内部的具体情况,并将两者结合起来提供最佳答案。

图片

由于代理掌握了当前的上下文,因此可以继续讨论:

图片

我们还将添加一个 API,允许扩展访问 LLM,并选择使用 LLM 来处理和回答用户的查询。目前,该 API 仅限于那些实现了代理的扩展。代理 API 会将准确的用户提示传递给贡献的代理,而有了 LLM 访问权限,代理就可以方便地将这些语言提示转换为特定的后台 API 调用。我们将谨慎、透明地处理该 API 的使用,以便用户了解代理使用了多少请求和令牌。 

代理 API 仍处于提议状态,我们期待收到关于如何改进它的反馈,目标是在不久的将来完成 API。您现在就可以尝试使用,最好从我们的代理扩展性示例开始。

图片

 便捷功能 

便捷功能对代理及其带来的无限可能性,我们感到非常兴奋,但我们也想谈谈在 VS Code 中我们添加的一些便捷的交互功能,这些交互直接融入在您的常规工作流中,您不必重新学习编辑器就能利用人工智能。 

🔵  智能操作

智能操作可无缝集成到 VS 代码流程中(例如,在快速修复和上下文菜单中),而且完全不需要编写任何提示。功能最强大的智能操作是 /fix。这里有一个相对简单的 TypeScript 快速排序算法,出现了一个错误,指出“类型'number'的参数不能赋值给类型'never'”。点击灯泡按钮,选择使用 Copilot 修复。 

图片

该选项会打开内联聊天,其中包含 /fix 和错误信息。在幕后,我们会引入 VS Code 的诊断上下文功能,然后让 Copilot 提供修复方法——更新左右数组以使用正确的类型声明。 

图片

我们注意到,/fix 对 shell 等语言特别有用,因为这些语言有时缺乏传统工具。 

图片

为了让用户更清楚地了解我们的建议,Copilot 会尝试解释为什么要提出特定的修复建议。我们很高兴地了解到,用户在大约 60% 的情况下都会接受 Copilot 提出的修复建议。有时,修复可能与灯泡提示附近的源代码无关,而需要安装的是一个缺失的依赖项——在这种情况下,/fix 会提出一个可以在集成终端中运行的命令。 

与 /fix 类似,/doc 智能操作也很受用户欢迎。要使用 /doc ,选择一块代码,右键单击,选择 Copilot > 生成文档。Copilot 会为您的代码生成文档注释,我们相信您会对文档的质量感到惊讶。

图片

🔵  生成提交和拉取请求信息

有时,意图非常明确。在这种情况下,使用人工智能的体验会让人感觉近乎神奇。我目前最喜欢的功能之一就是 Copilot 自动生成提交消息的能力。在安装了 Copilot 的源代码视图中,您会看到提交消息字段旁边有一个新的闪亮图标。选择这个图标,Copilot 就会帮您填写消息!

图片

我对这个体验感到非常兴奋,前几天在使用 vscode.dev/github 编辑 Markdown 时,我甚至提交了这样的内容,因为 Copilot 扩展还没有启用网络功能。

图片

回到我们的流程,让我们继续提出拉取请求。我安装了 GitHub 的“拉取请求和问题”扩展,它知道 Copilot Chat 扩展的存在。当我发起一个拉取请求时,标题和描述旁边会出现另一个闪亮的图标。选中它,Copilot 就会自动撰写一个漂亮的描述!

这也是人工智能可以帮助您提高工作效率的另一个领域,它可以自动处理您每周要做10次或100次的简单而乏味的任务。 

图片

最后,打造真正智能的人工智能意味着要让交互尽可能轻松自如。 

在过去的几年里,我们在语音识别技术方面已经取得了很大进展。我们知道许多人一直渴望语音助手与先进的 LLM 结合起来。现在,您可以在 VS Code中同时使用这两者。 

新的 VS Code 语音扩展为 VS Code 提供了语音到文本的支持。安装后,您将在所有自然语言输入对话框中看到麦克风图标。选择该图标,向 Copilot 提问,享受神奇的效果吧。

图片

该扩展目前仍处于预览阶段,目前只支持英语,但在未来几个月内,我们将继续更新,以支持更多的语言和功能。

图片

更聪明地工作

而不是更努力地工作

现在,VS Code 可提供上述所有功能,甚至更多!您只需安装 GitHub Copilot 扩展。您可以在我们的文档中了解 Copilot 聊天功能的更多信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值