chore(i18n): refresh uk translations
This commit is contained in:
parent
5e7014e87d
commit
089dc0be42
@ -1,64 +1,65 @@
|
||||
---
|
||||
read_when:
|
||||
- Ви хочете використовувати моделі OpenAI в OpenClaw
|
||||
- Ви хочете автентифікацію за підпискою Codex замість API-ключів
|
||||
- Ви хочете використовувати автентифікацію за підпискою Codex замість API-ключів
|
||||
- Вам потрібні суворіші правила виконання агента GPT-5
|
||||
summary: Використовуйте OpenAI через API-ключі або підписку Codex в OpenClaw
|
||||
title: OpenAI
|
||||
x-i18n:
|
||||
generated_at: "2026-04-24T02:21:50Z"
|
||||
generated_at: "2026-04-24T02:37:02Z"
|
||||
model: gpt-5.4
|
||||
provider: openai
|
||||
source_hash: f9bb65b29be2b69a85663b17a68560c557ffb5303ac7afa2b27548a27397af46
|
||||
source_hash: 8337990d0de692b32746b05ab344695fc5a54ab3855993ac7795fabf38d4d19d
|
||||
source_path: providers/openai.md
|
||||
workflow: 15
|
||||
---
|
||||
|
||||
OpenAI надає API для розробників для моделей GPT. OpenClaw підтримує три маршрути сімейства OpenAI. Префікс моделі визначає маршрут:
|
||||
|
||||
- **API key** — прямий доступ до OpenAI Platform з оплатою за використання (моделі `openai/*`)
|
||||
- **Codex subscription through PI** — вхід через ChatGPT/Codex з доступом за підпискою (моделі `openai-codex/*`)
|
||||
- **API-ключ** — прямий доступ до OpenAI Platform з оплатою за використання (моделі `openai/*`)
|
||||
- **Підписка Codex через PI** — вхід через ChatGPT/Codex з доступом за підпискою (моделі `openai-codex/*`)
|
||||
- **Codex app-server harness** — нативне виконання через Codex app-server (`openai/*` моделі плюс `agents.defaults.embeddedHarness.runtime: "codex"`)
|
||||
|
||||
OpenAI явно підтримує використання OAuth за підпискою у зовнішніх інструментах і робочих процесах, таких як OpenClaw.
|
||||
OpenAI прямо підтримує використання OAuth-підписки в зовнішніх інструментах і робочих процесах, таких як OpenClaw.
|
||||
|
||||
<Note>
|
||||
GPT-5.5 наразі доступна в OpenClaw через маршрути підписки/OAuth:
|
||||
`openai-codex/gpt-5.5` з виконавцем PI або `openai/gpt-5.5` з
|
||||
Codex app-server harness. Прямий доступ за API key для `openai/gpt-5.5`
|
||||
підтримується, щойно OpenAI увімкне GPT-5.5 у публічному API; до того часу використовуйте
|
||||
модель з доступом через API, таку як `openai/gpt-5.4`, для конфігурацій `OPENAI_API_KEY`.
|
||||
`openai-codex/gpt-5.5` з PI runner або `openai/gpt-5.5` з
|
||||
Codex app-server harness. Прямий доступ за API-ключем для `openai/gpt-5.5`
|
||||
підтримуватиметься, щойно OpenAI увімкне GPT-5.5 у публічному API; до того
|
||||
часу використовуйте модель, доступну через API, наприклад `openai/gpt-5.4`, для конфігурацій
|
||||
`OPENAI_API_KEY`.
|
||||
</Note>
|
||||
|
||||
## Покриття можливостей OpenClaw
|
||||
## Покриття функцій OpenClaw
|
||||
|
||||
| Можливість OpenAI | Поверхня OpenClaw | Статус |
|
||||
| ------------------------ | ----------------------------------------------------- | ------------------------------------------------------ |
|
||||
| Chat / Responses | постачальник моделей `openai/<model>` | Так |
|
||||
| Моделі підписки Codex | `openai-codex/<model>` з OAuth `openai-codex` | Так |
|
||||
| Codex app-server harness | `openai/<model>` з `embeddedHarness.runtime: codex` | Так |
|
||||
| Server-side web search | нативний інструмент OpenAI Responses | Так, коли увімкнено web search і не закріплено постачальника |
|
||||
| Images | `image_generate` | Так |
|
||||
| Videos | `video_generate` | Так |
|
||||
| Text-to-speech | `messages.tts.provider: "openai"` / `tts` | Так |
|
||||
| Batch speech-to-text | `tools.media.audio` / розуміння медіа | Так |
|
||||
| Streaming speech-to-text | Voice Call `streaming.provider: "openai"` | Так |
|
||||
| Realtime voice | Voice Call `realtime.provider: "openai"` | Так |
|
||||
| Embeddings | постачальник embedding для пам’яті | Так |
|
||||
| Можливість OpenAI | Поверхня OpenClaw | Статус |
|
||||
| ------------------------- | -------------------------------------------------------- | ------------------------------------------------------- |
|
||||
| Chat / Responses | постачальник моделей `openai/<model>` | Так |
|
||||
| Моделі за підпискою Codex | `openai-codex/<model>` з OAuth `openai-codex` | Так |
|
||||
| Codex app-server harness | `openai/<model>` з `embeddedHarness.runtime: codex` | Так |
|
||||
| Пошук у вебі на боці сервера | нативний інструмент OpenAI Responses | Так, коли вебпошук увімкнено і постачальника не зафіксовано |
|
||||
| Зображення | `image_generate` | Так |
|
||||
| Відео | `video_generate` | Так |
|
||||
| Перетворення тексту на мовлення | `messages.tts.provider: "openai"` / `tts` | Так |
|
||||
| Пакетне перетворення мовлення на текст | `tools.media.audio` / розуміння медіа | Так |
|
||||
| Потокове перетворення мовлення на текст | Voice Call `streaming.provider: "openai"` | Так |
|
||||
| Голос у реальному часі | Voice Call `realtime.provider: "openai"` / Control UI Talk | Так |
|
||||
| Вбудовування | постачальник вбудовувань пам’яті | Так |
|
||||
|
||||
## Початок роботи
|
||||
|
||||
Виберіть бажаний метод автентифікації та виконайте кроки налаштування.
|
||||
Виберіть бажаний спосіб автентифікації й виконайте кроки налаштування.
|
||||
|
||||
<Tabs>
|
||||
<Tab title="API key (OpenAI Platform)">
|
||||
<Tab title="API-ключ (OpenAI Platform)">
|
||||
**Найкраще для:** прямого доступу до API та оплати за використання.
|
||||
|
||||
<Steps>
|
||||
<Step title="Отримайте свій API key">
|
||||
Створіть або скопіюйте API key з [панелі OpenAI Platform](https://platform.openai.com/api-keys).
|
||||
<Step title="Отримайте свій API-ключ">
|
||||
Створіть або скопіюйте API-ключ з [панелі OpenAI Platform](https://platform.openai.com/api-keys).
|
||||
</Step>
|
||||
<Step title="Запустіть онбординг">
|
||||
<Step title="Запустіть початкове налаштування">
|
||||
```bash
|
||||
openclaw onboard --auth-choice openai-api-key
|
||||
```
|
||||
@ -69,25 +70,25 @@ Codex app-server harness. Прямий доступ за API key для `openai/
|
||||
openclaw onboard --openai-api-key "$OPENAI_API_KEY"
|
||||
```
|
||||
</Step>
|
||||
<Step title="Перевірте, що модель доступна">
|
||||
<Step title="Переконайтеся, що модель доступна">
|
||||
```bash
|
||||
openclaw models list --provider openai
|
||||
```
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
### Підсумок маршрутів
|
||||
### Підсумок маршруту
|
||||
|
||||
| Model ref | Маршрут | Автентифікація |
|
||||
|-----------|---------|----------------|
|
||||
| `openai/gpt-5.4` | прямий API OpenAI Platform | `OPENAI_API_KEY` |
|
||||
| `openai/gpt-5.4-mini` | прямий API OpenAI Platform | `OPENAI_API_KEY` |
|
||||
| `openai/gpt-5.5` | майбутній прямий маршрут API, щойно OpenAI увімкне GPT-5.5 в API | `OPENAI_API_KEY` |
|
||||
| Посилання на модель | Маршрут | Автентифікація |
|
||||
|-----------|-------|------|
|
||||
| `openai/gpt-5.4` | Прямий API OpenAI Platform | `OPENAI_API_KEY` |
|
||||
| `openai/gpt-5.4-mini` | Прямий API OpenAI Platform | `OPENAI_API_KEY` |
|
||||
| `openai/gpt-5.5` | Майбутній прямий маршрут API, щойно OpenAI увімкне GPT-5.5 в API | `OPENAI_API_KEY` |
|
||||
|
||||
<Note>
|
||||
`openai/*` — це прямий маршрут OpenAI API за API key, якщо ви явно не примусите
|
||||
Codex app-server harness. Сама GPT-5.5 наразі доступна лише через підписку/OAuth;
|
||||
використовуйте `openai-codex/*` для Codex OAuth через стандартний виконавець PI.
|
||||
`openai/*` — це прямий маршрут OpenAI за API-ключем, якщо ви явно не примусите
|
||||
використання Codex app-server harness. Сама GPT-5.5 наразі доступна лише через підписку/OAuth;
|
||||
використовуйте `openai-codex/*` для Codex OAuth через стандартний PI runner.
|
||||
</Note>
|
||||
|
||||
### Приклад конфігурації
|
||||
@ -100,13 +101,13 @@ Codex app-server harness. Прямий доступ за API key для `openai/
|
||||
```
|
||||
|
||||
<Warning>
|
||||
OpenClaw **не** надає `openai/gpt-5.3-codex-spark`. Реальні запити до OpenAI API відхиляють цю модель, і поточний каталог Codex також її не надає.
|
||||
OpenClaw **не** надає `openai/gpt-5.3-codex-spark`. Живі запити до OpenAI API відхиляють цю модель, і поточний каталог Codex також її не надає.
|
||||
</Warning>
|
||||
|
||||
</Tab>
|
||||
|
||||
<Tab title="Codex subscription">
|
||||
**Найкраще для:** використання вашої підписки ChatGPT/Codex замість окремого API key. Codex cloud потребує входу через ChatGPT.
|
||||
<Tab title="Підписка Codex">
|
||||
**Найкраще для:** використання вашої підписки ChatGPT/Codex замість окремого API-ключа. Codex cloud вимагає входу через ChatGPT.
|
||||
|
||||
<Steps>
|
||||
<Step title="Запустіть Codex OAuth">
|
||||
@ -120,34 +121,34 @@ Codex app-server harness. Прямий доступ за API key для `openai/
|
||||
openclaw models auth login --provider openai-codex
|
||||
```
|
||||
|
||||
Для headless або несумісних зі зворотним викликом середовищ додайте `--device-code`, щоб увійти через потік device-code ChatGPT замість callback браузера localhost:
|
||||
Для headless-середовищ або конфігурацій, де незручно використовувати callback, додайте `--device-code`, щоб увійти через потік коду пристрою ChatGPT замість callback локального браузера:
|
||||
|
||||
```bash
|
||||
openclaw models auth login --provider openai-codex --device-code
|
||||
```
|
||||
</Step>
|
||||
<Step title="Встановіть модель за замовчуванням">
|
||||
<Step title="Задайте модель за замовчуванням">
|
||||
```bash
|
||||
openclaw config set agents.defaults.model.primary openai-codex/gpt-5.5
|
||||
```
|
||||
</Step>
|
||||
<Step title="Перевірте, що модель доступна">
|
||||
<Step title="Переконайтеся, що модель доступна">
|
||||
```bash
|
||||
openclaw models list --provider openai-codex
|
||||
```
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
### Підсумок маршрутів
|
||||
### Підсумок маршруту
|
||||
|
||||
| Model ref | Маршрут | Автентифікація |
|
||||
|-----------|---------|----------------|
|
||||
| Посилання на модель | Маршрут | Автентифікація |
|
||||
|-----------|-------|------|
|
||||
| `openai-codex/gpt-5.5` | ChatGPT/Codex OAuth через PI | вхід Codex |
|
||||
| `openai/gpt-5.5` + `embeddedHarness.runtime: "codex"` | Codex app-server harness | автентифікація Codex app-server |
|
||||
|
||||
<Note>
|
||||
Продовжуйте використовувати ідентифікатор постачальника `openai-codex` для команд
|
||||
auth/profile. Префікс моделі `openai-codex/*` також є явним маршрутом PI для Codex OAuth.
|
||||
Продовжуйте використовувати ідентифікатор постачальника `openai-codex` для команд автентифікації/профілю. Префікс моделі
|
||||
`openai-codex/*` також є явним маршрутом PI для Codex OAuth.
|
||||
</Note>
|
||||
|
||||
### Приклад конфігурації
|
||||
@ -159,29 +160,29 @@ Codex app-server harness. Прямий доступ за API key для `openai/
|
||||
```
|
||||
|
||||
<Note>
|
||||
Онбординг більше не імпортує OAuth-матеріали з `~/.codex`. Увійдіть через OAuth у браузері (типово) або через потік device-code вище — OpenClaw керує отриманими обліковими даними у власному сховищі auth агента.
|
||||
Початкове налаштування більше не імпортує матеріали OAuth з `~/.codex`. Увійдіть через OAuth у браузері (типовий варіант) або через потік коду пристрою, вказаний вище — OpenClaw керує отриманими обліковими даними у власному сховищі автентифікації агента.
|
||||
</Note>
|
||||
|
||||
### Індикатор статусу
|
||||
### Індикатор стану
|
||||
|
||||
Chat `/status` показує, який вбудований harness активний для поточної
|
||||
сесії. Стандартний harness PI відображається як `Runner: pi (embedded)` і не
|
||||
додає окремого значка. Коли вибрано вбудований Codex app-server harness,
|
||||
сесії. Стандартний PI harness відображається як `Runner: pi (embedded)` і
|
||||
не додає окремий індикатор. Коли вибрано вбудований Codex app-server harness,
|
||||
`/status` додає ідентифікатор не-PI harness поруч із `Fast`, наприклад
|
||||
`Fast · codex`. Наявні сесії зберігають записаний ідентифікатор harness, тож використайте
|
||||
`Fast · codex`. Наявні сесії зберігають записаний для них ідентифікатор harness, тому використовуйте
|
||||
`/new` або `/reset` після зміни `embeddedHarness`, якщо хочете, щоб `/status`
|
||||
відображав новий вибір PI/Codex.
|
||||
|
||||
### Обмеження вікна контексту
|
||||
|
||||
OpenClaw розглядає метадані моделі та ліміт контексту середовища виконання як окремі значення.
|
||||
OpenClaw розглядає метадані моделі та обмеження контексту під час виконання як окремі значення.
|
||||
|
||||
Для `openai-codex/gpt-5.5` через Codex OAuth:
|
||||
|
||||
- Нативний `contextWindow`: `1000000`
|
||||
- Стандартний ліміт `contextTokens` середовища виконання: `272000`
|
||||
- Стандартне обмеження `contextTokens` під час виконання: `272000`
|
||||
|
||||
Менший стандартний ліміт на практиці має кращі характеристики затримки та якості. Перевизначте його через `contextTokens`:
|
||||
Менше стандартне обмеження на практиці дає кращі характеристики затримки й якості. Перевизначте його через `contextTokens`:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -196,7 +197,7 @@ Codex app-server harness. Прямий доступ за API key для `openai/
|
||||
```
|
||||
|
||||
<Note>
|
||||
Використовуйте `contextWindow`, щоб оголосити нативні метадані моделі. Використовуйте `contextTokens`, щоб обмежити бюджет контексту середовища виконання.
|
||||
Використовуйте `contextWindow`, щоб оголосити нативні метадані моделі. Використовуйте `contextTokens`, щоб обмежити бюджет контексту під час виконання.
|
||||
</Note>
|
||||
|
||||
</Tab>
|
||||
@ -205,18 +206,18 @@ Codex app-server harness. Прямий доступ за API key для `openai/
|
||||
## Генерація зображень
|
||||
|
||||
Вбудований Plugin `openai` реєструє генерацію зображень через інструмент `image_generate`.
|
||||
Він підтримує як генерацію зображень OpenAI за API key, так і генерацію зображень
|
||||
через Codex OAuth через той самий ідентифікатор моделі `openai/gpt-image-2`.
|
||||
Він підтримує як генерацію зображень OpenAI за API-ключем, так і генерацію зображень
|
||||
через Codex OAuth, використовуючи те саме посилання на модель `openai/gpt-image-2`.
|
||||
|
||||
| Можливість | API key OpenAI | Codex OAuth |
|
||||
| ------------------------ | ---------------------------------- | ----------------------------------- |
|
||||
| Model ref | `openai/gpt-image-2` | `openai/gpt-image-2` |
|
||||
| Автентифікація | `OPENAI_API_KEY` | вхід через OpenAI Codex OAuth |
|
||||
| Транспорт | OpenAI Images API | бекенд Codex Responses |
|
||||
| Максимум зображень на запит | 4 | 4 |
|
||||
| Режим редагування | Увімкнено (до 5 еталонних зображень) | Увімкнено (до 5 еталонних зображень) |
|
||||
| Перевизначення розміру | Підтримується, включно з розмірами 2K/4K | Підтримується, включно з розмірами 2K/4K |
|
||||
| Співвідношення сторін / роздільність | Не передається до OpenAI Images API | За потреби зіставляється з підтримуваним розміром |
|
||||
| Можливість | API-ключ OpenAI | Codex OAuth |
|
||||
| ------------------------- | ---------------------------------- | ------------------------------------ |
|
||||
| Посилання на модель | `openai/gpt-image-2` | `openai/gpt-image-2` |
|
||||
| Автентифікація | `OPENAI_API_KEY` | вхід через OpenAI Codex OAuth |
|
||||
| Транспорт | OpenAI Images API | бекенд Codex Responses |
|
||||
| Макс. кількість зображень на запит | 4 | 4 |
|
||||
| Режим редагування | Увімкнено (до 5 еталонних зображень) | Увімкнено (до 5 еталонних зображень) |
|
||||
| Перевизначення розміру | Підтримується, зокрема розміри 2K/4K | Підтримується, зокрема розміри 2K/4K |
|
||||
| Співвідношення сторін / роздільна здатність | Не передається до OpenAI Images API | Зіставляється з підтримуваним розміром, коли це безпечно |
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -232,27 +233,27 @@ Codex app-server harness. Прямий доступ за API key для `openai/
|
||||
Див. [Генерація зображень](/uk/tools/image-generation) для спільних параметрів інструмента, вибору постачальника та поведінки failover.
|
||||
</Note>
|
||||
|
||||
`gpt-image-2` є стандартним для генерації тексту в зображення OpenAI та
|
||||
редагування зображень. `gpt-image-1` залишається доступною як явне перевизначення моделі, але нові
|
||||
робочі процеси OpenAI для зображень мають використовувати `openai/gpt-image-2`.
|
||||
`gpt-image-2` — це стандартне значення і для генерації зображень з тексту OpenAI, і для редагування зображень. `gpt-image-1` залишається доступною як явне перевизначення моделі, але нові робочі процеси OpenAI для зображень мають використовувати `openai/gpt-image-2`.
|
||||
|
||||
Для інсталяцій Codex OAuth зберігайте той самий ідентифікатор `openai/gpt-image-2`. Коли
|
||||
налаштовано OAuth-профіль `openai-codex`, OpenClaw знаходить цей збережений токен доступу OAuth
|
||||
і надсилає запити на зображення через бекенд Codex Responses. Він
|
||||
не спочатку пробує `OPENAI_API_KEY` і не виконує тихий відкат до API key для цього
|
||||
запиту. Явно налаштуйте `models.providers.openai` з API key,
|
||||
власним base URL або endpoint Azure, якщо вам потрібен прямий маршрут OpenAI Images API.
|
||||
Якщо цей користувацький endpoint для зображень розташований у довіреній LAN/приватній адресі, також встановіть
|
||||
`browser.ssrfPolicy.dangerouslyAllowPrivateNetwork: true`; OpenClaw зберігає
|
||||
блокування приватних/внутрішніх OpenAI-сумісних endpoint для зображень, якщо не задано цей явний дозвіл.
|
||||
Для установок із Codex OAuth зберігайте те саме посилання `openai/gpt-image-2`. Коли
|
||||
налаштовано OAuth-профіль `openai-codex`, OpenClaw визначає цей збережений токен
|
||||
доступу OAuth і надсилає запити на зображення через бекенд Codex Responses. Він
|
||||
не намагається спочатку використати `OPENAI_API_KEY` і не виконує тихий перехід на API-ключ для цього
|
||||
запиту. Явно налаштуйте `models.providers.openai` з API-ключем,
|
||||
власною базовою URL-адресою або Azure endpoint, якщо хочете використовувати прямий маршрут
|
||||
OpenAI Images API.
|
||||
Якщо цей власний endpoint зображень перебуває в довіреній LAN/приватній адресі, також задайте
|
||||
`browser.ssrfPolicy.dangerouslyAllowPrivateNetwork: true`; OpenClaw і далі
|
||||
блокує приватні/внутрішні OpenAI-сумісні endpoint зображень, якщо цей явний дозвіл
|
||||
не задано.
|
||||
|
||||
Генерація:
|
||||
Згенерувати:
|
||||
|
||||
```
|
||||
/tool image_generate model=openai/gpt-image-2 prompt="A polished launch poster for OpenClaw on macOS" size=3840x2160 count=1
|
||||
```
|
||||
|
||||
Редагування:
|
||||
Відредагувати:
|
||||
|
||||
```
|
||||
/tool image_generate model=openai/gpt-image-2 prompt="Preserve the object shape, change the material to translucent glass" image=/path/to/reference.png size=1024x1536
|
||||
@ -262,11 +263,11 @@ Codex app-server harness. Прямий доступ за API key для `openai/
|
||||
|
||||
Вбудований Plugin `openai` реєструє генерацію відео через інструмент `video_generate`.
|
||||
|
||||
| Можливість | Значення |
|
||||
| --------------- | --------------------------------------------------------------------------------- |
|
||||
| Стандартна модель | `openai/sora-2` |
|
||||
| Режими | Текст у відео, зображення у відео, редагування одного відео |
|
||||
| Еталонні входи | 1 зображення або 1 відео |
|
||||
| Можливість | Значення |
|
||||
| ---------------- | --------------------------------------------------------------------------------- |
|
||||
| Стандартна модель | `openai/sora-2` |
|
||||
| Режими | Текст у відео, зображення у відео, редагування одного відео |
|
||||
| Вхідні еталони | 1 зображення або 1 відео |
|
||||
| Перевизначення розміру | Підтримується |
|
||||
| Інші перевизначення | `aspectRatio`, `resolution`, `audio`, `watermark` ігноруються з попередженням інструмента |
|
||||
|
||||
@ -284,13 +285,13 @@ Codex app-server harness. Прямий доступ за API key для `openai/
|
||||
Див. [Генерація відео](/uk/tools/video-generation) для спільних параметрів інструмента, вибору постачальника та поведінки failover.
|
||||
</Note>
|
||||
|
||||
## Внесок до підказки GPT-5
|
||||
## Внесок у prompt GPT-5
|
||||
|
||||
OpenClaw додає спільний внесок до підказки GPT-5 для запусків сімейства GPT-5 у всіх постачальників. Він застосовується за ідентифікатором моделі, тож `openai-codex/gpt-5.5`, `openai/gpt-5.4`, `openrouter/openai/gpt-5.5`, `opencode/gpt-5.5` та інші сумісні ідентифікатори GPT-5 отримують той самий шар. Старіші моделі GPT-4.x — ні.
|
||||
OpenClaw додає спільний внесок у prompt GPT-5 для запусків сімейства GPT-5 у різних постачальників. Він застосовується за ідентифікатором моделі, тому `openai-codex/gpt-5.5`, `openai/gpt-5.4`, `openrouter/openai/gpt-5.5`, `opencode/gpt-5.5` та інші сумісні посилання GPT-5 отримують той самий overlay. Старіші моделі GPT-4.x — ні.
|
||||
|
||||
Вбудований нативний Codex harness використовує ту саму поведінку GPT-5 і шар Heartbeat через інструкції розробника Codex app-server, тому сесії `openai/gpt-5.x`, примусово спрямовані через `embeddedHarness.runtime: "codex"`, зберігають ті самі настанови щодо доведення виконання до кінця та проактивного Heartbeat, хоча рештою підказки harness керує Codex.
|
||||
Вбудований нативний Codex harness використовує ту саму поведінку GPT-5 і overlay Heartbeat через інструкції розробника Codex app-server, тому сесії `openai/gpt-5.x`, примусово спрямовані через `embeddedHarness.runtime: "codex"`, зберігають ті самі вказівки щодо доведення дій до завершення та проактивного Heartbeat, навіть попри те, що рештою prompt harness керує Codex.
|
||||
|
||||
Внесок GPT-5 додає тегований контракт поведінки для збереження персони, безпеки виконання, дисципліни використання інструментів, форми виводу, перевірок завершення та верифікації. Специфічна для каналу поведінка відповідей і тихих повідомлень залишається в спільній системній підказці OpenClaw і політиці вихідної доставки. Настанови GPT-5 завжди ввімкнені для відповідних моделей. Рівень дружнього стилю взаємодії є окремим і налаштовуваним.
|
||||
Внесок GPT-5 додає тегований контракт поведінки для збереження persona, безпеки виконання, дисципліни використання інструментів, форми виводу, перевірок завершення та верифікації. Специфічна для каналів поведінка відповіді та тихих повідомлень залишається у спільному системному prompt OpenClaw і політиці вихідної доставки. Вказівки GPT-5 завжди ввімкнені для відповідних моделей. Рівень дружнього стилю взаємодії є окремим і налаштовуваним.
|
||||
|
||||
| Значення | Ефект |
|
||||
| ---------------------- | ------------------------------------------ |
|
||||
@ -299,7 +300,7 @@ OpenClaw додає спільний внесок до підказки GPT-5 д
|
||||
| `"off"` | Вимкнути лише рівень дружнього стилю |
|
||||
|
||||
<Tabs>
|
||||
<Tab title="Config">
|
||||
<Tab title="Конфігурація">
|
||||
```json5
|
||||
{
|
||||
agents: {
|
||||
@ -320,11 +321,11 @@ OpenClaw додає спільний внесок до підказки GPT-5 д
|
||||
</Tabs>
|
||||
|
||||
<Tip>
|
||||
Значення нечутливі до регістру під час виконання, тому і `"Off"`, і `"off"` вимикають рівень дружнього стилю.
|
||||
Значення під час виконання не чутливі до регістру, тому і `"Off"`, і `"off"` вимикають дружній стиль.
|
||||
</Tip>
|
||||
|
||||
<Note>
|
||||
Застаріле `plugins.entries.openai.config.personality` усе ще читається як сумісний fallback, коли спільне налаштування `agents.defaults.promptOverlays.gpt5.personality` не задано.
|
||||
Застарілий `plugins.entries.openai.config.personality` усе ще читається як сумісний запасний варіант, коли спільне налаштування `agents.defaults.promptOverlays.gpt5.personality` не задано.
|
||||
</Note>
|
||||
|
||||
## Голос і мовлення
|
||||
@ -333,15 +334,15 @@ OpenClaw додає спільний внесок до підказки GPT-5 д
|
||||
<Accordion title="Синтез мовлення (TTS)">
|
||||
Вбудований Plugin `openai` реєструє синтез мовлення для поверхні `messages.tts`.
|
||||
|
||||
| Налаштування | Шлях конфігурації | Типово |
|
||||
| Налаштування | Шлях конфігурації | Типове значення |
|
||||
|---------|------------|---------|
|
||||
| Модель | `messages.tts.providers.openai.model` | `gpt-4o-mini-tts` |
|
||||
| Голос | `messages.tts.providers.openai.voice` | `coral` |
|
||||
| Швидкість | `messages.tts.providers.openai.speed` | (не задано) |
|
||||
| Інструкції | `messages.tts.providers.openai.instructions` | (не задано, лише `gpt-4o-mini-tts`) |
|
||||
| Формат | `messages.tts.providers.openai.responseFormat` | `opus` для голосових нотаток, `mp3` для файлів |
|
||||
| API key | `messages.tts.providers.openai.apiKey` | Використовує `OPENAI_API_KEY` як fallback |
|
||||
| Base URL | `messages.tts.providers.openai.baseUrl` | `https://api.openai.com/v1` |
|
||||
| API-ключ | `messages.tts.providers.openai.apiKey` | Використовується `OPENAI_API_KEY` як запасний варіант |
|
||||
| Базова URL-адреса | `messages.tts.providers.openai.baseUrl` | `https://api.openai.com/v1` |
|
||||
|
||||
Доступні моделі: `gpt-4o-mini-tts`, `tts-1`, `tts-1-hd`. Доступні голоси: `alloy`, `ash`, `ballad`, `cedar`, `coral`, `echo`, `fable`, `juniper`, `marin`, `onyx`, `nova`, `sage`, `shimmer`, `verse`.
|
||||
|
||||
@ -358,21 +359,21 @@ OpenClaw додає спільний внесок до підказки GPT-5 д
|
||||
```
|
||||
|
||||
<Note>
|
||||
Встановіть `OPENAI_TTS_BASE_URL`, щоб перевизначити базовий URL TTS без впливу на endpoint chat API.
|
||||
Установіть `OPENAI_TTS_BASE_URL`, щоб перевизначити базову URL-адресу TTS без впливу на endpoint chat API.
|
||||
</Note>
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Мовлення в текст">
|
||||
Вбудований Plugin `openai` реєструє пакетне перетворення мовлення в текст через
|
||||
<Accordion title="Перетворення мовлення на текст">
|
||||
Вбудований Plugin `openai` реєструє пакетне перетворення мовлення на текст через
|
||||
поверхню транскрибування розуміння медіа OpenClaw.
|
||||
|
||||
- Стандартна модель: `gpt-4o-transcribe`
|
||||
- Типова модель: `gpt-4o-transcribe`
|
||||
- Endpoint: OpenAI REST `/v1/audio/transcriptions`
|
||||
- Шлях введення: multipart-завантаження аудіофайлу
|
||||
- Шлях вхідних даних: multipart-вивантаження аудіофайлу
|
||||
- Підтримується в OpenClaw всюди, де транскрибування вхідного аудіо використовує
|
||||
`tools.media.audio`, зокрема для сегментів голосових каналів Discord і
|
||||
аудіовкладень каналів
|
||||
`tools.media.audio`, зокрема у сегментах голосових каналів Discord і
|
||||
аудіовкладеннях каналів
|
||||
|
||||
Щоб примусово використовувати OpenAI для транскрибування вхідного аудіо:
|
||||
|
||||
@ -394,25 +395,25 @@ OpenClaw додає спільний внесок до підказки GPT-5 д
|
||||
}
|
||||
```
|
||||
|
||||
Підказки щодо мови та prompt передаються до OpenAI, коли їх задано у
|
||||
спільній конфігурації аудіомедіа або в запиті на транскрибування для конкретного виклику.
|
||||
Підказки щодо мови та prompt передаються до OpenAI, коли вони задані
|
||||
у спільній конфігурації аудіомедіа або в запиті транскрибування для конкретного виклику.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Транскрибування в реальному часі">
|
||||
Вбудований Plugin `openai` реєструє транскрибування в реальному часі для Plugin Voice Call.
|
||||
|
||||
| Налаштування | Шлях конфігурації | Типово |
|
||||
| Налаштування | Шлях конфігурації | Типове значення |
|
||||
|---------|------------|---------|
|
||||
| Модель | `plugins.entries.voice-call.config.streaming.providers.openai.model` | `gpt-4o-transcribe` |
|
||||
| Мова | `...openai.language` | (не задано) |
|
||||
| Prompt | `...openai.prompt` | (не задано) |
|
||||
| Тривалість тиші | `...openai.silenceDurationMs` | `800` |
|
||||
| Поріг VAD | `...openai.vadThreshold` | `0.5` |
|
||||
| API key | `...openai.apiKey` | Використовує `OPENAI_API_KEY` як fallback |
|
||||
| API-ключ | `...openai.apiKey` | Використовується `OPENAI_API_KEY` як запасний варіант |
|
||||
|
||||
<Note>
|
||||
Використовує WebSocket-з’єднання з `wss://api.openai.com/v1/realtime` з аудіо G.711 u-law (`g711_ulaw` / `audio/pcmu`). Цей streaming provider призначений для шляху транскрибування в реальному часі в Voice Call; голосові канали Discord наразі записують короткі сегменти та натомість використовують пакетний шлях транскрибування `tools.media.audio`.
|
||||
Використовує WebSocket-з’єднання з `wss://api.openai.com/v1/realtime` з аудіо G.711 u-law (`g711_ulaw` / `audio/pcmu`). Цей постачальник потокової обробки призначений для шляху транскрибування в реальному часі у Voice Call; голос у Discord наразі записує короткі сегменти й натомість використовує пакетний шлях транскрибування `tools.media.audio`.
|
||||
</Note>
|
||||
|
||||
</Accordion>
|
||||
@ -420,17 +421,17 @@ OpenClaw додає спільний внесок до підказки GPT-5 д
|
||||
<Accordion title="Голос у реальному часі">
|
||||
Вбудований Plugin `openai` реєструє голос у реальному часі для Plugin Voice Call.
|
||||
|
||||
| Налаштування | Шлях конфігурації | Типово |
|
||||
| Налаштування | Шлях конфігурації | Типове значення |
|
||||
|---------|------------|---------|
|
||||
| Модель | `plugins.entries.voice-call.config.realtime.providers.openai.model` | `gpt-realtime-1.5` |
|
||||
| Голос | `...openai.voice` | `alloy` |
|
||||
| Temperature | `...openai.temperature` | `0.8` |
|
||||
| Поріг VAD | `...openai.vadThreshold` | `0.5` |
|
||||
| Тривалість тиші | `...openai.silenceDurationMs` | `500` |
|
||||
| API key | `...openai.apiKey` | Використовує `OPENAI_API_KEY` як fallback |
|
||||
| API-ключ | `...openai.apiKey` | Використовується `OPENAI_API_KEY` як запасний варіант |
|
||||
|
||||
<Note>
|
||||
Підтримує Azure OpenAI через ключі конфігурації `azureEndpoint` і `azureDeployment`. Підтримує двонаправлений виклик інструментів. Використовує аудіоформат G.711 u-law.
|
||||
Підтримує Azure OpenAI через ключі конфігурації `azureEndpoint` і `azureDeployment`. Підтримує двонапрямлені виклики інструментів. Використовує аудіоформат G.711 u-law.
|
||||
</Note>
|
||||
|
||||
</Accordion>
|
||||
@ -438,29 +439,28 @@ OpenClaw додає спільний внесок до підказки GPT-5 д
|
||||
|
||||
## Endpoint Azure OpenAI
|
||||
|
||||
Вбудований постачальник `openai` може звертатися до ресурсу Azure OpenAI для
|
||||
генерації зображень шляхом перевизначення base URL. На шляху генерації
|
||||
зображень OpenClaw виявляє імена хостів Azure у `models.providers.openai.baseUrl` і автоматично
|
||||
перемикається на формат запиту Azure.
|
||||
Вбудований постачальник `openai` може використовувати ресурс Azure OpenAI для
|
||||
генерації зображень шляхом перевизначення базової URL-адреси. На шляху
|
||||
генерації зображень OpenClaw автоматично виявляє хости Azure у `models.providers.openai.baseUrl` і перемикається на
|
||||
форму запиту Azure.
|
||||
|
||||
<Note>
|
||||
Голос у реальному часі використовує окремий шлях конфігурації
|
||||
(`plugins.entries.voice-call.config.realtime.providers.openai.azureEndpoint`)
|
||||
і не залежить від `models.providers.openai.baseUrl`. Див. акордеон **Голос у реальному
|
||||
часі** в розділі [Голос і мовлення](#voice-and-speech) для його налаштувань
|
||||
Azure.
|
||||
часі** в розділі [Голос і мовлення](#voice-and-speech) для налаштувань Azure.
|
||||
</Note>
|
||||
|
||||
Використовуйте Azure OpenAI, коли:
|
||||
|
||||
- У вас уже є підписка Azure OpenAI, квота або корпоративна угода
|
||||
- Вам потрібна регіональна локалізація даних або засоби контролю відповідності, які надає Azure
|
||||
- Ви хочете зберігати трафік у межах наявного тенанта Azure
|
||||
- У вас уже є підписка, квота або корпоративна угода Azure OpenAI
|
||||
- Вам потрібні регіональне зберігання даних або засоби відповідності вимогам, які надає Azure
|
||||
- Ви хочете, щоб трафік залишався в межах наявного орендаря Azure
|
||||
|
||||
### Конфігурація
|
||||
|
||||
Для генерації зображень Azure через вбудований постачальник `openai`, вкажіть
|
||||
`models.providers.openai.baseUrl` на ваш ресурс Azure і встановіть `apiKey` у
|
||||
Для генерації зображень через Azure за допомогою вбудованого постачальника `openai` вкажіть
|
||||
`models.providers.openai.baseUrl` на ваш ресурс Azure і задайте `apiKey` як
|
||||
ключ Azure OpenAI (а не ключ OpenAI Platform):
|
||||
|
||||
```json5
|
||||
@ -476,8 +476,7 @@ Azure.
|
||||
}
|
||||
```
|
||||
|
||||
OpenClaw розпізнає такі суфікси хостів Azure для маршруту Azure генерації
|
||||
зображень:
|
||||
OpenClaw розпізнає такі суфікси хостів Azure для маршруту генерації зображень Azure:
|
||||
|
||||
- `*.openai.azure.com`
|
||||
- `*.services.ai.azure.com`
|
||||
@ -486,49 +485,48 @@ OpenClaw розпізнає такі суфікси хостів Azure для м
|
||||
Для запитів генерації зображень на розпізнаному хості Azure OpenClaw:
|
||||
|
||||
- Надсилає заголовок `api-key` замість `Authorization: Bearer`
|
||||
- Використовує шляхи в межах deployment (`/openai/deployments/{deployment}/...`)
|
||||
- Використовує шляхи з прив’язкою до deployment (`/openai/deployments/{deployment}/...`)
|
||||
- Додає `?api-version=...` до кожного запиту
|
||||
|
||||
Інші base URL (публічний OpenAI, OpenAI-сумісні проксі) зберігають стандартну
|
||||
Інші базові URL-адреси (публічний OpenAI, OpenAI-сумісні проксі) зберігають стандартну
|
||||
форму запиту OpenAI для зображень.
|
||||
|
||||
<Note>
|
||||
Маршрутизація Azure для шляху генерації зображень постачальника `openai`
|
||||
потребує OpenClaw 2026.4.22 або новішої версії. Раніші версії обробляють будь-який
|
||||
власний `openai.baseUrl` як публічний endpoint OpenAI і завершуються помилкою при роботі з deployment
|
||||
зображень Azure.
|
||||
потребує OpenClaw 2026.4.22 або новішої версії. Раніші версії обробляють будь-який користувацький
|
||||
`openai.baseUrl` як публічний endpoint OpenAI і завершуються помилкою при роботі з deployment зображень Azure.
|
||||
</Note>
|
||||
|
||||
### Версія API
|
||||
|
||||
Встановіть `AZURE_OPENAI_API_VERSION`, щоб зафіксувати конкретну preview- або GA-версію Azure
|
||||
Установіть `AZURE_OPENAI_API_VERSION`, щоб зафіксувати конкретну preview- або GA-версію Azure
|
||||
для шляху генерації зображень Azure:
|
||||
|
||||
```bash
|
||||
export AZURE_OPENAI_API_VERSION="2024-12-01-preview"
|
||||
```
|
||||
|
||||
Типове значення — `2024-12-01-preview`, якщо змінну не встановлено.
|
||||
Типове значення — `2024-12-01-preview`, якщо змінну не задано.
|
||||
|
||||
### Назви моделей — це назви deployment
|
||||
### Імена моделей — це імена deployment
|
||||
|
||||
Azure OpenAI прив’язує моделі до deployment. Для запитів генерації зображень Azure,
|
||||
маршрутизованих через вбудований постачальник `openai`, поле `model` в OpenClaw
|
||||
має бути **назвою deployment Azure**, яку ви налаштували в порталі Azure, а не
|
||||
публічним ідентифікатором моделі OpenAI.
|
||||
має бути **іменем deployment Azure**, яке ви налаштували в порталі Azure, а не
|
||||
ідентифікатором публічної моделі OpenAI.
|
||||
|
||||
Якщо ви створили deployment під назвою `gpt-image-2-prod`, який обслуговує `gpt-image-2`:
|
||||
Якщо ви створили deployment з назвою `gpt-image-2-prod`, який обслуговує `gpt-image-2`:
|
||||
|
||||
```
|
||||
/tool image_generate model=openai/gpt-image-2-prod prompt="A clean poster" size=1024x1024 count=1
|
||||
```
|
||||
|
||||
Те саме правило назв deployment застосовується до викликів генерації зображень,
|
||||
Те саме правило імен deployment застосовується до викликів генерації зображень,
|
||||
маршрутизованих через вбудований постачальник `openai`.
|
||||
|
||||
### Регіональна доступність
|
||||
|
||||
Генерація зображень Azure наразі доступна лише в частині регіонів
|
||||
Генерація зображень Azure наразі доступна лише в обмеженій кількості регіонів
|
||||
(наприклад, `eastus2`, `swedencentral`, `polandcentral`, `westus3`,
|
||||
`uaenorth`). Перевірте актуальний список регіонів Microsoft перед створенням
|
||||
deployment і підтвердьте, що конкретна модель доступна у вашому регіоні.
|
||||
@ -536,21 +534,21 @@ deployment і підтвердьте, що конкретна модель до
|
||||
### Відмінності параметрів
|
||||
|
||||
Azure OpenAI і публічний OpenAI не завжди приймають однакові параметри зображень.
|
||||
Azure може відхиляти опції, які дозволяє публічний OpenAI (наприклад, певні
|
||||
значення `background` у `gpt-image-2`) або надавати їх лише для конкретних
|
||||
версій моделі. Ці відмінності походять від Azure та базової моделі, а не від
|
||||
OpenClaw. Якщо запит Azure завершується помилкою валідації, перевірте
|
||||
набір параметрів, який підтримує ваш конкретний deployment і версія API в
|
||||
Azure може відхиляти параметри, які дозволяє публічний OpenAI (наприклад, певні
|
||||
значення `background` для `gpt-image-2`), або надавати їх лише для конкретних версій
|
||||
моделі. Ці відмінності походять від Azure та базової моделі, а не від
|
||||
OpenClaw. Якщо запит Azure завершується помилкою валідації, перевірте набір
|
||||
параметрів, який підтримує ваш конкретний deployment і версія API, у
|
||||
порталі Azure.
|
||||
|
||||
<Note>
|
||||
Azure OpenAI використовує нативний транспорт і сумісну поведінку, але не отримує
|
||||
приховані заголовки атрибуції OpenClaw — див. акордеон **Нативні та OpenAI-сумісні
|
||||
Azure OpenAI використовує нативний транспорт і поведінку compat, але не отримує
|
||||
приховані заголовки атрибуції OpenClaw — див. акордеон **Нативні маршрути та OpenAI-сумісні
|
||||
маршрути** в розділі [Розширена конфігурація](#advanced-configuration).
|
||||
|
||||
Для трафіку chat або Responses на Azure (окрім генерації зображень) використовуйте
|
||||
процес онбордингу або окрему конфігурацію постачальника Azure — одного лише
|
||||
`openai.baseUrl` недостатньо, щоб увімкнути форму API/автентифікації Azure. Існує окремий
|
||||
Для трафіку chat або Responses на Azure (поза генерацією зображень) використовуйте
|
||||
потік початкового налаштування або окрему конфігурацію постачальника Azure — одного лише
|
||||
`openai.baseUrl` недостатньо, щоб отримати форму API/автентифікації Azure. Існує окремий
|
||||
постачальник `azure-openai-responses/*`; див.
|
||||
акордеон Server-side Compaction нижче.
|
||||
</Note>
|
||||
@ -558,18 +556,18 @@ Azure OpenAI використовує нативний транспорт і с
|
||||
## Розширена конфігурація
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="Транспорт (WebSocket vs SSE)">
|
||||
OpenClaw використовує спочатку WebSocket з fallback на SSE (`"auto"`) як для `openai/*`, так і для `openai-codex/*`.
|
||||
<Accordion title="Транспорт (WebSocket чи SSE)">
|
||||
OpenClaw використовує WebSocket-first із запасним переходом на SSE (`"auto"`) як для `openai/*`, так і для `openai-codex/*`.
|
||||
|
||||
У режимі `"auto"` OpenClaw:
|
||||
- Повторює одну ранню помилку WebSocket перед переходом на SSE
|
||||
- Після помилки позначає WebSocket як деградований приблизно на 60 секунд і використовує SSE під час охолодження
|
||||
- Додає стабільні заголовки ідентичності сесії та ходу для повторних спроб і повторних підключень
|
||||
- Додає стабільні заголовки ідентичності сесії та ходу для повторних спроб і перепідключень
|
||||
- Нормалізує лічильники використання (`input_tokens` / `prompt_tokens`) між варіантами транспорту
|
||||
|
||||
| Значення | Поведінка |
|
||||
|-------|----------|
|
||||
| `"auto"` (типово) | Спочатку WebSocket, fallback на SSE |
|
||||
| `"auto"` (типово) | Спочатку WebSocket, потім запасний перехід на SSE |
|
||||
| `"sse"` | Примусово лише SSE |
|
||||
| `"websocket"` | Примусово лише WebSocket |
|
||||
|
||||
@ -591,8 +589,8 @@ Azure OpenAI використовує нативний транспорт і с
|
||||
```
|
||||
|
||||
Пов’язана документація OpenAI:
|
||||
- [Realtime API with WebSocket](https://platform.openai.com/docs/guides/realtime-websocket)
|
||||
- [Streaming API responses (SSE)](https://platform.openai.com/docs/guides/streaming-responses)
|
||||
- [Realtime API з WebSocket](https://platform.openai.com/docs/guides/realtime-websocket)
|
||||
- [Потокові відповіді API (SSE)](https://platform.openai.com/docs/guides/streaming-responses)
|
||||
|
||||
</Accordion>
|
||||
|
||||
@ -600,7 +598,7 @@ Azure OpenAI використовує нативний транспорт і с
|
||||
OpenClaw типово вмикає прогрів WebSocket для `openai/*` і `openai-codex/*`, щоб зменшити затримку першого ходу.
|
||||
|
||||
```json5
|
||||
// Disable warm-up
|
||||
// Вимкнути прогрів
|
||||
{
|
||||
agents: {
|
||||
defaults: {
|
||||
@ -616,13 +614,13 @@ Azure OpenAI використовує нативний транспорт і с
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Fast mode">
|
||||
OpenClaw надає спільний перемикач Fast mode для `openai/*` і `openai-codex/*`:
|
||||
<Accordion title="Швидкий режим">
|
||||
OpenClaw надає спільний перемикач швидкого режиму для `openai/*` і `openai-codex/*`:
|
||||
|
||||
- **Chat/UI:** `/fast status|on|off`
|
||||
- **Config:** `agents.defaults.models["<provider>/<model>"].params.fastMode`
|
||||
- **Конфігурація:** `agents.defaults.models["<provider>/<model>"].params.fastMode`
|
||||
|
||||
Коли ввімкнено, OpenClaw зіставляє fast mode з пріоритетною обробкою OpenAI (`service_tier = "priority"`). Наявні значення `service_tier` зберігаються, а fast mode не переписує `reasoning` або `text.verbosity`.
|
||||
Якщо ввімкнено, OpenClaw зіставляє швидкий режим із пріоритетною обробкою OpenAI (`service_tier = "priority"`). Наявні значення `service_tier` зберігаються, а швидкий режим не переписує `reasoning` або `text.verbosity`.
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -637,13 +635,13 @@ Azure OpenAI використовує нативний транспорт і с
|
||||
```
|
||||
|
||||
<Note>
|
||||
Перевизначення сесії мають пріоритет над конфігурацією. Очищення перевизначення сесії в UI Sessions повертає сесію до налаштованого типового значення.
|
||||
Перевизначення сесії мають вищий пріоритет за конфігурацію. Очищення перевизначення сесії в UI Sessions повертає сесію до налаштованого типового значення.
|
||||
</Note>
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Пріоритетна обробка (service_tier)">
|
||||
API OpenAI надає пріоритетну обробку через `service_tier`. Встановіть її для кожної моделі в OpenClaw:
|
||||
API OpenAI надає пріоритетну обробку через `service_tier`. Задайте її для кожної моделі в OpenClaw:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -666,16 +664,16 @@ Azure OpenAI використовує нативний транспорт і с
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Server-side Compaction (Responses API)">
|
||||
Для прямих моделей OpenAI Responses (`openai/*` на `api.openai.com`) обгортка потоку Pi-harness Plugin OpenAI автоматично вмикає server-side Compaction:
|
||||
Для прямих моделей OpenAI Responses (`openai/*` на `api.openai.com`) stream wrapper Pi-harness Plugin `openai` автоматично вмикає Server-side Compaction:
|
||||
|
||||
- Примусово встановлює `store: true` (якщо сумісність моделі не задає `supportsStore: false`)
|
||||
- Впроваджує `context_management: [{ type: "compaction", compact_threshold: ... }]`
|
||||
- Типовий `compact_threshold`: 70% від `contextWindow` (або `80000`, коли значення недоступне)
|
||||
- Примусово задає `store: true` (якщо сумісність моделі не встановлює `supportsStore: false`)
|
||||
- Вставляє `context_management: [{ type: "compaction", compact_threshold: ... }]`
|
||||
- Типове значення `compact_threshold`: 70% від `contextWindow` (або `80000`, якщо значення недоступне)
|
||||
|
||||
Це застосовується до вбудованого шляху Pi harness і до хуків постачальника OpenAI, які використовуються вбудованими запусками. Нативний Codex app-server harness керує власним контекстом через Codex і налаштовується окремо через `agents.defaults.embeddedHarness.runtime`.
|
||||
|
||||
<Tabs>
|
||||
<Tab title="Явно ввімкнути">
|
||||
<Tab title="Явне ввімкнення">
|
||||
Корисно для сумісних endpoint, таких як Azure OpenAI Responses:
|
||||
|
||||
```json5
|
||||
@ -710,7 +708,7 @@ Azure OpenAI використовує нативний транспорт і с
|
||||
}
|
||||
```
|
||||
</Tab>
|
||||
<Tab title="Вимкнути">
|
||||
<Tab title="Вимкнення">
|
||||
```json5
|
||||
{
|
||||
agents: {
|
||||
@ -728,7 +726,7 @@ Azure OpenAI використовує нативний транспорт і с
|
||||
</Tabs>
|
||||
|
||||
<Note>
|
||||
`responsesServerCompaction` керує лише впровадженням `context_management`. Прямі моделі OpenAI Responses однаково примусово встановлюють `store: true`, якщо сумісність не задає `supportsStore: false`.
|
||||
`responsesServerCompaction` керує лише вставленням `context_management`. Прямі моделі OpenAI Responses все одно примусово використовують `store: true`, якщо compat не задає `supportsStore: false`.
|
||||
</Note>
|
||||
|
||||
</Accordion>
|
||||
@ -747,32 +745,32 @@ Azure OpenAI використовує нативний транспорт і с
|
||||
```
|
||||
|
||||
З `strict-agentic` OpenClaw:
|
||||
- Більше не вважає хід лише з планом успішним прогресом, коли доступна дія з інструментом
|
||||
- Більше не вважає хід лише з планом успішним прогресом, коли доступна дія через інструмент
|
||||
- Повторює хід із вказівкою діяти негайно
|
||||
- Автоматично вмикає `update_plan` для суттєвої роботи
|
||||
- Показує явний заблокований стан, якщо модель продовжує планувати без дії
|
||||
- Показує явний стан блокування, якщо модель продовжує планувати без дії
|
||||
|
||||
<Note>
|
||||
Обмежено лише запусками сімейства GPT-5 OpenAI та Codex. Інші постачальники й старіші сімейства моделей зберігають типову поведінку.
|
||||
Обмежено лише запуском OpenAI і Codex сімейства GPT-5. Інші постачальники й старіші сімейства моделей зберігають типову поведінку.
|
||||
</Note>
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Нативні та OpenAI-сумісні маршрути">
|
||||
OpenClaw по-різному обробляє прямі endpoint OpenAI, Codex і Azure OpenAI та загальні OpenAI-сумісні проксі `/v1`:
|
||||
<Accordion title="Нативні маршрути та OpenAI-сумісні маршрути">
|
||||
OpenClaw по-різному обробляє прямі endpoint OpenAI, Codex і Azure OpenAI порівняно із загальними OpenAI-сумісними проксі `/v1`:
|
||||
|
||||
**Нативні маршрути** (`openai/*`, Azure OpenAI):
|
||||
- Зберігають `reasoning: { effort: "none" }` лише для моделей, які підтримують OpenAI `none` effort
|
||||
- Пропускають вимкнений reasoning для моделей або проксі, які відхиляють `reasoning.effort: "none"`
|
||||
- Типово використовують строгий режим для схем інструментів
|
||||
- Додають приховані заголовки атрибуції лише на перевірених нативних хостах
|
||||
- Зберігають формування запитів, специфічне для OpenAI (`service_tier`, `store`, сумісність reasoning, підказки кешу prompt)
|
||||
- Зберігають формування запитів, характерне лише для OpenAI (`service_tier`, `store`, reasoning-compat, підказки prompt-cache)
|
||||
|
||||
**Маршрути проксі/сумісності:**
|
||||
- Використовують м’якшу сумісну поведінку
|
||||
- Не примушують строгі схеми інструментів або заголовки лише для нативних маршрутів
|
||||
**Проксі/сумісні маршрути:**
|
||||
- Використовують м’якшу compat-поведінку
|
||||
- Не примушують строгі схеми інструментів або нативні заголовки
|
||||
|
||||
Azure OpenAI використовує нативний транспорт і сумісну поведінку, але не отримує прихованих заголовків атрибуції.
|
||||
Azure OpenAI використовує нативний транспорт і compat-поведінку, але не отримує приховані заголовки атрибуції.
|
||||
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
@ -781,15 +779,15 @@ Azure OpenAI використовує нативний транспорт і с
|
||||
|
||||
<CardGroup cols={2}>
|
||||
<Card title="Вибір моделі" href="/uk/concepts/model-providers" icon="layers">
|
||||
Вибір постачальників, ідентифікаторів моделей і поведінки failover.
|
||||
Вибір постачальників, посилань на моделі та поведінки failover.
|
||||
</Card>
|
||||
<Card title="Генерація зображень" href="/uk/tools/image-generation" icon="image">
|
||||
Спільні параметри інструмента зображень і вибір постачальника.
|
||||
</Card>
|
||||
<Card title="Генерація відео" href="/uk/tools/video-generation" icon="video">
|
||||
Спільні параметри інструмента відео і вибір постачальника.
|
||||
Спільні параметри інструмента відео та вибір постачальника.
|
||||
</Card>
|
||||
<Card title="OAuth і автентифікація" href="/uk/gateway/authentication" icon="key">
|
||||
<Card title="OAuth та автентифікація" href="/uk/gateway/authentication" icon="key">
|
||||
Докладніше про автентифікацію та правила повторного використання облікових даних.
|
||||
</Card>
|
||||
</CardGroup>
|
||||
|
||||
@ -1,14 +1,14 @@
|
||||
---
|
||||
read_when:
|
||||
- Ви хочете керувати Gateway з браузера
|
||||
- Ви хочете доступ до Tailnet без SSH-тунелів
|
||||
summary: Вебінтерфейс керування для Gateway (чат, вузли, конфігурація)
|
||||
- Ви хочете доступ Tailnet без SSH-тунелів
|
||||
summary: Браузерний інтерфейс керування для Gateway (чат, Node, конфігурація)
|
||||
title: Інтерфейс керування
|
||||
x-i18n:
|
||||
generated_at: "2026-04-24T01:39:17Z"
|
||||
generated_at: "2026-04-24T02:37:00Z"
|
||||
model: gpt-5.4
|
||||
provider: openai
|
||||
source_hash: 931a87479844fc5c06f2c373d3e7447c140bf6d17a5614197209e7a5f3f896bd
|
||||
source_hash: edf6beb9c485720b6811d9d348bbb4752cf6aae929a9fbc62fc8c4770e762490
|
||||
source_path: web/control-ui.md
|
||||
workflow: 15
|
||||
---
|
||||
@ -16,7 +16,7 @@ x-i18n:
|
||||
Інтерфейс керування — це невеликий односторінковий застосунок **Vite + Lit**, який обслуговується Gateway:
|
||||
|
||||
- за замовчуванням: `http://<host>:18789/`
|
||||
- необов’язковий префікс: встановіть `gateway.controlUi.basePath` (наприклад, `/openclaw`)
|
||||
- необов’язковий префікс: установіть `gateway.controlUi.basePath` (наприклад, `/openclaw`)
|
||||
|
||||
Він взаємодіє **безпосередньо з WebSocket Gateway** на тому самому порту.
|
||||
|
||||
@ -35,14 +35,14 @@ x-i18n:
|
||||
- заголовки ідентифікації Tailscale Serve, коли `gateway.auth.allowTailscale: true`
|
||||
- заголовки ідентифікації trusted-proxy, коли `gateway.auth.mode: "trusted-proxy"`
|
||||
|
||||
Панель налаштувань інформаційної панелі зберігає токен для поточної сесії вкладки браузера
|
||||
та вибрану URL-адресу gateway; паролі не зберігаються. Під час первинного налаштування зазвичай
|
||||
генерується токен gateway для автентифікації зі спільним секретом при першому підключенні, але
|
||||
Панель налаштувань на інформаційній панелі зберігає токен для поточної сесії вкладки браузера
|
||||
і вибрану URL-адресу gateway; паролі не зберігаються. Onboarding зазвичай
|
||||
генерує токен gateway для автентифікації зі спільним секретом під час першого підключення, але
|
||||
автентифікація паролем також працює, коли `gateway.auth.mode` має значення `"password"`.
|
||||
|
||||
## Сполучення пристрою (перше підключення)
|
||||
|
||||
Коли ви підключаєтеся до Інтерфейсу керування з нового браузера або пристрою, Gateway
|
||||
Коли ви підключаєтеся до Control UI з нового браузера або пристрою, Gateway
|
||||
вимагає **одноразове підтвердження сполучення** — навіть якщо ви перебуваєте в тій самій Tailnet
|
||||
з `gateway.auth.allowTailscale: true`. Це захід безпеки для запобігання
|
||||
несанкціонованому доступу.
|
||||
@ -52,133 +52,142 @@ x-i18n:
|
||||
**Щоб підтвердити пристрій:**
|
||||
|
||||
```bash
|
||||
# List pending requests
|
||||
# Перелічити запити, що очікують
|
||||
openclaw devices list
|
||||
|
||||
# Approve by request ID
|
||||
# Підтвердити за ID запиту
|
||||
openclaw devices approve <requestId>
|
||||
```
|
||||
|
||||
Якщо браузер повторно намагається виконати сполучення зі зміненими даними автентифікації (роль/області доступу/публічний
|
||||
ключ), попередній запит у стані очікування замінюється, і створюється новий `requestId`.
|
||||
Якщо браузер повторно намагається пройти сполучення зі зміненими даними автентифікації (роль/області доступу/публічний
|
||||
ключ), попередній запит, що очікує, замінюється, і створюється новий `requestId`.
|
||||
Перед підтвердженням знову виконайте `openclaw devices list`.
|
||||
|
||||
Якщо браузер уже сполучений і ви змінюєте його доступ із читання на
|
||||
доступ запису/адміністратора, це розглядається як підвищення рівня підтвердження, а не як тихе
|
||||
повторне підключення. OpenClaw залишає попереднє підтвердження активним, блокує ширше повторне підключення
|
||||
Якщо браузер уже сполучений і ви змінюєте його з доступу лише для читання на
|
||||
доступ для запису/адміністратора, це вважається підвищенням рівня підтвердження, а не
|
||||
тихим повторним підключенням. OpenClaw зберігає попереднє підтвердження активним, блокує ширше повторне підключення
|
||||
і просить вас явно підтвердити новий набір областей доступу.
|
||||
|
||||
Після підтвердження пристрій запам’ятовується і не потребуватиме повторного підтвердження, якщо
|
||||
ви не відкличете його через `openclaw devices revoke --device <id> --role <role>`. Див.
|
||||
ви не відкличете його за допомогою `openclaw devices revoke --device <id> --role <role>`. Див.
|
||||
[CLI Devices](/uk/cli/devices) для ротації токенів і відкликання.
|
||||
|
||||
**Примітки:**
|
||||
|
||||
- Прямі локальні браузерні підключення через local loopback (`127.0.0.1` / `localhost`)
|
||||
підтверджуються автоматично.
|
||||
- Підключення браузера через Tailnet і LAN однаково вимагають явного підтвердження, навіть якщо
|
||||
вони ініційовані з тієї самої машини.
|
||||
- Кожен профіль браузера генерує унікальний ідентифікатор пристрою, тому зміна браузера або
|
||||
- Прямі локальні browser-з’єднання через local loopback (`127.0.0.1` / `localhost`) автоматично
|
||||
підтверджуються.
|
||||
- Browser-підключення через Tailnet і LAN усе одно потребують явного підтвердження, навіть якщо
|
||||
вони походять з тієї самої машини.
|
||||
- Кожен профіль браузера генерує унікальний ID пристрою, тому зміна браузера або
|
||||
очищення даних браузера вимагатиме повторного сполучення.
|
||||
|
||||
## Особиста ідентичність (локально в браузері)
|
||||
|
||||
Інтерфейс керування підтримує особисту ідентичність для кожного браузера (відображуване ім’я та
|
||||
Control UI підтримує персональну ідентичність для кожного браузера (відображуване ім’я та
|
||||
аватар), яка додається до вихідних повідомлень для атрибуції в спільних сесіях. Вона
|
||||
зберігається в сховищі браузера, прив’язана до поточного профілю браузера і не
|
||||
синхронізується з іншими пристроями та не зберігається на сервері поза звичайними
|
||||
метаданими авторства в стенограмі повідомлень, які ви фактично надсилаєте. Очищення даних сайту або
|
||||
синхронізується з іншими пристроями та не зберігається на сервері поза межами звичайних
|
||||
метаданих авторства в транскрипті для повідомлень, які ви фактично надсилаєте. Очищення даних сайту або
|
||||
зміна браузера скидає її до порожнього значення.
|
||||
|
||||
## Кінцева точка конфігурації runtime
|
||||
## Endpoint конфігурації середовища виконання
|
||||
|
||||
Інтерфейс керування отримує свої налаштування runtime з
|
||||
`/__openclaw/control-ui-config.json`. Ця кінцева точка захищена тією самою
|
||||
Control UI отримує свої runtime-налаштування з
|
||||
`/__openclaw/control-ui-config.json`. Доступ до цього endpoint захищений тією самою
|
||||
автентифікацією gateway, що й решта HTTP-поверхні: неавтентифіковані браузери не можуть
|
||||
отримати її, а успішне отримання вимагає або вже дійсний токен/пароль gateway,
|
||||
ідентичність Tailscale Serve, або ідентичність trusted-proxy.
|
||||
отримати його, а успішне отримання вимагає або вже дійсного токена/пароля gateway,
|
||||
ідентифікації Tailscale Serve, або ідентичності trusted-proxy.
|
||||
|
||||
## Підтримка мов
|
||||
|
||||
Інтерфейс керування може локалізуватися під час першого завантаження відповідно до локалі вашого браузера.
|
||||
Щоб змінити це пізніше, відкрийте **Overview -> Gateway Access -> Language**. Перемикач
|
||||
локалі розташовано в картці Gateway Access, а не в розділі Appearance.
|
||||
Control UI може локалізуватися під час першого завантаження на основі локалі вашого браузера.
|
||||
Щоб змінити її пізніше, відкрийте **Overview -> Gateway Access -> Language**. Засіб
|
||||
вибору локалі розташовано в картці Gateway Access, а не в розділі Appearance.
|
||||
|
||||
- Підтримувані локалі: `en`, `zh-CN`, `zh-TW`, `pt-BR`, `de`, `es`, `ja-JP`, `ko`, `fr`, `tr`, `uk`, `id`, `pl`, `th`
|
||||
- Неанглійські переклади ліниво завантажуються в браузері.
|
||||
- Вибрана локаль зберігається в сховищі браузера і використовується повторно під час майбутніх відвідувань.
|
||||
- Вибрана локаль зберігається в сховищі браузера й повторно використовується під час наступних відвідувань.
|
||||
- Відсутні ключі перекладу повертаються до англійської.
|
||||
|
||||
## Що він уміє робити (зараз)
|
||||
|
||||
- Спілкуватися з моделлю через Gateway WS (`chat.history`, `chat.send`, `chat.abort`, `chat.inject`)
|
||||
- Передавати виклики інструментів + картки живого виводу інструментів у Chat (події агента)
|
||||
- Канали: статус вбудованих, а також bundled/external plugin каналів, QR-вхід і конфігурація для кожного каналу (`channels.status`, `web.login.*`, `config.patch`)
|
||||
- Екземпляри: список присутності + оновлення (`system-presence`)
|
||||
- Сесії: список + перевизначення моделі/мислення/швидкого режиму/детального режиму/трасування/міркування для кожної сесії (`sessions.list`, `sessions.patch`)
|
||||
- Dreams: статус Dreaming, перемикач увімкнення/вимкнення та читач Dream Diary (`doctor.memory.status`, `doctor.memory.dreamDiary`, `config.patch`)
|
||||
- Завдання Cron: список/додавання/редагування/запуск/увімкнення/вимкнення + історія запусків (`cron.*`)
|
||||
- Підключатися до OpenAI Realtime безпосередньо з браузера через WebRTC. Gateway
|
||||
випускає короткоживучий секрет клієнта Realtime за допомогою `talk.realtime.session`; браузер
|
||||
надсилає аудіо з мікрофона безпосередньо до OpenAI і передає виклики інструмента
|
||||
`openclaw_agent_consult` назад через `chat.send` для більшої налаштованої
|
||||
моделі OpenClaw.
|
||||
- Потоково передавати виклики інструментів + картки виводу інструментів у реальному часі в Chat (події агента)
|
||||
- Канали: статус вбудованих, bundled і external Plugin-каналів, QR-вхід і конфігурація для кожного каналу (`channels.status`, `web.login.*`, `config.patch`)
|
||||
- Інстанси: список присутності + оновлення (`system-presence`)
|
||||
- Сесії: список + перевизначення model/thinking/fast/verbose/trace/reasoning для кожної сесії (`sessions.list`, `sessions.patch`)
|
||||
- Dreams: статус Dreaming, перемикач увімкнення/вимкнення і читач Dream Diary (`doctor.memory.status`, `doctor.memory.dreamDiary`, `config.patch`)
|
||||
- Завдання Cron: перелік/додавання/редагування/запуск/увімкнення/вимкнення + історія запусків (`cron.*`)
|
||||
- Skills: статус, увімкнення/вимкнення, встановлення, оновлення API-ключів (`skills.*`)
|
||||
- Вузли: список + можливості (`node.list`)
|
||||
- Підтвердження exec: редагування списків дозволів gateway або вузла + політика запитів для `exec host=gateway/node` (`exec.approvals.*`)
|
||||
- Node: список + обмеження (`node.list`)
|
||||
- Підтвердження exec: редагування списків дозволів gateway або node + політика запиту для `exec host=gateway/node` (`exec.approvals.*`)
|
||||
- Конфігурація: перегляд/редагування `~/.openclaw/openclaw.json` (`config.get`, `config.set`)
|
||||
- Конфігурація: застосування + перезапуск із валідацією (`config.apply`) і пробудження останньої активної сесії
|
||||
- Записи конфігурації включають захист base-hash, щоб запобігти перезапису паралельних змін
|
||||
- Записи конфігурації (`config.set`/`config.apply`/`config.patch`) також попередньо перевіряють активне розв’язання SecretRef для посилань у надісланому корисному навантаженні конфігурації; нерозв’язані активні надіслані посилання відхиляються до запису
|
||||
- Схема конфігурації + рендеринг форм (`config.schema` / `config.schema.lookup`,
|
||||
включно з полями `title` / `description`, відповідними підказками UI, негайними
|
||||
зведеннями дочірніх елементів, метаданими документації для вузлів nested object/wildcard/array/composition,
|
||||
а також схемами plugin і каналів, коли вони доступні); редактор Raw JSON
|
||||
доступний лише тоді, коли знімок має безпечний raw round-trip
|
||||
- Якщо знімок не може безпечно пройти raw round-trip, Інтерфейс керування примусово вмикає режим Form і вимикає режим Raw для цього знімка
|
||||
- У редакторі Raw JSON дія "Reset to saved" зберігає форму, створену в raw (форматування, коментарі, структуру `$include`), замість повторного рендерингу сплощеного знімка, тож зовнішні редагування зберігаються під час скидання, коли знімок може безпечно пройти round-trip
|
||||
- Структуровані значення об’єктів SecretRef відображаються в текстових полях форми лише для читання, щоб запобігти випадковому пошкодженню під час перетворення об’єкта на рядок
|
||||
- Записи конфігурації містять захист на основі базового хеша, щоб запобігти перезапису одночасних змін
|
||||
- Записи конфігурації (`config.set`/`config.apply`/`config.patch`) також попередньо перевіряють розв’язання активних SecretRef для посилань у надісланому payload конфігурації; невирішені активні надіслані посилання відхиляються до запису
|
||||
- Схема конфігурації + рендеринг форми (`config.schema` / `config.schema.lookup`,
|
||||
зокрема поле `title` / `description`, відповідні підказки UI, підсумки
|
||||
безпосередніх дочірніх елементів, метадані документації для вузлів nested object/wildcard/array/composition,
|
||||
а також схеми Plugin і каналів, коли вони доступні); редактор Raw JSON
|
||||
доступний лише тоді, коли знімок має безпечне повне raw-перетворення
|
||||
- Якщо знімок не може безпечно пройти повне raw-перетворення, Control UI примусово використовує режим Form і вимикає режим Raw для цього знімка
|
||||
- У редакторі Raw JSON дія "Reset to saved" зберігає форму, створену в raw-режимі (форматування, коментарі, макет `$include`), замість повторного рендерингу сплощеного знімка, тож зовнішні зміни зберігаються після скидання, коли знімок може безпечно пройти повне raw-перетворення
|
||||
- Значення структурованих об’єктів SecretRef відображаються лише для читання в текстових полях форми, щоб запобігти випадковому пошкодженню під час перетворення об’єкта на рядок
|
||||
- Налагодження: знімки status/health/models + журнал подій + ручні RPC-виклики (`status`, `health`, `models.list`)
|
||||
- Журнали: live tail журнальних файлів gateway із фільтрацією/експортом (`logs.tail`)
|
||||
- Оновлення: запуск оновлення пакета/git + перезапуск (`update.run`) зі звітом про перезапуск
|
||||
|
||||
Примітки до панелі завдань Cron:
|
||||
|
||||
- Для ізольованих завдань доставка за замовчуванням налаштована на оголошення підсумку. Ви можете перемкнути на none, якщо хочете лише внутрішні запуски.
|
||||
- Поля каналу/цілі з’являються, коли вибрано announce.
|
||||
- Режим Webhook використовує `delivery.mode = "webhook"` із `delivery.to`, встановленим на дійсну URL-адресу HTTP(S) Webhook.
|
||||
- Для завдань основної сесії доступні режими доставки webhook і none.
|
||||
- Розширені елементи керування редагуванням включають delete-after-run, очищення перевизначення агента, точні/зміщені параметри cron,
|
||||
перевизначення моделі/мислення агента та перемикачі доставки best-effort.
|
||||
- Валідація форми виконується вбудовано з помилками на рівні полів; недійсні значення вимикають кнопку збереження, доки їх не буде виправлено.
|
||||
- Встановіть `cron.webhookToken`, щоб надсилати окремий bearer token; якщо його не вказано, webhook надсилається без заголовка автентифікації.
|
||||
- Застарілий резервний варіант: збережені застарілі завдання з `notify: true` усе ще можуть використовувати `cron.webhook`, доки їх не буде мігровано.
|
||||
- Для ізольованих завдань доставка за замовчуванням оголошує підсумок. Ви можете перемкнути на none, якщо хочете лише внутрішні запуски.
|
||||
- Поля channel/target з’являються, коли вибрано announce.
|
||||
- Режим Webhook використовує `delivery.mode = "webhook"` із `delivery.to`, установленим на дійсну URL-адресу HTTP(S) Webhook.
|
||||
- Для завдань main-session доступні режими доставки webhook і none.
|
||||
- Розширені елементи редагування включають видалення після запуску, очищення перевизначення агента, точні/з відтермінуванням параметри cron,
|
||||
перевизначення model/thinking для агента та перемикачі доставки з найкращими зусиллями.
|
||||
- Валідація форми є вбудованою з помилками на рівні полів; некоректні значення вимикають кнопку збереження, доки їх не буде виправлено.
|
||||
- Установіть `cron.webhookToken`, щоб надсилати окремий bearer-токен; якщо його не вказано, webhook надсилається без заголовка автентифікації.
|
||||
- Застарілий запасний варіант: збережені legacy-завдання з `notify: true` усе ще можуть використовувати `cron.webhook`, доки їх не буде мігровано.
|
||||
|
||||
## Поведінка чату
|
||||
|
||||
- `chat.send` є **неблокувальним**: він негайно підтверджує через `{ runId, status: "started" }`, а відповідь передається потоком через події `chat`.
|
||||
- `chat.send` є **неблокувальним**: він одразу підтверджується з `{ runId, status: "started" }`, а відповідь передається потоком через події `chat`.
|
||||
- Повторне надсилання з тим самим `idempotencyKey` повертає `{ status: "in_flight" }` під час виконання та `{ status: "ok" }` після завершення.
|
||||
- Відповіді `chat.history` обмежені за розміром для безпеки UI. Коли записи стенограми надто великі, Gateway може обрізати довгі текстові поля, пропускати великі блоки метаданих і замінювати надто великі повідомлення заповнювачем (`[chat.history omitted: message too large]`).
|
||||
- Зображення assistant/generated зберігаються як керовані посилання на медіа й повертаються через автентифіковані URL-адреси медіа Gateway, тому перезавантаження не залежать від того, чи збережуться в історії чату необроблені корисні навантаження зображень base64.
|
||||
- `chat.history` також прибирає з видимого тексту assistant вбудовані теги директив лише для відображення (наприклад, `[[reply_to_*]]` і `[[audio_as_voice]]`), XML-корисні навантаження викликів інструментів у форматі plain-text (зокрема `<tool_call>...</tool_call>`, `<function_call>...</function_call>`, `<tool_calls>...</tool_calls>`, `<function_calls>...</function_calls>` і обрізані блоки викликів інструментів), а також витеклі ASCII/full-width токени керування моделлю, і пропускає записи assistant, увесь видимий текст яких складається лише з точного тихого токена `NO_REPLY` / `no_reply`.
|
||||
- `chat.inject` додає примітку assistant до стенограми сесії та транслює подію `chat` для оновлень лише в UI (без запуску агента, без доставки в канал).
|
||||
- Перемикачі моделі та мислення в заголовку чату негайно змінюють активну сесію через `sessions.patch`; це сталі перевизначення сесії, а не параметри надсилання лише на один хід.
|
||||
- Відповіді `chat.history` обмежені за розміром для безпеки UI. Коли записи транскрипту надто великі, Gateway може обрізати довгі текстові поля, пропускати важкі блоки метаданих і замінювати надто великі повідомлення заповнювачем (`[chat.history omitted: message too large]`).
|
||||
- Зображення assistant/згенеровані зберігаються як керовані посилання на медіа і повертаються через автентифіковані URL-адреси медіа Gateway, тож перезавантаження не залежить від того, чи залишаються в відповіді історії чату raw-payload зображень base64.
|
||||
- `chat.history` також прибирає inline-теги директив лише для відображення з видимого тексту assistant (наприклад, `[[reply_to_*]]` і `[[audio_as_voice]]`), XML-payload звичайного тексту викликів інструментів (зокрема `<tool_call>...</tool_call>`, `<function_call>...</function_call>`, `<tool_calls>...</tool_calls>`, `<function_calls>...</function_calls>` і обрізані блоки викликів інструментів), а також витеклі токени керування моделлю ASCII/full-width, і пропускає записи assistant, увесь видимий текст яких — це лише точний тихий токен `NO_REPLY` / `no_reply`.
|
||||
- `chat.inject` додає примітку assistant до транскрипту сесії та транслює подію `chat` для оновлень лише UI (без запуску агента, без доставки через канал).
|
||||
- Засоби вибору model і thinking у заголовку чату негайно застосовують зміни до активної сесії через `sessions.patch`; це постійні перевизначення сесії, а не параметри надсилання лише для одного ходу.
|
||||
- Режим Talk використовує зареєстрованого постачальника голосу в реальному часі. Налаштуйте OpenAI за допомогою
|
||||
`talk.provider: "openai"` разом із `talk.providers.openai.apiKey`, або повторно використайте
|
||||
конфігурацію постачальника Realtime для Voice Call. Браузер ніколи не отримує стандартний
|
||||
API-ключ OpenAI; він отримує лише ефемерний секрет клієнта Realtime.
|
||||
- Зупинка:
|
||||
- Натисніть **Stop** (викликає `chat.abort`)
|
||||
- Поки запуск активний, звичайні подальші повідомлення ставляться в чергу. Натисніть **Steer** на повідомленні в черзі, щоб вставити це подальше повідомлення в поточний хід.
|
||||
- Введіть `/stop` (або окремі фрази скасування, як-от `stop`, `stop action`, `stop run`, `stop openclaw`, `please stop`), щоб перервати поза смугою
|
||||
- `chat.abort` підтримує `{ sessionKey }` (без `runId`) для переривання всіх активних запусків цієї сесії
|
||||
- Часткове збереження після переривання:
|
||||
- Поки виконання активне, звичайні наступні повідомлення ставляться в чергу. Натисніть **Steer** на повідомленні в черзі, щоб вставити це наступне повідомлення в поточний хід.
|
||||
- Введіть `/stop` (або окремі фрази скасування, як-от `stop`, `stop action`, `stop run`, `stop openclaw`, `please stop`), щоб перервати поза основним потоком
|
||||
- `chat.abort` підтримує `{ sessionKey }` (без `runId`) для переривання всіх активних запусків у цій сесії
|
||||
- Збереження часткового виводу після переривання:
|
||||
- Коли запуск перервано, частковий текст assistant усе ще може відображатися в UI
|
||||
- Gateway зберігає частковий текст assistant у стенограмі, якщо існує буферизований вивід
|
||||
- Збережені записи містять метадані переривання, щоб споживачі стенограми могли відрізнити часткові результати переривання від звичайного завершеного виводу
|
||||
- Gateway зберігає частковий текст assistant у історії транскрипту після переривання, коли існує буферизований вивід
|
||||
- Збережені записи містять метадані переривання, щоб споживачі транскрипту могли відрізнити частковий вивід після переривання від звичайного завершення
|
||||
|
||||
## Hosted embeds
|
||||
|
||||
Повідомлення assistant можуть вбудовано відображати hosted web content за допомогою shortcode `[embed ...]`.
|
||||
Повідомлення assistant можуть відображати hosted web content вбудовано за допомогою shortcode `[embed ...]`.
|
||||
Політика sandbox для iframe керується параметром
|
||||
`gateway.controlUi.embedSandbox`:
|
||||
|
||||
- `strict`: вимикає виконання скриптів усередині hosted embeds
|
||||
- `scripts`: дозволяє інтерактивні embeds, зберігаючи ізоляцію походження; це
|
||||
значення за замовчуванням, і його зазвичай достатньо для самодостатніх browser games/widgets
|
||||
- `trusted`: додає `allow-same-origin` на додачу до `allow-scripts` для same-site
|
||||
документів, яким навмисно потрібні ширші привілеї
|
||||
- `scripts`: дозволяє інтерактивні embeds, зберігаючи ізоляцію джерела; це
|
||||
значення за замовчуванням і зазвичай його достатньо для самодостатніх browser-ігор/віджетів
|
||||
- `trusted`: додає `allow-same-origin` поверх `allow-scripts` для same-site
|
||||
документів, яким навмисно потрібні розширені привілеї
|
||||
|
||||
Приклад:
|
||||
|
||||
@ -192,19 +201,19 @@ openclaw devices approve <requestId>
|
||||
}
|
||||
```
|
||||
|
||||
Використовуйте `trusted` лише тоді, коли вбудованому документу справді потрібна
|
||||
поведінка same-origin. Для більшості згенерованих агентом ігор та інтерактивних полотен `scripts` —
|
||||
Використовуйте `trusted`, лише коли вбудованому документу справді потрібна поведінка
|
||||
same-origin. Для більшості згенерованих агентом ігор та інтерактивних canvas `scripts` —
|
||||
безпечніший вибір.
|
||||
|
||||
Абсолютні зовнішні URL-адреси embed `http(s)` за замовчуванням залишаються заблокованими. Якщо ви
|
||||
свідомо хочете, щоб `[embed url="https://..."]` завантажував сторонні сторінки, встановіть
|
||||
свідомо хочете, щоб `[embed url="https://..."]` завантажував сторонні сторінки, установіть
|
||||
`gateway.controlUi.allowExternalEmbedUrls: true`.
|
||||
|
||||
## Доступ через Tailnet (рекомендовано)
|
||||
## Доступ Tailnet (рекомендовано)
|
||||
|
||||
### Інтегрований Tailscale Serve (бажано)
|
||||
|
||||
Тримайте Gateway на loopback і дозвольте Tailscale Serve проксувати його через HTTPS:
|
||||
Залишайте Gateway на loopback і дозвольте Tailscale Serve проксіювати його через HTTPS:
|
||||
|
||||
```bash
|
||||
openclaw gateway --tailscale serve
|
||||
@ -214,22 +223,22 @@ openclaw gateway --tailscale serve
|
||||
|
||||
- `https://<magicdns>/` (або ваш налаштований `gateway.controlUi.basePath`)
|
||||
|
||||
За замовчуванням запити Serve до Інтерфейсу керування/WebSocket можуть автентифікуватися через заголовки ідентичності Tailscale
|
||||
За замовчуванням запити Control UI/WebSocket Serve можуть проходити автентифікацію через заголовки ідентичності Tailscale
|
||||
(`tailscale-user-login`), коли `gateway.auth.allowTailscale` має значення `true`. OpenClaw
|
||||
перевіряє ідентичність, визначаючи адресу `x-forwarded-for` через
|
||||
`tailscale whois` і зіставляючи її із заголовком, і приймає такі запити лише тоді, коли
|
||||
запит потрапляє на loopback із заголовками Tailscale `x-forwarded-*`. Встановіть
|
||||
`gateway.auth.allowTailscale: false`, якщо хочете вимагати явні облікові дані зі спільним секретом
|
||||
навіть для трафіку Serve. Тоді використовуйте `gateway.auth.mode: "token"` або
|
||||
`tailscale whois` і звіряючи її із заголовком, і приймає їх лише тоді, коли
|
||||
запит надходить на loopback із заголовками Tailscale `x-forwarded-*`. Установіть
|
||||
`gateway.auth.allowTailscale: false`, якщо хочете вимагати явні облікові дані
|
||||
зі спільним секретом навіть для трафіку Serve. Тоді використовуйте `gateway.auth.mode: "token"` або
|
||||
`"password"`.
|
||||
Для цього асинхронного шляху ідентичності Serve невдалі спроби автентифікації для тієї самої IP-адреси клієнта
|
||||
та області автентифікації серіалізуються перед записами до обмеження частоти. Тому одночасні хибні повторні спроби
|
||||
та області автентифікації серіалізуються перед записами обмеження частоти. Тому одночасні невдалі повторні спроби
|
||||
з того самого браузера можуть показувати `retry later` у другому запиті
|
||||
замість двох звичайних невідповідностей, що паралельно змагаються.
|
||||
замість двох звичайних невідповідностей, що змагаються паралельно.
|
||||
Автентифікація Serve без токена припускає, що хост gateway є довіреним. Якщо на цьому хості
|
||||
може виконуватися недовірений локальний код, вимагайте автентифікацію токеном/паролем.
|
||||
|
||||
### Прив’язка до tailnet + токен
|
||||
### Прив’язати до tailnet + токен
|
||||
|
||||
```bash
|
||||
openclaw gateway --bind tailnet --token "$(openssl rand -hex 32)"
|
||||
@ -239,19 +248,19 @@ openclaw gateway --bind tailnet --token "$(openssl rand -hex 32)"
|
||||
|
||||
- `http://<tailscale-ip>:18789/` (або ваш налаштований `gateway.controlUi.basePath`)
|
||||
|
||||
Вставте відповідний спільний секрет у налаштування UI (він надсилається як
|
||||
Вставте відповідний спільний секрет у налаштування UI (надсилається як
|
||||
`connect.params.auth.token` або `connect.params.auth.password`).
|
||||
|
||||
## Незахищений HTTP
|
||||
## Небезпечний HTTP
|
||||
|
||||
Якщо ви відкриваєте інформаційну панель через звичайний HTTP (`http://<lan-ip>` або `http://<tailscale-ip>`),
|
||||
браузер працює в **незахищеному контексті** й блокує WebCrypto. За замовчуванням
|
||||
OpenClaw **блокує** підключення Інтерфейсу керування без ідентичності пристрою.
|
||||
браузер працює в **незахищеному контексті** і блокує WebCrypto. За замовчуванням
|
||||
OpenClaw **блокує** підключення Control UI без ідентичності пристрою.
|
||||
|
||||
Задокументовані винятки:
|
||||
|
||||
- сумісність незахищеного HTTP лише для localhost з `gateway.controlUi.allowInsecureAuth=true`
|
||||
- успішна автентифікація оператора Інтерфейсу керування через `gateway.auth.mode: "trusted-proxy"`
|
||||
- успішна автентифікація оператора Control UI через `gateway.auth.mode: "trusted-proxy"`
|
||||
- аварійний варіант `gateway.controlUi.dangerouslyDisableDeviceAuth=true`
|
||||
|
||||
**Рекомендоване виправлення:** використовуйте HTTPS (Tailscale Serve) або відкрийте UI локально:
|
||||
@ -273,12 +282,12 @@ OpenClaw **блокує** підключення Інтерфейсу керув
|
||||
|
||||
`allowInsecureAuth` — це лише локальний перемикач сумісності:
|
||||
|
||||
- Він дозволяє сесіям Інтерфейсу керування на localhost продовжувати роботу без ідентичності пристрою
|
||||
у незахищених HTTP-контекстах.
|
||||
- Він дозволяє сесіям localhost Control UI продовжуватися без ідентичності пристрою в
|
||||
незахищених контекстах HTTP.
|
||||
- Він не обходить перевірки сполучення.
|
||||
- Він не послаблює вимоги до ідентичності віддалених пристроїв (не localhost).
|
||||
- Він не послаблює вимоги до віддаленої (не-localhost) ідентичності пристрою.
|
||||
|
||||
**Лише для аварійних випадків:**
|
||||
**Лише для аварійного використання:**
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -290,40 +299,40 @@ OpenClaw **блокує** підключення Інтерфейсу керув
|
||||
}
|
||||
```
|
||||
|
||||
`dangerouslyDisableDeviceAuth` вимикає перевірки ідентичності пристрою в Інтерфейсі керування і є
|
||||
серйозним зниженням рівня безпеки. Після аварійного використання швидко поверніть попереднє значення.
|
||||
`dangerouslyDisableDeviceAuth` вимикає перевірки ідентичності пристрою в Control UI і є
|
||||
серйозним зниженням рівня безпеки. Швидко поверніть налаштування назад після аварійного використання.
|
||||
|
||||
Примітка щодо trusted-proxy:
|
||||
|
||||
- успішна автентифікація trusted-proxy може допускати **операторські** сесії Інтерфейсу керування без
|
||||
- успішна автентифікація trusted-proxy може допускати **операторські** сесії Control UI без
|
||||
ідентичності пристрою
|
||||
- це **не** поширюється на сесії Інтерфейсу керування з роллю вузла
|
||||
- reverse proxy через loopback на тому самому хості все одно не задовольняють автентифікацію trusted-proxy; див.
|
||||
- це **не** поширюється на сесії Control UI з роллю node
|
||||
- reverse-proxy на тій самій машині через loopback усе одно не задовольняють автентифікацію trusted-proxy; див.
|
||||
[Автентифікація Trusted Proxy](/uk/gateway/trusted-proxy-auth)
|
||||
|
||||
Див. [Tailscale](/uk/gateway/tailscale) для інструкцій із налаштування HTTPS.
|
||||
Див. [Tailscale](/uk/gateway/tailscale) для вказівок щодо налаштування HTTPS.
|
||||
|
||||
## Політика безпеки вмісту
|
||||
|
||||
Інтерфейс керування постачається зі суворою політикою `img-src`: дозволені лише ресурси **того самого походження** та URL `data:`. Віддалені URL `http(s)` і URL з відносним протоколом відхиляються браузером і не ініціюють мережевих запитів.
|
||||
Control UI постачається із суворою політикою `img-src`: дозволено лише ресурси **того самого джерела** та URL-адреси `data:`. Віддалені URL-адреси з `http(s)` і протокольно-відносні URL-адреси зображень відхиляються браузером і не спричиняють мережевих запитів.
|
||||
|
||||
Що це означає на практиці:
|
||||
|
||||
- Аватари та зображення, що обслуговуються за відносними шляхами (наприклад `/avatars/<id>`), як і раніше відображаються.
|
||||
- Вбудовані URL `data:image/...` як і раніше відображаються (це корисно для корисних навантажень усередині протоколу).
|
||||
- Віддалені URL аватарів, що надходять із метаданих каналу, видаляються в допоміжних функціях аватарів Інтерфейсу керування і замінюються вбудованим логотипом/значком, тому скомпрометований або зловмисний канал не може змусити браузер оператора виконувати довільні віддалені запити зображень.
|
||||
- Вбудовані URL-адреси `data:image/...` як і раніше відображаються (це корисно для payload усередині протоколу).
|
||||
- Віддалені URL-адреси аватарів, які надходять із метаданих каналів, видаляються в helper-функціях аватарів Control UI і замінюються вбудованим логотипом/бейджем, тож скомпрометований або зловмисний канал не може змусити браузер оператора виконувати довільні віддалені запити зображень.
|
||||
|
||||
Щоб отримати таку поведінку, нічого змінювати не потрібно — вона завжди ввімкнена і не налаштовується.
|
||||
Вам не потрібно нічого змінювати, щоб отримати таку поведінку — вона завжди ввімкнена й не налаштовується.
|
||||
|
||||
## Автентифікація маршруту аватара
|
||||
|
||||
Коли налаштовано автентифікацію gateway, кінцева точка аватара Інтерфейсу керування вимагає той самий токен gateway, що й решта API:
|
||||
Коли налаштовано автентифікацію gateway, endpoint аватарів у Control UI вимагає той самий токен gateway, що й решта API:
|
||||
|
||||
- `GET /avatar/<agentId>` повертає зображення аватара лише автентифікованим викликачам. `GET /avatar/<agentId>?meta=1` повертає метадані аватара за тим самим правилом.
|
||||
- Неавтентифіковані запити до будь-якого з цих маршрутів відхиляються (так само, як і до сусіднього маршруту assistant-media). Це запобігає витоку ідентичності агента через маршрут аватара на хостах, які інакше захищені.
|
||||
- Сам Інтерфейс керування пересилає токен gateway як bearer-заголовок під час отримання аватарів і використовує автентифіковані blob URL, тож зображення все одно відображається в інформаційних панелях.
|
||||
- `GET /avatar/<agentId>` повертає зображення аватара лише автентифікованим викликам. `GET /avatar/<agentId>?meta=1` повертає метадані аватара за тим самим правилом.
|
||||
- Неавтентифіковані запити до будь-якого з цих маршрутів відхиляються (узгоджено із сусіднім маршрутом assistant-media). Це запобігає витоку ідентичності агента через маршрут аватара на хостах, які в іншому разі захищені.
|
||||
- Сам Control UI пересилає токен gateway як bearer-заголовок під час отримання аватарів і використовує автентифіковані blob URL, тож зображення все одно відображається в інформаційних панелях.
|
||||
|
||||
Якщо ви вимкнете автентифікацію gateway (не рекомендується на спільних хостах), маршрут аватара також стане неавтентифікованим, відповідно до решти gateway.
|
||||
Якщо ви вимкнете автентифікацію gateway (не рекомендовано на спільних хостах), маршрут аватара також стане неавтентифікованим, узгоджено з рештою gateway.
|
||||
|
||||
## Збирання UI
|
||||
|
||||
@ -333,7 +342,7 @@ Gateway обслуговує статичні файли з `dist/control-ui`.
|
||||
pnpm ui:build
|
||||
```
|
||||
|
||||
Необов’язкова абсолютна база (коли вам потрібні фіксовані URL ресурсів):
|
||||
Необов’язкова абсолютна база (коли потрібні фіксовані URL-адреси ресурсів):
|
||||
|
||||
```bash
|
||||
OPENCLAW_CONTROL_UI_BASE_PATH=/openclaw/ pnpm ui:build
|
||||
@ -345,16 +354,16 @@ OPENCLAW_CONTROL_UI_BASE_PATH=/openclaw/ pnpm ui:build
|
||||
pnpm ui:dev
|
||||
```
|
||||
|
||||
Потім вкажіть у UI URL вашого Gateway WS (наприклад, `ws://127.0.0.1:18789`).
|
||||
Потім укажіть для UI URL-адресу вашого Gateway WS (наприклад, `ws://127.0.0.1:18789`).
|
||||
|
||||
## Налагодження/тестування: dev server + віддалений Gateway
|
||||
|
||||
Інтерфейс керування — це статичні файли; ціль WebSocket налаштовується і може
|
||||
відрізнятися від HTTP-походження. Це зручно, коли ви хочете мати dev server Vite
|
||||
локально, але Gateway працює деінде.
|
||||
Control UI — це статичні файли; ціль WebSocket можна налаштувати, і вона може
|
||||
відрізнятися від HTTP origin. Це зручно, коли ви хочете локальний dev server Vite,
|
||||
але Gateway працює деінде.
|
||||
|
||||
1. Запустіть dev server UI: `pnpm ui:dev`
|
||||
2. Відкрийте URL такого вигляду:
|
||||
2. Відкрийте URL-адресу на кшталт:
|
||||
|
||||
```text
|
||||
http://localhost:5173/?gatewayUrl=ws://<gateway-host>:18789
|
||||
@ -368,20 +377,20 @@ http://localhost:5173/?gatewayUrl=wss://<gateway-host>:18789#token=<gateway-toke
|
||||
|
||||
Примітки:
|
||||
|
||||
- `gatewayUrl` зберігається в localStorage після завантаження і видаляється з URL.
|
||||
- `token` слід передавати через фрагмент URL (`#token=...`) щоразу, коли це можливо. Фрагменти не надсилаються на сервер, що запобігає витоку в журналах запитів і через Referer. Застарілі параметри запиту `?token=` усе ще одноразово імпортуються для сумісності, але лише як резервний варіант, і видаляються одразу після bootstrap.
|
||||
- `gatewayUrl` зберігається в localStorage після завантаження і видаляється з URL-адреси.
|
||||
- `token` слід передавати через фрагмент URL (`#token=...`), коли це можливо. Фрагменти не надсилаються на сервер, що запобігає витоку в журналах запитів і Referer. Застарілі параметри запиту `?token=` усе ще одноразово імпортуються для сумісності, але лише як запасний варіант, і видаляються одразу після bootstrap.
|
||||
- `password` зберігається лише в пам’яті.
|
||||
- Коли встановлено `gatewayUrl`, UI не повертається до облікових даних із конфігурації чи середовища.
|
||||
Надайте `token` (або `password`) явно. Відсутність явних облікових даних є помилкою.
|
||||
- Використовуйте `wss://`, коли Gateway працює за TLS (Tailscale Serve, HTTPS proxy тощо).
|
||||
Явно передайте `token` (або `password`). Відсутність явних облікових даних є помилкою.
|
||||
- Використовуйте `wss://`, коли Gateway перебуває за TLS (Tailscale Serve, HTTPS proxy тощо).
|
||||
- `gatewayUrl` приймається лише у вікні верхнього рівня (не у вбудованому), щоб запобігти clickjacking.
|
||||
- Розгортання Інтерфейсу керування не на loopback повинні явно задавати `gateway.controlUi.allowedOrigins`
|
||||
(повні походження). Це також стосується віддалених dev-середовищ.
|
||||
- Не використовуйте `gateway.controlUi.allowedOrigins: ["*"]`, окрім жорстко контрольованого
|
||||
локального тестування. Це означає дозвіл для будь-якого походження браузера, а не «збіг із будь-яким хостом, який я
|
||||
- Для розгортань Control UI поза loopback потрібно явно встановити `gateway.controlUi.allowedOrigins`
|
||||
(повні origin). Це також стосується віддалених dev-конфігурацій.
|
||||
- Не використовуйте `gateway.controlUi.allowedOrigins: ["*"]`, окрім суворо контрольованого
|
||||
локального тестування. Це означає дозволити будь-який origin браузера, а не «зіставляти з будь-яким хостом, який я
|
||||
використовую».
|
||||
- `gateway.controlUi.dangerouslyAllowHostHeaderOriginFallback=true` вмикає
|
||||
режим резервного визначення походження за заголовком Host, але це небезпечний режим безпеки.
|
||||
режим резервного визначення origin через заголовок Host, але це небезпечний режим безпеки.
|
||||
|
||||
Приклад:
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user