[控场AI]
· 13 分钟阅读· 6,555 字

VS Code Copilot Agent全拆解:36个概念一次讲透

VS Code Copilot Agent全拆解:36个概念一次讲透

Copilot Agent模式通过工具调用循环执行真实操作,本文系统梳理其核心概念与使用地图。

文章指出,VS Code Copilot 的 Agent 模式与普通聊天的本质区别在于 Agentic Loop:模型能读文件、改代码、跑命令并依据真实结果迭代,而非仅凭猜测。Copilot 有三个入口(VS Code 聊天面板、CLI、GitHub Coding Agent),本质是同一个 Agent。要驾驭它,需理解 Tools 赋予行动能力、Prompt 与上下文引用减少猜测、上下文窗口是有限短期记忆、Instructions/Prompt 文件/Skill 是工作守则、MCP 接外部服务、Hooks 自动触发、子代理分担任务、Checkpoint 短期回退、Git/WorkTree 长期版本管理。最后强调成本控制的关键是切小任务、保持上下文干净,而非节省输入字数。

为什么你的Copilot只是个聊天机器人?

大多数人装完VS Code的Copilot,只用到了它的自动补全功能,顶多在聊天面板里问几句代码问题。但真正让Copilot变成AI Agent的,是聊天面板里的Agent模式。

普通聊天和Agent模式的根本差别在于:你交代的任务会直接变成电脑上的实际操作。比如你说"把这个项目的测试全部跑通",它会先读文件、改代码、跑测试,看到报错再改,直到测试真的通过为止。这个"读-改-跑-看结果-再改"的循环叫Agentic Loop,也是Agent和聊天机器人最本质的区别——它不是在猜,它是在看结果。

据B站UP主的系统梳理,这套体系涉及三十多个概念,但不需要第一天全部学会。先认识名字、知道各自管什么,打开设置面板时就知道自己在调系统的哪一块,这才是关键。

三个入口,同一个Agent

Copilot有三个使用入口,本质上是同一个Agent:

  • VS Code聊天面板(快捷键CMD+Control+I):左边文件树、中间代码、右边聊天,这是最常见的画面
  • 终端里的Copilot CLI:装好后输入copilot即可使用,适合服务器环境或不想开编辑器的时候
  • GitHub上的Coding Agent:在网页上派任务,后台跑完后开一个PR交回

新手最常漏掉的一步是工作文件夹。你想让Agent看到什么,就在那个文件夹里打开VS Code。假设要整理十份客户访谈,先建一个访谈项目文件夹,把记录放进去,再用VS Code打开这个文件夹,然后让它去读。它默认只在你打开的工作区里活动——这一步做对了,后面一大半的混乱都不会发生。

Agentic Loop 与普通代码补全的关键差异

Copilot 最初被认知的形态是“补全”(Completion):根据光标前的代码预测下一行。这种方式不执行、不验证,只依赖训练数据中的模式。而 Agent 模式引入了工具调用循环(Agentic Loop),模型不再只输出文本,而是可以发出“读文件”“改文件”“跑命令”等结构化请求,系统执行后将结果(成功或报错)作为新的上下文回传给模型,模型据此决定下一步。这一闭环让模型能依据真实反馈修正行为,而非一次性猜测。理解这一点,就能明白为何 Agent 能“跑通测试”而补全不能——补全没有执行权,Agent 有。

Agent的手脚:Tools工具

模型本身没有手和脚,能说但不能自己动你的电脑。让它动起来的东西叫Tools,一开始认识三类就够了:读文件、改文件、跑命令。你看到它正在读文件、改代码、跑命令,那就是它在用工具。你不需要指定每一步用哪个工具,把目标说清楚,它自己会选择,工具会把执行结果传回来,它才知道刚才那一步成没成功。

问你这个操作

权限询问是Agent模式下最重要的交互环节。Agent能建文件、改文件、删文件还能跑命令,所以每一步都可能停下来问你这个操作要不要放行。看到权限询问先看清楚它准备做什么、影响哪些文件,再决定;看不懂就直接拒绝,然后问它"你刚才想干什么,我没看懂"。这样你在用的过程中也在积累自己的理解。哪些可以自动放行、哪些必须问你,都能在设置里调。

