尝试我的第一个 Github Copilot instruction, 告别重复输入编码提示词

文章目录

    用 GitHub Copilot 来开发确实很方便,把需求跟 AI 说明白,基本功能代码就自动实现了。
    但是也有一些困扰,比如一些重新性的功能,需要反复说明一些细节。例如,我要实现一个 Excel 导出功能,需要在 Chat 窗口里,输入大量的细节说明,如下:

    - 待办列表的导出 Excel 功能
      - 实现代码放到 controllers/todo.go 中,函数命名为 ExportTodoExcel
      - 列头:序号(从1开始,顺序显示数字),员工类型,所属公司(公司简称),姓名,省份证号,事业部,一级部门,二级部门,三级部门,岗位,年龄,入职日期,合同/协议到期日,合同类型,续签次数,合同期限(固定/无固定),续签(数据空出来就行),续签期限起,续签期限止,备注,员工编号,待办描述,待办状态,待办事项,截止日期
      - 支持跟待办列表接口一样的过滤条件
      - Excel 的每一列添加过滤器,方便 HR 同事在 Excel 里进行筛选。Deadline (截止日期)列、入职时间、合同/协议到期日、续签期限起、续签期限止,需要转换为日期格式“yyyy-mm-dd", 方便 Excel 过滤器进行年月过滤。注意时区问题,确保转换后的日期是中国时区的日期
      - 参考 ExportStaffExcel 接口的实现方式,来实现导出待办列表的 Excel 功能
      - 表头配色优化,参考 ExportStaffExcel
      - 函数需要添加 Swagger 注释,说明这个接口的功能和参数。主要是方便前端同事理解
      - 返回的下载链接需要添加 token 验证,参考 ExportStaffExcel 接口的实现方式,来实现下载链接的安全验证
    

    如果我希望每次添加类似的 Excel 接口时,都参考上面这个规范,而不需要每次都在 Chat 窗口里输入这些细节,那么我应该怎么做呢?

    使用 skill 还是 instruction

    问了一下 DeepSeek, 回答是:

    “每次添加类似的 Excel 接口时,都参考下面的规范”。这说明你需要的是一个持续性、基准性的开发指南,而非一个需要手动触发的复杂任务流。这正是 Custom Instructions(自定义指令) 的典型应用场景。

    看看官方的概念定义:

    https://github.com/github/awesome-copilot

    • Instructions: Coding standards applied automatically by file pattern。即针对特定文件自动应用的编码标准
    • Skills: Self-contained folders with instructions and bundled assets。即包含指令和相关资源的独立文件夹

    其实我还是有点没有头绪,虽然概念大概了解了。但是到底应该怎么操作呢?我找了 github 官方的一个仓库 Awesome GitHub Copilot,里面有一些示例。

    golang instrunction 的示例

    https://awesome-copilot.github.com/instructions/?extension=.go

    这里可以搜索到各种语言的 instrunction 示例,特地加了 .go 后缀的限制,即只看 golang 的示例。

    在网页上直接点击 install 就能自动唤起 VSCode 安装到指定的目录,即可以安装到个人的全局,也可以安装到当前项目中。
    我暂时选择了当前项目中。

    Awesome GitHub Copilot golang instrunction

    具体的路径:

    .github\instructions\go.instructions.md

    之所以没有放全局,我觉得不同项目的代码风格还是有区别的。例如:

    • 有的要求用中文注释,有的用英文
    • 有的需要写 swagger 文档,有的不需要

    Excel 那段 instruction 是否适合放到 golang 的大段 instruction 中

    如以这个为例:

    https://github.com/github/awesome-copilot/blob/main/.github/copilot-instructions.md

    看起来混杂在一起也不是问题。

    但是,这么多字,会不会占用对话的上下文?还是说 GitHub copilot 在本地会先提取相关的 instruction,发送到大模型的只是一小部分?

    添加示例:

    ## Excel 导出功能规范
    - 支持跟对应列表接口一样的过滤条件
    - Excel 的每一列添加过滤器,方便在 Excel 里进行筛选。日期需要转换为日期格式“yyyy-mm-dd", 方便 Excel 过滤器进行年月过滤。注意时区问题,确保转换后的日期是中国时区的日期
    - 表头配色要有区分度
    - 函数需要添加 Swagger 注释,说明这个接口的功能和参数。主要是方便前端同事理解
    - 返回的下载链接需要添加 token 验证,来实现下载链接的安全验证
    

    这个还没测试,不知道具体效果如何。下面试试比较容易测试的 git instruction。

    git instruction

    我一直有个困扰,就是 VSCode 里用 AI 自动生成 git 提交注释时,总是用英文。
    作为土鳖,我还是更喜欢用中文。一直不知道怎么设置成中文,于是在 GitHub copilot chat 对话框里,输入 /create 找到 /create-instructions,然后输入需求就行了。

    /create-instructions 提交 git commit 时,请使用中文的描述
    

    然后 GitHub copilot 就自动给我创建好了一个 instruction 文件

    .github\instructions\git.instructions.md

    目录结构如下:

    > tree .github/
    .github/
    └── instructions
        ├── git.instructions.md
        └── go.instructions.md
    
    1 directory, 2 files
    

    内容如下:

    # Git Commit Instructions
    
    ## Commit Message Language
    - Always use **Chinese** for git commit messages.
    - 提交 git commit 时,请始终使用**中文**进行描述。
    
    ## Commit Style
    - Keep descriptions concise and meaningful.
    - 描述应当简洁且有意义。
    

    看起来言简意赅,也没有什么复杂的配置。就是习惯了用参数配置,突然用起自然语言,感觉非常得不适应,也不确定是否靠谱。。。

    测试了一下,倒是确实把自动生成的 git 提交注释变成了中文。

    git instruction 中文

    非常好,instruction 技能已掌握。感觉自己又专业了许多!

    但是,又试了一次,又变成英文的了,垃圾。。。

    原来这个配置是在 Settings 里,搜索 git commit message, 参考官方 issue:

    https://github.com/microsoft/vscode-copilot-release/issues/526

    vscode setting git commit message

    可以指定文件,或者自然语言配置都可以。例如:

        "github.copilot.chat.commitMessageGeneration.instructions": [
            {
                "text": "请始终使用中文进行描述。"
            }
        ]
    

    github copilot Instruction 的原理

    GitHub Copilot Instruction 的核心原理是 “上下文注入”(Context Injection)。它并非通过某种特殊机制去“训练”AI模型,而是将你写下的Markdown指令,在每次发起Copilot Chat对话时,自动作为系统提示词(System Prompt) 的一部分,悄无声息地“注入”到发送给大语言模型(LLM)的完整请求中

    关于作者 🌱

    我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊,或者关注我的个人公众号“大象工具”, 查看更多联系方式