GitHub Copilot 教程

文章来源:https://vscode.it-docs.cn/docs/copilot/overview.html

GitHub Copilot 为 Visual Studio Code 增加了多代理开发功能。规划好你的方法,然后让AI代理在项目中实现并验证代码变更。并行运行多个代理会话:本地、后台或云端。从一个中心视角管理所有角色。内联建议、内联聊天和智能行为会帮助你完成整个编码流程。

代理与代理会话

代理端到端地处理完整的编码任务。给代理一个高级任务,它会将工作拆分成步骤,编辑文件,运行终端命令,调用工具,并在遇到错误或测试失败时自我纠正。每个任务都运行在一个代理会话中,这是一个持续存在的对话,你可以跟踪、暂停、继续或交接给另一个代理。

重要

你们组织可能在VS Code中禁用了代理。请联系你的管理员以启用此功能。

从中央视图管理会话

并行运行多个代理会话,每个会话专注于不同的任务。聊天面板中的会话视图为你提供了一个统一的地方来监控所有活跃会话,无论是本地运行、后台还是云端运行。查看每次会话的状态,切换,查看文件变更,然后从中断处继续。

了解更多关于管理Agents课程的信息。

随时执行代理

代理可以在本地的VS Code中运行进行交互式工作,在机器后台运行以实现自主任务,或者在云端通过拉取请求实现团队协作。你也可以使用像Anthropic和OpenAI这样的第三方代理。任何时候,将任务从一个坐席类型交给另一个,完整的对话记录都会继续。

聊天视图中会话类型选择器的截图,包含本地、后台、云端和第三方代理选项。

了解更多关于代理类型和委托的信息,或遵循代理教程

构建前先做好规划

在编写任何代码之前,使用内置的Plan代理将任务拆分成结构化的实施计划。计划代理会分析你的代码库,提出澄清问题,并制定逐步计划。当计划看起来合适时,交给实现代理执行,无论是本地、后台还是云端。

了解更多关于与Agent一起规划的信息。

你能做什么

  • 端到端构建一个功能。用自然语言描述一个特征,代理搭建项目架构,跨多个文件实现逻辑,并运行测试以验证结果。
  • 调试并修复失败的测试。把一个失败的测试指向一个代理,它会读取错误,追踪代码库的根本原因,应用修复,然后重新运行测试以确认。了解更多关于用AI调试的信息。
  • 构或迁移代码库。比如让代理规划从一个框架迁移到另一个框架,它会在文件间协调地应用变更,同时验证构建。
  • 通过拉取请求进行协作。将任务委托给云代理,由其创建分支,实施变更,并向团队提交拉取请求。了解更多关于云代理的信息

入门

步骤1:设置Copilot

  1. 将鼠标悬停在状态栏中的Copilot图标上,选择“设置Copilot”。
  2. 选择一种登录方式并按照提示作。如果您还没有Copilot订阅,您已注册Copilot免费套餐

步骤2:开始你的第一次Agent会话

  1. 打开聊天视图(Ctrl+Alt+I)。
  2. 检查生成的代码。代理创建文件、安装依赖,并根据需要执行命令。
  3. 进来/init为你的项目配置 AI 配置。这会创建自定义指令,帮助代理理解你的代码库并生成更好的代码。

输入一个提示,描述你想构建的内容,例如:Prompt (Agent) Open in VS Code

Create a basic Node.js web app for sharing recipes. Make it look modern and responsive.

关于涵盖内联建议、代理、内联聊天和自定义的完整实践教程,请参见“在VS Code中开始使用GitHub Copilot”。

更多用AI编程的方法

内联建议

Copilot 在你输入时提供代码建议,从单行补全到完整函数实现。下一步编辑建议可以根据你当前的编辑情况预测下一个逻辑上的更改。

了解更多关于VS Code中的内联建议

在线聊天

按Ctrl+I可直接在编辑器中打开聊天提示。描述一个变动,Copilot会建议原地编辑,这样你就能保持编码流程。用于针对性的重构、解释或快速修复,无需切换上下文。

了解更多关于VS Code中的内联聊天

智能行动

VS Code 包含预定义的 AI 驱动作,用于常见任务:生成提交信息、重命名符号、修复错误以及在项目中运行语义搜索。

VS Code 中智能行为菜单的截图,显示修复测试失败的选项。

了解更多关于VS Code中的智能动作

根据你的工作流程定制AI。

当代理了解你项目的惯例、拥有合适的工具并使用适合该任务的模型时,他们能发挥最佳作用。VS Code 提供了多种方法来定制 AI,使其从一开始就生成适合你代码库的代码,而不是事后手动修改。

  • 自定义说明:定义项目范围的编码规范,让AI生成符合你风格的代码。
  • 代理技能:教授跨 VS Code、GitHub Copilot CLI 和 GitHub Copilot 编码代理的专业能力。
  • 自定义代理:创建承担特定角色的代理,如代码审查员或文档编写者,配备自己的工具和指令。
  • MCP 服务器:通过 MCP 服务器或 Marketplace 扩展工具扩展代理。
  • 钩子:在特定事件执行自定义命令,实现自动化和策略执行。

