使用 AI 的最佳实践
本文介绍了在 Visual Studio Code 中充分利用 AI 的经过验证的最佳实践。每个部分都提供了可操作的指导,并附有指向更深入文档的链接。
针对 AI 优化你的项目
通过在配置项目和代码库时考虑 AI 的需求,你可以提高 AI 响应的准确性,并确保 AI 遵循你团队的编码标准和实践。
VS Code 支持多种机制来配置项目的 AI 行为。在聊天中输入 /init 以生成入门配置。
| 机制 | 最适合 | 开始使用 |
|---|---|---|
| 自定义指令 | 项目范围的编码标准和架构上下文 | 输入 /init 为你的项目生成始终生效的说明 |
| 自定义代理 | 专用的工作流或角色(TDD、安全审计) | 输入 /create-agent <description> 以生成自定义智能体 |
| 技能 | 特定领域的功能(测试、部署) | 输入 /create-skill <description> 以生成技能 |
| 工具和 MCP 服务器 | 连接到外部系统(数据库、API、CLI) | 在 mcp.json 中配置 |
有效项目配置的提示
- 保持说明文件简明扼要。它们会在每次聊天交互时加载。重点关注 AI 无法从代码中推断的信息,例如非默认规范、架构决策或环境设置。
- 使用
applyTo模式限定说明范围。输入/instructions来创建特定语言或特定文件夹的说明文件,而不是将所有内容放在一个文件中。 - 限制启用的工具。活动工具越少,响应速度越快、相关性越高。仅在任务需要时启用工具。
- 从搜索中排除生成的文件和干扰文件。配置 search.exclude 和 files.exclude 以便智能体文本搜索和 grep 专注于源代码。参见 通过排除设置改进智能体搜索。
有关完整的设置详细信息,请参阅 在 VS Code 中自定义智能体行为。
选择适合该任务的正确工具
VS Code 中的 AI 提供了几种交互模式。为当前任务选择正确的模式可以节省时间并产生更好的结果。
| 工具 | 最适合 | 示例 |
|---|---|---|
| 行内建议 | 在编写代码时保持流畅 | 内联建议、变量名、样板代码 |
| 询问(聊天) | 提问、头脑风暴、探索想法 | “这个项目中的身份验证是如何工作的?” |
| 内联聊天 | 无需切换上下文即可进行有针对性的就地编辑 | 重构函数、添加错误处理 |
| 代理 | 需要自主规划和工具使用的多文件更改 | 端到端实现功能 |
| 规划 (Plan) | 实现前的结构化规划 | 设计架构或迁移策略 |
| 智能操作 | 内置的专用单步任务 | 生成提交信息、修复错误、重命名符号 |
选择正确的智能体类型
使用智能体时,请选择与你的任务和工作流相匹配的智能体类型。每种类型在交互性、速度和隔离性上都有不同的权衡。
-
使用本地智能体进行交互式工作。本地智能体在你的编辑器中运行,对你的工作区、工具和扩展具有完全访问权限。当你需要快速迭代、实时审查更改或使用 VS Code 专用工具(如 集成浏览器 或 MCP 服务器)时,请选择它们。
-
将定义明确的任务分流给后台智能体。当任务足够清晰,你不需要监督每一步时,请使用 Copilot CLI 或 云端智能体。
-
使用云端智能体进行团队协作。云端智能体在远程运行并创建拉取请求,这使得它们非常适合需要团队审查的任务,或者当你想要将 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 提供任何方向。相反,应明确“更好”的含义:“降低时间复杂度”或“为空值添加输入验证”。
-
通过后续提示词进行迭代。通过在后续消息中添加约束或更正来优化响应,而不是重写整个提示词。
-
尽早纠偏。如果 AI 走向了错误的方向,请通过后续消息引导它重定向当前请求、排队后续请求,或者停止并发送新的提示词。
-
告诉 AI 提出澄清问题。如果任务含糊不清,请指示 AI 在继续之前向你提问。这比猜测需求能带来更准确的结果。
-
并行任务。如果你有多个独立的任务,请让 AI 并行运行它们以节省时间。例如,“并行对 X 和 Y 进行独立研究并总结发现。”
有关详细信息,请在 GitHub Copilot 文档中查找实用的提示词示例。
提供正确的上下文
当 AI 拥有相关的上下文时,它的响应会更准确。使用这些技巧来引导 AI 获取正确的信息
-
AI 会自动执行代码搜索以收集相关上下文。当你的提示词含糊不清时,你可以通过在提示词中使用
#<file>、#<folder>或#<symbol>引用特定的文件、文件夹或符号来引导 AI。 -
要从网页或 GitHub 仓库中拉取信息,请使用
#fetch为 AI 提供超出你代码库的最新信息,或者使用来自 MCP 服务器(如 GitHub MCP)的工具。 -
引用 VS Code 环境上下文(例如源代码管理更改、终端输出或测试失败),以帮助 AI 了解项目的当前状态并提供更相关的响应。
-
添加图片或截图,让 AI 分析视觉内容。
-
使用集成浏览器预览你的应用并选择页面元素作为上下文。
有关详细信息,请参阅向聊天提示词添加上下文和配置工具。
选择正确的模型
每个 AI model 都有不同的优势。有些擅长推理,有些则擅长代码生成或更快的响应。为你的任务选择正确的模型可以改善结果。
-
将模型与任务复杂度相匹配。将快速模型用于简单的补全和样板代码。切换到针对推理优化的模型以进行规划、调试或架构决策。
-
使用最新模型。较新的模型通常具有更强的功能。VS Code 不断增加对新模型和模型版本的支持。检查可用模型并使用最新模型。
-
在提示词文件和智能体中固定模型。在你的提示词文件或自定义智能体定义中指定首选模型,以确保针对特定任务始终如一地使用正确的模型。
-
实验和比较。如果你对某个响应不满意,请尝试不同的模型。对于相同的提示词,不同的模型可能会产生显着不同的结果。
-
调整推理模型的思考力度。使用模型选择器中的思考力度控制来增加复杂任务的思考力度,或减少简单任务的思考力度。
-
使用 BYOK 以获得更多控制权。自带你自己的 API 密钥以获得更多的模型选择和托管选项。
-
考虑额度消耗。能力更强的模型每个 token 消耗更多 AI 额度。自动模型选择会自动平衡质量和成本。有关更多提示,请参阅优化 AI 额度使用。
有关详细信息,请参阅选择 AI 模型和 Copilot Chat 的可用模型。
先规划,后实现
对于跨多个文件的复杂更改,请将规划与实现分开。这种方法可以防止 AI 解决错误的问题,并避免将 AI 额度浪费在需要丢弃的代码上。
- 探索。在进行更改之前,使用询问模式或子智能体来阅读相关代码并了解其工作原理。
- 规划。使用 Plan 智能体创建结构化的实现计划。在执行之前审查和完善该计划。
- 实现。切换到智能体模式并根据计划进行实现。包含测试或预期输出,以便智能体可以验证其自身的工作。对于较长的任务,交接给后台智能体或云端智能体。
- 审查。使用检查点来审查进度、在智能体偏离轨道时回滚,或者在生成的拉取请求上请求 Copilot 代码审查。
有关详细信息,请参阅上下文工程工作流。
审查并验证 AI 输出
AI 生成的代码可能包含漏洞、安全问题或微妙的逻辑错误。始终将 AI 输出视为需要审查的起点。
-
在接受之前进行审查。在接受更改之前通读生成的代码。注意边缘情况、错误处理以及 AI 可能做出的假设。
-
在 AI 更改后运行测试。在你的提示词中包含测试用例,以便 AI 可以验证其自身的工作。如果 AI 没有自动运行测试,请在继续之前自己运行它们。
-
使用检查点回滚。如果智能体偏离轨道,请使用检查点回滚到已知的良好状态,而不是试图修复级联错误。
-
检查安全问题。审查 AI 生成的代码是否存在常见漏洞,例如注入缺陷、硬编码密钥或缺少输入验证。避免将凭据或敏感数据粘贴到提示词中。
有关详细信息,请参阅GitHub Copilot 安全性和GitHub Copilot 信任中心。
管理上下文和会话
随着对话充斥着不相关的上下文,AI 的响应可能会下降。请主动管理你的会话。
-
为不相关的任务启动新会话。不要继续将不相关的问题堆积到一个对话中。上下文污染会降低响应质量,并在不相关的历史记录上浪费 token。
-
移除不相关的历史记录。删除不再相关过去的问题和响应,或开启一个新会话。
-
压缩上下文。使用 /compact 并提供说明以有选择地压缩上下文,仅保留最相关的信息。压缩减少了随后的每个请求发送的 token,这有助于管理 AI 额度使用。
-
验证缓存性能。在各个轮次中保持提示词的早期部分稳定,以重复使用提示词缓存并降低成本和延迟。使用缓存资源管理器检查缓存命中率并找出缓存中断的位置。
-
使用子智能体进行调查。通过使用子智能体暗示 AI 孤立地执行研究和探索,这样调查结果就不会使你的主上下文混乱。
-
选择正确的会话类型。使用本地会话来处理当前代码上需要立即关注的快速任务,使用后台任务来处理可以在本地运行且与主上下文隔离的任务,或者使用可以从团队协作中受益的云端会话。
-
通过并行会话进行扩展。针对独立任务并行运行多个会话,以节省时间并保持上下文分开。你可以跨本地、后台和云环境同时运行多个会话,并通过 VS Code 中的会话列表在它们之间切换。
-
分叉而不是重新提示。使用
/fork在不丢失上下文的情况下探索替代方案,而不是重新开始并从头建立上下文。
有关详细信息,请参阅会话管理、工作区索引和优化 AI 额度使用。
优化 AI 额度使用
本文中的许多实践也有助于你控制成本。更强大的模型、大型上下文和一次性工作都会消耗 AI 额度。少数几个杠杆具有最大的影响
-
将模型与任务相匹配。将更快、更便宜的模型用于简单的任务,并将高级模型保留用于规划、调试和架构决策。自动模型选择会为你平衡质量和成本。
-
保持上下文精简。仅发送相关的上下文,压缩长对话,并为不相关的任务启动新会话,以避免在每个请求上为不相关的历史记录付费。
-
在实现之前进行规划。将规划与实现分开可避免将额度浪费在你丢弃的代码上。
有关完整的技术集,请参阅优化 AI 额度使用。
处理大型代码库
Copilot 旨在高效处理大型、复杂且多根的工作区。使用这些实践在大规模时获得最佳结果。
-
使用工作区索引。VS Code 使用语义搜索、语言智能和 GitHub 的代码搜索自动为你的项目建立索引,以进行深度的跨文件推理。这适用于小型项目和大型企业代码库。对于大型代码仓库,请使用远程索引,以便在你的仓库以及 GitHub 上的相关仓库中获得快速、全面的结果。
-
使用多根工作区限定工作范围。对于单体仓库或包含多个服务的项目,请使用多根工作区为 AI 提供清晰的边界和集中的上下文。
-
提供项目级别的说明。使用自定义说明来描述 AI 无法单从代码中推断出的项目架构、模块边界和规范。这为 AI 提供了架构级更改所需的上下文。
-
为独立更改运行并行会话。将大任务分解为独立的子任务,并在并行会话中运行它们,每个会话专注于代码库的不同区域。
-
使用 Plan 智能体进行横切更改。对于跨越许多文件或模块的更改,请在执行前从 Plan 智能体开始创建结构化的实现计划。
相关资源
- 上下文工程指南
- 优化 AI 额度使用
- 在 VS Code 中自定义智能体行为
- 备忘单
- GitHub Copilot 安全性
- GitHub Copilot 文档中的 使用 GitHub Copilot 的最佳实践