使用新版 GitHub Copilot

本文介绍如何与GitHub Copilot现代化代理程序通信、设置您的偏好、更正错误、审查其工作成效,以及在多次会话中管理升级。

GitHub Copilot是一个现代化的交互式协作者,可以询问问题、提出策略、根据反馈进行调整,并随时间推移从你的偏好中学习。 若要获得最佳结果,请为代理提供上下文信息。 它越了解目标、约束和偏好,其性能就越好。

❌ Vague — the agent has to guess
"Upgrade my project"

✅ Specific — the agent knows exactly what you need
"Upgrade the WebAPI project to .NET 10. We need to keep backward
compatibility with our existing REST clients, and we can't change the
public API surface."

小窍门

您无需提前提供所有上下文。 当代理需要更多信息时,会询问后续问题。

启动会话

  1. 在 VS Code、Visual Studio 或 Copilot CLI 中打开 Copilot Chat
  2. 从智能体选取器中选择 适用于 .NET 的 GitHub Copilot 新版智能体,或者键入适合适用于环境的正确智能体提及:在 VS Code 和 Copilot CLI 中键入 @modernize-dotnet,或者在 Visual Studio 中输入 @Modernize
  3. 描述想要以自然语言完成的操作。

要说什么

自然语言有效。 请尝试以下示例:

所需内容 要说什么
升级整体解决方案 “将解决方案升级到 .NET 10”
升级特定技术 “帮助我从 EF6 升级到 EF Core”
查看可用的功能 “哪些方案可用?
首先升级一个项目 “首先升级 API 项目,然后升级共享库”
了解当前状态 “我的升级的当前状态是什么?

接下来会发生什么

启动对话时,代理会检查工作区中的现有升级工作:

  • 如果没有现有工作,代理将重新开始,通常从评估你的解决方案开始。
  • 如果有正在进行的工作,代理会从你上次停止的地方继续,并显示当前状态,例如“已完成 8 个任务中的 3 个”。

选择流模式

代理支持两种流程模式,用于控制代理暂停以等待您的输入。

自动模式

在自动模式下,智能体会按顺序完成各个阶段(评估、规划、执行),而不会暂停来在每个边界进行审批。 智能体仍会在出现真正的阻碍因素时停止,或者在只有你才能做出决定时停止。

最适合经验丰富的用户、直接升级和小型解决方案。

引导模式

在引导模式下,智能体会在每个阶段边界暂停以供评审:

  • 评估之后但在创建计划之前。
  • 在执行任何任务之前,先进行规划。
  • 在复杂任务细分之前。
  • 在存在多个有效方法的关键决策点。

最适合初次使用者、复杂的解决方案,以及想要学习这一过程的情况。

在会话中切换模式

随时在模式之间自由切换:

切换到 要说什么
引导模式 “暂停”“切换到引导模式”
自动模式 “继续”“继续”

小窍门

进行第一次升级时,请从引导模式开始。 引导模式是了解代理思考方式及其做出决策的最佳方式。 舒适后切换到自动模式。

示教智能体

代理会从你那里学习。 代理将更正、首选项和说明保存到 scenario-instructions.md 升级状态文件夹中。 这些首选项在会话之间保留。

更正错误

当代理做出你不同意的决定时,请告诉代理:

You: "Actually, don't use Newtonsoft.Json — we're standardizing on System.Text.Json."
Agent: "Got it. I'll use System.Text.Json for all serialization going forward.
        I've saved this as a preference."

智能体会更新 scenario-instructions.md ,并且不会再次做出相同的选择,即使在将来的会话中也不会。

设置首选项

请主动告知代理人你希望如何完成任务:

You: "Always use bottom-up strategy for this solution — upgrade leaf projects first."
Agent: "Noted. I'll use a bottom-up upgrade strategy, starting with projects that
        have no internal dependencies and working up to the top-level projects."

提供针对任务的具体说明

有时首选项仅适用于特定任务:

You: "For this task, skip the test validation — the tests are broken for a known
      reason and we'll fix them separately."
Agent: "Understood. I'll skip test validation for this task only."

代理保存的内容

该文件 scenario-instructions.md 被组织为多个清晰的部分:

章节 包含的内容 示例
用户首选项 (技术) 包选择、框架决策、编码模式 “使用 System.Text.Json,而不是 Newtonsoft”
用户首选项 (执行样式) 代理的工作原理 “始终使用自下而上策略”
关键决策日志 重要决策及其理由 “选择 EF Core over Dapper,因为...”
每个任务的自定义说明 任务特定重写 “跳过任务 3.1 的测试”

小窍门

也可以直接编辑 scenario-instructions.md 。 这是 .github/upgrades/{scenarioId}/ 中的 Markdown 文件。 代理在每次交互开始时读取文件。

进行会话中途更正

智能体可正常处理中断,不会丢失位置或当时正在执行的操作等跟踪记录。

暂停和复核

You: "Wait, stop — let me review that change first."
Agent: "Here's what I was about to do: [describes planned changes].
        Would you like me to proceed, or adjust the approach?"

重定向

You: "Actually, let's do Project B before Project A — it has fewer dependencies."
Agent: "Good call. I'll reorder the tasks and start with Project B."

撤销

You: "That last change broke the build. Can we revert it?"
Agent: "I'll revert the last commit (abc1234: 'Migrate auth middleware').
        Reverting now."

