详细摘要 摘要
生成:2025-06-22 19:41摘要详情
- 音频文件
- 2024-09-28 | Visual Studio Code | Using Custom Instructions with Copilot to enhance our prompts
- 摘要类型
- 详细摘要
- LLM 提供商
- openai
- LLM 模型
- gemini-2.5-flash
- 温度
- 0.3
- 已创建
- 2025-06-22 19:41:58
摘要内容
概览/核心摘要 (Executive Summary)
本总结详细阐述了 Visual Studio Code 2024年8月1.93版本中引入的“实验性自定义 Copilot 指令”功能及其应用。该功能允许用户通过全局或工作区设置,向 Copilot 聊天预置指令或引用文件(如 Markdown 规范、SQL 数据库定义),从而使 Copilot 具备项目感知能力。
演示者通过一个实际项目展示了这一功能的强大之处。首先,他利用一个定义了项目结构和代码风格的 Markdown 文件,指导 Copilot 自动生成了符合预期的项目目录结构。接着,通过引入一个 SQL 数据库定义文件,Copilot 能够准确地生成数据模型,并根据用户指定的 ORM 工具(如 Sequelize 或 Drizzle)进行适配,甚至能识别模型间的关联和复杂键。最后,演示者通过提供购物车服务的 Markdown 规范,成功让 Copilot 生成了服务逻辑及其配套的测试代码,并能根据指令优化测试断言。
尽管演示过程中遇到了一些小问题(如需手动删除多余的测试文件),但最终在约 15分钟 内,Copilot 成功生成了一个“相当可用”的应用程序基础结构和核心服务代码,并通过了 7个 测试。这表明自定义指令极大地提升了 Copilot 的实用性,使其能够理解项目上下文、遵循特定规范,并自动化生成符合要求的初始代码,从而显著加速开发流程。演示者强调,该功能目前仍处于实验阶段,并鼓励用户提供反馈。
Visual Studio Code 1.93 新特性:实验性自定义 Copilot 指令
Speaker 1 介绍了 Visual Studio Code 2024年8月1.93版本中的一项新功能——“实验性自定义 Copilot 指令”。他表示,这个“实验性”的词语对他极具吸引力。
- 功能描述:
- 用户可以通过用户设置、全局设置或工作区设置来“劫持”Copilot 聊天。
- 核心机制是“预置指令”(prepend instructions),这些指令可以是文本,也可以是文件。
- 这意味着 Copilot 在每次聊天时都会参考这些预置的指令或文件内容。
- 实验性状态:
- 该功能目前处于实验阶段。
- Speaker 1 鼓励用户提供反馈和想法。
项目设置与结构生成
Speaker 1 打开了一个示例项目,并演示了如何配置自定义指令。
- 初始配置:
- 通过“偏好设置”>“工作区”>“打开设置”来添加实验性配置。
- 配置中引用了一个名为
code style.md的 Markdown 文件。
code style.md的作用:- 该文件定义了项目的名称和期望的目录结构。
- Speaker 1 强调,这个文件可以根据项目进展进行修改,未来也可以包含其他规范文件。
- Copilot 生成项目结构:
- 当 Speaker 1 提问“我的应用程序的最佳结构是什么?”时,Copilot 引用了
code style.md文件。 - Copilot 根据文件内容,生成了推荐的目录结构:
Config、Lib、Models、Repository、Services、Tess。
- 当 Speaker 1 提问“我的应用程序的最佳结构是什么?”时,Copilot 引用了
- 自动化脚本的应用:
- 为了方便审查和执行,Speaker 1 让 Copilot 生成了一个 Bash 脚本(
init.sh)来创建上述目录结构。 - 运行
init.sh后,项目目录结构成功创建。 - Speaker 1 强调,Copilot 能够理解
code style.md中的规范,并据此生成代码,这使得通过 Markdown 文件传递规范变得非常有效。
- 为了方便审查和执行,Speaker 1 让 Copilot 生成了一个 Bash 脚本(
数据库集成与模型生成
Speaker 1 进一步探索了将 SQL 文件作为自定义指令的可能性。
- 引入 SQL 文件:
- 他引入了一个名为
chinook test database的 SQL 文件,其中只包含表定义,不含插入数据(以避免文件过大)。 - 将该 SQL 文件添加到
settings.json的自定义指令中。
- 他引入了一个名为
- Copilot 生成数据模型:
- 当 Speaker 1 提问“使用 Sequelize(原文作'salize')生成模型”时,Copilot 引用了 SQL 文件。
- Copilot 能够根据 SQL 定义,准确生成数据模型,包括:
- 模型间的关联(associations)。
- 可空性(nullability)。
- 复合主键(composite primary keys)。
- 例如,
track model[不确定,可能指Track模型] 能够识别多对多关联。
- ORM/数据访问工具的适应性:
- Speaker 1 演示了通过修改指令为“使用 Drizzle”,Copilot 也能相应地生成 Drizzle 框架下的模型代码。
- 他指出,只要 Copilot 了解数据库结构,就能进行各种操作,例如添加全文索引。
- 模型生成脚本:
- Speaker 1 再次让 Copilot 生成了一个 Bash 脚本,用于通过 Sequelize CLI(原文作'si cli')生成模型。
- 运行该脚本(
models.sh)后,模型和数据库迁移文件被自动创建,大大简化了工作。
服务与测试代码生成
为了进一步展示自定义指令的灵活性,Speaker 1 对项目结构进行了整理,并引入了新的规范。
- 文件组织与文档化:
- 将
code style.md移动到docs文件夹。 - 将
init.sh和models.sh移动到scripts文件夹。 - 他强调,这种组织方式有助于代码审查,因为 Copilot 的输出被清晰地追踪。
- 将
cart.md规范的引入:- 在
docs文件夹中创建了cart.md文件,其中包含了购物车服务的规范。 - 更新
settings.json,将docs/code style.md和docs/cart.md都作为自定义指令引用。
- 在
- Copilot 生成购物车服务:
- 当 Speaker 1 提问“生成购物车服务”时,Copilot 根据
code style.md的风格指南和cart.md的规范,生成了购物车服务的逻辑。 - 生成的服务代码包括:使用 UUID、创建购物车、设置客户、添加商品等,并包含必要的检查。
- Copilot 同时生成了购物车服务的测试代码。
- Speaker 1 强调,Copilot 的作用是提供“起步代码”,而非最终的应用程序。
- 当 Speaker 1 提问“生成购物车服务”时,Copilot 根据
- 测试代码的生成与优化:
- Speaker 1 对生成的测试代码不满意,因为其中包含多个断言。
- 他要求 Copilot“重做测试,只包含一个断言”,Copilot 随即进行了优化,使每个测试只包含一个断言。
测试运行与结果
最后,Speaker 1 尝试运行生成的代码和测试。
- 环境准备:
- 将生成的购物车服务代码复制到
lib/services/cart.[未明确文件类型]。 - 将生成的测试代码复制到
tests/cart.test.[未明确文件类型]。 - 安装了
uuid依赖,并配置了jest作为测试运行器。
- 将生成的购物车服务代码复制到
- 测试过程中的问题与解决:
- 首次运行
npm run test失败,提示“测试套件必须包含至少一个测试”。 - 他发现项目中存在其他由 Copilot 生成的测试文件,手动删除了这些多余的测试。
- 再次运行测试,发现
config test.[未明确文件类型]导致失败,也将其删除。
- 首次运行
- 最终结果:
- 经过几次清理和重试,最终测试通过,显示 “7 past”(7个测试通过)。
- Speaker 1 对此结果表示“完全惊喜”,因为代码“直接”就能工作。
核心结论与未来展望
Speaker 1 总结了此次演示的核心发现和自定义 Copilot 指令的潜力。
- Copilot 的项目感知能力:
- 通过使用文档作为自定义指令,Copilot 能够“感知”到项目的上下文和规范。
- 它能够根据这些信息生成模型、服务类,并准确地将它们放置在预期的位置。
- 文档驱动的代码生成:
- 随着用户不断构建应用程序的文档(如规范、设计文档),并将其提供给 Copilot,Copilot 能够持续生成符合这些文档的“启动代码”。
- 效率提升:
- 在约 15分钟 内,演示者成功构建了一个“相当可用”的应用程序基础,尽管仍需重构和完善。
- 这表明自定义指令极大地提高了开发效率,加速了项目的初期搭建。
- 展望:
- 该功能有望通过文档驱动的方式,让 Copilot 更好地理解项目需求,从而生成更符合特定项目风格和规范的代码。