Skip to content
Published at:

Github Copilet

真实世界的需求

新项目

  • 大的技术选型(Electronjs、Qt、Flutter)
  • 功能实现的技术选型(UI、音视频)
  • 功能实现
    • 学习相关技术
    • 对比不同方案的优缺点
    • 功能开发
    • bug修复
  • 终端运行报错
  • 代码审查
  • 性能优化
  • 代码重构
  • Git 操作:提交信息
  • 测试
    • 编写测试代码
    • 修复测试错误
  • 文档

已有项目

  • 架构设计
  • 项目结构
  • 每个代码文件的功能
  • 如何运行项目
  • 如何构建项目
  • 如何调试项目
  • 代码看不懂
    • 解释翻译下代码
    • 生成文档
  • 某个功能是如何实现

技术演进路径

  • 阶段⼀:智能代码补全时代(2018-2020)
  • 阶段⼆:辅助编程时代(2021-2023)
  • 阶段三:Vibe Coding时代(2025年初)
  • 阶段四:范式编程时代(2025年⾄今)
    • 写文档->AI生成代码
    • 需要描述清楚需求,提供足够的上下文
    • AI负责规划方法、编写代码,并在整个项目中验证结果

AI 对话

  • AI已经完成了从0到1的能力演进
  • 追求返回结果的准确性、相关性及可用性
  • 需要提供清晰的指令和提示词,足够的上下文信息Context
    • 当返回结果不准确时:提供的信息是不是正确的、是不是不够准确(更多的限定条件),从而提高回答的准确性

Github Copilot

把AI Agent带到了VScode: 描述你想构建的内容,Agent负责规划方法、编写代码,并在整个项目中验证结果。

选Github Copilot的理由:

  • 背靠微软(Github被微软收购)
    • 微软投资押宝OpenAI(上百亿美元),转化成果被集成到微软的产品
  • Github 足够大的代码库,提供了丰富的训练数据和应用场景
  • 另外态度开放,整合和多家的模型:
    • Anthropic的Claude(估值500亿)
    • Google的Gemini
    • 支持自定义
  • VSCode周更新(之前是月更)、平台(不仅是个产品)
    • 对手 Cursor/Windsurf/Zed 压力

Inline 提示

  • Ghost text suggestions(幽灵文本建议):在编辑器中开始输入时,Copilot 会在当前光标位置提供淡色显示的幽灵文本建议
  • Next edit suggestions(下一步编辑建议):通过 Copilot 的下一步编辑建议(又称 Copilot NES)预测你的下一次代码修改。基于你正在进行的编辑,NES 会同时预测你下一处想编辑的位置以及该进行的具体修改内容。

Ghost text suggestions

  • 调试:命令>GitHub Copilot: Open Completions Panel 补全调试
  • 通过快捷键 Tab 接受建议,或继续输入以获得更多建议。
  • 切换补全提示
  • 按单词补全部分

Note: 如果希望Suggestions更加准确,前面多写点函数注释、函数大致功能描述、及实现流程,提供更多的上下文信息给Copilot 示例:// 创建一个函数用来校验邮箱号,返回boolean类型,使用正则表达式来校验邮箱号的格式是否正确

Next edit suggestions (NES)

  • 根据你正在进行的编辑,预测你下一个可能想要进行的编辑位置和内容。
  • 可以帮助你快速完成一系列相关的编辑任务,提高编码效率。

Smart Action

Note: 这部分更新迭代较快,内容可能不太准确 文档:https://code.visualstudio.com/docs/copilot/copilot-smart-actions

