chore(i18n): refresh uk translations
This commit is contained in:
parent
b80b69dc48
commit
57356283d3
@ -1,54 +1,52 @@
|
||||
---
|
||||
read_when:
|
||||
- Ви діагностуєте відхилення запитів провайдера, пов’язані зі структурою транскрипту
|
||||
- Ви змінюєте санітизацію транскрипта або логіку виправлення викликів інструментів
|
||||
- Ви досліджуєте невідповідності ідентифікаторів викликів інструментів між провайдерами
|
||||
summary: 'Довідка: правила санітизації та виправлення транскриптів, специфічні для провайдерів'
|
||||
- Ви налагоджуєте відхилення запитів провайдера, пов’язані зі структурою транскрипту
|
||||
- Ви змінюєте логіку очищення транскриптів або виправлення викликів інструментів
|
||||
- Ви досліджуєте невідповідності ідентифікаторів викликів інструментів у різних провайдерів
|
||||
summary: 'Довідка: правила санітизації та виправлення транскриптів, специфічні для провайдера'
|
||||
title: Гігієна транскрипту
|
||||
x-i18n:
|
||||
generated_at: "2026-05-02T05:53:07Z"
|
||||
generated_at: "2026-05-03T04:08:39Z"
|
||||
model: gpt-5.5
|
||||
provider: openai
|
||||
source_hash: 6976d4349e47954f49c9dbf300822013851b604ed665f4ab647c62025760a96c
|
||||
source_hash: ff3a364a4c4d1c0d1e03b2860396c2d7e32c554d7acd0791ed2eaadae06d35ab
|
||||
source_path: reference/transcript-hygiene.md
|
||||
workflow: 16
|
||||
---
|
||||
|
||||
OpenClaw застосовує **виправлення для конкретних провайдерів** до транскриптів перед запуском (побудовою контексту моделі). Більшість із них — це коригування **в пам’яті**, які потрібні для відповідності суворим вимогам провайдерів. Окремий прохід відновлення файлу сесії також може переписувати збережений JSONL перед завантаженням сесії: або видаляючи некоректні рядки JSONL, або відновлюючи збережені turns, які синтаксично валідні, але відомо, що вони відхиляються
|
||||
провайдером під час повторного відтворення. Коли відбувається відновлення, оригінальний файл резервується поруч
|
||||
із файлом сесії.
|
||||
OpenClaw застосовує **виправлення, специфічні для провайдера**, до транскриптів перед запуском (під час побудови контексту моделі). Більшість із них є коригуваннями **в пам’яті**, потрібними для виконання суворих вимог провайдера. Окремий прохід ремонту файлу сесії також може переписати збережений JSONL до завантаження сесії, але лише для некоректно сформованих рядків або збережених ходів, які є недійсними довготривалими записами. Доставлені відповіді assistant зберігаються на диску; специфічне для провайдера вилучення assistant-prefill відбувається лише під час формування вихідних payload. Коли відбувається ремонт, початковий файл резервно копіюється поряд із файлом сесії.
|
||||
|
||||
Обсяг охоплює:
|
||||
Область охоплює:
|
||||
|
||||
- Контекст запиту лише для часу виконання, який не потрапляє до видимих користувачу turns транскрипту
|
||||
- Runtime-контекст промпта, який не потрапляє до видимих користувачу ходів транскрипту
|
||||
- Очищення ідентифікаторів викликів інструментів
|
||||
- Валідацію вхідних даних викликів інструментів
|
||||
- Відновлення парності результатів інструментів
|
||||
- Валідацію / впорядкування turns
|
||||
- Очищення сигнатур думок
|
||||
- Очищення thinking-сигнатур
|
||||
- Очищення корисного навантаження зображень
|
||||
- Очищення порожніх текстових блоків перед повторним відтворенням у провайдера
|
||||
- Позначення походження введення користувача (для запитів, маршрутизованих між сесіями)
|
||||
- Відновлення порожніх assistant error-turns для повторного відтворення Bedrock Converse
|
||||
- Ремонт парності результатів інструментів
|
||||
- Валідацію / впорядкування ходів
|
||||
- Очищення сигнатур thought
|
||||
- Очищення сигнатур thinking
|
||||
- Очищення payload зображень
|
||||
- Очищення порожніх текстових блоків перед повторним відтворенням для провайдера
|
||||
- Позначення походження користувацького введення (для промптів, маршрутизованих між сесіями)
|
||||
- Ремонт порожнього ходу помилки assistant для повторного відтворення Bedrock Converse
|
||||
|
||||
Якщо вам потрібні деталі зберігання транскриптів, див.:
|
||||
Якщо вам потрібні деталі зберігання транскриптів, дивіться:
|
||||
|
||||
- [Поглиблений огляд керування сесіями](/uk/reference/session-management-compaction)
|
||||
|
||||
---
|
||||
|
||||
## Глобальне правило: контекст часу виконання не є користувацьким транскриптом
|
||||
## Глобальне правило: runtime-контекст не є транскриптом користувача
|
||||
|
||||
Контекст часу виконання/системний контекст може додаватися до запиту моделі для turn, але він
|
||||
не є вмістом, створеним кінцевим користувачем. OpenClaw зберігає окреме тіло запиту,
|
||||
призначене для транскрипту, для відповідей Gateway, чергових followups, ACP, CLI та вбудованих запусків Pi.
|
||||
Збережені видимі користувацькі turns використовують це тіло транскрипту замість
|
||||
запиту, збагаченого контекстом часу виконання.
|
||||
Runtime/system-контекст може бути додано до промпта моделі для ходу, але це
|
||||
не вміст, створений кінцевим користувачем. OpenClaw зберігає окреме тіло
|
||||
промпта, орієнтоване на транскрипт, для відповідей Gateway, поставлених у чергу подальших дій, ACP, CLI та вбудованих запусків Pi.
|
||||
Збережені видимі користувацькі ходи використовують це тіло транскрипту замість
|
||||
промпта, збагаченого runtime-контекстом.
|
||||
|
||||
Для застарілих сесій, у яких уже збережено runtime-обгортки, поверхні історії Gateway
|
||||
застосовують проєкцію відображення перед поверненням повідомлень клієнтам WebChat,
|
||||
TUI, REST або SSE.
|
||||
Для застарілих сесій, у яких уже було збережено runtime-обгортки, поверхні історії Gateway
|
||||
застосовують проєкцію відображення перед поверненням повідомлень клієнтам
|
||||
WebChat, TUI, REST або SSE.
|
||||
|
||||
---
|
||||
|
||||
@ -57,11 +55,11 @@ TUI, REST або SSE.
|
||||
Уся гігієна транскриптів централізована у вбудованому runner:
|
||||
|
||||
- Вибір політики: `src/agents/transcript-policy.ts`
|
||||
- Застосування очищення/відновлення: `sanitizeSessionHistory` у `src/agents/pi-embedded-runner/replay-history.ts`
|
||||
- Застосування очищення/ремонту: `sanitizeSessionHistory` у `src/agents/pi-embedded-runner/replay-history.ts`
|
||||
|
||||
Політика використовує `provider`, `modelApi` і `modelId`, щоб вирішити, що застосовувати.
|
||||
Політика використовує `provider`, `modelApi` і `modelId`, щоб визначити, що застосовувати.
|
||||
|
||||
Окремо від гігієни транскриптів, файли сесій відновлюються (за потреби) перед завантаженням:
|
||||
Окремо від гігієни транскриптів файли сесій ремонтуються (за потреби) перед завантаженням:
|
||||
|
||||
- `repairSessionFileIfNeeded` у `src/agents/session-file-repair.ts`
|
||||
- Викликається з `run/attempt.ts` і `compact.ts` (вбудований runner)
|
||||
@ -70,10 +68,10 @@ TUI, REST або SSE.
|
||||
|
||||
## Глобальне правило: очищення зображень
|
||||
|
||||
Корисні навантаження зображень завжди очищуються, щоб запобігти відхиленню на боці провайдера через обмеження
|
||||
розміру (зменшення масштабу/повторне стиснення надто великих base64-зображень).
|
||||
Payload зображень завжди очищується, щоб запобігти відхиленню на боці провайдера через обмеження
|
||||
розміру (зменшення масштабу/повторне стиснення завеликих base64-зображень).
|
||||
|
||||
Це також допомагає контролювати тиск на токени, спричинений зображеннями, для моделей із підтримкою бачення.
|
||||
Це також допомагає контролювати токенне навантаження від зображень для моделей із підтримкою vision.
|
||||
Менші максимальні розміри зазвичай зменшують використання токенів; більші розміри зберігають деталізацію.
|
||||
|
||||
Реалізація:
|
||||
@ -81,17 +79,17 @@ TUI, REST або SSE.
|
||||
- `sanitizeSessionMessagesImages` у `src/agents/pi-embedded-helpers/images.ts`
|
||||
- `sanitizeContentBlocksImages` у `src/agents/tool-images.ts`
|
||||
- Максимальна сторона зображення налаштовується через `agents.defaults.imageMaxDimensionPx` (типово: `1200`).
|
||||
- Порожні текстові блоки видаляються, поки цей прохід обходить вміст повторного відтворення. Assistant
|
||||
turns, які стають порожніми, вилучаються з копії повторного відтворення; user і tool-result
|
||||
turns, які стають порожніми, отримують непорожній placeholder для пропущеного вмісту.
|
||||
- Порожні текстові блоки видаляються, поки цей прохід обходить вміст повторного відтворення. Ходи assistant,
|
||||
які стають порожніми, вилучаються з копії повторного відтворення; користувацькі ходи та ходи результатів інструментів,
|
||||
які стають порожніми, отримують непорожній placeholder пропущеного вмісту.
|
||||
|
||||
---
|
||||
|
||||
## Глобальне правило: некоректні виклики інструментів
|
||||
## Глобальне правило: некоректно сформовані виклики інструментів
|
||||
|
||||
Блоки assistant tool-call, у яких відсутні і `input`, і `arguments`, видаляються
|
||||
до побудови контексту моделі. Це запобігає відхиленням провайдерами через частково
|
||||
збережені виклики інструментів (наприклад, після збою через ліміт частоти).
|
||||
Блоки викликів інструментів assistant, у яких відсутні і `input`, і `arguments`, вилучаються
|
||||
до побудови контексту моделі. Це запобігає відхиленням провайдера через частково
|
||||
збережені виклики інструментів (наприклад, після збою через обмеження швидкості).
|
||||
|
||||
Реалізація:
|
||||
|
||||
@ -102,20 +100,20 @@ TUI, REST або SSE.
|
||||
|
||||
## Глобальне правило: походження міжсесійного введення
|
||||
|
||||
Коли агент надсилає запит в іншу сесію через `sessions_send` (включно з
|
||||
кроками reply/announce між агентами), OpenClaw зберігає створений user turn з:
|
||||
Коли агент надсилає промпт в іншу сесію через `sessions_send` (включно з кроками
|
||||
відповіді/оголошення від агента до агента), OpenClaw зберігає створений користувацький хід із:
|
||||
|
||||
- `message.provenance.kind = "inter_session"`
|
||||
|
||||
OpenClaw також додає на початок того самого turn маркер `[Inter-session message ... isUser=false]`
|
||||
перед текстом маршрутизованого запиту, щоб активний виклик моделі міг відрізнити
|
||||
вивід чужої сесії від зовнішніх інструкцій кінцевого користувача. Цей маркер включає
|
||||
джерельну сесію, канал та інструмент, коли вони доступні. Транскрипт усе одно використовує
|
||||
`role: "user"` для сумісності з провайдерами, але і видимий текст, і метадані
|
||||
походження позначають turn як міжсесійні дані.
|
||||
OpenClaw також додає перед текстом маршрутизованого промпта в тому самому ході маркер
|
||||
`[Inter-session message ... isUser=false]`, щоб активний виклик моделі міг відрізнити
|
||||
вивід сторонньої сесії від зовнішніх інструкцій кінцевого користувача. Цей маркер містить
|
||||
джерельну сесію, канал та інструмент, коли вони доступні. Транскрипт усе ще використовує
|
||||
`role: "user"` для сумісності з провайдерами, але видимий текст і метадані походження
|
||||
позначають цей хід як міжсесійні дані.
|
||||
|
||||
Під час перебудови контексту OpenClaw застосовує такий самий маркер до старіших збережених
|
||||
міжсесійних user turns, які мають лише метадані походження.
|
||||
Під час повторної побудови контексту OpenClaw застосовує той самий маркер до старіших збережених
|
||||
міжсесійних користувацьких ходів, які мають лише метадані походження.
|
||||
|
||||
---
|
||||
|
||||
@ -124,71 +122,71 @@ OpenClaw також додає на початок того самого turn м
|
||||
**OpenAI / OpenAI Codex**
|
||||
|
||||
- Лише очищення зображень.
|
||||
- Видаляє осиротілі reasoning-сигнатури (окремі reasoning-елементи без наступного content-блоку) для транскриптів OpenAI Responses/Codex і видаляє придатний до повторного відтворення OpenAI reasoning після перемикання маршруту моделі.
|
||||
- Зберігає корисні навантаження reasoning-елементів OpenAI Responses, придатні до повторного відтворення, включно із зашифрованими елементами з порожнім summary, щоб ручне/WebSocket повторне відтворення зберігало потрібний стан `rs_*` у парі з елементами виводу assistant.
|
||||
- Вилучення осиротілих reasoning-сигнатур (окремих reasoning-елементів без наступного content-блоку) для транскриптів OpenAI Responses/Codex, а також вилучення придатного до повторного відтворення reasoning OpenAI після перемикання маршруту моделі.
|
||||
- Збереження payload reasoning-елементів OpenAI Responses, придатних до повторного відтворення, включно із зашифрованими елементами з порожнім summary, щоб ручне/WebSocket-відтворення зберігало потрібний стан `rs_*` у парі з елементами виводу assistant.
|
||||
- Без очищення ідентифікаторів викликів інструментів.
|
||||
- Відновлення парності результатів інструментів може переміщувати реальні зіставлені outputs і синтезувати outputs у стилі Codex зі станом `aborted` для відсутніх викликів інструментів.
|
||||
- Без валідації або перевпорядкування turns.
|
||||
- Відсутні outputs інструментів сімейства OpenAI Responses синтезуються як `aborted`, щоб відповідати нормалізації повторного відтворення Codex.
|
||||
- Без вилучення сигнатур думок.
|
||||
- Ремонт парності результатів інструментів може переміщувати справжні зіставлені виводи та синтезувати Codex-style виводи `aborted` для відсутніх викликів інструментів.
|
||||
- Без валідації чи перевпорядкування ходів.
|
||||
- Відсутні виводи інструментів сімейства OpenAI Responses синтезуються як `aborted`, щоб відповідати нормалізації повторного відтворення Codex.
|
||||
- Без вилучення сигнатур thought.
|
||||
|
||||
**OpenAI-сумісна Gemma 4**
|
||||
|
||||
- Історичні блоки thinking/reasoning assistant вилучаються перед повторним відтворенням, щоб локальні
|
||||
OpenAI-сумісні сервери Gemma 4 не отримували reasoning-вміст із попередніх turns.
|
||||
- Поточні продовження tool-call у тому самому turn зберігають reasoning-блок assistant,
|
||||
- Історичні thinking/reasoning-блоки assistant вилучаються перед повторним відтворенням, щоб локальні
|
||||
OpenAI-сумісні сервери Gemma 4 не отримували reasoning-вміст із попередніх ходів.
|
||||
- Поточні продовження викликів інструментів у межах того самого ходу зберігають reasoning-блок assistant,
|
||||
прикріплений до виклику інструмента, доки результат інструмента не буде повторно відтворено.
|
||||
|
||||
**Google (Generative AI / Gemini CLI / Antigravity)**
|
||||
|
||||
- Очищення ідентифікаторів викликів інструментів: суворо буквено-цифрові.
|
||||
- Відновлення парності результатів інструментів і синтетичні результати інструментів.
|
||||
- Валідація turns (чергування turns у стилі Gemini).
|
||||
- Виправлення порядку turns для Google (додає на початок крихітний користувацький bootstrap, якщо історія починається з assistant).
|
||||
- Antigravity Claude: нормалізує thinking-сигнатури; видаляє непідписані thinking-блоки.
|
||||
- Очищення ідентифікаторів викликів інструментів: суворо літерно-цифрові.
|
||||
- Ремонт парності результатів інструментів і синтетичні результати інструментів.
|
||||
- Валідація ходів (чергування ходів у стилі Gemini).
|
||||
- Виправлення порядку ходів Google (додавання крихітного користувацького bootstrap на початок, якщо історія починається з assistant).
|
||||
- Antigravity Claude: нормалізація thinking-сигнатур; вилучення непідписаних thinking-блоків.
|
||||
|
||||
**Anthropic / Minimax (Anthropic-сумісний)**
|
||||
|
||||
- Відновлення парності результатів інструментів і синтетичні результати інструментів.
|
||||
- Валідація turns (об’єднує послідовні user turns, щоб задовольнити суворе чергування).
|
||||
- Кінцеві assistant prefill turns вилучаються з вихідних корисних навантажень Anthropic Messages,
|
||||
- Ремонт парності результатів інструментів і синтетичні результати інструментів.
|
||||
- Валідація ходів (об’єднання послідовних користувацьких ходів для дотримання суворого чергування).
|
||||
- Кінцеві ходи assistant prefill вилучаються з вихідних payload Anthropic Messages,
|
||||
коли thinking увімкнено, включно з маршрутами Cloudflare AI Gateway.
|
||||
- Thinking-блоки з відсутніми, порожніми або blank replay-сигнатурами вилучаються
|
||||
перед конвертацією для провайдера. Якщо через це assistant turn стає порожнім, OpenClaw зберігає
|
||||
форму turn з непорожнім текстом omitted-reasoning.
|
||||
- Старіші thinking-only assistant turns, які потрібно вилучити, замінюються
|
||||
непорожнім текстом omitted-reasoning, щоб адаптери провайдерів не відкидали replay
|
||||
turn.
|
||||
перед перетворенням для провайдера. Якщо це спорожнює хід assistant, OpenClaw зберігає
|
||||
форму ходу з непорожнім текстом omitted-reasoning.
|
||||
- Старіші ходи assistant лише з thinking, які потрібно вилучити, замінюються
|
||||
непорожнім текстом omitted-reasoning, щоб адаптери провайдера не відкидали хід
|
||||
повторного відтворення.
|
||||
|
||||
**Amazon Bedrock (Converse API)**
|
||||
|
||||
- Порожні assistant stream-error turns відновлюються до непорожнього fallback-текстового блоку
|
||||
перед повторним відтворенням. Bedrock Converse відхиляє повідомлення assistant з `content: []`, тому
|
||||
збережені assistant turns з `stopReason: "error"` і порожнім вмістом також
|
||||
відновлюються на диску перед завантаженням.
|
||||
- Assistant stream-error turns, які містять лише порожні текстові блоки, вилучаються
|
||||
з копії повторного відтворення в пам’яті замість відтворення некоректного порожнього блоку.
|
||||
- Порожні ходи помилки потоку assistant ремонтуються до непорожнього fallback-текстового блоку
|
||||
перед повторним відтворенням. Bedrock Converse відхиляє повідомлення assistant із `content: []`, тому
|
||||
збережені ходи assistant із `stopReason: "error"` і порожнім вмістом також
|
||||
ремонтуються на диску перед завантаженням.
|
||||
- Ходи помилки потоку assistant, які містять лише порожні текстові блоки, вилучаються
|
||||
з копії повторного відтворення в пам’яті замість відтворення недійсного порожнього блоку.
|
||||
- Claude thinking-блоки з відсутніми, порожніми або blank replay-сигнатурами
|
||||
вилучаються перед повторним відтворенням Converse. Якщо через це assistant turn стає порожнім, OpenClaw
|
||||
зберігає форму turn з непорожнім текстом omitted-reasoning.
|
||||
- Старіші thinking-only assistant turns, які потрібно вилучити, замінюються
|
||||
непорожнім текстом omitted-reasoning, щоб replay Converse зберігав сувору форму turns.
|
||||
- Replay фільтрує delivery-mirror OpenClaw і gateway-injected assistant turns.
|
||||
вилучаються перед повторним відтворенням Converse. Якщо це спорожнює хід assistant, OpenClaw
|
||||
зберігає форму ходу з непорожнім текстом omitted-reasoning.
|
||||
- Старіші ходи assistant лише з thinking, які потрібно вилучити, замінюються
|
||||
непорожнім текстом omitted-reasoning, щоб повторне відтворення Converse зберігало сувору форму ходів.
|
||||
- Повторне відтворення фільтрує delivery-mirror OpenClaw і gateway-injected ходи assistant.
|
||||
- Очищення зображень застосовується через глобальне правило.
|
||||
|
||||
**Mistral (включно з виявленням на основі model-id)**
|
||||
|
||||
- Очищення ідентифікаторів викликів інструментів: strict9 (буквено-цифрові, довжина 9).
|
||||
- Очищення ідентифікаторів викликів інструментів: strict9 (літерно-цифрові довжиною 9).
|
||||
|
||||
**OpenRouter Gemini**
|
||||
|
||||
- Очищення сигнатур думок: вилучає не-base64 значення `thought_signature` (залишає base64).
|
||||
- Очищення сигнатур thought: вилучення не-base64 значень `thought_signature` (base64 зберігається).
|
||||
|
||||
**OpenRouter Anthropic**
|
||||
|
||||
- Кінцеві assistant prefill turns вилучаються з перевірених корисних навантажень OpenRouter
|
||||
OpenAI-сумісних моделей Anthropic, коли reasoning увімкнено, відповідно до
|
||||
поведінки повторного відтворення прямого Anthropic і Cloudflare Anthropic.
|
||||
- Кінцеві ходи assistant prefill вилучаються з перевірених OpenRouter
|
||||
OpenAI-сумісних payload моделей Anthropic, коли reasoning увімкнено, відповідно до
|
||||
поведінки повторного відтворення direct Anthropic і Cloudflare Anthropic.
|
||||
|
||||
**Усе інше**
|
||||
|
||||
@ -198,20 +196,20 @@ OpenClaw також додає на початок того самого turn м
|
||||
|
||||
## Історична поведінка (до 2026.1.22)
|
||||
|
||||
До випуску 2026.1.22 OpenClaw застосовував кілька шарів гігієни транскриптів:
|
||||
До релізу 2026.1.22 OpenClaw застосовував кілька шарів гігієни транскриптів:
|
||||
|
||||
- **transcript-sanitize extension** виконувався під час кожної побудови контексту і міг:
|
||||
- Відновлювати парність tool use/result.
|
||||
- Очищати ідентифікатори викликів інструментів (включно з несуворим режимом, який зберігав `_`/`-`).
|
||||
- Runner також виконував очищення для конкретних провайдерів, що дублювало роботу.
|
||||
- Додаткові мутації відбувалися поза політикою провайдера, включно з:
|
||||
- Вилученням тегів `<final>` з тексту assistant перед збереженням.
|
||||
- Видаленням порожніх assistant error turns.
|
||||
- Обрізанням вмісту assistant після викликів інструментів.
|
||||
- **transcript-sanitize extension** запускався під час кожної побудови контексту та міг:
|
||||
- Ремонтувати парність tool use/result.
|
||||
- Очищувати ідентифікатори викликів інструментів (включно з несуворим режимом, який зберігав `_`/`-`).
|
||||
- Runner також виконував очищення, специфічне для провайдера, що дублювало роботу.
|
||||
- Додаткові мутації відбувалися поза політикою провайдера, зокрема:
|
||||
- Вилучення тегів `<final>` із тексту assistant перед збереженням.
|
||||
- Відкидання порожніх ходів помилок assistant.
|
||||
- Обрізання вмісту assistant після викликів інструментів.
|
||||
|
||||
Ця складність спричиняла регресії між провайдерами (зокрема парність `openai-responses`
|
||||
`call_id|fc_id`). Очищення 2026.1.22 прибрало extension, централізувало
|
||||
логіку в runner і зробило OpenAI **недоторканним** за межами очищення зображень.
|
||||
логіку в runner і зробило OpenAI **no-touch** поза очищенням зображень.
|
||||
|
||||
## Пов’язане
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user