Prompt与上下文:说清楚,递到手

Prompt就是你输入给AI的要求,不需要特殊语法,但要求越具体,它越知道往哪个方向做。只说"帮我做个网站"太笼统,留下太多要它猜的细节。你可以说:做一个周末摄影课的报名页,放上课程时间、地点和作品范例,报名按钮连到我现有的表单——这样不但说了要有什么,还说了这个页面的目的是什么。如果你自己也没想清楚,可以在Prompt里让它先问你。

VS Code里还有一个普通聊天没有的能力:引用上下文。在输入框里打#可以直接指定文件、文件夹或某个符号,打@可以指定工作区、终端或某个扩展。这不是噱头——它的作用是让Agent不用靠猜去找资料,该看的文件你直接递到它手上,它就不会翻遍整个项目。输入框里打/会弹出一份指令清单,比如解释代码、生成测试、修错误;输入/init会让它读一遍你的项目,帮你生成一份初始的自定义指令文件。

上下文窗口:Agent的短期记忆

Context window可以理解成Agent的短期记忆——你交代的要求、它读进来的文件、命令的输出全都放在这里,而且容量有上限。如果你先让它整理访谈,再让它改网站,又让它规划行程,这些互不相关的信息堆在一起,短期记忆就会很乱。建议切换到不相关的工作时直接开一个新会话。

这个容量用token来算。模型处理文字时会把文字切成一小块一小块,这些小块就叫token,一个token不一定等于一个汉字,也不一定等于一个英文单词。你输入的要求、它读进来的资料、它给你的回答全都要算。哪怕你只打了一句"帮我整理这十份访谈",它还是要去读那十份文件——那是input,产出报告那是output,计费看的是整个过程的总和,不是你敲了几个字。

关掉VS Code明天打开,聊天记录还在,你可以从聊天面板的历史里找回之前的会话接着往下做。同一件事做久了会话会变得很长,上下文很快被塞满——Copilot CLI会在快满的时候自动压缩,把前面的过程浓缩成摘要;在VS Code里你也可以自己开一个新会话把结论带过去,但摘要一定会丢掉细节,所以重要的东西让它存成一份实体文件,比如把大纲和进度写进一个markdown,下次直接让它读。

Token 与上下文窗口的关系

Token 是模型处理文本的最小单位,英文大约 1 个 token 对应 0.75 个单词,中文则一个汉字可能占 1 到 2 个 token。上下文窗口(Context Window)指模型单次调用时能接收的最大 token 数,通常包括系统提示、对话历史、工具返回结果以及模型即将生成的输出。不同模型的窗口大小不同,例如 GPT-4o 约为 128k token,Claude 3.5 Sonnet 为 200k token。当对话历史或工具输出超过窗口上限时,系统必须截断或压缩,这就解释了为什么长会话会丢失细节,以及为何要主动管理上下文。

全局设定:Instructions、Prompt文件与Skill

GitHub目录下的Copilot Instructions.md是性价比最高的一个设定——就是你写给Agent的工作说明书。如果你每次开新会话都要重复交代"用中文回答""这个项目用pnpm",那这些话就该写进这个文件,它每次开始工作都会自动读一遍。本质就是一个Markdown纯文本文件,不需要写代码,直接写中文就行。不知道写什么,就在聊天里输入/init让它先根据项目生成一版,生成之后你要亲自看一遍,确认它理解没跑偏,再把你在意的规矩补上去。

这个文件放在哪里决定它管多大范围:放在仓库的.github目录下就是这个项目通用;可以给某个目录单独写一份instructions,只在这个目录生效——比如前端用React、后端用Fastify,各写各的互不干扰;"回答一律用中文"这种个人偏好放在用户级设置里;"这个客户叫什么、原始资料放在哪"这种项目专属信息留在项目里。分清楚层级,你切到另一个项目时才不会把上一家的规矩带过去。