常见的开发任务,如:代码重构、bug修复、测试编写等,都可以通过Smart Action来完成。不用自已去写提示词

  • 生成Git 提交信息
  • 重命名符号:变量、函数、Class名
    • F2重命名,Copilot会提供智能的重命名建议
  • 生成文档:'/doc'命令 (inline chat)
  • 生成测试代码: 斜杠命令/tests
  • 解释代码 Explain code:
    • 斜杠命令/explain
    • 选中代码,Inline Chat中选 Explain
  • 修复代码Error:
    • 斜杠命令/fix
    • 选中代码,Inline Chat中选 Fix
  • 修复测试Error
  • 修复终端Terminal Error
    • 选中终端报错内容,右键Add Terminal Selection to Chat
    • 选中终端报错内容,对话中使用#terminalSelection工具将选中的终端内容作为上下文输入
  • 审查代码 Review code: 选中代码,Inline Chat中选 Review

对话

  • Chat view: 在专门的聊天界面中与Copilot进行更深入的对话,适合复杂问题的讨论和多轮交互
  • Inline chat: 在编辑器或终端中直接与Copilot进行对话,获取即时帮助和建议
    • Editor Inline Chat代码编辑器
    • Terminal Inline Chat终端中直接启动对话
  • Quick chat: 通过快捷键快速启动与Copilot的对话,适合需要快速获取信息或建议的场景

Agents

Agent运行环境分类:

  • 本地Agent:在本地运行,访问本地文件系统和终端命令,适合需要频繁访问本地资源的任务。
  • Copilot Cli:在本地后台的终端中运行,适合需要直接在命令行环境中执行的任务。
  • Cloud: 在云端运行,Github仓库
  • Claude: Anthropic的模型,适合需要更强推理能力的任务
  • Codex: OpenAI的模型,适合需要更强代码生成能力的任务

Agent分类:

  • Ask Agent:在不修改文件的前提下,回答关于编程概念、代码库或 VS Code 本身的问题
  • Agent(默认):自主规划并实现跨文件修改,运行终端命令,并调用各种工具
  • Plan Agent:在编写任何代码之前,先创建结构化、分步骤的实现计划
  • 自定义Agent

模型

选择合适的模型,比如,不能去找硬件问软件的问题,去找骨科医生看脑科的问题;默认自动(平衡型,不会太激进)

模型分类:

  • OpenAI:GPT系列
    • 不带后缀:属于通用模型, 通用能力强,适合问答、解释、总结、生成文档,也能处理常规代码任务, 场景:日常聊天、解释报错、阅读代码、生成说明文档、轻量代码修改
    • mini:通用模型的轻量级型号, 响应更快、成本更低,适合高频、简单、短上下文任务, 场景:Ask Agent、快速问答、补全提示、简单脚本、小范围文本改写
    • Codex:偏代码专长模型, 更关注代码生成、代码理解和编辑任务, 场景:补全函数、实现 TODO、生成测试、修复小型 bug、局部重构
    • Codex-Mini:轻量代码模型, 在速度和代码能力之间做平衡, 场景:常规代码问答、简单改动、生成样板代码、快速迭代
    • Codex-Max:更强的代码推理版本, 更适合复杂代码修改、多文件联动、较长链路的实现任务, 场景:Agent 模式下的大块功能开发、跨文件重构、排查复杂问题、结合工具执行任务
  • Anthropic(OpenAI出来的人):Claude系列
    • Haiku(轻量版):响应快,适合简单查询和轻量任务; 场景:Ask Agent、术语解释、快速总结、简单文本生成
    • Sonnet(平衡版):质量与速度较均衡; 场景:Agent、Plan Agent、代码阅读、文档编写、中等复杂度实现
    • Opus(旗舰版):更强的推理和长文本处理能力; 场景:复杂分析、系统设计、长文生成、复杂规划与拆解
  • Google: Gemini系列
    • Flash(轻量版):速度快,适合简单问答与快速响应; 场景:快速查询、轻量聊天、简单说明生成
    • Pro(高阶版):更适合复杂任务与更高质量输出; 场景:复杂问答、深入分析、多步骤任务
  • X: Grok:更偏实时信息理解和开放式对话风格; 场景:热点话题讨论、开放式探索、轻量调研
  • Github: Raptor mini:适合简单查询和轻量任务; 场景:Ask Agent、简单解释、快速辅助
  • third-party:其他第三方模型,用户可以根据需要选择和集成适合自己项目的模型
    • 场景:对特定领域、成本、部署方式或合规性有要求时使用