另外,使用标准 Git 命令自行还原提交。 代理会写清楚的描述性提交消息,以便确切地了解每个提交更改的内容。

在过程中提问

提出问题不会使工作流脱轨:

You: "Why did you choose to migrate the data layer before the API controllers?"
Agent: "The API controllers depend on the data layer interfaces. By migrating
        the data layer first, we avoid temporary compilation errors in the
        controllers and can validate each layer independently."

查看代理的工作

智能体提供多种评审其工作的方式。

源代码管理

智能体建议处理单独的分支,以及边工作边提交更改。 使用标准 Git 命令查看代理的更改:

git log --oneline -10
git diff main..<agent-branch>

工作流文件

代理在.github/upgrades/{scenarioId}/ 中维护多个文件,为您提供完整的可见性:

File 它显示的内容
tasks.md 可视进度概述,其中包含所有任务、状态指示器(✅ 已完成、🔄 正在进行、⬜ 挂起)和进度条。
execution-log.md 完成按时间顺序排列的审计追踪,其中包含智能体执行的每项操作、执行时间以及当时发生的情况
assessment.md 解决方案的初始分析,包括依赖项、中断性变更和升级复杂性
scenario-instructions.md 你的偏好和代理的学习决策
tasks/{taskId}/progress-details.md 每个任务的详细信息:遇到的生成错误、解决方法、测试结果和决策

恢复中断的工作

关闭聊天或关闭 IDE。 智能体可无缝处理这种情况。

代理将所有状态存储在存储库中 .github/upgrades/ 。 启动新会话时,代理会检查当前状态并立即知道:

  • 哪个场景处于活动状态。
  • 哪些任务已完成、正在进行或挂起。
  • 存在的工件(评估、计划、任务文件)。
  • 是否任何任务都显示为过时(卡在上一个会话的 🔄 状态)。

过时的任务检测

如果某个任务正在上一个会话中执行,代理会识别该任务可能已过时,并提供继续、重启或跳过的选项。

小窍门

由于状态位于 .github/upgrades/ 存储库内部,因此它会随代码一起传输。 将分支推送到远程计算机,将其拉取到其他计算上,智能体会立即从中断的位置继续执行。

跨多个会话工作

大型升级(例如 20 个项目解决方案、复杂的框架升级或多步骤现代化)通常跨越数天或数周的多个会话。 智能体自然会处理多会话工作:

  • 持久状态:一切都在.github/upgrades/。 没有可丢失的内存状态。
  • 会话独立性: 每个聊天会话都是独立的。 代理每次都会从状态文件重新构造其上下文。
  • 跨 IDE 支持:在 VS Code 中启动,然后在 Visual Studio 或 Copilot CLI 中继续执行。 状态文件夹是共享协定。

多会话工作的小窍门

  • 提交状态文件夹。 推送 .github/upgrades/ 到分支以备份文件夹并使其对团队可见。
  • 在会话之间评审。 阅读 tasks.mdexecution-log.md 以回顾上一个会话中发生的情况。
  • 在学习时更新首选项。 如果在测试中发现需要改变代理的方法,请在下一个会议开始时告诉代理。

寻求帮助

不确定代理能做什么或者目前进展如何? 询问:

想要了解的内容 要说什么
可用的升级方案 “你能做什么?“哪些方案可用?”
当前进度 “当前状态是什么?”“显示进度”
升级计划 “解释计划”“引导我完成任务”
评估详细信息 “向我显示评估”“评估发现了什么?”
可用的技能 “你拥有什么技能?“列出技能”
特定决策 “你为什么选择 X 超过 Y?”
风险或问题 “此升级有什么风险?

有效沟通

交互的质量直接影响结果的质量。

明确范围

“仅将 Data.Access 和 Data.Models 项目升级到 .NET 10”为代理提供明确的焦点。 “升级所有内容” 可以正常运行,但代理会自行就排序和优先级做出更多决策。

共享上下文

除非共享业务约束,否则智能体不会了解业务约束:

  • “我们正在进行升级,因为Azure 应用服务将在11月停止对.NET 8的支持。”
  • “这是一项高流量生产服务,API 响应中没有行为更改。

表达约束

告诉智能体不应该做什么,而不仅仅是应该做什么:

  • “不要更改公共 API 图面-我们有外部使用者。
  • “我们尚无法升级 Newtonsoft.Json,拥有共享合同的团队尚未升级。
  • “不要触摸旧版报告模块,这是单独重写的。

提供反馈

正面反馈与纠正一样有帮助,可确认智能体在做正确的事情。

  • “这种升级看起来很好,对其他存储库项目执行相同的方法。
  • “这有效,但我们更喜欢在此代码库中进行构造函数注入而不是属性注入。

快速参考

情况 要说什么
开始新的升级 “将解决方案升级到 .NET 10”
恢复以前的工作 “继续”“状态是什么?”
切换到引导模式 “暂停”“切换到引导模式”
切换到自动模式 “继续”“继续而不询问”
修改决策 “实际上,使用 X 而不是 Y”
设置首选项 “始终为此解决方案执行 X”
查看更改 “显示更改的内容” 或检查 Git 日志
撤销更改 “还原上次更改”
询问原因 “你为什么选择这种方法?
跳过任务 “暂时跳过此任务”
获取帮助 “你能做什么?