详细摘要 摘要

生成: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 根据文件内容,生成了推荐的目录结构:ConfigLibModelsRepositoryServicesTess
  • 自动化脚本的应用
    • 为了方便审查和执行,Speaker 1 让 Copilot 生成了一个 Bash 脚本(init.sh)来创建上述目录结构。
    • 运行 init.sh 后,项目目录结构成功创建。
    • Speaker 1 强调,Copilot 能够理解 code style.md 中的规范,并据此生成代码,这使得通过 Markdown 文件传递规范变得非常有效。

数据库集成与模型生成

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.shmodels.sh 移动到 scripts 文件夹。
    • 他强调,这种组织方式有助于代码审查,因为 Copilot 的输出被清晰地追踪。
  • cart.md 规范的引入
    • docs 文件夹中创建了 cart.md 文件,其中包含了购物车服务的规范。
    • 更新 settings.json,将 docs/code style.mddocs/cart.md 都作为自定义指令引用。
  • Copilot 生成购物车服务
    • 当 Speaker 1 提问“生成购物车服务”时,Copilot 根据 code style.md 的风格指南和 cart.md 的规范,生成了购物车服务的逻辑。
    • 生成的服务代码包括:使用 UUID、创建购物车、设置客户、添加商品等,并包含必要的检查。
    • 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 更好地理解项目需求,从而生成更符合特定项目风格和规范的代码。