支持

GitHub Copilot 聊天由 GitHub 提供支持,联系方式为 https://support.github.com

想了解更多关于Copilot的安全性、隐私、合规性和透明度的信息,请参阅GitHub Copilot信任中心常见问题解答。

定价

你可以免费开始使用 GitHub Copilot,但每月对内嵌建议和聊天互动有限制。如果需要更长时间的使用,可以选择多种付费套餐。

查看详细的GitHub Copilot定价

下一步

Read more

Java高性能开发实战(1)——Redis 7 持久化机制

Java高性能开发实战(1)——Redis 7 持久化机制

Redis版本:7.0.15 1.概述 Redis是一个基于内存的数据库,这意味着其主要数据存储和操作均在内存中进行。这种设计使得Redis能够提供极快的读写速度(通常达到微秒级别),适用于高性能场景,如缓存 * 然而,由于内存的易失性(断电后数据会丢失),Redis提供了持久化机制:将内存中的数据保存到磁盘中,确保数据在Redis服务重启或崩溃后能够恢复。通过持久化,可以避免数据丢失,提高数据的可靠性 * Redis提供两种持久化方式 * RDB(Redis Database):生成数据集的快照实现持久化 * AOF(Append Only File):记录所有写操作命令,以追加方式写入文件 2.RDB RDB指的是Redis的一种持久化机制,其核心是生成Redis数据在某个时间点的快照 2.1 快照原理 由于Redis是单线程应用程序,在线上环境时,不仅要处理来自客户端的请求,还要执行内存快照操作(进行文件IO)。单线程同时处理客户端请求和文件IO时会严重降低服务器性能,甚至阻塞客户端请求。因此,Redis使用 fork 和

By Ne0inhk
Java 大视界 -- 基于 Java+Kafka 构建高可用消息队列集群:实战部署与性能调优(442)

Java 大视界 -- 基于 Java+Kafka 构建高可用消息队列集群:实战部署与性能调优(442)

Java 大视界 -- 基于 Java+Kafka 构建高可用消息队列集群:实战部署与性能调优(442) * 引言: * 正文: * 一、 Kafka 高可用集群核心认知:先懂原理,再谈部署 * 1.1 Kafka 高可用核心原理 * 1.1.1 核心组件协同逻辑 * 1.1.2 高可用核心:多副本与 Leader 选举机制 * 1.2 Kafka 高可用集群架构设计要点 * 1.3 技术栈选型:Java+Kafka 核心版本适配 * 二、 实战部署:Java+Kafka 高可用集群搭建 * 2.1 部署前准备:环境初始化

By Ne0inhk
【Java-MySQL】主键、外键有什么区别?

【Java-MySQL】主键、外键有什么区别?

以下是主键(Primary Key)与外键(Foreign Key)的核心区别及适用场景的总结,结合最新数据库实践整理: 🔑 一、本质区别 特性主键外键核心作用唯一标识本表记录(如身份证号)关联其他表的主键(如订单关联用户ID)唯一性✅ 值唯一且不可重复❌ 值可重复(可关联同个主键)空值❌ 不允许为空✅ 允许为空(如“未绑定用户”订单)数量限制每张表仅能有一个主键每张表可有多个外键数据约束强制非空 + 唯一性强制引用其他表的主键值(保证数据一致性) 💡 通俗比喻:主键👉🏻 学生的学号(唯一标识一个人)外键👉🏻 成绩单上的学号(关联学生表,证明成绩属于谁) ⚙️ 二、实际应用场景 ✅ 主键适用场景 1. 标识核心实体: * 用户表 users 中的 user_id(不可重复) 2. 加速查询: * 自动创建聚集索引,大幅提升检索效率

By Ne0inhk
数据结构(Java版)第八期:LinkedList与链表(三)

数据结构(Java版)第八期:LinkedList与链表(三)

专栏:数据结构(Java版) 个人主页:手握风云 目录 一、链表中的经典面试题 1.1. 链表分割 1.2. 链表的回文结构 1.3. 相交链表 1.4. 环形链表 一、链表中的经典面试题 1.1. 链表分割         题目中要求不能改变原来的数据顺序,也就是如上图所示。我们先定义一个cur引用去遍历这个链表,用每个结点的val值与x进行比较,然后利用尾插的方法把结点插入进两个链表中。我们先定义bs、be、as、ae四个引用来表示两个链表的头尾,在尾插的时候需要注意,利用ae.next = node;ae = node,记录下尾结点,保证ae永远指向最后一个结点,同时be.next=as,连接上两个链表。 class ListNode{ int val;

By Ne0inhk