Copilot Memory 让我们 Copilot 了解你的代码库和个人首选项,帮助 Copilot 代理更有效地工作。 有关详细信息,请参阅“关于GitHub Copilot内存”。
如果 Copilot Memory 已启用,Copilot 则会在处理任务时自动创建记忆。 大多数时候,你可以保留 Copilot 来识别和存储存储库事实和用户首选项。 但是,有时你可能希望显式添加希望 Copilot 记住的特定事实或偏好。 这就是本文的重点。
无法在 GitHub.com 的设置中创建或编辑单个记忆。 相反,你要求 Copilot 为你添加内存。 如果您的帐户可用Copilot Memory,则可以使用 Copilot CLI、Copilot cloud agent、GitHub Copilot app 或 Visual Studio Code 执行此操作。 还可以使用 Copilot CLI 批量导入预先准备好的记忆库。
重要
提示Copilot存储一条记忆,并不能保证该记忆一定会被存储。 模型决定是否基于提示和上下文存储内存。 即使成功添加内存也不能保证 Copilot 始终使用它。 若要一致地提供说明,请使用自定义指令,而不是依赖 Copilot Memory。 请参阅“GitHub Copilot的自定义说明”。
要求Copilot记住事实或首选项
若要让 Copilot 存储一条记忆,请使用提供明确指令的提示(或拉取请求中的注释),提供有关要在内存存储中捕获的事实或偏好的精确详细信息。 Copilot 将根据你提供的上下文和信息,决定是否将记忆内容存储为存储库级事实或用户级首选项。
如果已存在匹配的内存,Copilot 可以强化该内存,而不是创建重复内存。
只能在已启用 Copilot Memory 且您具有写入权限的存储库中创建存储库级别事实。
有关在各种界面中提示 Copilot 的详细信息,请参阅:
- Copilot cloud agent: 在云中使用 GitHub 中的Copilot
- Copilot CLI: 使用 GitHub Copilot CLI
- Copilot code review: 查看来自 Copilot 的输出
示例提示
对于存储库级事实,请使用如下所示的提示:
Store a memory that api/openapi.gen.go is generated here. Edit openapi.yaml instead.Remember that API handlers in this repository return errors through formatApiError.Create a memory for this repository: Database migrations belong in db/migrations, not in application startup code.
对于用户级首选项,可以指定希望 Copilot 如何与你协作、何时应请求审批,或在各项目中遵循的工作流:
Remember I always want the smallest change that fixes the problem, not a refactor.Across all my projects, remember to ask for my approval before publishing changes.Remember my workflow for all projects: Run the relevant tests and summarize their results before proposing a commit.
重要
在拉取请求中评论时,请在评论的开头写入 @copilot 。 这会触发 Copilot cloud agent 将其视为应响应的提示,而不是常规注释。
在 Copilot CLI,只有根代理可以存储记忆或对记忆进行投票。 子代理可以使用相关的内存,但它们不能更改内存存储。
在Copilot CLI中审批内存更新
在交互式会话中,根据你的权限设置,Copilot 可以要求你批准存储记忆,或对现有记忆的有用性进行评分。 提示会显示该记忆,以及它是仅对你适用还是与存储库协作者共享。
可以批准一次更新,拒绝该更新并可选择提供反馈,或选择允许将来的内存更新,而无需询问。 审批选项指示它是否适用于当前存储库、目录或会话。
使用 Copilot CLI 导入记忆
您可以使用 Copilot CLI 从 JSONL 文件导入准备好的记忆。 每行必须包含一个已版本化的内存对象。
此示例包含两行自动换行的文本。 每行(内存对象)都以 {"type":"memory"... 开头。
{"type":"memory","version":1,"externalId":"personal-testing-1","scope":{"type":"user"},"subject":"testing","fact":"Run focused tests first.","reason":"This is the user's preferred validation workflow.","citations":[{"type":"text","text":"User input: \"Run focused tests first.\""}]}
{"type":"memory","version":1,"externalId":"repo-testing-1","scope":{"type":"repository","repository":{"host":"github.com","owner":"octo-org","name":"octo-repo"}},"subject":"testing","fact":"Run npm test before opening a pull request.","reason":"The repository requires this validation workflow.","citations":[{"type":"file","path":"CONTRIBUTING.md","lineStart":10,"lineEnd":12}]}
需要 type、version、scope、subject、fact、 reason和citations字段。
externalId 字段为可选。 使用它标识导入结果中的记录,并检测输入文件中的重复 ID。 它不会被存储为永久内存标识符。
对于仓库级信息,请将 octo-repo 和 octo-org 替换为 GitHub.com 上某个仓库的所有者和名称。 必须有权为该存储库写入记忆。 在以下命令中,将 PATH-TO-FILE 替换为 JSONL 文件的路径。
-
验证完整文件而不提交任何翻译记忆库。 这会检查文件格式,而不是您的帐户是否有权限存储记忆:
copilot memories import PATH-TO-FILE --dry-run -
导入回忆:
copilot memories import PATH-TO-FILE
默认情况下,输入文件中重复的 externalId 或现有记忆库冲突会导致该记录出错。 若要改为跳过冲突,请添加 --on-conflict skip。 若要以 JSON 形式接收结果,请添加 --output json。
检查每个记录的结果。 即使其他记录失败,也可以导入某些记录。 若要重试部分导入,请仅提交失败的记录。 重复整个导入可能会创建重复的记忆项。
运行导入命令将被视为你已同意提交这些记录,因此 Copilot CLI 不要求你单独批准每条记忆库条目。 正常的身份验证、策略、存储库权限、范围验证和机密扫描要求仍然适用。 存储库级事实信息与可在存储库中使用 Copilot Memory 的协作者共享。
确定记忆是适用于存储库还是适用于你
Copilot 根据记忆适用于谁而不是由谁说出,决定是将记忆存储为仓库级事实还是用户级首选项。 显式声明预期范围。 如果范围不明确,Copilot 会要求你澄清,而不是猜测。
| 存储 | 将其表述为 | Example |
|---|---|---|
| 存储库级事实 | 对于在此存储库中工作的任何人而言,这一点是正确的 | “在此存储库中,数据库迁移始终在测试套件之前运行。 |
| 用户级偏好设置 | 关于你在所有项目中的个人工作偏好的一些内容 | 在所有项目中,我希望你在应用更改前先说明更改。 |
不要依赖“始终”或“今后”等短语来暗示范围。 说明内存是跨存储库适用于你,还是适用于当前存储库中工作的每个人。
删除内存
如果记忆未在默认或配置的保留期内得到强化,则会过期。 Copilot 无法自行响应提示删除记忆。 例如,如果要求 Copilot “忘记”一段记忆,它可以降低该事实或偏好的权重,但这不会将其从记忆存储中删除。
若要立即删除记忆,必须在个人或存储库设置中执行此操作。 有关用户级首选项,请参阅 管理个人帐户的 Copilot 内存;有关存储库级事实,请参阅 管理企业、组织或存储库的 Copilot 记忆。