我们今天聊聊如何破解GitHub Copilot的代理模式提示词,来看看它背后的工作原理,希望能帮助大家更好地理解智能化IDE的设计和应用,进而开发出更棒的产品和服务。
1、GitHub Copilot代理模式的基本功能
Copilot的智能体模式是人工智能编程辅助的新一步。它就像一个独立的程序员,能够按照用户的指令完成多个编码任务——比如分析用户的项目代码库、读取相关文件、给出文件编辑的建议,甚至执行终端命令和测试。它会对编译和代码检查中的错误进行响应,实时监控终端和测试结果,自动纠正问题,直到任务完成为止。目前在VS Code中的Insiders版本已可使用,而稳定版的Visual Studio Code则还在等待正式发布。
Copilot的代理模式以更灵活和自主的方式运作,力求达到预期结果。它处理请求时,会反复执行以下几个步骤:
- 自主识别需要编辑的内容和文件。
- 提供代码修改和终端命令以完成任务。比如,Copilot可能会负责编译代码、安装包、运行测试等。
- 监控代码编辑和终端命令的输出,及时调整以解决出现的问题。
代理工作模式
理想情况下,用户可以提前准备好PRD需求文档、前端和后端开发文档、API工作流和测试文档,全天候让智能编程IDE运转,出错了也有代理来修正。这或许是未来编程智能化的趋势。
项目开发文档
2、提示词的基本结构
GitHub Copilot代理是一款高智能的编码助手,通过结构明确的工作流程来理解、分析并执行用户的请求。根据工作流程图和指令设计,其完整的工作流程如下:
1. 用户交互阶段
用户首先提出与编程相关的请求或问题,可能是想实现新功能、修复bug、解释代码或寻求解决方案。此时,代理会被指示“不要做出假设”,而是先收集必要的上下文信息。

2. 上下文收集阶段
在收到请求后,代理会主动利用多种工具来收集上下文信息:
轻松了解编程助手的工作流程
· 搜索代码库(search_codebase):这个工具可以在整个代码库里进行智能搜索,找到跟你需求相关的代码片段。
· 文件搜索(file_search/grep_search):通过输入文件名或者具体的文本内容,精准找到需要的文件。
· 读取文件和目录(read_file/list_dir):可以直接读取某个文件的内容,或者列出目录的结构,帮助你理解项目是怎么组织的。
· 获取错误和变更(get_errors/get_changed_files):识别出代码中的编译错误、语法问题,以及版本控制上的变更。
这些工具让助手能全面把握项目的背景,包括使用的语言、框架、库、编码风格和架构。指令也很清楚地说明:“这是你的责任,确保尽量收集所有必要的信息。”
3. 代码执行阶段
在获取了上下文后,助手就进入执行阶段了:
· 编辑文件(edit_file):可以直接对代码文件进行精准的修改,不需要你手动去操作。
· 运行终端命令(run_in_terminal/get_terminal_output):执行各种命令,比如安装依赖、编译代码或者跑测试。
· 验证更改(multi_tool_use.parallel):同时调用多个工具来确认修改是否符合预期,比如检查是否引入了新的错误。
每次修改之后,助手都会被要求调用 get_errors 来确认更改没有引入新的问题,必要时还会修复这些问题。
4. 反馈用户
完成工作后,助手会给用户提供简洁明了的反馈,告知已完成的操作、遇到的挑战和可能的后续步骤。指令要求保持答案“简短且不带个人色彩”。整个过程形成一个闭环,让助手在复杂的编程任务中展现出像人类程序员一样的能力,不仅懂代码,还能主动探索工作环境、创造性地思考并进行全面修复,同时遵循最佳实践和用户的喜好。每一步操作都是精心设计的,确保助手在不超出权限的情况下,最大化地发挥编程辅助的作用,提供高质量的代码建议和实现。

所以每次用户进行操作时,大语言模型都会判断是否需要调用这些工具,直到任务完成为止!
3、助手模式的工作原理
当用户通过代理模式向 Copilot 发送请求时,首先会根据下拉菜单中选择的 LLM 发出提示信息。这些提示内容包括:
- 用户的查询内容
- 工作区的大致结构(而不是完整的代码库,以保护隐私)
- 当前项目的上下文
- 工具的描述(可选工具调用结果)
Copilot 定义了一套工具,供 LLM 使用,每个工具都有特定的功能,帮助 Copilot 完成工作。
通过这些工具,Copilot 可以在工作区内搜索、读取文件内容、执行终端命令、获取编译或 lint 错误,并根据推测的建议进行更改(性能优化仍在进行中)。工具的种类也在不断增加,因为我们在尝试更多的工具,以提升 Copilot 在代理模式下的表现。
根据提示内容,它内置了一系列工具:
• search_codebase:进行自然语言搜索,查找与你问题相关的代码或文档。
• run_in_terminal:在终端中执行一个命令。
• edit_file:修改文件内容。
• file_search:按照模式搜索工作区中的文件,只返回最多20个匹配的文件路径。
• read_file:读取文件内容。
• list_dir:列出目录中的文件。
轻松搞定文件操作,了解这些工具吧!
• get_terminal_output:这个命令可以让你获取之前在终端中执行的命令输出。
• get_errors:用来查找文件的编译或lint错误,帮助你快速定位问题。
• get_changed_files:这里可以获取工作区内所有文件的变更列表,具体以Git diff的形式呈现。
每个工具都有详细的使用指南,帮你搞清楚怎么用、何时用。举个例子,read_file这个工具的说明是这样的:
{
"name": "read_file",
"description": "读取文件内容时,你需要指定感兴趣的行范围。如果文件较大,会给你一个大概的文件结构。如果返回的内容不够用,你可以再调用这个工具获取更多内容。",
"parameters": {
"type": "object",
"properties": {
"filePath": {
"description": "要读取文件的绝对路径。",
"type": "string"
},
"startLineNumberBaseZero": {
"type": "number",
"description": "从哪一行开始读取,索引从0开始。"
},
"endLineNumberBaseZero": {
"type": "number",
"description": "读取到哪一行结束,索引也是从0开始的。"
}
},
"required": ["filePath", "startLineNumberBaseZero", "endLineNumberBaseZero"]
}
}
现在,OpenAI的模型能力和Claude系列的表现还不太一样,不过Copilot使用了相同的提示词模板。未来,Copilot会把代理模式的支持扩展到更多的LLM模型,并为每个模型量身定制提示。
参考资料:
https://code.visualstudio.com/blogs/2025/02/24/introducing-copilot-agent-mode

GitHub Copilot的代理模式真是个强大的工具,能自动处理许多编码任务,让开发变得高效多了。期待稳定版的正式发布!