使用 AI 的最佳实践
本文涵盖了在 Visual Studio Code 中高效利用 AI 的最佳实践。每一部分都提供了可操作的指导,并附有深入文档的链接。
优化您的 AI 项目
通过在配置项目和代码库时考虑 AI 的需求,您可以提高 AI 响应的准确性,并确保 AI 遵循团队的编码标准和规范。
VS Code 支持多种机制来配置项目的 AI 行为。在聊天中输入 /init 即可生成入门配置文件。
| 机制 | 最适合 | 开始使用 |
|---|---|---|
| 自定义指令 | 项目范围的编码标准和架构上下文 | 输入 /init 生成针对项目的常驻指令 |
| 自定义代理 | 专业工作流或角色(如 TDD、安全审计) | 输入 /create-agent <描述> 生成自定义智能体 |
| 技能 | 领域特定能力(如测试、部署) | 输入 /create-skill <描述> 生成技能 |
| 工具和 MCP 服务器 | 连接外部系统(数据库、API、CLI) | 在 mcp.json 中配置 |
有效项目配置的建议
- 保持指令文件简洁。它们会在每次聊天交互时加载。重点关注 AI 无法从代码中推断出的信息,例如非默认规范、架构决策或环境设置。
- 使用
applyTo模式来限定指令范围。输入/instructions来创建特定语言或文件夹的指令文件,而不是将所有内容塞进同一个文件中。 - 限制启用的工具。启用的工具越少,响应速度越快、相关性越高。仅在任务需要时才启用相应的工具。
有关完整设置详情,请参阅自定义概述。
为任务选择合适的工具
VS Code 中的 AI 提供多种交互模式。为手头任务选择最合适的一种,可以节省时间并获得更好的结果。
| 工具 | 最适合 | 示例 |
|---|---|---|
| 行内建议 | 编写代码时保持流畅 | 代码补全、变量命名、样板代码 |
| 提问 (Chat) | 疑问、头脑风暴、探索思路 | “此项目中的身份验证是如何工作的?” |
| 内联聊天 | 目标明确的就地编辑,无需切换上下文 | 重构函数、添加错误处理 |
| 代理 | 需要自主规划和工具使用的多文件变更 | 端到端实现某个功能 |
| 规划 (Plan) | 实施前的结构化规划 | 设计架构或迁移策略 |
| 智能操作 | 内置的专用一步任务 | 生成提交信息、修复错误、重命名符号 |
选择合适的智能体(Agent)类型
使用智能体时,请选择与您的任务和工作流相匹配的智能体类型。每种类型在交互性、速度和隔离性上都有不同的权衡。
-
使用本地智能体进行交互式工作。本地智能体在您的编辑器中运行,可完全访问您的工作区、工具和扩展。当您需要快速迭代、实时审查变更或使用 VS Code 特定工具(如集成浏览器或 MCP 服务器)时,请选择它们。
-
将明确定义的任务卸载给后台智能体。当任务足够清晰,不需要您实时监控每一步时,请使用 Copilot CLI 或云端智能体。
-
使用云端智能体进行团队协作。云端智能体在远程运行并创建拉取请求 (Pull Request),非常适合需要团队审查的任务,或者当您希望将 GitHub Issue 直接分配给智能体时。
-
为独立任务运行并行会话。启动多个智能体会话(横跨本地、后台和云端环境),同时处理不相关的任务。通过会话列表监控它们。
-
在智能体类型之间切换。首先使用本地智能体以交互方式进行探索和规划,然后交接给后台或云端智能体进行实施。对话历史记录会随之传递。
编写有效的提示词
AI 响应的质量取决于您提示词的清晰度和具体程度。这些技巧有助于您获得更好的结果。
-
明确输入、输出和约束条件。说明您要使用的编程语言、框架和库。描述预期的行为,或包含示例输入和输出。
Write a TypeScript function that validates email addresses. Return true for valid addresses, false otherwise. Don't use regex. Example: validateEmail("user@example.com") returns true Example: validateEmail("invalid") returns false -
分解复杂任务。与其一次性要求完成整个功能,不如将其拆解为范围明确的小步骤。这种方法产生的结果更可靠,也更容易及早发现问题。
-
包含预期输出以进行验证。提供测试用例、预期结果或验收标准,以便 AI 可以验证其自身的工作。这是您可以采取的最有效的做法之一。
Implement a rate limiter using the token bucket algorithm. Write unit tests that verify: 10 requests/second allowed, 11th request rejected, bucket refills after 1 second. Run the tests after implementing. -
避免模糊的提示词。像“改进这段代码”这样的提示词无法为 AI 提供任何方向。请具体说明“改进”的含义:例如“降低时间复杂度”或“为 null 值添加输入验证”。
-
通过后续提示词进行迭代。通过在后续消息中添加约束或修正来精炼响应,而不是重写整个提示词。
-
尽早纠正方向。如果 AI 的方向不对,通过后续消息引导它,以重定向当前请求、排队后续请求,或者停止并发送新的提示词。
-
让 AI 提出澄清问题。如果任务含糊不清,请指示 AI 在继续之前向您提问。这比猜测需求更能得到准确的结果。
-
并行任务。如果您有多个独立的任务,让 AI 并行运行它们以节省时间。例如:“并行执行关于 X 和 Y 的独立研究并总结结果。”
更多信息,请在 GitHub Copilot 文档中查找实用的提示词示例。
提供正确的上下文
当 AI 拥有相关上下文时,响应会更准确。使用以下技巧为 AI 提供正确的信息。
-
AI 会自动执行代码搜索以收集相关上下文。当您的提示词模棱两可时,可以通过在提示词中使用
#<file>、#<folder>或#<symbol>引用特定文件、文件夹或符号来引导 AI。 -
要从网页或 GitHub 仓库拉取信息,请使用
#fetch为 AI 提供超出您代码库的最新信息,或者使用 GitHub MCP 等 MCP 服务器提供的工具。 -
引用 VS Code 环境上下文(例如源代码管理变更、终端输出或测试失败),以帮助 AI 了解项目的当前状态并提供更相关的响应。
-
添加图像或屏幕截图,让 AI 分析视觉内容。
-
使用集成浏览器预览您的应用,并选择页面元素作为上下文。
更多信息,请参阅向聊天提示词添加上下文和配置工具。
选择合适的模型
每种 AI 模型都有不同的优势。有些擅长推理,有些擅长代码生成或快速响应。为您的任务选择合适的模型可提升效果。
-
将模型与任务复杂度匹配。对简单的补全和样板代码使用快速模型。对于规划、调试或架构决策,请切换到针对推理优化的模型。
-
使用最新模型。新模型通常具备更强的功能。VS Code 会持续增加对新模型和模型版本的支持。检查可用模型并使用最新的版本。
-
在提示词文件和智能体中固定模型。在您的提示词文件或自定义智能体定义中指定首选模型,以确保在特定任务中始终使用正确的模型。
-
尝试并对比。如果您对响应不满意,请尝试不同的模型。对于同一个提示词,不同模型可能会产生显著不同的结果。
-
调整推理模型的思考深度。使用模型选择器中的思考深度控制,为复杂任务增加思考量,或为简单任务减少思考量。
-
使用 BYOK(自带 API 密钥)以获得更多控制。使用您自己的 API 密钥以获得更多的模型选择和托管选项。
更多信息,请参阅选择 AI 模型和Copilot Chat 的可用模型。
先规划,后执行
对于涉及多个文件的复杂变更,请将规划与实施分开。这种方法可以防止 AI 解决错误的问题。
- 探索。在使用 ask 模式或子智能体在进行更改之前读取相关代码并了解其工作原理。
- 规划。使用规划智能体 (Plan agent) 创建结构化的实施方案。在执行前进行审查和完善。
- 实施。切换到智能体模式并根据计划进行实施。包含测试或预期输出,以便智能体可以验证其自身的工作。对于较长的任务,请交接给后台智能体或云端智能体。
- 审查。使用检查点 (checkpoints) 来查看进度、在智能体偏离轨道时回滚,或在生成的拉取请求上请求 Copilot 代码审查。
更多信息,请参阅上下文工程工作流。
审查并验证 AI 输出
AI 生成的代码可能包含 Bug、安全问题或细微的逻辑错误。请始终将 AI 输出视为需要审查的起点。
-
接受前先行审查。在接受更改之前通读生成的代码。注意 AI 可能做出的边缘情况、错误处理和假设。
-
AI 更改后运行测试。在您的提示词中包含测试用例,以便 AI 可以验证其自身的工作。如果 AI 没有自动运行测试,请在继续之前自行运行。
-
使用检查点回滚。如果智能体偏离轨道,请使用检查点回滚到已知的良好状态,而不是试图修复连带错误。
-
检查安全问题。审查 AI 生成的代码是否存在常见漏洞,如注入缺陷、硬编码密钥或缺失输入验证。避免将凭据或敏感数据粘贴到提示词中。
更多信息,请参阅GitHub Copilot 安全性和GitHub Copilot 信任中心。
管理上下文和会话
当对话充斥着不相关的上下文时,AI 的响应可能会下降。请主动管理您的会话。
-
为不相关的任务开启新会话。不要将无关的问题堆积在同一个对话中。上下文污染会降低响应质量。
-
移除不相关的历史记录。删除不再相关的过去问题和响应,或者开启一个新会话。
-
压缩上下文。使用 /compact 并提供指令,有选择地压缩上下文并仅保留最相关的信息。
-
使用子智能体进行研究。通过使用子智能体,暗示 AI 在隔离状态下进行研究和探索,这样研究结果就不会干扰您的主要上下文。
-
选择正确的会话类型。使用本地会话处理当前代码中需要立即关注的快速任务;使用后台任务处理可以在本地运行且与主上下文隔离的任务;使用云端会话以利于团队协作。
-
通过并行会话进行扩展。为独立任务运行多个并行会话,以节省时间并保持上下文分离。您可以同时运行多个会话(横跨本地、后台和云端),并通过 VS Code 中的会话列表进行切换。
处理大型代码库
Copilot 旨在高效处理大型、复杂且包含多个根文件夹的工作区。使用以下实践在大规模场景下获得最佳结果。
-
使用工作区索引。VS Code 使用语义搜索、语言智能和 GitHub 的代码搜索来自动为您的项目建立索引,从而实现深度的跨文件推理。这适用于小型项目和大型企业代码库。对于大型仓库,请使用远程索引,以便在整个仓库以及 GitHub 上的相关仓库中获取快速、全面的结果。
-
使用多根工作区 (multi-root workspaces) 限定工作范围。对于 Monorepo(单体仓库)或包含多个服务的项目,请使用多根工作区为 AI 提供明确的边界和专注的上下文。
-
提供项目级指令。使用自定义指令来描述项目的架构、模块边界和 AI 无法仅从代码中推断出的规范。这为 AI 提供了进行架构级变更所需的上下文。
-
为独立的变更运行并行会话。将大型任务分解为独立的子任务,并在并行会话中运行它们,每个会话专注于代码库的不同部分。
-
为跨领域的变更使用规划智能体。对于跨越许多文件或模块的变更,请先使用规划智能体,在执行前创建结构化的实施方案。
相关资源
- 上下文工程指南
- 自定义概述
- 备忘清单 (Cheat sheet)
- GitHub Copilot 安全性
- GitHub Copilot 使用最佳实践(位于 GitHub Copilot 文档中)