推理程度(思考强度):

  • 低:更快返回结果,适合简单问答、补全、轻量修改
  • 中:兼顾速度和质量,适合大多数日常开发任务
  • 高:适合复杂推理、系统设计、跨文件修改、排查疑难问题,但通常更慢

模型选择建议:根据任务的复杂度、对结果质量的要求以及对响应速度的需求来选择合适的模型

  • Ask Agent:优先选择 mini、Haiku、Flash 这类轻量模型
  • Plan Agent:优先选择 Opus、Pro、Codex-Max 这类更擅长推理和规划的模型
  • Agent:优先选择 Sonnet、Codex、Codex-Max、Pro 这类更适合代码生成和多步骤执行的模型
  • Inline Chat / Ghost Text:优先选择速度快的轻量模型
  • 复杂重构、多文件修改、调试疑难问题:优先选择高推理强度模型
  • 日常使用不确定时:先用默认自动,让 Copilot 根据任务类型选择模型

模型对比: https://docs.github.com/zh/copilot/reference/ai-models/model-comparison

对话Chat流程

  • 提交Prompt提示词
    • 选择对应Agent
    • 选择模型及推理程度
    • 选择工具
    • 输入提示词
  • 暂停
  • 修改Prompt提示词
  • Agent提出澄清式问题
    • 选择回答
    • 修改Prompt提示词
  • 审查修改的内容: “keep"/"undo"
    • 查看后台终端命令
  • 恢复历史版本Checkpoint
    • Checkpoint类似Git的Commit提交
  • 调整Prompt提示词重试:重新修改上一次的提交Prompt提示词(点击上一次的Prompt提示词,修改后重新提交)
  • 从历史会话节点Fork,开始新的会话
  • 查看信息:
    • 选择自动模型时,查看Copilot选择了哪个模型
    • 上下文Windows大小,超过会导致部分上下文被截断,影响结果的准确性
    • 子Agent的执行过程和调用的工具信息
    • Chat Debug
    • Agent Debug

权限级别

  • Default Approvals: 默认审批,用户需要批准每个建议
  • Bypass Approvals: 跳过审批,用户不需要批准每个建议,适合需要快速迭代的场景
  • Autopilot (预览功能): 自动驾驶模式,Copilot会根据用户的使用习惯和上下文自动调整审批级别,提供更智能的建议体验

添加上下文到Prompt中

  • Implicit context:VS Code 会自动将当前活动文件、当前选中内容以及文件名作为上下文包含进来
  • #-mentions:在聊天输入框中输入 #,可以显式引用文件(#file)、文件夹、符号symbols、你的代码库(#codebase)、终端输出(#terminalSelection)或像 #fetch 这样的工具
  • @-mentions:输入 @ 可以调用专门的聊天参与者,例如 @vscode@terminal,分别针对各自领域做了优化
    • 类比:类似群组里面@特定人,可以直接调用特定的参与者来获取更专业的回答
  • Vision:可以附加图片,例如截图或 UI 模型图,作为提示词的上下文

会话

使用:一个问题、一个主题、一个功能用一个单独的会话来讨论,保持上下文的相关性和清晰度,避免上下文混乱和结果不准确

Ask Agent 会话示例:

通用代码和技术问题:

- What is a linked list?
- Provide 3 ways to implement a search feature in React.
- Explain the difference between async/await and promises.

代码库相关问题:

- Explain how authentication works in #codebase
- Where is the database connection string configured? #codebase
- How do I build this #codebase?

代码生成或编辑

- Add a login button and style it based on #styles.css
- Create a meal-planning web app using React and Node.js
- Refactor this code to use async/await

测试代码和质量保证

- Add unit tests for the user service.
- Fix the failing tests #testFailure

调试和错误修复

- Fix the issues in #problems
- Why is this function returning undefined?

版本控制和协作