有些要求不是一句话,而是一整套流程。比如每次代码审查都有固定顺序:先看逻辑、再看边界、最后看安全。这套步骤可以存成一个prompt文件放在.github/prompts目录下,下次在聊天框里打一个斜杠就能直接调出来。如果流程更长、还带脚本和模板,那就该做成Skill——一个文件夹,里面有一份SKILL.md写清楚什么时候该用、具体分几步、每步做什么。关键在于它的加载方式:Agent平时只看到每个Skill的一句简介,等任务真的需要了才把详细内容读进来,这个设计叫渐进式披露——因为上下文很贵,不能一开场就把所有手册全塞进去。VS Code直接支持Skill文件夹,而且跟其他工具用的是同一套开放标准。

MCP、Hooks与扩展:把能力接进来

前面讲的是它能做什么,这一节讲它不该看到什么。你的工作区里不是每一份文件都适合让它读——有些文件里写着数据库密码,有些是客户的联系方式。如果这次只是改网页上的一个标题,它完全没必要读那些。

有些是客户的联系方式

你可以通过设置排除掉这些文件,或用权限把它挡在外面。但这里有个盲点:你挡住了读文件的工具,却允许它跑命令,而有些命令本身就能把文件内容打印出来——所以别以为堵住一个工具就万无一失。对新手来说,最稳的做法还是把这次真正需要的资料单独放一个干净的文件夹。

真实工作里资料不会都乖乖躺在你的文件夹里:有些在云笔记里,有些在日历上,有些挂在Jira或Linear里。Agent要真的帮你处理日常琐事,就需要一个标准管道接上这些服务——MCP就是这套标准协议。在VS Code的MCP配置里接上一个Server,就等于给它加了一组新工具:接上日历它就能帮你总结下周的行程;如果那个服务还能建日程、你也给了权限,它甚至能帮你把会议卡上去。能做到多深,取决于那个服务提供了什么工具以及你放行了什么权限。

要特别分清楚Skill和MCP是两件事:Skill是方法——先读会议记录再写周报;MCP是能力——真的能拿到那些会议记录的工具。你不可能只写一份Skill,它就突然能登录你的日历账号。

Hooks是另一类东西:事件触发器。比如设定成每次它改完代码就自动跑一次格式化,或者在它准备收工之前强制跑一次类型检查。有了Hooks,你就不用每次在旁边重复输入同样的要求。需要判断力的交给Skill,必须机械执行的交给Hook。

MCP 协议的基本原理

MCP(Model Context Protocol)是由 Anthropic 提出并开源的标准化协议,旨在让 AI 应用以统一方式连接外部数据源和工具。它采用客户端-服务器架构:Copilot 作为 MCP 客户端,通过配置连接到 MCP 服务器(如日历服务、数据库、Jira 等),服务器向客户端声明自己提供哪些工具(tools)和资源(resources)。Agent 在需要时调用这些工具,就像使用内置工具一样。MCP 的价值在于解耦——服务提供方只需实现一次 MCP 服务器,任何支持 MCP 的 AI 客户端都能接入,无需为每个客户端单独开发插件。

子代理、检查点与版本管理

Subagent子代理可以理解成它给你派的小助手,适合有些任务很好时但又不需要你全程盯着的情况。比如主对话正在写一份长报告,写到一半需要去查三份很长的资料——与其让主对话停下来去读,不如派一个子代理去做这件苦差事。子代理有自己独立的上下文窗口,它读了哪些庞杂的资料、走过哪些弯路都留在他自己那边,主对话只要收它最后的结论。

但交代任务时一定要说清楚最后交回什么。你说"把这份资料看完",它可能真把原文整段贴回来,那上下文还是爆了;说"只回传条列式重点、资料来源和发现矛盾的地方",主对话收到的才干净。如果几件事完全独立,你甚至可以同时派几个出去并行跑。如果某类任务总是交给同一种角色,可以把它固定下来——在.github/agents目录下写一份文件指定它的职责、能用哪些工具,比如一个专门做安全审查的只读不改,一个专门写测试的只碰测试目录。

