使用 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 提供多种交互模式。为手头任务选择合适的模式可以节省时间并获得更好的结果。
| 工具 | 最适合 | 示例 |
|---|---|---|
| 行内建议 | 在编写代码时保持流畅 | 内联建议、变量名、样板代码 |
| 询问(聊天) | 提问、头脑风暴、探索想法 | “此项目中的身份验证是如何工作的?” |
| 内联聊天 | 无需切换上下文的目标性就地编辑 | 重构函数、添加错误处理 |
| 代理 | 需要自主规划和工具使用的多文件更改 | 端到端地实现功能 |
| 规划 (Plan) | 实施前的结构化规划 | 设计架构或迁移策略 |
| 智能操作 | 内置的专业一步式任务 | 生成提交信息、修复错误、重命名符号 |
选择合适的智能体类型
与智能体协作时,请选择与您的任务和工作流相匹配的智能体类型。每种类型在交互性、速度和隔离性上都有不同的取舍。
-
使用本地智能体进行交互式工作。 本地智能体在您的编辑器中运行,并可完全访问您的工作区、工具和扩展。当您需要快速迭代、查看实时更改或使用 VS Code 特定工具(如 内置浏览器 或 MCP 服务器)时,请选择它们。
-
将定义明确的任务卸载给后台智能体。 当任务足够明确,以至于无需监控每一步时,请使用 Copilot CLI 或 云端智能体。
-
使用云端智能体进行团队协作。 云端智能体 在远程运行并可创建拉取请求,非常适合需要团队审查的任务,或者当您想直接将 GitHub 问题分配给智能体时。
-
为独立任务运行并行会话。 启动多个智能体会话(横跨本地、后台和云端环境),以同时处理不相关的任务。通过 会话列表 进行监控。
-
在智能体类型之间进行移交。 从本地智能体开始进行交互式探索和规划,然后移交给后台或云端智能体进行实施。对话历史记录会随之传递。
编写有效的提示词
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 会自动执行代码搜索以收集相关上下文。当您的提示词含糊不清时,您可以使用
#<文件>、#<文件夹>或#<符号>在提示词中引用特定文件、文件夹或符号来引导 AI。 -
要从网页或 GitHub 仓库拉取信息,请使用
#fetch为 AI 提供超出您代码库的最新信息,或使用 GitHub MCP 等 MCP 服务器提供的工具。 -
引用源代码管理更改、终端输出或测试失败等 VS Code 环境上下文,以帮助 AI 理解项目的当前状态并提供更相关的响应。
-
添加图像或屏幕截图,让 AI 分析视觉内容。
-
使用 内置浏览器 预览您的应用并选择页面元素作为上下文。
更多信息,请参阅 向聊天提示词添加上下文 和 配置工具。
选择合适的模型
每个 AI 模型都有不同的优势。有些擅长推理,有些擅长代码生成或提供更快的响应。为您的任务选择合适的模型可以改善结果。
-
将模型与任务复杂度匹配。 对于简单的补全和样板代码,请使用快速模型。对于规划、调试或架构决策,请切换到推理优化模型。
-
使用最新模型。 新模型通常具有改进的功能。VS Code 会持续添加对新模型和模型版本的支持。请查看 可用模型 并使用最新版本。
-
在提示词文件和智能体中固定模型。 在您的提示词文件或自定义智能体定义中指定首选模型,以确保特定任务始终使用正确的模型。
-
尝试并比较。 如果您对某个响应不满意,请尝试不同的模型。对于同一个提示词,不同的模型可能会产生显著不同的结果。
-
调整推理模型的思考工作量。 在模型选择器中使用 思考工作量控制,以增加复杂任务的工作量,或减少简单任务的工作量。
-
使用 BYOK(自带密钥)以获得额外控制权。 提供您自己的 API 密钥以获得更多的模型选择和托管选项。
-
考虑积分消耗。 功能更强的模型每个 Token 消耗更多的 AI 积分。自动模型选择会自动平衡质量和成本。有关更多建议,请参阅 优化 AI 积分使用。
更多信息,请参阅 选择 AI 模型 和 Copilot Chat 可用模型。
先规划,后执行
对于跨越多个文件的复杂更改,请将规划与实施分开。这种方法可以防止 AI 解决错误的问题,并避免在需要丢弃的代码上浪费 AI 积分。
- 探索。 在进行更改之前,使用询问模式或子智能体来阅读相关代码并了解其工作原理。
- 规划。 使用 规划智能体 创建结构化的实施计划。在执行前对计划进行审查和细化。
- 实施。 切换到智能体模式并根据计划进行实施。包含测试或预期输出,以便智能体可以验证自己的工作。对于较长的任务,移交给 后台智能体 或 云端智能体。
- 审查。 使用 检查点 审查进度,如果智能体偏离轨道则回退,或者在生成的拉取请求上 请求 Copilot 代码审查。
更多信息,请参阅 上下文工程工作流。
审查并验证 AI 输出
AI 生成的代码可能包含 Bug、安全问题或细微的逻辑错误。请始终将 AI 输出视为需要审查的起点。
-
接受前先行审查。 在接受更改之前阅读生成的代码。注意 AI 可能做出的边缘情况、错误处理和假设。
-
AI 更改后运行测试。 在提示词中包含测试用例,以便 AI 可以验证自己的工作。如果 AI 没有自动运行测试,请在继续之前自行运行它们。
-
使用检查点回退。 如果智能体偏离轨道,请使用 检查点 回退到已知的良好状态,而不是试图修复连带错误。
-
检查安全问题。 审查 AI 生成的代码是否存在常见漏洞,如注入缺陷、硬编码凭据或缺失输入验证。避免将凭据或敏感数据粘贴到提示词中。
更多信息,请参阅 GitHub Copilot 安全性 和 GitHub Copilot 信任中心。
管理上下文和会话
当对话充斥着不相关的上下文时,AI 的响应质量可能会下降。请主动管理您的会话。
-
为不相关的任务开启新会话。 不要将不相关的问题堆积在一个对话中。上下文污染会降低响应质量,并将 Token 浪费在不相关的历史记录上。
-
移除不相关的历史记录。 删除不再相关的过往问题和响应,或者开启一个全新的会话。
-
压缩上下文。 使用 /compact 并提供指令,以选择性地压缩上下文,仅保留最相关的信息。压缩可减少随后续每个请求发送的 Token,这有助于 管理 AI 积分使用。
-
使用子智能体进行调查。 使用 子智能体 暗示 AI 独立执行研究和探索,这样调查结果就不会弄乱您的主上下文。
-
选择正确的会话类型。 为当前代码使用本地会话以处理需要立即关注的快速任务,为可在本地运行且与主上下文隔离的任务使用后台任务,或使用可从团队协作中受益的云端会话。
-
通过并行会话扩展。 为独立任务并行运行多个会话以节省时间并保持上下文独立。您可以横跨本地、后台和云端环境同时运行多个会话,并通过 VS Code 中的 会话列表 在它们之间切换。
-
使用分叉(Fork)而非重试。 使用
/fork来探索备选方案而不丢失上下文,而不是从头开始并重新建立上下文。
更多信息,请参阅 会话管理、工作区索引 和 优化 AI 积分使用。
处理大型代码库
Copilot 旨在有效地处理大型、复杂和多根工作区。使用这些实践可以大规模地获得最佳结果。
-
使用工作区索引。 VS Code 使用语义搜索、语言智能和 GitHub 代码搜索来自动索引您的项目,以进行深入的跨文件推理。这适用于小型项目和大型企业代码库。对于大型仓库,请使用 远程索引,以便在您的仓库以及 GitHub 上的相关仓库中获得快速、全面的结果。
-
使用多根工作区限定工作范围。 对于 Monorepo(单体仓库)或包含多个服务的项目,使用 多根工作区 为 AI 提供清晰的边界和聚焦的上下文。
-
提供项目级指令。 使用 自定义指令 来描述 AI 无法仅从代码中推断出的项目架构、模块边界和约定。这为 AI 提供了架构级更改所需的上下文。
-
为独立更改运行并行会话。 将大任务拆解为独立的子任务,并在 并行会话 中运行,每个会话专注于代码库的不同部分。
-
对跨模块更改使用规划智能体。 对于跨越多个文件或模块的更改,先使用 规划智能体 创建结构化的实施计划,然后再执行。
相关资源
- 上下文工程指南
- 自定义概述
- 速查表
- GitHub Copilot 安全性
- GitHub Copilot 文档中的 GitHub Copilot 使用最佳实践