- Summarize the #changes
- Generate release notes based on the #changes

上下文Context提示

Context

  • 系统指令:定义代理行为的内置准则。
  • 自定义项:你设置的 AI 自定义,包括自定义代理、技能和自定义指令。
  • 用户消息:你发送给代理的当前消息。
  • 对话历史:当前会话中到目前为止交换的消息。
  • 隐式上下文:你正在编辑的文件、当前选中内容、可见的错误和 git 状态。
  • 显式引用:你用 #-mentions 引用的文件、文件夹、符号symbols、你的代码库、终端输出或像 #fetch 这样的工具。
  • 工具输出:文件读取、终端命令、代码库搜索结果和代理会话期间其他工具调用的结果。

上下文工程

workflow

  • 整理项目范围内的背景信息:使用自定义指令将相关文档(例如架构、设计、贡献者指南)作为所有Agent交互的背景信息包含在内
  • 生成实施计划:使用自定义Agent和提示创建规划角色,以生成详细的功能实施计划
  • 生成实现代码:使用自定义指令,根据符合编码规范的实现计划生成代码

Demo:写一个修改桌面壁纸的应用

Note: 由于时间关系,过下交互流程

  • 项目:写一个桌面壁纸应用
  • 提示词:用electronjs写一个桌面壁纸应用,基于electron-vite #web https://electron-vite.org/ 模板来初始化,包管理器用pnpm,用Vue写UI
  • 规划Planning:
    • 反问澄清需求
    • 生成实施计划
  • 实现
    • 加需求:增加主题切换功能,可以切换Light/Dark两种主题
    • 加需求:增加定时切换功能,可以设置每天自动切换壁纸
  • 运行项目
  • 文档:补全README.md文档
  • Git提交信息

自定义AI

  • 全局指令:定义项目范围内的基础信息,例如架构概述、设计原则、贡献者指南(代码风格、命名模式或首选库)等,确保所有Agent交互都以这些信息为基础
  • 基于文件的指令:针对不同文件应用不同的规则;例如,有些应用到vue文件,有些应用到js/ts文件
  • Agents:定义不同类型的Agent对象,例如代码审查、测试编写、性能分析等,明确它们的职责和权限
  • Prompts:编码特定任务, 用/调用,例如/create-prompt create-component生成一个可重用的提示词模板
  • Skills:专业化的功能和工作流程
  • MCP: 三方功能服务;不同的MCP提供不同的功能,例如代码质量检查、性能分析、文档生成等
    • Figma MCP服务:提供设计相关的功能,例如从设计稿生成UI代码
  • Hooks: 定义在特定事件或条件下触发的操作,例如代码提交后自动运行测试、PR 创建时自动生成文档等,确保这些操作与项目的工作流程紧密集成

目录结构示例:

your-project/
  .github/
    copilot-instructions.md          # Project-wide coding standards (Step 1)
    instructions/
      react.instructions.md          # React-specific conventions (Step 2)
    prompts/
      create-component.prompt.md     # Reusable component scaffolding (Step 3)
    agents/
      reviewer.agent.md              # Read-only code reviewer (Step 4)
    skills/
      update-readme/
        SKILL.md                     # README updater workflow (Step 5)
  • /init生成.github/copilot-instructions.md文件,包含项目范围内的背景信息,例如架构概述、设计原则、贡献者指南等
  • /add-instructions react生成.github/instructions/react.instructions.md文件,包含React相关的编码规范、最佳实践和常用库的使用指南
  • /add-prompt create-component生成.github/prompts/create-component.prompt.md文件,包含一个可重用的提示词模板,用于生成符合项目规范的React组件代码
  • /add-agent reviewer生成.github/agents/reviewer.agent.md文件,定义一个只读的代码审查Agent,专门用于审查代码更改并提供反馈,但不允许修改代码
  • /add-skill update-readme生成.github/skills/update-readme/SKILL.md文件,定义一个技能,用于自动更新项目的README文件,例如根据代码更改自动生成文档或更新使用说明

