# 手动为 GitHub Copilot 创建记忆项

提示 Copilot 记住个人偏好，或关于存储库的事实。

Copilot Memory 让我们 Copilot 了解你的代码库和个人首选项，帮助 Copilot 代理更有效地工作。 有关详细信息，请参阅“[关于GitHub Copilot内存](/zh/copilot/concepts/prompting-and-context/copilot-memory)”。

如果 Copilot Memory 已启用，Copilot 则会在处理任务时自动创建记忆。 大多数时候，你可以保留 Copilot 来识别和存储存储库事实和用户首选项。 但是，有时你可能希望显式添加希望 Copilot 记住的特定事实或偏好。 这就是本文的重点。

无法在 GitHub.com 的设置中创建或编辑单个记忆。 相反，你要求 Copilot 为你添加内存。 如果您的帐户可用Copilot Memory，则可以使用 Copilot CLI、Copilot cloud agent、GitHub Copilot app 或 [Visual Studio Code](/zh/copilot/how-tos/use-copilot-agents/copilot-memory/manage-for-yourself#copilot-memory-in-visual-studio-code) 执行此操作。 还可以使用 Copilot CLI 批量导入预先准备好的记忆库。

> [!IMPORTANT]
> 提示Copilot存储一条记忆，并不能保证该记忆一定会被存储。 模型决定是否基于提示和上下文存储内存。 即使成功添加内存也不能保证 Copilot 始终使用它。 若要一致地提供说明，请使用自定义指令，而不是依赖 Copilot Memory。 请参阅“[GitHub Copilot的自定义说明](/zh/copilot/concepts/prompting/response-customization)”。

## 要求Copilot记住事实或首选项

若要让 Copilot 存储一条记忆，请使用提供明确指令的提示（或拉取请求中的注释），提供有关要在内存存储中捕获的事实或偏好的精确详细信息。
Copilot 将根据你提供的上下文和信息，决定是否将记忆内容存储为存储库级事实或用户级首选项。

如果已存在匹配的内存，Copilot 可以强化该内存，而不是创建重复内存。

只能在已启用 Copilot Memory 且您具有写入权限的存储库中创建存储库级别事实。

有关在各种界面中提示 Copilot 的详细信息，请参阅：

* **Copilot cloud agent**： [在云中使用 GitHub 中的Copilot](/zh/copilot/how-tos/use-copilot-agents/cloud-agent/use-cloud-agent-on-github)
* **Copilot CLI**： [使用 GitHub Copilot CLI](/zh/copilot/how-tos/copilot-cli/use-copilot-cli/overview)
* **Copilot code review**： [查看来自 Copilot 的输出](/zh/copilot/how-tos/copilot-on-github/use-copilot-agents/review-copilot-output)

### 示例提示

对于存储库级事实，请使用如下所示的提示：

* `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.`

> [!IMPORTANT]
> 在拉取请求中评论时，请在评论的开头写入 `@copilot` 。 这会触发 Copilot cloud agent 将其视为应响应的提示，而不是常规注释。

在 Copilot CLI，只有根代理可以存储记忆或对记忆进行投票。 子代理可以使用相关的内存，但它们不能更改内存存储。

### 在Copilot CLI中审批内存更新

在交互式会话中，根据你的权限设置，Copilot 可以要求你批准存储记忆，或对现有记忆的有用性进行评分。 提示会显示该记忆，以及它是仅对你适用还是与存储库协作者共享。

可以批准一次更新，拒绝该更新并可选择提供反馈，或选择允许将来的内存更新，而无需询问。 审批选项指示它是否适用于当前存储库、目录或会话。

## 使用 Copilot CLI 导入记忆

您可以使用 Copilot CLI 从 JSONL 文件导入准备好的记忆。 每行必须包含一个已版本化的内存对象。

此示例包含两行自动换行的文本。 每行（内存对象）都以 `{"type":"memory"...` 开头。

```json
{"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 文件的路径。

1. 验证完整文件而不提交任何翻译记忆库。 这会检查文件格式，而不是您的帐户是否有权限存储记忆：

   ```shell
   copilot memories import PATH-TO-FILE --dry-run
   ```

2. 导入回忆：

   ```shell
   copilot memories import PATH-TO-FILE
   ```

默认情况下，输入文件中重复的 `externalId` 或现有记忆库冲突会导致该记录出错。 若要改为跳过冲突，请添加 `--on-conflict skip`。 若要以 JSON 形式接收结果，请添加 `--output json`。

检查每个记录的结果。 即使其他记录失败，也可以导入某些记录。 若要重试部分导入，请仅提交失败的记录。 重复整个导入可能会创建重复的记忆项。

运行导入命令将被视为你已同意提交这些记录，因此 Copilot CLI 不要求你单独批准每条记忆库条目。 正常的身份验证、策略、存储库权限、范围验证和机密扫描要求仍然适用。 存储库级事实信息与可在存储库中使用 Copilot Memory 的协作者共享。

## 确定记忆是适用于存储库还是适用于你

Copilot 根据记忆适用于谁而不是由谁说出，决定是将记忆存储为仓库级事实还是用户级首选项。 显式声明预期范围。 如果范围不明确，Copilot 会要求你澄清，而不是猜测。

| 存储      | 将其表述为                    | Example                   |
| ------- | ------------------------ | ------------------------- |
| 存储库级事实  | 对于在此存储库中工作的任何人而言，这一点是正确的 | “在此存储库中，数据库迁移始终在测试套件之前运行。 |
| 用户级偏好设置 | 关于你在所有项目中的个人工作偏好的一些内容    | 在所有项目中，我希望你在应用更改前先说明更改。   |

不要依赖“始终”或“今后”等短语来暗示范围。 说明内存是跨存储库适用于你，还是适用于当前存储库中工作的每个人。

### 删除内存

如果记忆未在默认或配置的保留期内得到强化，则会过期。
Copilot 无法自行响应提示删除记忆。 例如，如果要求 Copilot “忘记”一段记忆，它可以降低该事实或偏好的权重，但这不会将其从记忆存储中删除。

若要立即删除记忆，必须在个人或存储库设置中执行此操作。 有关用户级首选项，请参阅 [管理个人帐户的 Copilot 内存](/zh/copilot/how-tos/use-copilot-agents/copilot-memory/manage-for-yourself)；有关存储库级事实，请参阅 [管理企业、组织或存储库的 Copilot 记忆](/zh/copilot/how-tos/use-copilot-agents/copilot-memory/manage-as-administrator)。