检查 GitHub Copilot 内联聊天、智能操作和快速聊天
除了聊天视图外,GitHub Copilot Chat 还提供几种其他方式来与 AI 对程序员交互。 其中包括内联聊天、智能动作和快速聊天。
内联聊天
GitHub Copilot Chat 的关键功能之一是在编码时内联回答问题。 这样,你就可以直接在代码编辑器中利用 AI 的强大功能,并尽量减少开发工作流的中断。
仅当在编辑器中打开文件时,才能访问内联聊天功能。 可通过多种方式打开内联聊天会话:
- 从 Copilot Chat 菜单中选择“编辑器内联聊天”。
- 使用键盘快捷方式:Ctrl+I。
- 在代码编辑器内右键单击,从上下文菜单中选择 Copilot ,然后选择 编辑器内联聊天。

在编写或迭代代码时,可以通过内联聊天会话向 Copilot 提出问题。
打开内联聊天会话时,编辑器中会显示以下界面。

请考虑以下方案:
- 你正在开发处理数值列表的 C# 应用程序。 数据以 100 个为一批进行处理。
- 可以使用下面的代码片段创建 1 到 1000 之间的 100 个随机整数的列表,可用于测试。
// create a list of 100 random number between 1 and 1000
List<int> numbers = new List<int>();
Random random = new Random();
for (int i = 0; i < 100; i++)
{
numbers.Add(random.Next(1, 1000));
}
代码正常工作。 但是,如果要求发生变化,该怎么办? 如果需要确保列表不包含任何重复数字,该怎么办?
若要使用 GitHub Copilot 自动补全更新代码,需要:
- 删除现有代码。
- 创建反映更新要求的新注释。
- 使用 GitHub Copilot 从更新的注释生成新的代码片段。
- 查看建议并选择最佳选项。
幸运的是,这不是必要的。 更好的解决方案是使用 GitHub Copilot Chat 来建议所需的代码更新。
可以使用内联聊天会话来建议代码更新,如下所示:
- 突出显示要更新的代码片段。
- 按
Ctrl+I打开内联聊天。 - 请求 GitHub Copilot Chat 如何完成更新。
- 查看建议并选择最佳选项。
在这种情况下,可以请求:Update this code to ensure that numbers doesn't include any duplicates
如果喜欢建议的代码更新,可以选择“接受”并继续编码。

如果不喜欢建议的更新,可以选择“重新运行...”图标以请求 Copilot Chat 生成另一个建议。 “重新运行”图标显示为圆形箭头,显示在提示文本框的下方。
如果重新运行提示,但仍无法获取所需的结果,请尝试使用其他上下文更新提示。 当提示清晰、简洁且准确时,Copilot Chat 会生成更好的建议。 可以选择“放弃”以关闭内联聊天,无需进行任何更改。
智能操作
某些任务非常常见,因此可以自动执行。 GitHub Copilot Chat 包括智能操作,使你无需编写提示即可完成某些任务。 智能操作是预定义的操作,可以直接从 Visual Studio Code 编辑器运行这些操作,以便快速轻松地执行常见的编码任务。
可以使用以下智能操作:
- 说明:
Explain操作生成所选代码的自然语言说明。 这对于了解代码片段的用途和功能非常有用。 如果使用不熟悉的代码或需要向其他人解释代码,则Explain操作特别有用。 - 修复:
Fix操作建议所选代码的修复。 如果在代码中遇到错误或问题,并需要有关如何解决此错误的指导,这非常有用。 Copilot Chat 可以建议对变量、控制结构或函数调用进行更改,这些更改可能会解决问题。 - 评价和评论:
Review and Comment操作提供对所选代码的代码评审。 这可用于识别潜在问题、提高代码质量并确保遵循最佳做法。Review and Comment操作可帮助识别代码中的 bug、性能瓶颈和安全漏洞。 - 生成文档:
Generate Docs操作为所选代码创建文档。 这可用于记录代码库,尤其是在处理具有多个参与者的项目或需要与他人共享代码时。 - 生成测试:
Generate Tests操作为所选代码创建单元测试。 这可能有助于确保代码的正确性和可靠性,尤其是在处理具有复杂逻辑或关键功能的项目时。
若要访问智能操作,请右键单击编辑器中的代码片段,然后从 Copilot 上下文菜单中选择所需操作。

再次,让我们考虑一下质数应用。
在上一部分,内联聊天建议了以下代码,以确保numbers不包含任何重复项:
// create a list of 100 random numbers between 1 and 1000
List<int> numbers = new List<int>();
Random random = new Random();
while (numbers.Count < 100)
{
int randomNumber = random.Next(1, 1000);
if (!numbers.Contains(randomNumber))
{
numbers.Add(randomNumber);
}
}
尽管此代码可确保集合中的元素具有唯一性,但仍有改进的空间。
可以使用“评审此项”智能操作来检查代码选择。 要使用“评审此项”智能操作,请执行以下操作:
选择需要评审的代码片段。 在这种情况下,生成随机数列表的代码。
从 Copilot 上下文菜单中选择“评审此项”。
查看建议的更新,然后选择“接受”以应用更改。
对于生成随机数的代码片段,“评审此项”智能操作建议:
- 使用
100容量初始化List<int> numbers以避免填充期间出现多个大小调整。 - 在检查重复项时,使用
HashSet<int>(而不是List<int>)来加快查找速度。
在这种情况下,“评审此项”智能操作会导致使用 HashSet<int>(而不是 List<int>)来提高性能。
// create a list of 100 random numbers between 1 and 1000
HashSet<int> numbers = new HashSet<int>();
Random random = new Random();
while (numbers.Count < 100)
{
int randomNumber = random.Next(1, 1000);
if (!numbers.Contains(randomNumber))
{
numbers.Add(randomNumber);
}
}
int sum = addPrimeNumbersInNumericList(numbers);
Console.WriteLine(sum);
虽然使用 HashSet 可以有效地确保集合中的元素具有唯一性,但更新会创建新问题。 addPrimeNumbersInNumericList 方法需要 List<int> 作为输入,但更新后的代码创建 HashSet<int>。 这会导致以下编译错误:

幸运的是,可以使用“修复”智能操作来更正错误。 使用“修复”智能操作:
右键单击需要修复的代码片段。 在这种情况下,代码带有红色下划线。
从 Copilot 上下文菜单中选择“修复”。
查看建议的修复,然后选择“接受”以应用更改。
Fix 智能操作生成一个或多个修复错误的建议。 在这种情况下,其中一个建议使用 ToList() 方法将 HashSet 转换为调用 addPrimeNumbersInNumericList 内的 List。 生成的代码将类似于以下代码片段:
// create a list of 100 random numbers between 1 and 1000
HashSet<int> numbers = new HashSet<int>();
Random random = new Random();
while (numbers.Count < 100)
{
int randomNumber = random.Next(1, 1000);
if (!numbers.Contains(randomNumber))
{
numbers.Add(randomNumber);
}
}
int sum = addPrimeNumbersInNumericList(numbers.ToList());
Console.WriteLine(sum);
和往常一样,查看 Copilot Chat 提供的建议。 可能有更好的解决方案。 可以选择“接受”以使用建议的修复更新代码。
快速聊天
GitHub Copilot Chat 为聊天交互提供的第三个选项是“快速聊天”。
如果想要与 AI 进行快速交互式对话,可以使用 GitHub Copilot Chat 的“快速聊天”功能。 当尝试解决问题、需要帮助了解一段代码或想要集思广益时,这非常有用。 它的设计让你感觉自己在和一位开发人员聊天,这使其成为协作解决问题的绝佳工具。
若要打开“快速聊天”窗口,可以在 Visual Studio Code 编辑器中按“Ctrl+Shift+Alt+L”,也可以从 Copilot Chat 菜单打开“快速聊天”。

概要
GitHub Copilot Chat 提供了多种与 AI 配对程序员交互的方法,包括内联聊天、智能操作和快速聊天。 这些功能使你可以提出问题、获取代码建议,并快速轻松地执行常见编码任务。