自定义配置

文档结构:

  • Yaml: 头信息
  • Markdown:内容

资源:https://github.com/github/awesome-copilot

Debug

  • Chat Debug: 对话 Debug
  • Agent Debug: 规划和执行的 Debug
  • Context Windows: 上下文窗口,查看当前上下文信息
    • Compact Conversation 压缩对话窗口,显示核心上下文信息

最佳实践

  • 为AI优化项目
  • 为任务选择合适的工具
  • 选择正确的Agent
  • 写出有效的提示词
  • 提供正确的上下文
  • 选择正确的模型
  • 先Plan,在Implement,最后Review
  • 审查和验证AI生成的代码
  • 管理上下文和会话
  • 处理大型项目注意事项

TODO

  • Copilot CLI: 在本地后台的终端中运行,适合需要直接在命令行环境中执行的任务
  • Claude Code: Anthropic的模型,适合需要更强推理能力的任务

References

快捷键

Windows/Linux:

  • Ctrl+Alt+I - 打开聊天视图
  • Ctrl+I - 在聊天视图中输入语音聊天提示
  • Ctrl+N - 在聊天视图中新建一个聊天会话
  • Ctrl+Shift+I - 在聊天视图中切换为使用 Agent
  • Ctrl+I - 在编辑器或终端中启动内联聊天
  • Ctrl+I(长按)- 启动内联语音聊天
  • Tab - 接受内联建议,或跳转到下一个编辑建议
  • Escape - 关闭内联建议

Mac:

  • ⌃⌘I: 打开聊天视图
  • ⌘I: 在聊天视图中输入语音聊天提示
  • ⌘N: 在聊天视图中新建一个聊天会话
  • ⇧⌘I: 在聊天视图中切换为使用 Agent
  • ⌘I: 在编辑器或终端中启动内联聊天
  • ⌘I(长按): 启动内联语音聊天
  • Tab: 接受内联建议,或跳转到下一个编辑建议
  • Escape: 关闭内联建议

工具

  • #agent: 调用Agent
  • #edit: 直接修改代码文件
  • #execute: 运行终端命令并将输出作为上下文输入
  • #read: 读取文件内容并将其作为上下文输入
  • #fetch: 从网络获取内容并将其作为上下文输入
  • #search: 搜索代码库,获取相关代码片段、函数定义、文档等信息
  • #todo: 生成TODO备注
  • #vscode: 搜索VS Code功能、设置和扩展API
  • #web: 搜索网络内容,获取最新信息,或访问特定的在线资源
  • #terminalSelection: 将当前终端选中内容作为上下文输入
  • #changes: 获取当前代码更改的摘要信息,帮助生成提交信息或发布说明

斜杠Slash命令

  • /init: 根据你的项目结构和编码模式生成或更新工作区指令(copilot-instructions.md 或 AGENTS.md)
  • /plan: 生成实施计划
  • /doc: 生成文档(inline chat)
  • /explain: 解释代码
  • /fix: 修复代码错误
  • /tests: 生成测试代码
  • /setupTests: 设置测试环境
  • /fixTestFailure: 修复测试错误
  • /clear: 清除当前会话的上下文和历史记录
  • /create-prompt <prompt name>: 创建一个可重用的提示词模板
  • /create-instructions <instructions name>: 创建一个自定义指令
  • /create-skill <skill name>: 创建一个自定义Skill
  • /create-agent <agent name>: 创建一个自定义Agent
  • /create-hook <hook name>: 创建一个自定义Hook
  • /<prompt name>: 执行预定义的提示词
  • /<skill name>: 执行预定义的技能
  • /debug: 进入调试模式,查看上下文信息、模型选择和工具调用等细节

对话参与者

  • @vscode: 询问有关 VS Code 功能、设置和 VS Code 扩展 API 的问题
  • @terminal: 询问有关集成终端或 shell 命令的问题
  • @github: 提问有关 GitHub 代码库、问题、拉取请求等内容的问题

参考资料

Updated at: