Область действия памяти и жизненный цикл: управление вашим цифровым мозгом
Что вы сможете сделать после изучения
- Различать области: Понять, какие памяти "следуют за вами" (межпроектные), а какие "следуют за проектом" (специфичные для проекта).
- Управлять памятью: Научиться вручную просматривать, добавлять и удалять памяти, поддерживая чистоту познаний Agent.
- Отладка Agent: Когда Agent "запоминает" что-то неправильно, знать, где исправить.
Основная идея
opencode-supermemory делит память на две изолированные области (Scope), аналогично глобальным и локальным переменным в языках программирования.
1. Две области
| Область | Идентификатор (Scope ID) | Жизненный цикл | Типичное использование |
|---|---|---|---|
| User Scope (Пользовательская область) | user | Всегда следует за вами Общие для всех проектов | • Предпочтения стиля кодирования (например, "предпочитаю TypeScript") • Личные привычки (например, "всегда пишу комментарии") • Общие знания |
| Project Scope (Область проекта) | project | Только для текущего проекта Недействителен при смене каталога | • Дизайн архитектуры проекта • Описание бизнес-логики • Решение определенных багов |
Как генерируются области?
Плагин автоматически генерирует уникальные теги через src/services/tags.ts:
- User Scope: На основе хеша вашего Git-адреса электронной почты (
opencode_user_{hash}). - Project Scope: На основе хеша пути к текущему проекту (
opencode_project_{hash}).
2. Жизненный цикл памяти
- Создание (Add): Записывается через инициализацию CLI или диалог Agent (
Remember this...). - Активация (Inject): При каждом запуске новой сессии плагин автоматически извлекает соответствующие User и Project памяти и внедряет их в контекст.
- Поиск (Search): В процессе диалога Agent может активно искать конкретную память.
- Забывание (Forget): Когда память устарела или неверна, удаляется по ID.
Следуйте моему примеру: управление вашей памятью
Мы будем управлять памятью двух областей через диалог с Agent.
Шаг 1: Просмотр существующей памяти
Сначала посмотрим, что Agent запомнил сейчас.
Действие: Введите в чате OpenCode:
Пожалуйста, перечислите все памяти текущего проекта (List memories in project scope)Что вы должны увидеть: Agent вызывает режим list инструмента supermemory и возвращает список:
// Пример вывода
{
"success": true,
"scope": "project",
"count": 3,
"memories": [
{
"id": "mem_123456",
"content": "Проект использует MVC-архитектуру, слой Service отвечает за бизнес-логику",
"createdAt": "2023-10-01T10:00:00Z"
}
// ...
]
}Шаг 2: Добавление межпроектной памяти (User Scope)
Предположим, вы хотите, чтобы Agent во всех проектах отвечал на русском языке. Это память, подходящая для User Scope.
Действие: Введите следующую команду:
Пожалуйста, запомните мои личные предпочтения: независимо от проекта, всегда отвечайте мне на русском.
Пожалуйста, сохраните это в User Scope.Что вы должны увидеть: Agent вызывает инструмент add с параметром scope: "user":
{
"mode": "add",
"content": "User prefers responses in Russian across all projects",
"scope": "user",
"type": "preference"
}Система подтверждает, что память добавлена, и возвращает id.
Шаг 3: Добавление памяти, специфичной для проекта (Project Scope)
Теперь добавим конкретное правило для текущего проекта.
Действие: Введите следующую команду:
Пожалуйста, запомните: в этом проекте все форматы даты должны быть YYYY-MM-DD.
Сохраните в Project Scope.Что вы должны увидеть: Agent вызывает инструмент add с параметром scope: "project" (это значение по умолчанию, Agent может опустить его):
{
"mode": "add",
"content": "Date format must be YYYY-MM-DD in this project",
"scope": "project",
"type": "project-config"
}Шаг 4: Проверка изоляции
Чтобы убедиться, что область работает, попробуйте выполнить поиск.
Действие: Введите:
Поиск памяти о "формате даты"Что вы должны увидеть: Agent вызывает инструмент search. Если он указал scope: "project" или выполняет смешанный поиск, он должен найти только что добавленную память.
Проверка межпроектной способности
Если вы создадите новое окно терминала, перейдете в другой другой каталог проекта и снова спросите о "формате даты", Agent должен не найти эту память (потому что она изолирована в Project Scope исходного проекта). Но если вы спросите "на каком языке вы предпочитаете отвечать", он должен найти предпочтение "ответ на русском языке" из User Scope.
Шаг 5: Удаление устаревшей памяти
Если стандарты проекта изменились, нам нужно удалить старую память.
Действие:
- Сначала выполните Шаг 1, чтобы получить ID памяти (например,
mem_987654). - Введите команду:
Пожалуйста, забудьте память с ID mem_987654 о формате даты.Что вы должны увидеть: Agent вызывает инструмент forget:
{
"mode": "forget",
"memoryId": "mem_987654"
}Система возвращает success: true.
Частые вопросы (FAQ)
Q: Если я сменил компьютер, память User Scope останется?
A: Зависит от вашей конфигурации Git. User Scope генерируется на основе git config user.email. Если вы используете один и тот же адрес электронной почты Git на двух компьютерах и подключаетесь к одной и той же учетной записи Supermemory (используя один и тот же API Key), то память синхронизирована.
Q: Почему я не вижу только что добавленную память?
A: Возможна задержка кэша или индексации. Векторный индекс Supermemory обычно имеет задержку в секундах, но при колебаниях сети может быть кратковременная задержка. Кроме того, контекст, который Agent внедряет в начале сессии, является статическим (снимком), новые добавленные памяти могут потребовать перезапуска сессии (/clear или перезапуск OpenCode), чтобы они вступили в силу в "автоматическом внедрении", но через инструмент search можно найти немедленно.
Приложение: справочник по исходному коду
Нажмите, чтобы просмотреть расположение исходного кода
Время обновления: 2026-01-23
| Функция | Путь к файлу | Номер строки |
|---|---|---|
| Логика генерации Scope | src/services/tags.ts | 18-36 |
| Определение инструмента памяти | src/index.ts | 183-485 |
| Определение типа памяти | src/types/index.ts | - |
| Реализация клиента | src/services/client.ts | 23-182 |
Ключевые функции:
getUserTag(): Генерация пользовательского тега на основе Git-адреса электронной почтыgetProjectTag(): Генерация тега проекта на основе пути к каталогуsupermemoryClient.addMemory(): Вызов API добавления памятиsupermemoryClient.deleteMemory(): Вызов API удаления памяти
Предпросмотр следующего урока
В следующем уроке мы изучим Принцип упреждающего сжатия.
Вы узнаете:
- Почему Agent "забывает" (переполнение контекста)
- Как плагин автоматически обнаруживает использование токенов
- Как сжимать сессию без потери ключевой информации