chore(i18n): refresh uk translations
This commit is contained in:
parent
1bdfb73f01
commit
1fd3431ddb
@ -1,20 +1,20 @@
|
||||
---
|
||||
read_when:
|
||||
- Ви хочете переглянути список збережених сеансів і побачити нещодавню активність
|
||||
- Ви хочете вивести список збережених сеансів і переглянути нещодавню активність
|
||||
summary: Довідник CLI для `openclaw sessions` (список збережених сеансів + використання)
|
||||
title: Сеанси
|
||||
x-i18n:
|
||||
generated_at: "2026-04-28T22:44:10Z"
|
||||
generated_at: "2026-05-02T05:36:09Z"
|
||||
model: gpt-5.5
|
||||
provider: openai
|
||||
source_hash: 9fea2014f538b00a27fa0078391a421843052333c5bcfc8100fced515eed0004
|
||||
source_hash: 4e7e5017ba5a6194ac10d3a18ea9b711da57bc2ef1696776622cd3be2a2fbf43
|
||||
source_path: cli/sessions.md
|
||||
workflow: 16
|
||||
---
|
||||
|
||||
# `openclaw sessions`
|
||||
|
||||
Перелічує збережені сесії розмов.
|
||||
Перелічує збережені сеанси розмов.
|
||||
|
||||
```bash
|
||||
openclaw sessions
|
||||
@ -27,28 +27,28 @@ openclaw sessions --json
|
||||
|
||||
Вибір області:
|
||||
|
||||
- типово: налаштоване стандартне сховище агента
|
||||
- default: налаштоване сховище агента за замовчуванням
|
||||
- `--verbose`: докладне журналювання
|
||||
- `--agent <id>`: одне налаштоване сховище агента
|
||||
- `--all-agents`: об'єднати всі налаштовані сховища агентів
|
||||
- `--all-agents`: об’єднати всі налаштовані сховища агентів
|
||||
- `--store <path>`: явний шлях до сховища (не можна поєднувати з `--agent` або `--all-agents`)
|
||||
|
||||
Експортувати пакет траєкторії для збереженої сесії:
|
||||
Експортуйте пакет траєкторії для збереженого сеансу:
|
||||
|
||||
```bash
|
||||
openclaw sessions export-trajectory --session-key "agent:main:telegram:direct:123" --workspace .
|
||||
openclaw sessions export-trajectory --session-key "agent:main:telegram:direct:123" --output bug-123 --json
|
||||
```
|
||||
|
||||
Це шлях команди, який використовується slash-командою `/export-trajectory` після того,
|
||||
як власник схвалює запит на виконання. Вихідний каталог завжди визначається
|
||||
Це шлях команди, який використовується slash-командою `/export-trajectory` після
|
||||
того, як власник схвалить запит на виконання. Каталог виводу завжди визначається
|
||||
всередині `.openclaw/trajectory-exports/` у вибраному робочому просторі.
|
||||
|
||||
`openclaw sessions --all-agents` читає налаштовані сховища агентів. Виявлення сесій Gateway і ACP
|
||||
ширше: воно також включає сховища лише на диску, знайдені під
|
||||
стандартним коренем `agents/` або шаблонним коренем `session.store`. Ці
|
||||
виявлені сховища мають визначатися як звичайні файли `sessions.json` всередині
|
||||
кореня агента; символьні посилання та шляхи поза коренем пропускаються.
|
||||
`openclaw sessions --all-agents` читає налаштовані сховища агентів. Виявлення
|
||||
сеансів Gateway і ACP ширше: воно також включає сховища лише на диску, знайдені
|
||||
під коренем `agents/` за замовчуванням або шаблонним коренем `session.store`. Такі
|
||||
виявлені сховища мають визначатися як звичайні файли `sessions.json` усередині
|
||||
кореня агента; символьні посилання та шляхи за межами кореня пропускаються.
|
||||
|
||||
Приклади JSON:
|
||||
|
||||
@ -73,7 +73,7 @@ openclaw sessions export-trajectory --session-key "agent:main:telegram:direct:12
|
||||
|
||||
## Обслуговування очищення
|
||||
|
||||
Запустити обслуговування зараз (замість очікування наступного циклу запису):
|
||||
Запустіть обслуговування зараз (замість очікування наступного циклу запису):
|
||||
|
||||
```bash
|
||||
openclaw sessions cleanup --dry-run
|
||||
@ -84,19 +84,19 @@ openclaw sessions cleanup --enforce --active-key "agent:main:telegram:direct:123
|
||||
openclaw sessions cleanup --json
|
||||
```
|
||||
|
||||
`openclaw sessions cleanup` використовує налаштування `session.maintenance` з конфігурації:
|
||||
`openclaw sessions cleanup` використовує параметри `session.maintenance` з конфігурації:
|
||||
|
||||
- Примітка щодо області: `openclaw sessions cleanup` обслуговує сховища сесій, транскрипти та супровідні файли траєкторій. Вона не обрізає журнали запусків Cron (`cron/runs/<jobId>.jsonl`), якими керують `cron.runLog.maxBytes` і `cron.runLog.keepLines` у [конфігурації Cron](/uk/automation/cron-jobs#configuration) та які пояснено в [обслуговуванні Cron](/uk/automation/cron-jobs#maintenance).
|
||||
- Примітка щодо області: `openclaw sessions cleanup` обслуговує сховища сеансів, транскрипти та побічні файли траєкторій. Вона не обрізає журнали запусків cron (`cron/runs/<jobId>.jsonl`), якими керують `cron.runLog.maxBytes` і `cron.runLog.keepLines` у [конфігурації Cron](/uk/automation/cron-jobs#configuration) та які пояснено в [обслуговуванні Cron](/uk/automation/cron-jobs#maintenance).
|
||||
|
||||
- `--dry-run`: попередньо показати, скільки записів було б очищено/обмежено без запису.
|
||||
- У текстовому режимі dry-run друкує таблицю дій для кожної сесії (`Action`, `Key`, `Age`, `Model`, `Flags`), щоб було видно, що буде збережено, а що видалено.
|
||||
- `--dry-run`: попередньо показати, скільки записів було б обрізано/обмежено без запису.
|
||||
- У текстовому режимі dry-run друкує таблицю дій для кожного сеансу (`Action`, `Key`, `Age`, `Model`, `Flags`), щоб ви могли побачити, що буде збережено, а що видалено.
|
||||
- `--enforce`: застосувати обслуговування, навіть коли `session.maintenance.mode` має значення `warn`.
|
||||
- `--fix-missing`: видалити записи, чиї файли транскриптів відсутні, навіть якщо зазвичай вони ще не підпали б під обмеження віку/кількості.
|
||||
- `--active-key <key>`: захистити певний активний ключ від витіснення через дисковий бюджет.
|
||||
- `--fix-missing`: видалити записи, чиї файли транскриптів відсутні, навіть якщо вони зазвичай ще не підлягали б вилученню за віком/кількістю.
|
||||
- `--active-key <key>`: захистити конкретний активний ключ від витіснення через дисковий бюджет. Стійкі зовнішні вказівники розмов, як-от групові сеанси та сеанси чату в межах потоку, також зберігаються під час обслуговування за віком/кількістю/дисковим бюджетом.
|
||||
- `--agent <id>`: запустити очищення для одного налаштованого сховища агента.
|
||||
- `--all-agents`: запустити очищення для всіх налаштованих сховищ агентів.
|
||||
- `--store <path>`: виконати для певного файла `sessions.json`.
|
||||
- `--json`: надрукувати зведення JSON. З `--all-agents` вивід містить одне зведення для кожного сховища.
|
||||
- `--store <path>`: запустити для певного файла `sessions.json`.
|
||||
- `--json`: надрукувати підсумок JSON. З `--all-agents` вивід містить по одному підсумку для кожного сховища.
|
||||
|
||||
`openclaw sessions cleanup --all-agents --dry-run --json`:
|
||||
|
||||
@ -126,11 +126,11 @@ openclaw sessions cleanup --json
|
||||
}
|
||||
```
|
||||
|
||||
Пов'язано:
|
||||
Пов’язане:
|
||||
|
||||
- Конфігурація сесій: [довідник конфігурації](/uk/gateway/config-agents#session)
|
||||
- Конфігурація сеансу: [Довідник конфігурації](/uk/gateway/config-agents#session)
|
||||
|
||||
## Пов'язано
|
||||
## Пов’язане
|
||||
|
||||
- [Довідник CLI](/uk/cli)
|
||||
- [Керування сесіями](/uk/concepts/session)
|
||||
- [Керування сеансами](/uk/concepts/session)
|
||||
|
||||
@ -2,39 +2,39 @@
|
||||
read_when:
|
||||
- Ви хочете зрозуміти маршрутизацію та ізоляцію сеансів
|
||||
- Ви хочете налаштувати область дії DM для багатокористувацьких конфігурацій
|
||||
- Ви налагоджуєте щоденні скидання сесій або скидання сесій через бездіяльність
|
||||
- Ви налагоджуєте щоденне скидання сеансів або скидання після бездіяльності
|
||||
summary: Як OpenClaw керує сесіями розмов
|
||||
title: Керування сеансами
|
||||
x-i18n:
|
||||
generated_at: "2026-05-01T12:19:28Z"
|
||||
generated_at: "2026-05-02T05:36:26Z"
|
||||
model: gpt-5.5
|
||||
provider: openai
|
||||
source_hash: f1bde2ab8f1589ed477df959aecf59c282bb086bfe93159397252021a1d6393b
|
||||
source_hash: b2fd0c9e880242a8d0070c24bd1f7971e4082344240e28632e2e3ca032404807
|
||||
source_path: concepts/session.md
|
||||
workflow: 16
|
||||
---
|
||||
|
||||
OpenClaw організовує розмови в **сесії**. Кожне повідомлення маршрутизується до
|
||||
сесії залежно від того, звідки воно надійшло -- приватні повідомлення, групові чати, cron-завдання тощо.
|
||||
сесії залежно від того, звідки воно надійшло -- особисті повідомлення, групові чати, завдання cron тощо.
|
||||
|
||||
## Як маршрутизуються повідомлення
|
||||
|
||||
| Джерело | Поведінка |
|
||||
| ------------------ | ------------------------------------ |
|
||||
| Приватні повідомлення | Спільна сесія за замовчуванням |
|
||||
| Групові чати | Ізольовано для кожної групи |
|
||||
| Кімнати/канали | Ізольовано для кожної кімнати |
|
||||
| Cron-завдання | Нова сесія для кожного запуску |
|
||||
| Webhook-и | Ізольовано для кожного hook |
|
||||
| Джерело | Поведінка |
|
||||
| ------------------ | --------------------------------- |
|
||||
| Особисті повідомлення | Спільна сесія за замовчуванням |
|
||||
| Групові чати | Ізольовано для кожної групи |
|
||||
| Кімнати/канали | Ізольовано для кожної кімнати |
|
||||
| Завдання Cron | Нова сесія для кожного запуску |
|
||||
| Webhooks | Ізольовано для кожного hook |
|
||||
|
||||
## Ізоляція приватних повідомлень
|
||||
## Ізоляція особистих повідомлень
|
||||
|
||||
За замовчуванням усі приватні повідомлення мають спільну сесію для безперервності. Це підходить для
|
||||
За замовчуванням усі особисті повідомлення використовують одну сесію для безперервності. Це підходить для
|
||||
налаштувань з одним користувачем.
|
||||
|
||||
<Warning>
|
||||
Якщо кілька людей можуть надсилати повідомлення вашому агенту, увімкніть ізоляцію приватних повідомлень. Без цього всі
|
||||
користувачі мають спільний контекст розмови -- приватні повідомлення Аліси були б
|
||||
Якщо кілька людей можуть писати вашому агенту, увімкніть ізоляцію особистих повідомлень. Без неї всі
|
||||
користувачі спільно використовують той самий контекст розмови -- приватні повідомлення Аліси були б
|
||||
видимі Бобу.
|
||||
</Warning>
|
||||
|
||||
@ -48,55 +48,56 @@ OpenClaw організовує розмови в **сесії**. Кожне п
|
||||
}
|
||||
```
|
||||
|
||||
Інші варіанти:
|
||||
Інші параметри:
|
||||
|
||||
- `main` (за замовчуванням) -- усі приватні повідомлення мають одну спільну сесію.
|
||||
- `main` (за замовчуванням) -- усі особисті повідомлення використовують одну сесію.
|
||||
- `per-peer` -- ізолювати за відправником (між каналами).
|
||||
- `per-channel-peer` -- ізолювати за каналом + відправником (рекомендовано).
|
||||
- `per-account-channel-peer` -- ізолювати за обліковим записом + каналом + відправником.
|
||||
|
||||
<Tip>
|
||||
Якщо та сама людина зв'язується з вами з кількох каналів, використовуйте
|
||||
`session.identityLinks`, щоб зв'язати її ідентичності, аби вони мали одну спільну сесію.
|
||||
Якщо та сама людина зв’язується з вами з кількох каналів, використовуйте
|
||||
`session.identityLinks`, щоб пов’язати її ідентичності, аби вони використовували одну сесію.
|
||||
</Tip>
|
||||
|
||||
### Закріплення пов'язаних каналів
|
||||
### Пристикування пов’язаних каналів
|
||||
|
||||
Команди dock дають змогу користувачу перемістити маршрут відповіді поточної сесії прямого чату до
|
||||
іншого пов'язаного каналу, не починаючи нову сесію. Див.
|
||||
[Закріплення каналів](/uk/concepts/channel-docking) для прикладів, конфігурації та
|
||||
Команди пристикування дають користувачу змогу перенести маршрут відповіді поточної сесії прямого чату до
|
||||
іншого пов’язаного каналу без запуску нової сесії. Див.
|
||||
[Пристикування каналів](/uk/concepts/channel-docking) для прикладів, конфігурації та
|
||||
усунення несправностей.
|
||||
|
||||
Перевірте своє налаштування за допомогою `openclaw security audit`.
|
||||
|
||||
## Життєвий цикл сесії
|
||||
|
||||
Сесії використовуються повторно, доки не спливе їхній термін:
|
||||
Сесії повторно використовуються, доки не завершиться їхній строк дії:
|
||||
|
||||
- **Щоденне скидання** (за замовчуванням) -- нова сесія о 4:00 ранку за локальним часом на хості Gateway.
|
||||
Щоденна свіжість базується на тому, коли поточний `sessionId` почався, а не
|
||||
- **Щоденне скидання** (за замовчуванням) -- нова сесія о 4:00 за місцевим часом на хості
|
||||
Gateway. Щоденна актуальність базується на часі запуску поточного `sessionId`, а не
|
||||
на пізніших записах метаданих.
|
||||
- **Скидання через бездіяльність** (необов'язково) -- нова сесія після періоду бездіяльності. Задайте
|
||||
`session.reset.idleMinutes`. Свіжість за бездіяльністю базується на останній реальній
|
||||
взаємодії користувача/каналу, тому Heartbeat, Cron та системні події exec не
|
||||
- **Скидання за бездіяльністю** (необов’язково) -- нова сесія після періоду бездіяльності. Задайте
|
||||
`session.reset.idleMinutes`. Актуальність бездіяльності базується на останній реальній
|
||||
взаємодії користувача/каналу, тому Heartbeat, Cron і системні події exec не
|
||||
підтримують сесію активною.
|
||||
- **Ручне скидання** -- введіть `/new` або `/reset` у чаті. `/new <model>` також
|
||||
перемикає модель.
|
||||
|
||||
Коли налаштовано і щоденне скидання, і скидання через бездіяльність, спрацьовує те, чий термін спливає першим.
|
||||
Коли налаштовано і щоденне скидання, і скидання за бездіяльністю, спрацьовує те, строк якого завершується першим.
|
||||
Heartbeat, Cron, exec та інші ходи системних подій можуть записувати метадані сесії,
|
||||
але ці записи не подовжують свіжість щоденного скидання або скидання через бездіяльність. Коли скидання
|
||||
але ці записи не подовжують актуальність щоденного скидання чи скидання за бездіяльністю. Коли скидання
|
||||
переводить сесію, поставлені в чергу сповіщення системних подій для старої сесії
|
||||
відкидаються, щоб застарілі фонові оновлення не додавалися на початок першого prompt у
|
||||
відкидаються, щоб застарілі фонові оновлення не додавалися перед першим prompt у
|
||||
новій сесії.
|
||||
|
||||
Сесії з активною CLI-сесією, що належить провайдеру, не перериваються неявним
|
||||
щоденним значенням за замовчуванням. Використовуйте `/reset` або явно налаштуйте `session.reset`, коли такі
|
||||
сесії мають спливати за таймером.
|
||||
сесії мають завершуватися за таймером.
|
||||
|
||||
## Де зберігається стан
|
||||
|
||||
Усім станом сесій володіє **gateway**. UI-клієнти запитують дані сесій у gateway.
|
||||
Увесь стан сесій належить **gateway**. UI-клієнти запитують у Gateway
|
||||
дані сесій.
|
||||
|
||||
- **Сховище:** `~/.openclaw/agents/<agentId>/sessions/sessions.json`
|
||||
- **Транскрипти:** `~/.openclaw/agents/<agentId>/sessions/<sessionId>.jsonl`
|
||||
@ -106,16 +107,16 @@ Heartbeat, Cron, exec та інші ходи системних подій мо
|
||||
- `sessionStartedAt`: коли почався поточний `sessionId`; щоденне скидання використовує це.
|
||||
- `lastInteractionAt`: остання взаємодія користувача/каналу, яка подовжує час життя за бездіяльністю.
|
||||
- `updatedAt`: остання зміна рядка сховища; корисно для списків і очищення, але не
|
||||
є авторитетним джерелом для свіжості щоденного скидання або скидання через бездіяльність.
|
||||
є авторитетним джерелом для актуальності щоденного скидання/скидання за бездіяльністю.
|
||||
|
||||
Старіші рядки без `sessionStartedAt` визначаються з заголовка сесії в транскрипті JSONL,
|
||||
коли він доступний. Якщо старішому рядку також бракує `lastInteractionAt`,
|
||||
свіжість за бездіяльністю повертається до часу початку цієї сесії, а не до пізніших
|
||||
службових записів.
|
||||
Старіші рядки без `sessionStartedAt` визначаються із заголовка сесії JSONL-транскрипта,
|
||||
коли він доступний. Якщо старіший рядок також не має `lastInteractionAt`,
|
||||
актуальність бездіяльності повертається до часу початку цієї сесії, а не до пізніших службових
|
||||
записів.
|
||||
|
||||
## Обслуговування сесій
|
||||
|
||||
OpenClaw автоматично обмежує сховище сесій із часом. За замовчуванням він працює
|
||||
OpenClaw автоматично обмежує обсяг сховища сесій із часом. За замовчуванням він працює
|
||||
в режимі `warn` (повідомляє, що було б очищено). Задайте `session.maintenance.mode`
|
||||
як `"enforce"` для автоматичного очищення:
|
||||
|
||||
@ -131,9 +132,13 @@ OpenClaw автоматично обмежує сховище сесій із ч
|
||||
}
|
||||
```
|
||||
|
||||
Для виробничих лімітів `maxEntries` середовище виконання Gateway під час запису використовує невеликий буфер верхньої межі та очищує сховище пакетами до налаштованого ліміту. Читання сховища сесій не очищують і не обмежують записи під час запуску Gateway. Це уникає повного очищення сховища під час кожного запуску або ізольованої cron-сесії. `openclaw sessions cleanup --enforce` застосовує ліміт негайно.
|
||||
Для виробничих лімітів `maxEntries` записи під час виконання Gateway використовують невеликий буфер верхньої межі й пакетно очищаються назад до налаштованого обмеження. Читання сховища сесій не очищають і не обмежують записи під час запуску Gateway. Це дає змогу уникнути повного очищення сховища під час кожного запуску або ізольованої сесії cron. `openclaw sessions cleanup --enforce` застосовує обмеження негайно.
|
||||
|
||||
Попередній перегляд за допомогою `openclaw sessions cleanup --dry-run`.
|
||||
Обслуговування зберігає довговічні зовнішні вказівники розмов, зокрема групові
|
||||
сесії та сесії чатів у межах thread, водночас дозволяючи синтетичним записам Cron,
|
||||
hook, Heartbeat, ACP і під-агентів застарівати.
|
||||
|
||||
Перегляньте попередній результат за допомогою `openclaw sessions cleanup --dry-run`.
|
||||
|
||||
## Перегляд сесій
|
||||
|
||||
@ -144,16 +149,16 @@ OpenClaw автоматично обмежує сховище сесій із ч
|
||||
|
||||
## Додаткове читання
|
||||
|
||||
- [Очищення сесій](/uk/concepts/session-pruning) -- скорочення результатів інструментів
|
||||
- [Очищення сесій](/uk/concepts/session-pruning) -- обрізання результатів інструментів
|
||||
- [Compaction](/uk/concepts/compaction) -- підсумовування довгих розмов
|
||||
- [Інструменти сесій](/uk/concepts/session-tool) -- інструменти агента для роботи між сесіями
|
||||
- [Глибокий огляд керування сесіями](/uk/reference/session-management-compaction) --
|
||||
- [Поглиблений огляд керування сесіями](/uk/reference/session-management-compaction) --
|
||||
схема сховища, транскрипти, політика надсилання, метадані походження та розширена конфігурація
|
||||
- [Мультиагентність](/uk/concepts/multi-agent) — маршрутизація та ізоляція сесій між агентами
|
||||
- [Фонові завдання](/uk/automation/tasks) — як відокремлена робота створює записи завдань із посиланнями на сесії
|
||||
- [Фонові завдання](/uk/automation/tasks) — як відокремлена робота створює записи завдань із посиланнями на сесію
|
||||
- [Маршрутизація каналів](/uk/channels/channel-routing) — як вхідні повідомлення маршрутизуються до сесій
|
||||
|
||||
## Пов'язане
|
||||
## Пов’язане
|
||||
|
||||
- [Очищення сесій](/uk/concepts/session-pruning)
|
||||
- [Інструменти сесій](/uk/concepts/session-tool)
|
||||
|
||||
@ -1,15 +1,15 @@
|
||||
---
|
||||
read_when:
|
||||
- Потрібно діагностувати ідентифікатори сеансів, транскрипт JSONL або поля sessions.json
|
||||
- Ви змінюєте поведінку автоматичного Compaction або додаєте службове обслуговування перед Compaction
|
||||
- Ви хочете реалізувати очищення пам’яті або тихі системні ходи
|
||||
summary: 'Глибоке занурення: сховище сеансів + транскрипти, життєвий цикл і внутрішні механізми (авто)Compaction'
|
||||
- Потрібно налагодити ідентифікатори сеансів, JSONL-транскрипт або поля sessions.json
|
||||
- Ви змінюєте поведінку автоматичного Compaction або додаєте підготовче обслуговування перед Compaction
|
||||
- Ви хочете реалізувати скидання пам’яті або тихі системні ходи
|
||||
summary: 'Поглиблений розбір: сховище сеансів і транскрипти, життєвий цикл та внутрішні механізми (авто)Compaction'
|
||||
title: Поглиблений огляд керування сеансами
|
||||
x-i18n:
|
||||
generated_at: "2026-05-01T12:19:43Z"
|
||||
generated_at: "2026-05-02T05:36:33Z"
|
||||
model: gpt-5.5
|
||||
provider: openai
|
||||
source_hash: efd2fb5157a98cb406c5210d813fa600259dfc559350010a9c070075ac6b28ed
|
||||
source_hash: 6f5d8b072feb389d7161fb2fa0fcd0941edb79b8b0f7ddd841877158795c2895
|
||||
source_path: reference/session-management-compaction.md
|
||||
workflow: 16
|
||||
---
|
||||
@ -17,12 +17,12 @@ x-i18n:
|
||||
OpenClaw керує сесіями від початку до кінця в таких сферах:
|
||||
|
||||
- **Маршрутизація сесій** (як вхідні повідомлення зіставляються з `sessionKey`)
|
||||
- **Сховище сесій** (`sessions.json`) і що воно відстежує
|
||||
- **Сховище сесій** (`sessions.json`) і те, що воно відстежує
|
||||
- **Збереження транскриптів** (`*.jsonl`) і їхня структура
|
||||
- **Гігієна транскриптів** (специфічні для провайдера виправлення перед запусками)
|
||||
- **Обмеження контексту** (вікно контексту порівняно з відстежуваними токенами)
|
||||
- **Compaction** (ручне й автоматичне Compaction) і де підключати роботу перед Compaction
|
||||
- **Тихе обслуговування** (записи пам’яті, які не мають створювати видимого для користувача виводу)
|
||||
- **Гігієна транскриптів** (виправлення, специфічні для провайдера, перед запусками)
|
||||
- **Обмеження контексту** (вікно контексту проти відстежуваних токенів)
|
||||
- **Compaction** (ручна та автоматична Compaction) і де підключати роботу перед Compaction
|
||||
- **Тихе обслуговування** (записи пам’яті, які не повинні створювати видимий для користувача вивід)
|
||||
|
||||
Якщо спершу потрібен загальніший огляд, почніть із:
|
||||
|
||||
@ -30,35 +30,35 @@ OpenClaw керує сесіями від початку до кінця в та
|
||||
- [Compaction](/uk/concepts/compaction)
|
||||
- [Огляд пам’яті](/uk/concepts/memory)
|
||||
- [Пошук у пам’яті](/uk/concepts/memory-search)
|
||||
- [Обрізання сесій](/uk/concepts/session-pruning)
|
||||
- [Очищення сесій](/uk/concepts/session-pruning)
|
||||
- [Гігієна транскриптів](/uk/reference/transcript-hygiene)
|
||||
|
||||
---
|
||||
|
||||
## Джерело істини: Gateway
|
||||
|
||||
OpenClaw спроєктовано навколо одного **процесу Gateway**, який володіє станом сесій.
|
||||
OpenClaw спроєктовано навколо єдиного **процесу Gateway**, який володіє станом сесій.
|
||||
|
||||
- UI (застосунок macOS, веб Control UI, TUI) мають запитувати в Gateway списки сесій і кількість токенів.
|
||||
- У віддаленому режимі файли сесій розміщені на віддаленому хості; “перевірка локальних файлів Mac” не відображатиме те, що використовує Gateway.
|
||||
- Інтерфейси користувача (застосунок macOS, вебінтерфейс керування, TUI) мають запитувати в Gateway списки сесій і кількість токенів.
|
||||
- У віддаленому режимі файли сесій розташовані на віддаленому хості; «перевірка ваших локальних файлів Mac» не відображатиме те, що використовує Gateway.
|
||||
|
||||
---
|
||||
|
||||
## Два шари збереження
|
||||
## Два рівні збереження
|
||||
|
||||
OpenClaw зберігає сесії у двох шарах:
|
||||
OpenClaw зберігає сесії на двох рівнях:
|
||||
|
||||
1. **Сховище сесій (`sessions.json`)**
|
||||
- Мапа ключ/значення: `sessionKey -> SessionEntry`
|
||||
- Невелике, змінюване, безпечне для редагування (або видалення записів)
|
||||
- Відстежує метадані сесії (поточний id сесії, останню активність, перемикачі, лічильники токенів тощо)
|
||||
- Невелике, змінне, безпечне для редагування (або видалення записів)
|
||||
- Відстежує метадані сесії (поточний ідентифікатор сесії, останню активність, перемикачі, лічильники токенів тощо)
|
||||
|
||||
2. **Транскрипт (`<sessionId>.jsonl`)**
|
||||
- Транскрипт лише з додаванням записів із деревоподібною структурою (записи мають `id` + `parentId`)
|
||||
- Транскрипт лише для додавання зі структурою дерева (записи мають `id` + `parentId`)
|
||||
- Зберігає фактичну розмову + виклики інструментів + підсумки Compaction
|
||||
- Використовується для повторної побудови контексту моделі для майбутніх ходів
|
||||
- Великі налагоджувальні контрольні точки перед Compaction пропускаються, щойно активний
|
||||
транскрипт перевищує обмеження розміру контрольної точки, щоб уникнути другої величезної
|
||||
транскрипт перевищує обмеження розміру контрольної точки, щоб уникнути другої гігантської
|
||||
копії `.checkpoint.*.jsonl`.
|
||||
|
||||
---
|
||||
@ -75,30 +75,35 @@ OpenClaw визначає ці шляхи через `src/config/sessions.ts`.
|
||||
|
||||
---
|
||||
|
||||
## Обслуговування сховища та керування диском
|
||||
## Обслуговування сховища та контроль диска
|
||||
|
||||
Збереження сесій має автоматичні засоби обслуговування (`session.maintenance`) для `sessions.json`, артефактів транскриптів і допоміжних файлів траєкторій:
|
||||
Збереження сесій має автоматичні засоби обслуговування (`session.maintenance`) для `sessions.json`, артефактів транскриптів і супровідних файлів траєкторій:
|
||||
|
||||
- `mode`: `warn` (типово) або `enforce`
|
||||
- `pruneAfter`: поріг віку застарілих записів (типово `30d`)
|
||||
- `maxEntries`: обмеження кількості записів у `sessions.json` (типово `500`)
|
||||
- `resetArchiveRetention`: строк зберігання архівів транскриптів `*.reset.<timestamp>` (типово: як `pruneAfter`; `false` вимикає очищення)
|
||||
- `resetArchiveRetention`: термін зберігання архівів транскриптів `*.reset.<timestamp>` (типово: такий самий, як `pruneAfter`; `false` вимикає очищення)
|
||||
- `maxDiskBytes`: необов’язковий бюджет каталогу сесій
|
||||
- `highWaterBytes`: необов’язкова ціль після очищення (типово `80%` від `maxDiskBytes`)
|
||||
|
||||
Звичайні записи Gateway пакетно виконують очищення `maxEntries` для обмежень продакшн-розміру, тому сховище може ненадовго перевищувати налаштоване обмеження, перш ніж наступне очищення до верхнього порога перепише його назад до меншого розміру. Читання сховища сесій не обрізають і не обмежують записи під час запуску Gateway; для очищення використовуйте записи або `openclaw sessions cleanup --enforce`. `openclaw sessions cleanup --enforce` все одно негайно застосовує налаштоване обмеження.
|
||||
Звичайні записи Gateway пакетно виконують очищення `maxEntries` для обмежень виробничого розміру, тож сховище може ненадовго перевищити налаштований ліміт, перш ніж наступне очищення високого рівня води перепише його назад до меншого розміру. Читання сховища сесій не обрізає й не обмежує записи під час запуску Gateway; для очищення використовуйте записи або `openclaw sessions cleanup --enforce`. `openclaw sessions cleanup --enforce` все одно негайно застосовує налаштоване обмеження.
|
||||
|
||||
Обслуговування зберігає довговічні зовнішні вказівники розмов, як-от групові сесії
|
||||
та сесії чатів у межах потоків, але синтетичні runtime-записи для cron, hooks,
|
||||
heartbeat, ACP і субагентів усе ще можуть бути видалені, коли вони перевищують
|
||||
налаштований вік, кількість або дисковий бюджет.
|
||||
|
||||
OpenClaw більше не створює автоматичні ротаційні резервні копії `sessions.json.bak.*` під час записів Gateway. Застарілий ключ `session.maintenance.rotateBytes` ігнорується, а `openclaw doctor --fix` видаляє його зі старіших конфігурацій.
|
||||
|
||||
Порядок застосування для очищення дискового бюджету (`mode: "enforce"`):
|
||||
Порядок примусового очищення дискового бюджету (`mode: "enforce"`):
|
||||
|
||||
1. Спершу видалити найстаріші архівовані, сирітські артефакти транскриптів або сирітські артефакти траєкторій.
|
||||
2. Якщо все ще вище цілі, витіснити найстаріші записи сесій і їхні файли транскриптів/траєкторій.
|
||||
3. Продовжувати, доки використання не стане на рівні `highWaterBytes` або нижче.
|
||||
1. Спершу видалити найстаріші архівні, осиротілі артефакти транскриптів або осиротілі артефакти траєкторій.
|
||||
2. Якщо використання все ще перевищує ціль, вилучити найстаріші записи сесій і їхні файли транскриптів/траєкторій.
|
||||
3. Продовжувати, доки використання не буде на рівні або нижче `highWaterBytes`.
|
||||
|
||||
У `mode: "warn"` OpenClaw повідомляє про потенційні витіснення, але не змінює сховище/файли.
|
||||
У `mode: "warn"` OpenClaw повідомляє про потенційні вилучення, але не змінює сховище/файли.
|
||||
|
||||
Запустити обслуговування на вимогу:
|
||||
Запустіть обслуговування на вимогу:
|
||||
|
||||
```bash
|
||||
openclaw sessions cleanup --dry-run
|
||||
@ -107,50 +112,50 @@ openclaw sessions cleanup --enforce
|
||||
|
||||
---
|
||||
|
||||
## Cron-сесії та журнали запусків
|
||||
## Сесії Cron і журнали запусків
|
||||
|
||||
Ізольовані запуски Cron також створюють записи сесій/транскрипти й мають окремі налаштування строків зберігання:
|
||||
Ізольовані запуски cron також створюють записи сесій/транскрипти та мають окремі засоби керування зберіганням:
|
||||
|
||||
- `cron.sessionRetention` (типово `24h`) обрізає старі сесії ізольованих запусків Cron зі сховища сесій (`false` вимикає).
|
||||
- `cron.runLog.maxBytes` + `cron.runLog.keepLines` обрізають файли `~/.openclaw/cron/runs/<jobId>.jsonl` (типово: `2_000_000` байтів і `2000` рядків).
|
||||
- `cron.sessionRetention` (типово `24h`) видаляє старі ізольовані сесії запусків cron зі сховища сесій (`false` вимикає).
|
||||
- `cron.runLog.maxBytes` + `cron.runLog.keepLines` очищають файли `~/.openclaw/cron/runs/<jobId>.jsonl` (типово: `2_000_000` байтів і `2000` рядків).
|
||||
|
||||
Коли Cron примусово створює нову ізольовану сесію запуску, він очищає попередній
|
||||
Коли cron примусово створює нову ізольовану сесію запуску, він очищає попередній
|
||||
запис сесії `cron:<jobId>` перед записом нового рядка. Він переносить безпечні
|
||||
налаштування, як-от параметри мислення/швидкого режиму/детальності, мітки та явно
|
||||
вибрані користувачем перевизначення моделі/автентифікації. Він відкидає навколишній контекст розмови, як-от
|
||||
маршрутизацію каналу/групи, політику надсилання чи черги, підвищення прав, походження та
|
||||
прив’язку середовища виконання ACP, щоб свіжий ізольований запуск не міг успадкувати застарілу доставку або
|
||||
повноваження середовища виконання від старішого запуску.
|
||||
налаштування, як-от параметри мислення/швидкого режиму/докладності, мітки та явні
|
||||
вибрані користувачем перевизначення моделі/автентифікації. Він відкидає фоновий
|
||||
контекст розмови, як-от маршрутизацію каналу/групи, політику надсилання або черги,
|
||||
підвищення привілеїв, джерело та runtime-прив’язку ACP, щоб свіжий ізольований
|
||||
запуск не міг успадкувати застарілу доставку або runtime-повноваження від старішого запуску.
|
||||
|
||||
---
|
||||
|
||||
## Ключі сесій (`sessionKey`)
|
||||
|
||||
`sessionKey` визначає, у _якому кошику розмови_ ви перебуваєте (маршрутизація + ізоляція).
|
||||
`sessionKey` визначає, у якому _кошику розмови_ ви перебуваєте (маршрутизація + ізоляція).
|
||||
|
||||
Поширені шаблони:
|
||||
|
||||
- Основний/прямий чат (на агента): `agent:<agentId>:<mainKey>` (типово `main`)
|
||||
- Основний/прямий чат (для кожного агента): `agent:<agentId>:<mainKey>` (типово `main`)
|
||||
- Група: `agent:<agentId>:<channel>:group:<id>`
|
||||
- Кімната/канал (Discord/Slack): `agent:<agentId>:<channel>:channel:<id>` або `...:room:<id>`
|
||||
- Cron: `cron:<job.id>`
|
||||
- Webhook: `hook:<uuid>` (якщо не перевизначено)
|
||||
|
||||
Канонічні правила задокументовано в [/concepts/session](/uk/concepts/session).
|
||||
Канонічні правила задокументовано на [/concepts/session](/uk/concepts/session).
|
||||
|
||||
---
|
||||
|
||||
## Id сесій (`sessionId`)
|
||||
## Ідентифікатори сесій (`sessionId`)
|
||||
|
||||
Кожен `sessionKey` вказує на поточний `sessionId` (файл транскрипту, який продовжує розмову).
|
||||
|
||||
Практичні правила:
|
||||
|
||||
- **Скидання** (`/new`, `/reset`) створює новий `sessionId` для цього `sessionKey`.
|
||||
- **Щоденне скидання** (типово 4:00 AM за локальним часом на хості gateway) створює новий `sessionId` на наступному повідомленні після межі скидання.
|
||||
- **Закінчення строку бездіяльності** (`session.reset.idleMinutes` або застаріле `session.idleMinutes`) створює новий `sessionId`, коли повідомлення надходить після вікна бездіяльності. Коли налаштовано і щоденне, і за бездіяльністю, перемагає те, що спливає першим.
|
||||
- **Системні події** (heartbeat, пробудження Cron, сповіщення exec, службовий облік gateway) можуть змінювати рядок сесії, але не подовжують свіжість для щоденного/idle-скидання. Перехід скидання відкидає поставлені в чергу сповіщення системних подій для попередньої сесії до побудови свіжого промпта.
|
||||
- **Захист від форку батьківського потоку** (`session.parentForkMaxTokens`, типово `100000`) пропускає форкування батьківського транскрипту, коли батьківська сесія вже завелика; новий потік починається заново. Установіть `0`, щоб вимкнути.
|
||||
- **Щоденне скидання** (типово о 4:00 AM за локальним часом на хості Gateway) створює новий `sessionId` на наступному повідомленні після межі скидання.
|
||||
- **Закінчення терміну через бездіяльність** (`session.reset.idleMinutes` або застарілий `session.idleMinutes`) створює новий `sessionId`, коли повідомлення надходить після вікна бездіяльності. Коли налаштовано і щоденне скидання, і бездіяльність, перемагає те, що спливає першим.
|
||||
- **Системні події** (heartbeat, пробудження cron, сповіщення exec, службовий облік gateway) можуть змінювати рядок сесії, але не подовжують свіжість щоденного/бездіяльного скидання. Перехід скидання відкидає поставлені в чергу сповіщення системних подій для попередньої сесії перед побудовою свіжого prompt.
|
||||
- **Захист форку батьківського потоку** (`session.parentForkMaxTokens`, типово `100000`) пропускає форкування батьківського транскрипту, коли батьківська сесія вже завелика; новий потік починається з нуля. Установіть `0`, щоб вимкнути.
|
||||
|
||||
Деталь реалізації: рішення ухвалюється в `initSessionState()` у `src/auto-reply/reply/session.ts`.
|
||||
|
||||
@ -162,30 +167,30 @@ openclaw sessions cleanup --enforce
|
||||
|
||||
Ключові поля (не вичерпно):
|
||||
|
||||
- `sessionId`: поточний id транскрипту (ім’я файлу виводиться з нього, якщо не встановлено `sessionFile`)
|
||||
- `sessionStartedAt`: часова мітка початку для поточного `sessionId`; для щоденного скидання
|
||||
свіжість використовує її. Застарілі рядки можуть виводити її із заголовка сесії JSONL.
|
||||
- `lastInteractionAt`: часова мітка останньої реальної взаємодії користувача/каналу; для idle-скидання
|
||||
свіжість використовує її, тому Heartbeat, Cron і exec-події не підтримують сесії
|
||||
- `sessionId`: поточний ідентифікатор транскрипту (ім’я файлу виводиться з нього, якщо не задано `sessionFile`)
|
||||
- `sessionStartedAt`: позначка часу початку для поточного `sessionId`; свіжість щоденного скидання
|
||||
використовує її. Застарілі рядки можуть виводити її із заголовка сесії JSONL.
|
||||
- `lastInteractionAt`: позначка часу останньої реальної взаємодії користувача/каналу; свіжість скидання
|
||||
через бездіяльність використовує її, тож heartbeat, cron і події exec не підтримують сесії
|
||||
активними. Застарілі рядки без цього поля повертаються до відновленого часу початку сесії
|
||||
для idle-свіжості.
|
||||
- `updatedAt`: часова мітка останньої зміни рядка сховища, використовується для списків, обрізання та
|
||||
службового обліку. Вона не є джерелом істини для свіжості щоденного/idle-скидання.
|
||||
для свіжості бездіяльності.
|
||||
- `updatedAt`: позначка часу останньої зміни рядка сховища, використовується для списків, очищення та
|
||||
службового обліку. Вона не є джерелом істини для свіжості щоденного/бездіяльного скидання.
|
||||
- `sessionFile`: необов’язкове явне перевизначення шляху транскрипту
|
||||
- `chatType`: `direct | group | room` (допомагає UI та політиці надсилання)
|
||||
- `chatType`: `direct | group | room` (допомагає інтерфейсам користувача та політиці надсилання)
|
||||
- `provider`, `subject`, `room`, `space`, `displayName`: метадані для позначення груп/каналів
|
||||
- Перемикачі:
|
||||
- `thinkingLevel`, `verboseLevel`, `reasoningLevel`, `elevatedLevel`
|
||||
- `sendPolicy` (перевизначення для окремої сесії)
|
||||
- Вибір моделі:
|
||||
- `providerOverride`, `modelOverride`, `authProfileOverride`
|
||||
- Лічильники токенів (best-effort / залежні від провайдера):
|
||||
- Лічильники токенів (best-effort / залежать від провайдера):
|
||||
- `inputTokens`, `outputTokens`, `totalTokens`, `contextTokens`
|
||||
- `compactionCount`: як часто автоматичне Compaction завершувалося для цього ключа сесії
|
||||
- `memoryFlushAt`: часова мітка останнього скидання пам’яті перед Compaction
|
||||
- `memoryFlushCompactionCount`: кількість Compaction на момент останнього скидання
|
||||
- `compactionCount`: як часто автоматична Compaction завершувалася для цього ключа сесії
|
||||
- `memoryFlushAt`: позначка часу останнього скидання пам’яті перед Compaction
|
||||
- `memoryFlushCompactionCount`: кількість Compaction, коли востаннє виконувався flush
|
||||
|
||||
Сховище безпечно редагувати, але Gateway є джерелом істини: він може переписувати або повторно гідратувати записи під час роботи сесій.
|
||||
Сховище безпечно редагувати, але Gateway є джерелом істини: він може переписувати або повторно гідратувати записи під час виконання сесій.
|
||||
|
||||
---
|
||||
|
||||
@ -200,27 +205,27 @@ openclaw sessions cleanup --enforce
|
||||
|
||||
Помітні типи записів:
|
||||
|
||||
- `message`: повідомлення user/assistant/toolResult
|
||||
- `custom_message`: вставлені розширенням повідомлення, які _входять_ у контекст моделі (можуть бути приховані від UI)
|
||||
- `custom`: стан розширення, який _не входить_ у контекст моделі
|
||||
- `message`: повідомлення користувача/асистента/toolResult
|
||||
- `custom_message`: повідомлення, вставлені розширенням, які _входять_ до контексту моделі (можуть бути приховані від інтерфейсу користувача)
|
||||
- `custom`: стан розширення, який _не входить_ до контексту моделі
|
||||
- `compaction`: збережений підсумок Compaction з `firstKeptEntryId` і `tokensBefore`
|
||||
- `branch_summary`: збережений підсумок під час навігації гілкою дерева
|
||||
|
||||
OpenClaw навмисно **не** “виправляє” транскрипти; Gateway використовує `SessionManager` для їх читання/запису.
|
||||
OpenClaw навмисно **не** «виправляє» транскрипти; Gateway використовує `SessionManager` для їх читання/запису.
|
||||
|
||||
---
|
||||
|
||||
## Вікна контексту й відстежувані токени
|
||||
## Вікна контексту проти відстежуваних токенів
|
||||
|
||||
Важливі два різні поняття:
|
||||
|
||||
1. **Вікно контексту моделі**: жорстке обмеження на модель (токени, видимі моделі)
|
||||
2. **Лічильники сховища сесій**: ковзні статистики, записані в `sessions.json` (використовуються для /status і дашбордів)
|
||||
1. **Вікно контексту моделі**: жорстке обмеження для кожної моделі (токени, видимі моделі)
|
||||
2. **Лічильники сховища сесій**: ковзна статистика, записана в `sessions.json` (використовується для /status і панелей керування)
|
||||
|
||||
Якщо ви налаштовуєте обмеження:
|
||||
|
||||
- Вікно контексту береться з каталогу моделей (і може бути перевизначене через конфігурацію).
|
||||
- `contextTokens` у сховищі — це оцінка/звітне значення часу виконання; не сприймайте його як сувору гарантію.
|
||||
- `contextTokens` у сховищі — це runtime-оцінка/звітне значення; не розглядайте його як сувору гарантію.
|
||||
|
||||
Докладніше див. [/token-use](/uk/reference/token-use).
|
||||
|
||||
@ -228,78 +233,76 @@ OpenClaw навмисно **не** “виправляє” транскрипт
|
||||
|
||||
## Compaction: що це таке
|
||||
|
||||
Compaction підсумовує старішу розмову в збережений запис `compaction` у транскрипті й залишає останні повідомлення незмінними.
|
||||
Compaction підсумовує старішу розмову в збережений запис `compaction` у транскрипті та залишає недавні повідомлення без змін.
|
||||
|
||||
Після Compaction майбутні ходи бачать:
|
||||
|
||||
- Підсумок Compaction
|
||||
- Повідомлення після `firstKeptEntryId`
|
||||
|
||||
Compaction є **персистентним** (на відміну від обрізання сесій). Див. [/concepts/session-pruning](/uk/concepts/session-pruning).
|
||||
Compaction є **постійною** (на відміну від очищення сесій). Див. [/concepts/session-pruning](/uk/concepts/session-pruning).
|
||||
|
||||
## Межі фрагментів Compaction і парування інструментів
|
||||
## Межі частин Compaction і поєднання інструментів
|
||||
|
||||
Коли OpenClaw розбиває довгий транскрипт на фрагменти Compaction, він зберігає
|
||||
виклики інструментів assistant у парі з відповідними записами `toolResult`.
|
||||
Коли OpenClaw розбиває довгий транскрипт на частини Compaction, він зберігає
|
||||
виклики інструментів асистента поєднаними з відповідними записами `toolResult`.
|
||||
|
||||
- Якщо поділ за часткою токенів потрапляє між викликом інструмента та його результатом, OpenClaw
|
||||
зміщує межу до повідомлення assistant із викликом інструмента, замість того щоб розділяти
|
||||
зсуває межу до повідомлення асистента з викликом інструмента, а не розділяє
|
||||
пару.
|
||||
- Якщо кінцевий блок результатів інструментів інакше перевищив би цільовий розмір фрагмента,
|
||||
- Якщо завершальний блок результатів інструментів інакше перевищив би цільовий розмір частини,
|
||||
OpenClaw зберігає цей очікуваний блок інструментів і залишає непідсумований хвіст
|
||||
незмінним.
|
||||
без змін.
|
||||
- Перервані/помилкові блоки викликів інструментів не утримують очікуваний поділ відкритим.
|
||||
|
||||
---
|
||||
|
||||
## Коли відбувається автоматичне Compaction (середовище виконання Pi)
|
||||
## Коли відбувається автоматична Compaction (runtime Pi)
|
||||
|
||||
У вбудованому агенті Pi автоматичне Compaction запускається у двох випадках:
|
||||
У вбудованому агенті Pi автоматична Compaction запускається у двох випадках:
|
||||
|
||||
1. **Відновлення після переповнення**: модель повертає помилку переповнення контексту
|
||||
(`request_too_large`, `context length exceeded`, `input exceeds the maximum
|
||||
number of tokens`, `input token count exceeds the maximum number of input
|
||||
tokens`, `input is too long for the model`, `ollama error: context length
|
||||
exceeded` і подібні варіанти у формі провайдерів) → compact → повторити.
|
||||
exceeded` і подібні варіанти, сформовані провайдерами) → compact → retry.
|
||||
2. **Порогове обслуговування**: після успішного ходу, коли:
|
||||
|
||||
`contextTokens > contextWindow - reserveTokens`
|
||||
|
||||
Де:
|
||||
|
||||
- `contextWindow` — вікно контексту моделі
|
||||
- `reserveTokens` — запас, зарезервований для промптів + наступного виводу моделі
|
||||
- `contextWindow` — це вікно контексту моделі
|
||||
- `reserveTokens` — це запас, зарезервований для prompts + наступного виводу моделі
|
||||
|
||||
Це семантика середовища виконання Pi (OpenClaw споживає події, але Pi вирішує, коли виконувати Compaction).
|
||||
Це семантика runtime Pi (OpenClaw споживає події, але Pi вирішує, коли виконувати Compaction).
|
||||
|
||||
OpenClaw також може запустити попереднє локальне Compaction перед відкриттям наступного
|
||||
OpenClaw також може запускати попередню локальну Compaction перед відкриттям наступного
|
||||
запуску, коли встановлено `agents.defaults.compaction.maxActiveTranscriptBytes` і
|
||||
активний файл транскрипту досягає цього розміру. Це захист за розміром файлу для вартості локального
|
||||
повторного відкриття, а не сире архівування: OpenClaw все одно виконує звичайне семантичне Compaction,
|
||||
і воно потребує `truncateAfterCompaction`, щоб стиснений підсумок міг стати
|
||||
новим наступним транскриптом.
|
||||
активний файл транскрипта досягає цього розміру. Це захист за розміром файлу для вартості
|
||||
локального повторного відкриття, а не сире архівування: OpenClaw усе ще виконує звичайну
|
||||
семантичну Compaction, і для цього потрібен `truncateAfterCompaction`, щоб стиснений
|
||||
підсумок міг стати новим наступним транскриптом.
|
||||
|
||||
Для вбудованих запусків Pi `agents.defaults.compaction.midTurnPrecheck.enabled: true`
|
||||
додає opt-in захист циклу інструментів. Після додавання результату інструмента й перед
|
||||
наступним викликом моделі OpenClaw оцінює тиск на prompt за допомогою тієї самої
|
||||
логіки передстартового бюджету, що використовується на початку ходу. Якщо контекст
|
||||
більше не вміщується, захист не виконує Compaction усередині хука Pi
|
||||
`transformContext`. Він піднімає структурований сигнал
|
||||
mid-turn precheck, зупиняє поточне надсилання prompt і дає зовнішньому циклу
|
||||
запуску використати наявний шлях відновлення: обрізати завеликі результати
|
||||
інструментів, коли цього достатньо, або запустити налаштований режим Compaction і
|
||||
повторити спробу. Опція вимкнена за замовчуванням і працює з обома режимами
|
||||
Compaction, `default` і `safeguard`, зокрема із Compaction у режимі safeguard на
|
||||
основі провайдера.
|
||||
Це не залежить від `maxActiveTranscriptBytes`: захист за розміром у байтах
|
||||
запускається перед відкриттям ходу, тоді як mid-turn precheck запускається пізніше
|
||||
у вбудованому циклі інструментів Pi після додавання нових результатів інструментів.
|
||||
додає опціональний захист циклу інструментів. Після додавання результату інструмента і перед
|
||||
наступним викликом моделі OpenClaw оцінює навантаження на промпт, використовуючи ту саму
|
||||
логіку попереднього бюджету, що й на початку ходу. Якщо контекст більше не вміщується,
|
||||
захист не виконує Compaction всередині хука Pi `transformContext`. Він піднімає структурований
|
||||
сигнал попередньої перевірки всередині ходу, зупиняє поточне надсилання промпта і дає
|
||||
зовнішньому циклу запуску використати наявний шлях відновлення: обрізати завеликі результати
|
||||
інструментів, коли цього достатньо, або запустити налаштований режим Compaction і повторити
|
||||
спробу. Параметр вимкнений за замовчуванням і працює з режимами Compaction `default` і
|
||||
`safeguard`, зокрема із Compaction з захистом, підтриманою провайдером.
|
||||
Це незалежно від `maxActiveTranscriptBytes`: захист за розміром у байтах запускається
|
||||
до відкриття ходу, тоді як попередня перевірка всередині ходу запускається пізніше у
|
||||
вбудованому циклі інструментів Pi після додавання нових результатів інструментів.
|
||||
|
||||
---
|
||||
|
||||
## Налаштування Compaction (`reserveTokens`, `keepRecentTokens`)
|
||||
|
||||
Налаштування Compaction Pi містяться в налаштуваннях Pi:
|
||||
Налаштування Compaction для Pi містяться в налаштуваннях Pi:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -311,32 +314,32 @@ Compaction, `default` і `safeguard`, зокрема із Compaction у режи
|
||||
}
|
||||
```
|
||||
|
||||
OpenClaw також застосовує мінімальний безпечний поріг для вбудованих запусків:
|
||||
OpenClaw також примусово застосовує безпечну нижню межу для вбудованих запусків:
|
||||
|
||||
- Якщо `compaction.reserveTokens < reserveTokensFloor`, OpenClaw підвищує його.
|
||||
- Стандартний мінімальний поріг — `20000` токенів.
|
||||
- Установіть `agents.defaults.compaction.reserveTokensFloor: 0`, щоб вимкнути мінімальний поріг.
|
||||
- Якщо `compaction.reserveTokens < reserveTokensFloor`, OpenClaw підвищує це значення.
|
||||
- Нижня межа за замовчуванням становить `20000` токенів.
|
||||
- Установіть `agents.defaults.compaction.reserveTokensFloor: 0`, щоб вимкнути нижню межу.
|
||||
- Якщо значення вже вище, OpenClaw залишає його без змін.
|
||||
- Ручний `/compact` враховує явно заданий `agents.defaults.compaction.keepRecentTokens`
|
||||
і зберігає точку відсікання нещодавнього хвоста Pi. Без явно заданого бюджету збереження
|
||||
ручний Compaction залишається жорсткою контрольною точкою, а перебудований контекст починається з
|
||||
- Ручний `/compact` враховує явний `agents.defaults.compaction.keepRecentTokens`
|
||||
і зберігає точку відсікання нещодавнього хвоста Pi. Без явного бюджету збереження
|
||||
ручна Compaction лишається жорсткою контрольною точкою, а перебудований контекст починається з
|
||||
нового підсумку.
|
||||
- Установіть `agents.defaults.compaction.midTurnPrecheck.enabled: true`, щоб запускати
|
||||
необов’язкову попередню перевірку циклу інструментів після нових результатів інструментів і перед наступним
|
||||
викликом моделі. Це лише тригер; генерація підсумку все одно використовує налаштований
|
||||
шлях Compaction. Вона не залежить від `maxActiveTranscriptBytes`, який є
|
||||
стартовим захистом активного транскрипту за розміром у байтах.
|
||||
- Установіть `agents.defaults.compaction.maxActiveTranscriptBytes` у байтове значення або
|
||||
рядок на кшталт `"20mb"`, щоб запускати локальний Compaction перед ходом, коли активний
|
||||
транскрипт стає великим. Цей захист активний лише тоді, коли також увімкнено
|
||||
`truncateAfterCompaction`. Залиште це значення незаданим або встановіть `0`, щоб
|
||||
опціональну попередню перевірку циклу інструментів після нових результатів інструментів і перед наступним
|
||||
викликом моделі. Це лише тригер; створення підсумку все одно використовує налаштований
|
||||
шлях Compaction. Він незалежний від `maxActiveTranscriptBytes`, який є
|
||||
захистом за розміром активного транскрипта в байтах на початку ходу.
|
||||
- Установіть `agents.defaults.compaction.maxActiveTranscriptBytes` у значення байтів або
|
||||
рядок, наприклад `"20mb"`, щоб запускати локальну Compaction перед ходом, коли активний
|
||||
транскрипт стає великим. Цей захист активний лише коли також увімкнено
|
||||
`truncateAfterCompaction`. Залиште параметр невстановленим або встановіть `0`, щоб
|
||||
вимкнути.
|
||||
- Коли `agents.defaults.compaction.truncateAfterCompaction` увімкнено,
|
||||
OpenClaw після Compaction ротує активний транскрипт у стиснений наступний JSONL.
|
||||
Старий повний транскрипт залишається заархівованим і пов’язаним із
|
||||
контрольною точкою Compaction, замість перезапису на місці.
|
||||
- Коли увімкнено `agents.defaults.compaction.truncateAfterCompaction`,
|
||||
OpenClaw після Compaction обертає активний транскрипт у стиснений наступний JSONL.
|
||||
Старий повний транскрипт лишається в архіві та прив’язується з контрольної точки
|
||||
Compaction замість перезапису на місці.
|
||||
|
||||
Навіщо: залишити достатній запас для багатоходового «обслуговування» (наприклад, записів пам’яті), перш ніж Compaction стане неминучим.
|
||||
Навіщо: залишити достатній запас для багатоходового “housekeeping” (наприклад, записів пам’яті), перш ніж Compaction стане неминучою.
|
||||
|
||||
Реалізація: `ensurePiCompactionReserveTokens()` у `src/agents/pi-settings.ts`
|
||||
(викликається з `src/agents/pi-embedded-runner.ts`).
|
||||
@ -345,87 +348,87 @@ OpenClaw також застосовує мінімальний безпечни
|
||||
|
||||
## Підключувані провайдери Compaction
|
||||
|
||||
Plugins можуть зареєструвати провайдера Compaction через `registerCompactionProvider()` в API Plugin. Коли `agents.defaults.compaction.provider` встановлено на id зареєстрованого провайдера, розширення safeguard делегує підсумовування цьому провайдеру замість вбудованого конвеєра `summarizeInStages`.
|
||||
Plugins можуть реєструвати провайдера Compaction через `registerCompactionProvider()` в API Plugin. Коли для `agents.defaults.compaction.provider` задано id зареєстрованого провайдера, розширення safeguard делегує підсумовування цьому провайдеру замість вбудованого конвеєра `summarizeInStages`.
|
||||
|
||||
- `provider`: id зареєстрованого Plugin провайдера Compaction. Не задавайте, щоб використовувати стандартне LLM-підсумовування.
|
||||
- `provider`: id зареєстрованого Plugin провайдера Compaction. Залиште невстановленим для стандартного підсумовування LLM.
|
||||
- Установлення `provider` примусово задає `mode: "safeguard"`.
|
||||
- Провайдери отримують ті самі інструкції Compaction і політику збереження ідентифікаторів, що й вбудований шлях.
|
||||
- Safeguard усе одно зберігає контекст суфікса нещодавніх ходів і розділених ходів після виводу провайдера.
|
||||
- Safeguard усе ще зберігає контекст суфікса нещодавніх ходів і розділених ходів після виводу провайдера.
|
||||
- Вбудоване підсумовування safeguard повторно дистилює попередні підсумки з новими повідомленнями
|
||||
замість дослівного збереження повного попереднього підсумку.
|
||||
- Режим Safeguard вмикає аудити якості підсумків за замовчуванням; установіть
|
||||
`qualityGuard.enabled: false`, щоб пропустити поведінку повторної спроби при неправильному форматі виводу.
|
||||
- Якщо провайдер зазнає невдачі або повертає порожній результат, OpenClaw автоматично повертається до вбудованого LLM-підсумовування.
|
||||
- Сигнали переривання/тайм-ауту перекидаються далі (не приглушуються), щоб поважати скасування викликачем.
|
||||
- Режим safeguard за замовчуванням вмикає аудити якості підсумків; установіть
|
||||
`qualityGuard.enabled: false`, щоб пропустити поведінку повторної спроби у разі некоректно сформованого виводу.
|
||||
- Якщо провайдер зазнає помилки або повертає порожній результат, OpenClaw автоматично повертається до вбудованого підсумовування LLM.
|
||||
- Сигнали переривання/тайм-ауту перекидаються далі (не поглинаються), щоб поважати скасування викликувачем.
|
||||
|
||||
Джерело: `src/plugins/compaction-provider.ts`, `src/agents/pi-hooks/compaction-safeguard.ts`.
|
||||
|
||||
---
|
||||
|
||||
## Видимі для користувача поверхні
|
||||
## Поверхні, видимі користувачу
|
||||
|
||||
Ви можете спостерігати Compaction і стан сеансу через:
|
||||
Ви можете спостерігати Compaction і стан сесії через:
|
||||
|
||||
- `/status` (у будь-якому сеансі чату)
|
||||
- `/status` (у будь-якій чат-сесії)
|
||||
- `openclaw status` (CLI)
|
||||
- `openclaw sessions` / `sessions --json`
|
||||
- Детальний режим: `🧹 Auto-compaction complete` + кількість Compaction
|
||||
|
||||
---
|
||||
|
||||
## Тихе обслуговування (`NO_REPLY`)
|
||||
## Тихе housekeeping (`NO_REPLY`)
|
||||
|
||||
OpenClaw підтримує «тихі» ходи для фонових завдань, де користувач не має бачити проміжний вивід.
|
||||
OpenClaw підтримує “тихі” ходи для фонових завдань, де користувач не має бачити проміжний вивід.
|
||||
|
||||
Умовність:
|
||||
|
||||
- Помічник починає свій вивід із точного тихого токена `NO_REPLY` /
|
||||
`no_reply`, щоб позначити «не доставляти відповідь користувачу».
|
||||
- OpenClaw вилучає/пригнічує це на рівні доставки.
|
||||
- Пригнічення точного тихого токена не залежить від регістру, тому `NO_REPLY` і
|
||||
`no_reply` обидва враховуються, коли весь payload — це лише тихий токен.
|
||||
- Це лише для справді фонових ходів без доставки; це не скорочення для
|
||||
- Асистент починає свій вивід із точного тихого токена `NO_REPLY` /
|
||||
`no_reply`, щоб указати “не доставляти відповідь користувачу”.
|
||||
- OpenClaw видаляє/пригнічує це на рівні доставки.
|
||||
- Пригнічення точного тихого токена не залежить від регістру, тож `NO_REPLY` і
|
||||
`no_reply` обидва враховуються, коли весь payload є лише тихим токеном.
|
||||
- Це лише для справжніх фонових ходів без доставки; це не скорочення для
|
||||
звичайних дієвих запитів користувача.
|
||||
|
||||
Починаючи з `2026.1.10`, OpenClaw також пригнічує **чернетковий/typing streaming**, коли
|
||||
частковий фрагмент починається з `NO_REPLY`, тож тихі операції не витікають частковим
|
||||
Станом на `2026.1.10`, OpenClaw також пригнічує **потокове передавання чернетки/набору тексту**, коли
|
||||
частковий фрагмент починається з `NO_REPLY`, щоб тихі операції не витікали частковим
|
||||
виводом посеред ходу.
|
||||
|
||||
---
|
||||
|
||||
## «Скидання пам’яті» перед Compaction (реалізовано)
|
||||
## “Скидання пам’яті” перед Compaction (реалізовано)
|
||||
|
||||
Мета: перед автоматичним Compaction запустити тихий агентний хід, який записує довговічний
|
||||
стан на диск (наприклад, `memory/YYYY-MM-DD.md` у робочій області агента), щоб Compaction не міг
|
||||
стерти критично важливий контекст.
|
||||
Мета: перед автоматичною Compaction запустити тихий агентний хід, який записує довговічний
|
||||
стан на диск (наприклад, `memory/YYYY-MM-DD.md` у робочому просторі агента), щоб Compaction не могла
|
||||
стерти критичний контекст.
|
||||
|
||||
OpenClaw використовує підхід **скидання перед порогом**:
|
||||
|
||||
1. Відстежувати використання контексту сеансу.
|
||||
2. Коли воно перетинає «м’який поріг» (нижче порога Compaction Pi), запустити тиху
|
||||
директиву «запиши пам’ять зараз» для агента.
|
||||
1. Відстежувати використання контексту сесії.
|
||||
2. Коли воно перетинає “м’який поріг” (нижчий за поріг Compaction Pi), запустити тиху
|
||||
директиву “запиши пам’ять зараз” для агента.
|
||||
3. Використати точний тихий токен `NO_REPLY` / `no_reply`, щоб користувач не бачив
|
||||
нічого.
|
||||
|
||||
Конфігурація (`agents.defaults.compaction.memoryFlush`):
|
||||
|
||||
- `enabled` (за замовчуванням: `true`)
|
||||
- `model` (необов’язкове точне перевизначення провайдера/моделі для ходу скидання, наприклад `ollama/qwen3:8b`)
|
||||
- `model` (опціональне точне перевизначення провайдера/моделі для ходу скидання, наприклад `ollama/qwen3:8b`)
|
||||
- `softThresholdTokens` (за замовчуванням: `4000`)
|
||||
- `prompt` (повідомлення користувача для ходу скидання)
|
||||
- `systemPrompt` (додатковий системний prompt, доданий для ходу скидання)
|
||||
- `systemPrompt` (додатковий системний промпт, доданий для ходу скидання)
|
||||
|
||||
Примітки:
|
||||
Нотатки:
|
||||
|
||||
- Стандартний prompt/system prompt містить підказку `NO_REPLY`, щоб пригнітити
|
||||
- Стандартний prompt/system prompt містять підказку `NO_REPLY`, щоб пригнітити
|
||||
доставку.
|
||||
- Коли `model` задано, хід скидання використовує цю модель без успадкування
|
||||
ланцюга fallback активного сеансу, тож локальне-only обслуговування не виконує тихий
|
||||
- Коли задано `model`, хід скидання використовує цю модель без успадкування
|
||||
fallback-ланцюга активної сесії, щоб локальне housekeeping не виконувало тихий
|
||||
fallback до платної розмовної моделі.
|
||||
- Скидання виконується один раз за цикл Compaction (відстежується в `sessions.json`).
|
||||
- Скидання виконується лише для вбудованих сеансів Pi (бекенди CLI пропускають його).
|
||||
- Скидання пропускається, коли робоча область сеансу доступна лише для читання (`workspaceAccess: "ro"` або `"none"`).
|
||||
- Див. [Пам’ять](/uk/concepts/memory) щодо структури файлів робочої області та патернів запису.
|
||||
- Скидання запускається один раз за цикл Compaction (відстежується в `sessions.json`).
|
||||
- Скидання запускається лише для вбудованих сесій Pi (бекенди CLI пропускають його).
|
||||
- Скидання пропускається, коли робочий простір сесії доступний лише для читання (`workspaceAccess: "ro"` або `"none"`).
|
||||
- Див. [Пам’ять](/uk/concepts/memory) щодо структури файлів робочого простору і патернів запису.
|
||||
|
||||
Pi також надає хук `session_before_compact` в API розширення, але логіка скидання OpenClaw
|
||||
сьогодні живе на боці Gateway.
|
||||
@ -434,16 +437,16 @@ Pi також надає хук `session_before_compact` в API розширен
|
||||
|
||||
## Контрольний список усунення несправностей
|
||||
|
||||
- Неправильний ключ сеансу? Почніть із [/concepts/session](/uk/concepts/session) і підтвердьте `sessionKey` у `/status`.
|
||||
- Невідповідність сховища й транскрипту? Підтвердьте хост Gateway і шлях сховища з `openclaw status`.
|
||||
- Ключ сесії неправильний? Почніть із [/concepts/session](/uk/concepts/session) і підтвердьте `sessionKey` у `/status`.
|
||||
- Невідповідність сховища і транскрипта? Підтвердьте хост Gateway і шлях сховища з `openclaw status`.
|
||||
- Спам Compaction? Перевірте:
|
||||
- вікно контексту моделі (завелике мале)
|
||||
- налаштування Compaction (`reserveTokens` занадто високий для вікна моделі може спричинити раніший Compaction)
|
||||
- роздування результатів інструментів: увімкніть/налаштуйте обрізання сеансу
|
||||
- Витік тихих ходів? Підтвердьте, що відповідь починається з `NO_REPLY` (точний токен без урахування регістру) і ви використовуєте збірку, яка містить виправлення пригнічення streaming.
|
||||
- контекстне вікно моделі (замале)
|
||||
- налаштування Compaction (`reserveTokens` завеликий для вікна моделі може спричиняти ранішу Compaction)
|
||||
- роздування результатів інструментів: увімкніть/налаштуйте обрізання сесії
|
||||
- Тихі ходи витікають? Підтвердьте, що відповідь починається з `NO_REPLY` (точний токен без урахування регістру), і що ви використовуєте збірку, яка містить виправлення пригнічення потокового передавання.
|
||||
|
||||
## Пов’язане
|
||||
|
||||
- [Керування сеансами](/uk/concepts/session)
|
||||
- [Обрізання сеансу](/uk/concepts/session-pruning)
|
||||
- [Керування сесіями](/uk/concepts/session)
|
||||
- [Обрізання сесії](/uk/concepts/session-pruning)
|
||||
- [Рушій контексту](/uk/concepts/context-engine)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user