第一个救命功能是checkpoints检查点。你一定有过这种经验:让它大改一版,改完发现方向全错,只想回到刚才还能动的那个状态。VS Code在Agent改文件的时候会在背后留下可以回退的状态,你可以在对话里回退到之前的某一步,把文件恢复回去,然后换一个更清楚的Prompt重新来一次。但它不是整台电脑的时光机——能恢复的只是它自己通过编辑工具改过的内容,如果它是通过命令改的,或者别的软件也动了这些文件,那就撤不回来了。

第一个救命功能是checkpoints

短期的后悔用checkpoints,长期的版本管理是Git。你把项目做到一个满意的状态就存一个commit,附一句说明;几天后某个功能坏了,你就能比对历史看是哪一次改坏的,真修不好也能切回之前那个还能跑的版本。很多新手会把Git和GitHub搞混:Git是装在你电脑上的工具,GitHub是那个放代码的网站,你完全可以在自己电脑上默默用Git,不需要注册任何账号。

有时候你会想同时开两个会话干活,一个改首页版面,一个修报名表单的bug。如果两个会话操作同一个文件夹,它们很可能改到同一个文件,两边改动互相覆盖,项目就乱了。WorkTree就是为了解决这个:同一个仓库长出几个独立的工作目录,每个目录负责一条独立的开发线,在Git里叫分支,两边各改各的,做完再合并,而且共享同一套历史记录。不过要记住,WorkTree隔离的只是你本机的文件,如果两边连的是同一个线上数据库,那边的改动不会被隔离。

Git WorkTree 的机制

Git WorkTree 允许同一个仓库同时检出多个工作目录,每个目录对应不同的分支。传统上切换分支需要 stash 或 commit 当前修改,而 WorkTree 让不同分支的文件同时存在于磁盘的不同路径下,互不干扰。例如主工作目录在 ~/project 对应 main 分支,可以再执行 git worktree add ../project-feature feature-branch 创建 ~/project-feature 目录并检出 feature-branch。两个目录共享同一个 .git 对象库和历史记录,但工作区文件独立。这解决了多会话并行修改同一仓库时的文件冲突问题,但正如原文所说,它只隔离本机文件,不隔离共享的外部服务(如数据库)。

模型选择与成本控制

Copilot背后不是一个模型,是一排模型,你在聊天面板上方的模型选单里可以随时切换。快模型便宜,但有时候听不懂人话,让你返工三次,算下来不一定划算。新手先用默认的就够了,等你有了固定常做的任务,再拿同一句话给不同模型跑一遍比较结果——比的不只是速度,更重要的是它交出来的东西能不能直接用。

有些地方会给你一个推理强度的选项:只是改个文件名不需要它想很久;如果是反复出现的bug,需要分析线索、比较原因,就值得调高。调高会更慢更贵,也不保证更对,新手先用默认,遇到真要仔细判断的问题再往上调。

最后是最现实的问题:钱。Copilot现在主要有两种花法,一种是订阅付月费换一定额度,另一种是按量计费用多少算多少。额度现在很多是按用量折算的——Agent跑一次任务背后可能是几十轮工具调用,所以你看到的一次请求背后可能是几十次模型调用,这也是为什么大家会觉得Agent比聊天贵得多。想控制成本,最有效的不是省那几行字,而是把任务切小、把上下文收干净——让他少走弯路,比让他少说话更省钱。

一张地图:这些概念各自管什么

把今天这些东西串起来:聊天面板是你下指令的入口,Tools是它能真正动手的双手,上下文是它此刻脑子里正在处理的东西,指令文件、Prompt文件、Skill是你开工前塞给它的工作守则;内置能力不够就接MCP,任务太大就派子代理,代码被改乱了短期用checkpoint、长期用Git和WorkTree。

你绝对不需要第一天就把这些全部学会。先认识这些名字,知道它们各自管什么,以后再看进阶教程、打开设置面板时,你就知道自己在调系统的哪一块——这才是这支视频真正想给你的东西:一张地图。

#VS Code Copilot Agent#Agent模式#Copilot 教程#AI Agent#MCP#Copilot Instructions#Agentic Loop#Copilot Skill
分享:

相关推荐