chore(i18n): refresh uk translations
This commit is contained in:
parent
08984b58be
commit
db7bcd0bc2
@ -1,48 +1,48 @@
|
||||
---
|
||||
read_when:
|
||||
- Розширення qa-lab або qa-channel
|
||||
- Додавання QA-сценаріїв, що підтримуються репозиторієм
|
||||
- Створення автоматизації QA з вищим рівнем реалізму навколо панелі керування Gateway
|
||||
- Додавання QA-сценаріїв на основі репозиторію
|
||||
- Побудова більш реалістичної автоматизації QA навколо панелі Gateway
|
||||
summary: Приватна форма автоматизації QA для qa-lab, qa-channel, початково заповнених сценаріїв і звітів протоколу
|
||||
title: Автоматизація QA E2E
|
||||
x-i18n:
|
||||
generated_at: "2026-04-24T01:50:42Z"
|
||||
generated_at: "2026-04-24T02:51:59Z"
|
||||
model: gpt-5.4
|
||||
provider: openai
|
||||
source_hash: f6924a05faebdd22ac5222db6b9579b57d9c7f3dfac71df6c5f2ee7d2bf0a5f8
|
||||
source_hash: bbde51169a1572dc6753ab550ca29ca98abb2394e8991a8482bd7b66ea80ce76
|
||||
source_path: concepts/qa-e2e-automation.md
|
||||
workflow: 15
|
||||
---
|
||||
|
||||
Приватний стек QA призначений для перевірки OpenClaw у більш реалістичний,
|
||||
орієнтований на канали спосіб, ніж це може зробити один unit-тест.
|
||||
орієнтований на канали спосіб, ніж це може один unit-тест.
|
||||
|
||||
Поточні складові:
|
||||
|
||||
- `extensions/qa-channel`: синтетичний канал повідомлень із поверхнями DM, каналу, гілки,
|
||||
- `extensions/qa-channel`: синтетичний канал повідомлень із поверхнями DM, каналу, треду,
|
||||
реакцій, редагування та видалення.
|
||||
- `extensions/qa-lab`: UI налагодження та QA-шина для спостереження за транскриптом,
|
||||
інʼєкції вхідних повідомлень і експорту звіту у Markdown.
|
||||
- `qa/`: ресурси початкових даних, що підтримуються репозиторієм, для стартового завдання та базових QA-
|
||||
- `extensions/qa-lab`: UI налагодження та шина QA для спостереження за транскриптом,
|
||||
інʼєкції вхідних повідомлень та експорту Markdown-звіту.
|
||||
- `qa/`: ресурси початкових даних на основі репозиторію для стартового завдання та базових QA-
|
||||
сценаріїв.
|
||||
|
||||
Поточний робочий процес QA-оператора — це двопанельний сайт QA:
|
||||
Поточний робочий процес QA-оператора — це двопанельний QA-сайт:
|
||||
|
||||
- Ліворуч: панель керування Gateway (Control UI) з агентом.
|
||||
- Праворуч: QA Lab, де показано схожий на Slack транскрипт і план сценарію.
|
||||
- Ліворуч: панель Gateway (Control UI) з агентом.
|
||||
- Праворуч: QA Lab, що показує транскрипт у стилі Slack і план сценарію.
|
||||
|
||||
Запустіть так:
|
||||
Запустіть його командою:
|
||||
|
||||
```bash
|
||||
pnpm qa:lab:up
|
||||
```
|
||||
|
||||
Це збирає QA-сайт, запускає доріжку gateway на базі Docker і відкриває
|
||||
Це збирає QA-сайт, запускає lane Gateway на основі Docker і відкриває
|
||||
сторінку QA Lab, де оператор або цикл автоматизації може дати агенту QA-
|
||||
місію, спостерігати реальну поведінку каналу й фіксувати, що спрацювало,
|
||||
місію, спостерігати реальну поведінку каналу та фіксувати, що спрацювало,
|
||||
що не спрацювало або що залишилося заблокованим.
|
||||
|
||||
Для швидшої ітерації UI QA Lab без повторного збирання Docker-образу щоразу,
|
||||
Для швидшої ітерації UI QA Lab без перебудови Docker-образу щоразу
|
||||
запустіть стек із bind-mounted збіркою QA Lab:
|
||||
|
||||
```bash
|
||||
@ -52,163 +52,183 @@ pnpm qa:lab:up:fast
|
||||
pnpm qa:lab:watch
|
||||
```
|
||||
|
||||
`qa:lab:up:fast` тримає Docker-сервіси на попередньо зібраному образі та bind-mount
|
||||
`qa:lab:up:fast` утримує Docker-сервіси на попередньо зібраному образі та bind-mount'ить
|
||||
`extensions/qa-lab/web/dist` у контейнер `qa-lab`. `qa:lab:watch`
|
||||
перезбирає цю збірку при змінах, а браузер автоматично перезавантажується, коли
|
||||
змінюється хеш ресурсу QA Lab.
|
||||
перебудовує цей bundle при змінах, а браузер автоматично перезавантажується,
|
||||
коли змінюється хеш ресурсу QA Lab.
|
||||
|
||||
Для smoke-доріжки Matrix з реальним транспортом виконайте:
|
||||
Для smoke lane Matrix із реальним транспортом виконайте:
|
||||
|
||||
```bash
|
||||
pnpm openclaw qa matrix
|
||||
```
|
||||
|
||||
Ця доріжка розгортає одноразовий homeserver Tuwunel у Docker, реєструє
|
||||
тимчасових користувачів driver, SUT та observer, створює одну приватну кімнату,
|
||||
а потім запускає реальний Plugin Matrix всередині дочірнього процесу QA gateway. Доріжка живого транспорту тримає
|
||||
конфігурацію дочірнього процесу обмеженою транспортом, що тестується, тому Matrix запускається без
|
||||
`qa-channel` у конфігурації дочірнього процесу. Вона записує структуровані артефакти звіту та
|
||||
обʼєднаний лог stdout/stderr у вибраний вихідний каталог Matrix QA. Щоб
|
||||
також захопити зовнішній вивід збирання/запуску `scripts/run-node.mjs`,
|
||||
встановіть `OPENCLAW_RUN_NODE_OUTPUT_LOG=<path>` у лог-файл усередині репозиторію.
|
||||
Цей lane розгортає тимчасовий homeserver Tuwunel у Docker, реєструє
|
||||
тимчасових користувачів driver, SUT і observer, створює одну приватну кімнату,
|
||||
а потім запускає реальний Plugin Matrix усередині дочірнього QA gateway. Lane із
|
||||
живим транспортом зберігає конфігурацію дочірнього процесу обмеженою
|
||||
транспортом, що тестується, тому Matrix працює без `qa-channel` у дочірній
|
||||
конфігурації. Він записує структуровані артефакти звіту та обʼєднаний лог
|
||||
stdout/stderr у вибраний вихідний каталог Matrix QA. Щоб також захопити
|
||||
зовнішній вивід збірки/запускача `scripts/run-node.mjs`, установіть
|
||||
`OPENCLAW_RUN_NODE_OUTPUT_LOG=<path>` на локальний щодо репозиторію файл логу.
|
||||
|
||||
Для smoke-доріжки Telegram з реальним транспортом виконайте:
|
||||
Для smoke lane Telegram із реальним транспортом виконайте:
|
||||
|
||||
```bash
|
||||
pnpm openclaw qa telegram
|
||||
```
|
||||
|
||||
Ця доріжка націлюється на одну реальну приватну групу Telegram замість розгортання
|
||||
одноразового сервера. Вона вимагає `OPENCLAW_QA_TELEGRAM_GROUP_ID`,
|
||||
Цей lane націлюється на одну реальну приватну групу Telegram замість розгортання
|
||||
тимчасового сервера. Для нього потрібні `OPENCLAW_QA_TELEGRAM_GROUP_ID`,
|
||||
`OPENCLAW_QA_TELEGRAM_DRIVER_BOT_TOKEN` і
|
||||
`OPENCLAW_QA_TELEGRAM_SUT_BOT_TOKEN`, а також двох різних ботів в одній
|
||||
`OPENCLAW_QA_TELEGRAM_SUT_BOT_TOKEN`, а також два різні боти в одній
|
||||
приватній групі. Бот SUT повинен мати імʼя користувача Telegram, а
|
||||
спостереження бот-до-бота працює найкраще, коли в обох ботів увімкнено режим Bot-to-Bot Communication Mode
|
||||
у `@BotFather`.
|
||||
Команда завершується з ненульовим кодом, якщо будь-який сценарій завершується невдачею. Використовуйте `--allow-failures`, коли
|
||||
спостереження bot-to-bot працює найкраще, коли для обох ботів увімкнено
|
||||
режим Bot-to-Bot Communication Mode в `@BotFather`.
|
||||
Команда завершується ненульовим кодом, якщо будь-який сценарій не пройшов. Використовуйте `--allow-failures`, якщо
|
||||
вам потрібні артефакти без коду завершення з помилкою.
|
||||
Звіт Telegram і підсумок містять RTT для кожної відповіді від запиту
|
||||
Звіт і підсумок Telegram включають RTT для кожної відповіді — від запиту
|
||||
надсилання повідомлення driver до спостережуваної відповіді SUT, починаючи з canary.
|
||||
|
||||
Тепер доріжки живого транспорту використовують один менший спільний контракт, замість того щоб
|
||||
кожна вигадувала власну форму списку сценаріїв:
|
||||
Для smoke lane Discord із реальним транспортом виконайте:
|
||||
|
||||
`qa-channel` залишається широким синтетичним набором перевірок поведінки продукту й не входить
|
||||
до матриці покриття живого транспорту.
|
||||
```bash
|
||||
pnpm openclaw qa discord
|
||||
```
|
||||
|
||||
| Доріжка | Canary | Фільтрація згадок | Блокування allowlist | Відповідь верхнього рівня | Відновлення після перезапуску | Подальша дія в гілці | Ізоляція гілки | Спостереження реакцій | Команда help |
|
||||
| --------- | ------ | ----------------- | -------------------- | ------------------------- | ----------------------------- | -------------------- | -------------- | --------------------- | ------------ |
|
||||
| Matrix | x | x | x | x | x | x | x | x | |
|
||||
| Telegram | x | | | | | | | | x |
|
||||
Цей lane націлюється на один реальний приватний канал guild Discord із двома ботами: ботом
|
||||
driver, яким керує harness, і ботом SUT, який запускається дочірнім
|
||||
Gateway OpenClaw через вбудований Plugin Discord. Для нього потрібні
|
||||
`OPENCLAW_QA_DISCORD_GUILD_ID`, `OPENCLAW_QA_DISCORD_CHANNEL_ID`,
|
||||
`OPENCLAW_QA_DISCORD_DRIVER_BOT_TOKEN`, `OPENCLAW_QA_DISCORD_SUT_BOT_TOKEN`
|
||||
і `OPENCLAW_QA_DISCORD_SUT_APPLICATION_ID` у разі використання облікових даних env.
|
||||
Lane перевіряє обробку згадок у каналі та перевіряє, що бот SUT
|
||||
зареєстрував нативну команду `/help` у Discord.
|
||||
Команда завершується ненульовим кодом, якщо будь-який сценарій не пройшов. Використовуйте `--allow-failures`, якщо
|
||||
вам потрібні артефакти без коду завершення з помилкою.
|
||||
|
||||
Тепер lane із живим транспортом використовують один менший контракт замість того,
|
||||
щоб кожен вигадував власну форму списку сценаріїв:
|
||||
|
||||
`qa-channel` залишається широким синтетичним набором перевірок поведінки продукту і не входить
|
||||
до матриці покриття live transport.
|
||||
|
||||
| Lane | Canary | Гейтінг згадок | Блокування allowlist | Відповідь верхнього рівня | Відновлення після перезапуску | Подальше повідомлення в треді | Ізоляція тредів | Спостереження за реакціями | Команда help | Реєстрація нативної команди |
|
||||
| -------- | ------ | -------------- | -------------------- | ------------------------- | ----------------------------- | ----------------------------- | --------------- | -------------------------- | ------------ | --------------------------- |
|
||||
| Matrix | x | x | x | x | x | x | x | x | | |
|
||||
| Telegram | x | x | | | | | | | x | |
|
||||
| Discord | x | x | | | | | | | | x |
|
||||
|
||||
Це зберігає `qa-channel` як широкий набір перевірок поведінки продукту, тоді як Matrix,
|
||||
Telegram і майбутні живі транспорти спільно використовують один явний контрольний список транспортного контракту.
|
||||
Telegram і майбутні живі транспорти спільно використовують один явний контрольний список
|
||||
транспортного контракту.
|
||||
|
||||
Для доріжки з одноразовою Linux VM без залучення Docker до QA-шляху виконайте:
|
||||
Для lane з тимчасовою Linux VM без використання Docker у QA-шляху виконайте:
|
||||
|
||||
```bash
|
||||
pnpm openclaw qa suite --runner multipass --scenario channel-chat-baseline
|
||||
```
|
||||
|
||||
Це запускає нову гостьову машину Multipass, установлює залежності, збирає OpenClaw
|
||||
усередині гостя, виконує `qa suite`, а потім копіює звичайний QA-звіт і
|
||||
Це завантажує нову гостьову машину Multipass, установлює залежності, збирає OpenClaw
|
||||
усередині гостьової машини, запускає `qa suite`, а потім копіює звичайний QA-звіт і
|
||||
підсумок назад у `.artifacts/qa-e2e/...` на хості.
|
||||
Вона повторно використовує ту саму поведінку вибору сценаріїв, що й `qa suite` на хості.
|
||||
Запуски suite на хості та в Multipass за замовчуванням виконують кілька вибраних сценаріїв паралельно
|
||||
з ізольованими worker-процесами gateway. `qa-channel` за замовчуванням використовує concurrency 4,
|
||||
обмежений кількістю вибраних сценаріїв. Використовуйте `--concurrency <count>`, щоб налаштувати
|
||||
кількість worker-процесів, або `--concurrency 1` для послідовного виконання.
|
||||
Команда завершується з ненульовим кодом, якщо будь-який сценарій завершується невдачею. Використовуйте `--allow-failures`, коли
|
||||
Він повторно використовує ту саму поведінку вибору сценаріїв, що й `qa suite` на хості.
|
||||
Запуски suite на хості та в Multipass за замовчуванням виконують кілька вибраних
|
||||
сценаріїв паралельно з ізольованими worker Gateway. Для `qa-channel`
|
||||
типове значення concurrency — 4, обмежене кількістю вибраних сценаріїв. Використовуйте `--concurrency <count>`, щоб налаштувати
|
||||
кількість worker, або `--concurrency 1` для послідовного виконання.
|
||||
Команда завершується ненульовим кодом, якщо будь-який сценарій не пройшов. Використовуйте `--allow-failures`, якщо
|
||||
вам потрібні артефакти без коду завершення з помилкою.
|
||||
Живі запуски передають підтримувані вхідні дані QA-автентифікації, які практичні для
|
||||
гостя: ключі провайдера через env, шлях до конфігурації QA live provider і
|
||||
Живі запуски передають підтримувані вхідні дані автентифікації QA, які практичні для
|
||||
гостьової машини: ключі провайдерів на основі env, шлях до конфігурації live provider QA і
|
||||
`CODEX_HOME`, якщо він присутній. Тримайте `--output-dir` у межах кореня репозиторію, щоб гість
|
||||
міг записувати назад через змонтований робочий простір.
|
||||
міг записувати назад через змонтований workspace.
|
||||
|
||||
## Початкові дані, що підтримуються репозиторієм
|
||||
## Початкові дані на основі репозиторію
|
||||
|
||||
Ресурси початкових даних знаходяться в `qa/`:
|
||||
|
||||
- `qa/scenarios/index.md`
|
||||
- `qa/scenarios/<theme>/*.md`
|
||||
|
||||
Вони навмисно зберігаються в git, щоб план QA був видимий і для людей, і для
|
||||
агента.
|
||||
Вони навмисно зберігаються в git, щоб QA-план був видимий і людям, і
|
||||
агенту.
|
||||
|
||||
`qa-lab` має залишатися загальним виконавцем markdown. Кожен markdown-файл сценарію є
|
||||
`qa-lab` має залишатися загальним runner для markdown. Кожен markdown-файл сценарію є
|
||||
джерелом істини для одного тестового запуску й має визначати:
|
||||
|
||||
- метадані сценарію
|
||||
- необовʼязкові метадані категорії, можливостей, доріжки та ризику
|
||||
- посилання на документацію та код
|
||||
- необовʼязкові метадані category, capability, lane і risk
|
||||
- посилання на docs і код
|
||||
- необовʼязкові вимоги до Plugin
|
||||
- необовʼязковий патч конфігурації gateway
|
||||
- необовʼязковий patch конфігурації gateway
|
||||
- виконуваний `qa-flow`
|
||||
|
||||
Повторно використовувана поверхня runtime, яка лежить в основі `qa-flow`, може залишатися загальною
|
||||
і наскрізною. Наприклад, markdown-сценарії можуть поєднувати
|
||||
допоміжні засоби на стороні транспорту з допоміжними засобами на стороні браузера, які керують вбудованим Control UI через
|
||||
інтерфейс Gateway `browser.request`, не додаючи спеціалізованого виконавця.
|
||||
Поверхня повторно використовуваного runtime, що підтримує `qa-flow`, може залишатися загальною
|
||||
і наскрізною. Наприклад, markdown-сценарії можуть поєднувати transport-side
|
||||
допоміжні засоби з browser-side допоміжними засобами, які керують вбудованим Control UI через
|
||||
seam Gateway `browser.request`, не додаючи спеціалізований runner.
|
||||
|
||||
Файли сценаріїв слід групувати за можливістю продукту, а не за папкою
|
||||
дерева вихідного коду. Зберігайте ідентифікатори сценаріїв стабільними при переміщенні файлів; використовуйте `docsRefs` і `codeRefs`
|
||||
для відстежуваності реалізації.
|
||||
Файли сценаріїв слід групувати за можливостями продукту, а не за папкою
|
||||
вихідного дерева. Зберігайте стабільність ID сценаріїв під час переміщення файлів; використовуйте `docsRefs` і `codeRefs`
|
||||
для трасованості реалізації.
|
||||
|
||||
Базовий список має залишатися достатньо широким, щоб охоплювати:
|
||||
|
||||
- чати в DM і каналах
|
||||
- поведінку гілок
|
||||
- чат у DM і каналі
|
||||
- поведінку тредів
|
||||
- життєвий цикл дій із повідомленнями
|
||||
- зворотні виклики cron
|
||||
- відтворення з памʼяті
|
||||
- Cron callbacks
|
||||
- виклик памʼяті
|
||||
- перемикання моделей
|
||||
- передачу підлеглому агенту
|
||||
- передачу підзадачі субагенту
|
||||
- читання репозиторію та документації
|
||||
- одне невелике завдання зі збирання, наприклад Lobster Invaders
|
||||
- одне невелике завдання на збірку, наприклад Lobster Invaders
|
||||
|
||||
## Доріжки mock-провайдерів
|
||||
## Mock lanes провайдерів
|
||||
|
||||
`qa suite` має дві локальні доріжки mock-провайдерів:
|
||||
`qa suite` має два локальні mock lanes провайдерів:
|
||||
|
||||
- `mock-openai` — це обізнаний про сценарії mock OpenClaw. Він залишається
|
||||
типовою детермінованою mock-доріжкою для QA, що підтримується репозиторієм, і перевірок паритету.
|
||||
- `aimock` запускає сервер провайдера на базі AIMock для експериментального покриття
|
||||
протоколу, фікстур, запису/відтворення та хаосу. Це доповнення і воно не
|
||||
замінює диспетчер сценаріїв `mock-openai`.
|
||||
- `mock-openai` — це обізнаний про сценарії mock OpenClaw. Він залишається типовим
|
||||
детермінованим mock lane для QA на основі репозиторію та перевірок паритету.
|
||||
- `aimock` запускає сервер провайдера на основі AIMock для експериментального
|
||||
покриття протоколу, фікстур, record/replay і chaos. Він є доповненням і не
|
||||
замінює dispatcher сценаріїв `mock-openai`.
|
||||
|
||||
Реалізація доріжок провайдерів розміщена в `extensions/qa-lab/src/providers/`.
|
||||
Кожен провайдер володіє своїми типовими значеннями, запуском локального сервера, конфігурацією моделей gateway,
|
||||
потребами підготовки auth-profile і прапорцями можливостей live/mock. Спільний код suite та
|
||||
gateway має проходити через реєстр провайдерів замість розгалуження за назвами провайдерів.
|
||||
Реалізація lane провайдерів знаходиться в `extensions/qa-lab/src/providers/`.
|
||||
Кожен провайдер володіє своїми значеннями за замовчуванням, запуском локального сервера,
|
||||
конфігурацією моделі gateway, потребами staging auth-profile і прапорцями live/mock capability. Спільний код suite і gateway
|
||||
має маршрутизувати через registry провайдерів замість розгалуження за іменами провайдерів.
|
||||
|
||||
## Адаптери транспорту
|
||||
|
||||
`qa-lab` володіє загальним інтерфейсом транспорту для markdown-сценаріїв QA.
|
||||
`qa-channel` — перший адаптер на цьому інтерфейсі, але ціль проєктування ширша:
|
||||
майбутні реальні або синтетичні канали мають підключатися до того самого виконавця suite
|
||||
замість додавання спеціалізованого QA-виконавця для транспорту.
|
||||
`qa-lab` володіє загальним seam транспорту для markdown QA-сценаріїв.
|
||||
`qa-channel` — перший адаптер на цьому seam, але ціль дизайну ширша:
|
||||
майбутні реальні або синтетичні канали мають підключатися до того самого runner `suite`
|
||||
замість додавання transport-specific QA runner.
|
||||
|
||||
На рівні архітектури поділ такий:
|
||||
|
||||
- `qa-lab` володіє загальним виконанням сценаріїв, паралельністю worker-процесів, записом артефактів і звітністю.
|
||||
- адаптер транспорту володіє конфігурацією gateway, готовністю, спостереженням за вхідними та вихідними подіями, транспортними діями та нормалізованим станом транспорту.
|
||||
- `qa-lab` відповідає за загальне виконання сценаріїв, concurrency worker, запис артефактів і звітність.
|
||||
- адаптер транспорту відповідає за конфігурацію gateway, готовність, спостереження за вхідними та вихідними даними, транспортні дії та нормалізований стан транспорту.
|
||||
- markdown-файли сценаріїв у `qa/scenarios/` визначають тестовий запуск; `qa-lab` надає повторно використовувану поверхню runtime, яка їх виконує.
|
||||
|
||||
Настанови з упровадження для супровідників нових адаптерів каналів містяться в
|
||||
Настанови з упровадження для нових адаптерів каналів, орієнтовані на мейнтейнерів, розміщені в
|
||||
[Тестування](/uk/help/testing#adding-a-channel-to-qa).
|
||||
|
||||
## Звітність
|
||||
|
||||
`qa-lab` експортує протокольний звіт у Markdown зі спостережуваної часової шкали шини.
|
||||
Звіт має відповідати на запитання:
|
||||
`qa-lab` експортує Markdown-звіт протоколу зі спостережуваної часової шкали шини.
|
||||
Звіт має відповідати на такі запитання:
|
||||
|
||||
- Що спрацювало
|
||||
- Що не спрацювало
|
||||
- Що залишилося заблокованим
|
||||
- Які додаткові сценарії варто додати
|
||||
- Які подальші сценарії варто додати
|
||||
|
||||
Для перевірок характеру та стилю виконайте той самий сценарій для кількох живих ref моделей
|
||||
і запишіть оцінений звіт у Markdown:
|
||||
Для перевірок характеру та стилю запустіть той самий сценарій на кількох live model
|
||||
refs і запишіть Markdown-звіт з оцінюванням:
|
||||
|
||||
```bash
|
||||
pnpm openclaw qa character-eval \
|
||||
@ -228,34 +248,35 @@ pnpm openclaw qa character-eval \
|
||||
```
|
||||
|
||||
Команда запускає локальні дочірні процеси QA gateway, а не Docker. Сценарії character eval
|
||||
мають задавати persona через `SOUL.md`, а потім виконувати звичайні користувацькі ходи,
|
||||
такі як чат, допомога з робочим простором і невеликі файлові завдання. Моделі-кандидату
|
||||
мають задавати persona через `SOUL.md`, а потім виконувати звичайні ходи користувача,
|
||||
такі як чат, допомога з workspace і невеликі файлові завдання. Моделі-кандидату
|
||||
не слід повідомляти, що її оцінюють. Команда зберігає кожен повний
|
||||
транскрипт, записує базову статистику запуску, а потім просить моделі-судді в швидкому режимі з
|
||||
міркуванням `xhigh`, де це підтримується, ранжувати запуски за природністю, вайбом і гумором.
|
||||
Використовуйте `--blind-judge-models`, коли порівнюєте провайдерів: запит для судді все одно отримує
|
||||
кожен транскрипт і статус запуску, але ref кандидатів замінюються нейтральними
|
||||
мітками на кшталт `candidate-01`; звіт зіставляє ранжування назад із реальними ref після парсингу.
|
||||
Запуски кандидатів за замовчуванням використовують `high` thinking, з `medium` для GPT-5.4 і `xhigh`
|
||||
для старіших eval-ref OpenAI, які це підтримують. Перевизначте конкретного кандидата безпосередньо через
|
||||
`--model provider/model,thinking=<level>`. `--thinking <level>` і далі задає
|
||||
глобальне резервне значення, а старіша форма `--model-thinking <provider/model=level>`
|
||||
зберігається для сумісності.
|
||||
Ref кандидатів OpenAI за замовчуванням використовують fast mode, щоб застосовувалася пріоритетна обробка там,
|
||||
де це підтримує провайдер. Додайте `,fast`, `,no-fast` або `,fast=false` безпосередньо, коли
|
||||
окремому кандидату або судді потрібне перевизначення. Передавайте `--fast` лише тоді, коли хочете
|
||||
примусово ввімкнути fast mode для кожної моделі-кандидата. Тривалість запусків кандидатів і суддів
|
||||
записується у звіт для аналізу продуктивності, але в запитах до суддів прямо вказано
|
||||
транскрипт, записує базову статистику запуску, а потім просить моделі-судді в fast mode з
|
||||
`xhigh` reasoning, де це підтримується, ранжувати запуски за природністю, вайбом і гумором.
|
||||
Використовуйте `--blind-judge-models` при порівнянні провайдерів: промпт судді все одно отримує
|
||||
кожен транскрипт і статус запуску, але посилання кандидатів замінюються нейтральними
|
||||
мітками на кшталт `candidate-01`; після парсингу звіт зіставляє ранжування назад із реальними ref.
|
||||
|
||||
Для запусків кандидатів за замовчуванням використовується thinking рівня `high`, із `medium` для GPT-5.4 та `xhigh`
|
||||
для старіших OpenAI eval ref, які це підтримують. Перевизначте конкретного кандидата прямо в рядку через
|
||||
`--model provider/model,thinking=<level>`. `--thinking <level>` як і раніше задає
|
||||
глобальне резервне значення, а старіша форма `--model-thinking <provider/model=level>` збережена
|
||||
для сумісності.
|
||||
OpenAI candidate ref за замовчуванням використовують fast mode, щоб застосовувалася пріоритетна обробка там,
|
||||
де провайдер це підтримує. Додайте `,fast`, `,no-fast` або `,fast=false` прямо в рядку, коли
|
||||
одному кандидату або судді потрібне перевизначення. Передавайте `--fast` лише тоді, коли хочете
|
||||
примусово ввімкнути fast mode для кожної моделі-кандидата. Тривалість роботи кандидатів і суддів
|
||||
записується у звіт для аналізу бенчмарків, але в промптах для суддів явно сказано
|
||||
не ранжувати за швидкістю.
|
||||
І запуски моделей-кандидатів, і запуски моделей-суддів за замовчуванням використовують concurrency 16. Зменшуйте
|
||||
`--concurrency` або `--judge-concurrency`, коли обмеження провайдера чи локальне навантаження на gateway
|
||||
роблять запуск занадто шумним.
|
||||
Якщо не передано жодного `--model` кандидата, character eval за замовчуванням використовує
|
||||
Для запусків моделей-кандидатів і моделей-суддів за замовчуванням використовується concurrency 16. Зменшуйте
|
||||
`--concurrency` або `--judge-concurrency`, коли ліміти провайдера або навантаження на локальний gateway
|
||||
роблять запуск надто шумним.
|
||||
Якщо не передано жодного кандидата через `--model`, для character eval за замовчуванням використовуються
|
||||
`openai/gpt-5.4`, `openai/gpt-5.2`, `openai/gpt-5`, `anthropic/claude-opus-4-6`,
|
||||
`anthropic/claude-sonnet-4-6`, `zai/glm-5.1`,
|
||||
`moonshot/kimi-k2.5` і
|
||||
`google/gemini-3.1-pro-preview`, якщо не передано `--model`.
|
||||
Якщо не передано жодного `--judge-model`, суддями за замовчуванням є
|
||||
Якщо не передано `--judge-model`, за замовчуванням використовуються судді
|
||||
`openai/gpt-5.4,thinking=xhigh,fast` і
|
||||
`anthropic/claude-opus-4-6,thinking=high`.
|
||||
|
||||
@ -263,4 +284,4 @@ Ref кандидатів OpenAI за замовчуванням використ
|
||||
|
||||
- [Тестування](/uk/help/testing)
|
||||
- [QA Channel](/uk/channels/qa-channel)
|
||||
- [Панель керування](/uk/web/dashboard)
|
||||
- [Панель](/uk/web/dashboard)
|
||||
|
||||
@ -1,29 +1,29 @@
|
||||
---
|
||||
read_when:
|
||||
- Ви хочете використовувати пошук Brave для `web_search`
|
||||
- Вам потрібен `BRAVE_API_KEY` або деталі тарифного плану
|
||||
summary: Налаштування API пошуку Brave для `web_search`
|
||||
title: Пошук Brave
|
||||
- Ви хочете використовувати Brave Search для `web_search`
|
||||
- Вам потрібен `BRAVE_API_KEY` або деталі плану
|
||||
summary: Налаштування API Brave Search для `web_search`
|
||||
title: Brave search
|
||||
x-i18n:
|
||||
generated_at: "2026-04-23T21:13:04Z"
|
||||
generated_at: "2026-04-24T02:52:01Z"
|
||||
model: gpt-5.4
|
||||
provider: openai
|
||||
source_hash: 9265153d8e7ccfe777617459d18a02e4cee7a1806d89f3ddf92d14ba7bf87a43
|
||||
source_hash: 0a59df7a5d52f665673b82b76ec9dce7ca34bf4e7b678029f6f7f7c5340c173b
|
||||
source_path: tools/brave-search.md
|
||||
workflow: 15
|
||||
---
|
||||
|
||||
# API пошуку Brave
|
||||
# API Brave Search
|
||||
|
||||
OpenClaw підтримує API пошуку Brave як provider для `web_search`.
|
||||
OpenClaw підтримує API Brave Search як провайдера `web_search`.
|
||||
|
||||
## Отримання API key
|
||||
## Отримання API-ключа
|
||||
|
||||
1. Створіть акаунт Brave Search API на [https://brave.com/search/api/](https://brave.com/search/api/)
|
||||
2. У dashboard виберіть план **Search** і згенеруйте API key.
|
||||
3. Збережіть ключ у config або задайте `BRAVE_API_KEY` у середовищі Gateway.
|
||||
1. Створіть обліковий запис Brave Search API за адресою [https://brave.com/search/api/](https://brave.com/search/api/)
|
||||
2. На панелі керування виберіть план **Search** і згенеруйте API-ключ.
|
||||
3. Збережіть ключ у конфігурації або встановіть `BRAVE_API_KEY` у середовищі Gateway.
|
||||
|
||||
## Приклад config
|
||||
## Приклад конфігурації
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -51,32 +51,56 @@ OpenClaw підтримує API пошуку Brave як provider для `web_sea
|
||||
}
|
||||
```
|
||||
|
||||
Специфічні для provider-а налаштування пошуку Brave тепер живуть у `plugins.entries.brave.config.webSearch.*`.
|
||||
Застарілий `tools.web.search.apiKey` усе ще завантажується через compatibility shim, але більше не є канонічним шляхом config.
|
||||
Налаштування пошуку Brave, специфічні для провайдера, тепер розміщуються в `plugins.entries.brave.config.webSearch.*`.
|
||||
Застарілий `tools.web.search.apiKey` усе ще завантажується через шар сумісності, але більше не є канонічним шляхом конфігурації.
|
||||
|
||||
`webSearch.mode` керує transport Brave:
|
||||
`webSearch.mode` керує транспортом Brave:
|
||||
|
||||
- `web` (типово): звичайний веб-пошук Brave з назвами, URL і snippet-ами
|
||||
- `llm-context`: API LLM Context Brave з попередньо витягнутими текстовими фрагментами та джерелами для grounding
|
||||
- `web` (типово): звичайний вебпошук Brave із заголовками, URL-адресами та фрагментами
|
||||
- `llm-context`: API LLM Context від Brave із попередньо витягнутими текстовими фрагментами та джерелами для обґрунтування
|
||||
|
||||
## Параметри інструмента
|
||||
|
||||
| Параметр | Опис |
|
||||
| ------------- | --------------------------------------------------------------------- |
|
||||
| `query` | Пошуковий запит (обов’язково) |
|
||||
| `count` | Кількість результатів для повернення (1-10, типово: 5) |
|
||||
| `country` | 2-літерний код країни ISO (наприклад, "US", "DE") |
|
||||
| `language` | Код мови ISO 639-1 для результатів пошуку (наприклад, "en", "de", "fr") |
|
||||
| `search_lang` | Код мови пошуку Brave (наприклад, `en`, `en-gb`, `zh-hans`) |
|
||||
| `ui_lang` | Код мови ISO для елементів UI |
|
||||
| `freshness` | Часовий фільтр: `day` (24h), `week`, `month` або `year` |
|
||||
| `date_after` | Лише результати, опубліковані після цієї дати (YYYY-MM-DD) |
|
||||
| `date_before` | Лише результати, опубліковані до цієї дати (YYYY-MM-DD) |
|
||||
<ParamField path="query" type="string" required>
|
||||
Пошуковий запит.
|
||||
</ParamField>
|
||||
|
||||
<ParamField path="count" type="number" default="5">
|
||||
Кількість результатів для повернення (1–10).
|
||||
</ParamField>
|
||||
|
||||
<ParamField path="country" type="string">
|
||||
2-літерний код країни ISO (наприклад, `US`, `DE`).
|
||||
</ParamField>
|
||||
|
||||
<ParamField path="language" type="string">
|
||||
Код мови ISO 639-1 для результатів пошуку (наприклад, `en`, `de`, `fr`).
|
||||
</ParamField>
|
||||
|
||||
<ParamField path="search_lang" type="string">
|
||||
Код мови пошуку Brave (наприклад, `en`, `en-gb`, `zh-hans`).
|
||||
</ParamField>
|
||||
|
||||
<ParamField path="ui_lang" type="string">
|
||||
Код мови ISO для елементів інтерфейсу.
|
||||
</ParamField>
|
||||
|
||||
<ParamField path="freshness" type="'day' | 'week' | 'month' | 'year'">
|
||||
Фільтр часу — `day` означає 24 години.
|
||||
</ParamField>
|
||||
|
||||
<ParamField path="date_after" type="string">
|
||||
Лише результати, опубліковані після цієї дати (`YYYY-MM-DD`).
|
||||
</ParamField>
|
||||
|
||||
<ParamField path="date_before" type="string">
|
||||
Лише результати, опубліковані до цієї дати (`YYYY-MM-DD`).
|
||||
</ParamField>
|
||||
|
||||
**Приклади:**
|
||||
|
||||
```javascript
|
||||
// Пошук для конкретної країни та мови
|
||||
// Пошук із прив’язкою до країни та мови
|
||||
await web_search({
|
||||
query: "renewable energy",
|
||||
country: "DE",
|
||||
@ -99,16 +123,16 @@ await web_search({
|
||||
|
||||
## Примітки
|
||||
|
||||
- OpenClaw використовує план Brave **Search**. Якщо у вас застаріла підписка (наприклад, оригінальний Free plan із 2,000 запитами/місяць), вона лишається дійсною, але не включає новіші можливості, як-от LLM Context або вищі rate limit-и.
|
||||
- Кожен план Brave включає **\$5/місяць безплатного кредиту** (з поновленням). План Search коштує \$5 за 1,000 запитів, тож кредит покриває 1,000 запитів/місяць. Встановіть свій usage limit у dashboard Brave, щоб уникнути неочікуваних витрат. Поточні плани див. в [порталі API Brave](https://brave.com/search/api/).
|
||||
- План Search включає endpoint LLM Context і права AI inference. Зберігання результатів для навчання або tuning моделей потребує плану з явними правами на зберігання. Див. [Terms of Service](https://api-dashboard.search.brave.com/terms-of-service) Brave.
|
||||
- Режим `llm-context` повертає grounded source entries замість звичайної форми snippet веб-пошуку.
|
||||
- OpenClaw використовує план Brave **Search**. Якщо у вас є застаріла підписка (наприклад, початковий безплатний план із 2 000 запитів на місяць), вона залишається дійсною, але не включає новіші можливості, як-от LLM Context або вищі ліміти швидкості.
|
||||
- Кожен план Brave включає **\$5/місяць безплатного кредиту** (з поновленням). План Search коштує \$5 за 1 000 запитів, тож кредит покриває 1 000 запитів на місяць. Установіть ліміт використання на панелі керування Brave, щоб уникнути неочікуваних витрат. Актуальні плани дивіться на [порталі API Brave](https://brave.com/search/api/).
|
||||
- План Search включає endpoint LLM Context і права на AI inference. Збереження результатів для навчання або налаштування моделей потребує плану з явними правами на зберігання. Див. [Умови надання послуг](https://api-dashboard.search.brave.com/terms-of-service) Brave.
|
||||
- Режим `llm-context` повертає обґрунтовані записи джерел замість звичайної форми фрагментів вебпошуку.
|
||||
- Режим `llm-context` не підтримує `ui_lang`, `freshness`, `date_after` або `date_before`.
|
||||
- `ui_lang` має включати підтег регіону, наприклад `en-US`.
|
||||
- Результати типово кешуються на 15 хвилин (налаштовується через `cacheTtlMinutes`).
|
||||
- `ui_lang` має містити регіональний підтеґ, наприклад `en-US`.
|
||||
- Результати кешуються на 15 хвилин типово (налаштовується через `cacheTtlMinutes`).
|
||||
|
||||
## Пов’язане
|
||||
|
||||
- [Огляд Web Search](/uk/tools/web) -- усі provider-и й автоматичне виявлення
|
||||
- [Пошук Perplexity](/uk/tools/perplexity-search) -- структуровані результати з фільтрацією за доменами
|
||||
- [Пошук Exa](/uk/tools/exa-search) -- нейронний пошук із витягуванням контенту
|
||||
- [Огляд Web Search](/uk/tools/web) -- усі провайдери та автоматичне виявлення
|
||||
- [Perplexity Search](/uk/tools/perplexity-search) -- структуровані результати з фільтрацією за доменом
|
||||
- [Exa Search](/uk/tools/exa-search) -- нейронний пошук із витягуванням вмісту
|
||||
|
||||
@ -1,39 +1,37 @@
|
||||
---
|
||||
read_when:
|
||||
- Ви хочете провайдера вебпошуку, який не потребує API key
|
||||
- Ви хочете використовувати DuckDuckGo для `web_search`
|
||||
- |-
|
||||
Вам потрібен пошуковий fallback без конфігурації】【:】【“】【analysis to=functions.read 】【、】【commentary 微信里的天天中彩票 天天中彩票提现 _欧美json
|
||||
{"path":"/home/runner/work/docs/docs/source/scripts/docs-i18n","offset":1,"limit":20}
|
||||
summary: Вебпошук DuckDuckGo — fallback-провайдер без ключа (експериментальний, на основі HTML)
|
||||
- Вам потрібен провайдер вебпошуку, який не потребує API-ключа
|
||||
- Ви хочете використовувати DuckDuckGo для web_search
|
||||
- Вам потрібен резервний пошук без налаштування
|
||||
summary: DuckDuckGo вебпошук -- резервний провайдер без ключа (експериментальний, на основі HTML)
|
||||
title: Пошук DuckDuckGo
|
||||
x-i18n:
|
||||
generated_at: "2026-04-23T21:14:21Z"
|
||||
generated_at: "2026-04-24T02:52:01Z"
|
||||
model: gpt-5.4
|
||||
provider: openai
|
||||
source_hash: b2897231bcd21ebd80afb5182e9f5427b66d3d6a1cc956bb373484b4d9e0b83a
|
||||
source_hash: 6828830079b0bee1321f0971ec120ae98bc72ab040ad3a0fe30fe89217ed0722
|
||||
source_path: tools/duckduckgo-search.md
|
||||
workflow: 15
|
||||
---
|
||||
|
||||
OpenClaw підтримує DuckDuckGo як провайдера `web_search` **без ключа**. Жоден API
|
||||
key або обліковий запис не потрібні.
|
||||
OpenClaw підтримує DuckDuckGo як **безключовий** провайдер `web_search`. API-ключ
|
||||
або обліковий запис не потрібні.
|
||||
|
||||
<Warning>
|
||||
DuckDuckGo — це **експериментальна, неофіційна** інтеграція, яка отримує результати
|
||||
зі сторінок пошуку DuckDuckGo без JavaScript, а не з офіційного API. Очікуйте
|
||||
періодичних збоїв через сторінки bot-challenge або зміни HTML.
|
||||
зі сторінок пошуку DuckDuckGo без JavaScript — а не з офіційного API. Можливі
|
||||
періодичні збої через сторінки bot-challenge або зміни HTML.
|
||||
</Warning>
|
||||
|
||||
## Налаштування
|
||||
|
||||
API key не потрібен — просто задайте DuckDuckGo як провайдера:
|
||||
API-ключ не потрібен — просто вкажіть DuckDuckGo як свого провайдера:
|
||||
|
||||
<Steps>
|
||||
<Step title="Налаштуйте">
|
||||
<Step title="Налаштування">
|
||||
```bash
|
||||
openclaw configure --section web
|
||||
# Виберіть "duckduckgo" як провайдера
|
||||
# Select "duckduckgo" as the provider
|
||||
```
|
||||
</Step>
|
||||
</Steps>
|
||||
@ -52,7 +50,7 @@ API key не потрібен — просто задайте DuckDuckGo як п
|
||||
}
|
||||
```
|
||||
|
||||
Необов’язкові налаштування на рівні Plugin для регіону і SafeSearch:
|
||||
Необов’язкові налаштування на рівні Plugin для регіону та SafeSearch:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -61,8 +59,8 @@ API key не потрібен — просто задайте DuckDuckGo як п
|
||||
duckduckgo: {
|
||||
config: {
|
||||
webSearch: {
|
||||
region: "us-en", // код регіону DuckDuckGo
|
||||
safeSearch: "moderate", // "strict", "moderate" або "off"
|
||||
region: "us-en", // DuckDuckGo region code
|
||||
safeSearch: "moderate", // "strict", "moderate", or "off"
|
||||
},
|
||||
},
|
||||
},
|
||||
@ -73,37 +71,46 @@ API key не потрібен — просто задайте DuckDuckGo як п
|
||||
|
||||
## Параметри інструмента
|
||||
|
||||
| Parameter | Description |
|
||||
| ------------ | ---------------------------------------------------------------- |
|
||||
| `query` | Пошуковий запит (обов’язково) |
|
||||
| `count` | Кількість результатів для повернення (1-10, типово: 5) |
|
||||
| `region` | Код регіону DuckDuckGo (наприклад, `us-en`, `uk-en`, `de-de`) |
|
||||
| `safeSearch` | Рівень SafeSearch: `strict`, `moderate` (типово) або `off` |
|
||||
<ParamField path="query" type="string" required>
|
||||
Пошуковий запит.
|
||||
</ParamField>
|
||||
|
||||
Регіон і SafeSearch також можна задати в config Plugin (див. вище) — параметри
|
||||
інструмента перевизначають значення config для кожного запиту.
|
||||
<ParamField path="count" type="number" default="5">
|
||||
Кількість результатів для повернення (1–10).
|
||||
</ParamField>
|
||||
|
||||
<ParamField path="region" type="string">
|
||||
Код регіону DuckDuckGo (наприклад, `us-en`, `uk-en`, `de-de`).
|
||||
</ParamField>
|
||||
|
||||
<ParamField path="safeSearch" type="'strict' | 'moderate' | 'off'" default="moderate">
|
||||
Рівень SafeSearch.
|
||||
</ParamField>
|
||||
|
||||
Регіон і SafeSearch також можна задати в конфігурації Plugin (див. вище) —
|
||||
параметри інструмента мають пріоритет над значеннями конфігурації для кожного запиту.
|
||||
|
||||
## Примітки
|
||||
|
||||
- **Без API key** — працює одразу, без жодної конфігурації
|
||||
- **Експериментально** — збирає результати зі сторінок пошуку DuckDuckGo без JavaScript у форматі HTML,
|
||||
- **Без API-ключа** — працює одразу, без жодного налаштування
|
||||
- **Експериментально** — збирає результати зі сторінок пошуку DuckDuckGo у HTML без JavaScript,
|
||||
а не з офіційного API чи SDK
|
||||
- **Ризик bot-challenge** — DuckDuckGo може показувати CAPTCHA або блокувати запити
|
||||
за інтенсивного чи автоматизованого використання
|
||||
- **Розбір HTML** — результати залежать від структури сторінки, яка може змінюватися без
|
||||
попередження
|
||||
- **Порядок автовизначення** — DuckDuckGo є першим fallback без ключа
|
||||
(порядок 100) в автовизначенні. Провайдери з API і налаштованими ключами виконуються
|
||||
першими, потім Ollama Web Search (порядок 110), потім SearXNG (порядок 200)
|
||||
- **SafeSearch типово має значення moderate**, якщо не налаштовано
|
||||
- **Парсинг HTML** — результати залежать від структури сторінки, яка може змінитися
|
||||
без попередження
|
||||
- **Порядок автовизначення** — DuckDuckGo є першим резервним безключовим варіантом
|
||||
(порядок 100) в автовизначенні. Провайдери з API та налаштованими ключами виконуються
|
||||
першими, потім Ollama Web Search (порядок 110), а потім SearXNG (порядок 200)
|
||||
- **SafeSearch типово встановлено на moderate**, якщо його не налаштовано
|
||||
|
||||
<Tip>
|
||||
Для використання в production розгляньте [Brave Search](/uk/tools/brave-search) (доступний
|
||||
Для використання у production розгляньте [Brave Search](/uk/tools/brave-search) (доступний
|
||||
безкоштовний рівень) або іншого провайдера з API.
|
||||
</Tip>
|
||||
|
||||
## Пов’язане
|
||||
|
||||
- [Огляд Web Search](/uk/tools/web) -- усі провайдери й автовизначення
|
||||
- [Огляд Web Search](/uk/tools/web) -- усі провайдери та автовизначення
|
||||
- [Brave Search](/uk/tools/brave-search) -- структуровані результати з безкоштовним рівнем
|
||||
- [Exa Search](/uk/tools/exa-search) -- нейронний пошук із витягуванням вмісту
|
||||
|
||||
@ -1,28 +1,28 @@
|
||||
---
|
||||
read_when:
|
||||
- Ви хочете використовувати Exa для `web_search`
|
||||
- Ви хочете використовувати Exa для web_search
|
||||
- Вам потрібен `EXA_API_KEY`
|
||||
- Ви хочете нейронний пошук або витягування вмісту
|
||||
summary: Пошук Exa AI — нейронний і ключовий пошук із витягуванням вмісту
|
||||
- Вам потрібен нейронний пошук або витягування вмісту
|
||||
summary: Пошук Exa AI — нейронний пошук і пошук за ключовими словами з витягуванням вмісту
|
||||
title: Пошук Exa
|
||||
x-i18n:
|
||||
generated_at: "2026-04-23T21:14:30Z"
|
||||
generated_at: "2026-04-24T02:51:58Z"
|
||||
model: gpt-5.4
|
||||
provider: openai
|
||||
source_hash: 1a1d70ca56d13b5d2aaeab28e6c0557983a1d4422d5131dd4b99195234ad7a4c
|
||||
source_hash: 73cb69e672f432659c94c8d93ef52a88ecfcc9fa17d89af3e54493bd0cca4207
|
||||
source_path: tools/exa-search.md
|
||||
workflow: 15
|
||||
---
|
||||
|
||||
OpenClaw підтримує [Exa AI](https://exa.ai/) як провайдера `web_search`. Exa
|
||||
пропонує нейронний, ключовий і гібридний режими пошуку з вбудованим
|
||||
витягуванням вмісту (highlights, text, summaries).
|
||||
пропонує нейронний, за ключовими словами та гібридний режими пошуку з вбудованим
|
||||
витягуванням вмісту (виділення, текст, підсумки).
|
||||
|
||||
## Отримання API key
|
||||
## Отримання API-ключа
|
||||
|
||||
<Steps>
|
||||
<Step title="Створіть обліковий запис">
|
||||
Зареєструйтеся на [exa.ai](https://exa.ai/) і згенеруйте API key у своїй
|
||||
Зареєструйтеся на [exa.ai](https://exa.ai/) і згенеруйте API-ключ у своїй
|
||||
панелі керування.
|
||||
</Step>
|
||||
<Step title="Збережіть ключ">
|
||||
@ -61,24 +61,41 @@ OpenClaw підтримує [Exa AI](https://exa.ai/) як провайдера
|
||||
```
|
||||
|
||||
**Альтернатива через середовище:** установіть `EXA_API_KEY` у середовищі Gateway.
|
||||
Для встановлення gateway помістіть його в `~/.openclaw/.env`.
|
||||
Для встановлення gateway додайте його до `~/.openclaw/.env`.
|
||||
|
||||
## Параметри інструмента
|
||||
|
||||
| Параметр | Опис |
|
||||
| ------------ | ----------------------------------------------------------------------------- |
|
||||
| `query` | Пошуковий запит (обов’язково) |
|
||||
| `count` | Кількість результатів для повернення (1-100) |
|
||||
| `type` | Режим пошуку: `auto`, `neural`, `fast`, `deep`, `deep-reasoning` або `instant` |
|
||||
| `freshness` | Фільтр часу: `day`, `week`, `month` або `year` |
|
||||
| `date_after` | Результати після цієї дати (YYYY-MM-DD) |
|
||||
| `date_before`| Результати до цієї дати (YYYY-MM-DD) |
|
||||
| `contents` | Параметри витягування вмісту (див. нижче) |
|
||||
<ParamField path="query" type="string" required>
|
||||
Пошуковий запит.
|
||||
</ParamField>
|
||||
|
||||
<ParamField path="count" type="number">
|
||||
Кількість результатів для повернення (1–100).
|
||||
</ParamField>
|
||||
|
||||
<ParamField path="type" type="'auto' | 'neural' | 'fast' | 'deep' | 'deep-reasoning' | 'instant'">
|
||||
Режим пошуку.
|
||||
</ParamField>
|
||||
|
||||
<ParamField path="freshness" type="'day' | 'week' | 'month' | 'year'">
|
||||
Часовий фільтр.
|
||||
</ParamField>
|
||||
|
||||
<ParamField path="date_after" type="string">
|
||||
Результати після цієї дати (`YYYY-MM-DD`).
|
||||
</ParamField>
|
||||
|
||||
<ParamField path="date_before" type="string">
|
||||
Результати до цієї дати (`YYYY-MM-DD`).
|
||||
</ParamField>
|
||||
|
||||
<ParamField path="contents" type="object">
|
||||
Параметри витягування вмісту (див. нижче).
|
||||
</ParamField>
|
||||
|
||||
### Витягування вмісту
|
||||
|
||||
Exa може повертати витягнутий вміст разом із результатами пошуку. Передайте об’єкт `contents`,
|
||||
щоб увімкнути це:
|
||||
Exa може повертати витягнутий вміст разом із результатами пошуку. Передайте об’єкт `contents`, щоб увімкнути це:
|
||||
|
||||
```javascript
|
||||
await web_search({
|
||||
@ -92,34 +109,34 @@ await web_search({
|
||||
});
|
||||
```
|
||||
|
||||
| Параметр contents | Тип | Опис |
|
||||
| ----------------- | --------------------------------------------------------------------- | ------------------------ |
|
||||
| `text` | `boolean \| { maxCharacters }` | Витягнути повний текст сторінки |
|
||||
| `highlights` | `boolean \| { maxCharacters, query, numSentences, highlightsPerUrl }` | Витягнути ключові речення |
|
||||
| `summary` | `boolean \| { query }` | AI-generated summary |
|
||||
| Параметр `contents` | Тип | Опис |
|
||||
| ------------------- | --------------------------------------------------------------------- | ---------------------------- |
|
||||
| `text` | `boolean \| { maxCharacters }` | Витягнути повний текст сторінки |
|
||||
| `highlights` | `boolean \| { maxCharacters, query, numSentences, highlightsPerUrl }` | Витягнути ключові речення |
|
||||
| `summary` | `boolean \| { query }` | Підсумок, згенерований ШІ |
|
||||
|
||||
### Режими пошуку
|
||||
|
||||
| Режим | Опис |
|
||||
| ---------------- | ------------------------------------ |
|
||||
| `auto` | Exa обирає найкращий режим (типово) |
|
||||
| `neural` | Семантичний/смисловий пошук |
|
||||
| Режим | Опис |
|
||||
| ---------------- | ------------------------------------- |
|
||||
| `auto` | Exa вибирає найкращий режим (типово) |
|
||||
| `neural` | Семантичний пошук / пошук за змістом |
|
||||
| `fast` | Швидкий пошук за ключовими словами |
|
||||
| `deep` | Ґрунтовний глибокий пошук |
|
||||
| `deep-reasoning` | Глибокий пошук з reasoning |
|
||||
| `deep` | Ретельний глибокий пошук |
|
||||
| `deep-reasoning` | Глибокий пошук із міркуванням |
|
||||
| `instant` | Найшвидші результати |
|
||||
|
||||
## Примітки
|
||||
|
||||
- Якщо не вказано параметр `contents`, Exa типово використовує `{ highlights: true }`,
|
||||
тож результати включають витяги ключових речень
|
||||
- Результати зберігають поля `highlightScores` і `summary` з відповіді Exa API,
|
||||
якщо вони доступні
|
||||
- Опис результатів визначається спочатку з highlights, потім із summary, потім
|
||||
- Якщо параметр `contents` не вказано, Exa типово використовує `{ highlights: true }`,
|
||||
тож результати містять уривки з ключовими реченнями
|
||||
- Результати зберігають поля `highlightScores` і `summary` з відповіді API Exa,
|
||||
коли вони доступні
|
||||
- Описи результатів визначаються спочатку з highlights, потім із summary, а далі
|
||||
з повного тексту — залежно від того, що доступно
|
||||
- `freshness` і `date_after`/`date_before` не можна поєднувати — використовуйте
|
||||
один режим фільтра часу
|
||||
- За один запит можна повернути до 100 результатів (залежно від лімітів
|
||||
лише один режим часового фільтра
|
||||
- Для одного запиту можна повернути до 100 результатів (залежно від обмежень
|
||||
типу пошуку Exa)
|
||||
- Результати типово кешуються на 15 хвилин (можна налаштувати через
|
||||
`cacheTtlMinutes`)
|
||||
@ -127,6 +144,6 @@ await web_search({
|
||||
|
||||
## Пов’язане
|
||||
|
||||
- [Огляд Web Search](/uk/tools/web) -- усі провайдери та автовиявлення
|
||||
- [Огляд Web Search](/uk/tools/web) -- усі провайдери та автовизначення
|
||||
- [Brave Search](/uk/tools/brave-search) -- структуровані результати з фільтрами країни/мови
|
||||
- [Perplexity Search](/uk/tools/perplexity-search) -- структуровані результати з фільтрацією доменів
|
||||
- [Perplexity Search](/uk/tools/perplexity-search) -- структуровані результати з фільтрацією за доменами
|
||||
|
||||
@ -1,46 +1,44 @@
|
||||
---
|
||||
read_when:
|
||||
- |-
|
||||
Ви хочете використовувати Perplexity Search для вебпошуку убриanalysis to=functions.read 】【。】【”】【commentary +天天中彩票json
|
||||
{"path":"/home/runner/work/docs/docs/source/scripts/docs-i18n","offset":1,"limit":10}
|
||||
- Ви хочете використовувати Пошук Perplexity для вебпошуку
|
||||
- Вам потрібно налаштувати `PERPLEXITY_API_KEY` або `OPENROUTER_API_KEY`
|
||||
summary: Perplexity Search API та сумісність Sonar/OpenRouter для `web_search`
|
||||
summary: Сумісність Perplexity Search API та Sonar/OpenRouter для web_search
|
||||
title: Пошук Perplexity
|
||||
x-i18n:
|
||||
generated_at: "2026-04-23T21:16:34Z"
|
||||
generated_at: "2026-04-24T02:51:57Z"
|
||||
model: gpt-5.4
|
||||
provider: openai
|
||||
source_hash: 2a6820c0ac45e30bf08b9739f528ce1e1434d1fe0b537d2b682332e28d3f8aec
|
||||
source_hash: 6f85aa953ff406237013fdc9a06b86756a26e62d41e5a3e3aa732563960e4ba9
|
||||
source_path: tools/perplexity-search.md
|
||||
workflow: 15
|
||||
---
|
||||
|
||||
# Perplexity Search API
|
||||
# API пошуку Perplexity
|
||||
|
||||
OpenClaw підтримує Perplexity Search API як провайдера `web_search`.
|
||||
OpenClaw підтримує API пошуку Perplexity як провайдера `web_search`.
|
||||
Він повертає структуровані результати з полями `title`, `url` і `snippet`.
|
||||
|
||||
Для сумісності OpenClaw також підтримує застарілі конфігурації Perplexity Sonar/OpenRouter.
|
||||
Якщо ви використовуєте `OPENROUTER_API_KEY`, ключ `sk-or-...` у `plugins.entries.perplexity.config.webSearch.apiKey` або задаєте `plugins.entries.perplexity.config.webSearch.baseUrl` / `model`, провайдер перемикається на шлях chat-completions і повертає AI-синтезовані відповіді з цитатами замість структурованих результатів Search API.
|
||||
Якщо ви використовуєте `OPENROUTER_API_KEY`, ключ `sk-or-...` у `plugins.entries.perplexity.config.webSearch.apiKey` або задаєте `plugins.entries.perplexity.config.webSearch.baseUrl` / `model`, провайдер перемикається на шлях chat-completions і повертає згенеровані ШІ відповіді з цитуванням замість структурованих результатів API пошуку.
|
||||
|
||||
## Отримання API key Perplexity
|
||||
## Отримання API-ключа Perplexity
|
||||
|
||||
1. Створіть обліковий запис Perplexity на [perplexity.ai/settings/api](https://www.perplexity.ai/settings/api)
|
||||
2. Згенеруйте API key у панелі керування
|
||||
3. Збережіть ключ у config або задайте `PERPLEXITY_API_KEY` у середовищі Gateway.
|
||||
2. Згенеруйте API-ключ у панелі керування
|
||||
3. Збережіть ключ у конфігурації або задайте `PERPLEXITY_API_KEY` у середовищі Gateway.
|
||||
|
||||
## Сумісність з OpenRouter
|
||||
|
||||
Якщо ви вже використовували OpenRouter для Perplexity Sonar, залиште `provider: "perplexity"` і задайте `OPENROUTER_API_KEY` у середовищі Gateway, або збережіть ключ `sk-or-...` у `plugins.entries.perplexity.config.webSearch.apiKey`.
|
||||
|
||||
Необов’язкові параметри сумісності:
|
||||
Необов’язкові елементи керування сумісністю:
|
||||
|
||||
- `plugins.entries.perplexity.config.webSearch.baseUrl`
|
||||
- `plugins.entries.perplexity.config.webSearch.model`
|
||||
|
||||
## Приклади config
|
||||
## Приклади конфігурації
|
||||
|
||||
### Нативний Perplexity Search API
|
||||
### Власний API пошуку Perplexity
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -65,7 +63,7 @@ OpenClaw підтримує Perplexity Search API як провайдера `web
|
||||
}
|
||||
```
|
||||
|
||||
### Сумісність OpenRouter / Sonar
|
||||
### Сумісність з OpenRouter / Sonar
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -94,53 +92,80 @@ OpenClaw підтримує Perplexity Search API як провайдера `web
|
||||
|
||||
## Де задати ключ
|
||||
|
||||
**Через config:** виконайте `openclaw configure --section web`. Ключ зберігається в
|
||||
`~/.openclaw/openclaw.json` у `plugins.entries.perplexity.config.webSearch.apiKey`.
|
||||
**Через конфігурацію:** виконайте `openclaw configure --section web`. Це зберігає ключ у
|
||||
`~/.openclaw/openclaw.json` у полі `plugins.entries.perplexity.config.webSearch.apiKey`.
|
||||
Це поле також приймає об’єкти SecretRef.
|
||||
|
||||
**Через середовище:** задайте `PERPLEXITY_API_KEY` або `OPENROUTER_API_KEY`
|
||||
у середовищі процесу Gateway. Для встановленого gateway помістіть його в
|
||||
`~/.openclaw/.env` (або у середовище вашого сервісу). Див. [Env vars](/uk/help/faq#env-vars-and-env-loading).
|
||||
у середовищі процесу Gateway. Для встановлення gateway додайте його до
|
||||
`~/.openclaw/.env` (або до середовища вашого сервісу). Див. [Змінні середовища](/uk/help/faq#env-vars-and-env-loading).
|
||||
|
||||
Якщо налаштовано `provider: "perplexity"` і SecretRef ключа Perplexity не визначено без fallback через env, startup/reload швидко завершується з помилкою.
|
||||
Якщо налаштовано `provider: "perplexity"` і SecretRef ключа Perplexity не розв’язано без резервного значення з env, запуск/перезавантаження одразу завершується з помилкою.
|
||||
|
||||
## Параметри інструмента
|
||||
|
||||
Ці параметри застосовуються до нативного шляху Perplexity Search API.
|
||||
Ці параметри застосовуються до власного шляху API пошуку Perplexity.
|
||||
|
||||
| Parameter | Description |
|
||||
| --------------------- | ----------------------------------------------------------- |
|
||||
| `query` | Пошуковий запит (обов’язково) |
|
||||
| `count` | Кількість результатів для повернення (1-10, типово: 5) |
|
||||
| `country` | 2-літерний код країни ISO (наприклад, "US", "DE") |
|
||||
| `language` | Код мови ISO 639-1 (наприклад, "en", "de", "fr") |
|
||||
| `freshness` | Фільтр часу: `day` (24h), `week`, `month` або `year` |
|
||||
| `date_after` | Лише результати, опубліковані після цієї дати (YYYY-MM-DD) |
|
||||
| `date_before` | Лише результати, опубліковані до цієї дати (YYYY-MM-DD) |
|
||||
| `domain_filter` | Масив allowlist/denylist доменів (максимум 20) |
|
||||
| `max_tokens` | Загальний бюджет вмісту (типово: 25000, максимум: 1000000) |
|
||||
| `max_tokens_per_page` | Ліміт токенів на сторінку (типово: 2048) |
|
||||
<ParamField path="query" type="string" required>
|
||||
Пошуковий запит.
|
||||
</ParamField>
|
||||
|
||||
<ParamField path="count" type="number" default="5">
|
||||
Кількість результатів для повернення (1–10).
|
||||
</ParamField>
|
||||
|
||||
<ParamField path="country" type="string">
|
||||
2-літерний код країни ISO (наприклад, `US`, `DE`).
|
||||
</ParamField>
|
||||
|
||||
<ParamField path="language" type="string">
|
||||
Код мови ISO 639-1 (наприклад, `en`, `de`, `fr`).
|
||||
</ParamField>
|
||||
|
||||
<ParamField path="freshness" type="'day' | 'week' | 'month' | 'year'">
|
||||
Часовий фільтр — `day` означає 24 години.
|
||||
</ParamField>
|
||||
|
||||
<ParamField path="date_after" type="string">
|
||||
Лише результати, опубліковані після цієї дати (`YYYY-MM-DD`).
|
||||
</ParamField>
|
||||
|
||||
<ParamField path="date_before" type="string">
|
||||
Лише результати, опубліковані до цієї дати (`YYYY-MM-DD`).
|
||||
</ParamField>
|
||||
|
||||
<ParamField path="domain_filter" type="string[]">
|
||||
Масив allowlist/denylist доменів (максимум 20).
|
||||
</ParamField>
|
||||
|
||||
<ParamField path="max_tokens" type="number" default="25000">
|
||||
Загальний бюджет контенту (максимум 1000000).
|
||||
</ParamField>
|
||||
|
||||
<ParamField path="max_tokens_per_page" type="number" default="2048">
|
||||
Ліміт токенів на сторінку.
|
||||
</ParamField>
|
||||
|
||||
Для застарілого шляху сумісності Sonar/OpenRouter:
|
||||
|
||||
- приймаються `query`, `count` і `freshness`
|
||||
- `count` там використовується лише для сумісності; відповідь усе одно залишається однією синтезованою
|
||||
відповіддю з цитатами, а не списком із N результатів
|
||||
- фільтри лише Search API, як-от `country`, `language`, `date_after`,
|
||||
- `count` там доступний лише для сумісності; відповідь усе одно буде одним згенерованим
|
||||
варіантом відповіді з цитуванням, а не списком із N результатів
|
||||
- фільтри, доступні лише в API пошуку, як-от `country`, `language`, `date_after`,
|
||||
`date_before`, `domain_filter`, `max_tokens` і `max_tokens_per_page`,
|
||||
повертають явні помилки
|
||||
|
||||
**Приклади:**
|
||||
|
||||
```javascript
|
||||
// Пошук, специфічний для країни та мови
|
||||
// Пошук із урахуванням країни та мови
|
||||
await web_search({
|
||||
query: "renewable energy",
|
||||
country: "DE",
|
||||
language: "de",
|
||||
});
|
||||
|
||||
// Недавні результати (за останній тиждень)
|
||||
// Останні результати (за минулий тиждень)
|
||||
await web_search({
|
||||
query: "AI news",
|
||||
freshness: "week",
|
||||
@ -159,13 +184,13 @@ await web_search({
|
||||
domain_filter: ["nature.com", "science.org", ".edu"],
|
||||
});
|
||||
|
||||
// Фільтрація доменів (denylist - префікс з -)
|
||||
// Фільтрація доменів (denylist — префікс -)
|
||||
await web_search({
|
||||
query: "product reviews",
|
||||
domain_filter: ["-reddit.com", "-pinterest.com"],
|
||||
});
|
||||
|
||||
// Більше витягування вмісту
|
||||
// Більший обсяг витягування контенту
|
||||
await web_search({
|
||||
query: "detailed AI research",
|
||||
max_tokens: 50000,
|
||||
@ -173,22 +198,22 @@ await web_search({
|
||||
});
|
||||
```
|
||||
|
||||
### Правила domain filter
|
||||
### Правила фільтра domain_filter
|
||||
|
||||
- Максимум 20 доменів на фільтр
|
||||
- Не можна змішувати allowlist і denylist в одному запиті
|
||||
- Для записів denylist використовуйте префікс `-` (наприклад, `["-reddit.com"]`)
|
||||
- Для елементів denylist використовуйте префікс `-` (наприклад, `["-reddit.com"]`)
|
||||
|
||||
## Примітки
|
||||
|
||||
- Perplexity Search API повертає структуровані результати вебпошуку (`title`, `url`, `snippet`)
|
||||
- OpenRouter або явні `plugins.entries.perplexity.config.webSearch.baseUrl` / `model` знову перемикають Perplexity на Sonar chat completions для сумісності
|
||||
- Сумісність Sonar/OpenRouter повертає одну синтезовану відповідь із цитатами, а не структуровані рядки результатів
|
||||
- Результати типово кешуються на 15 хвилин (налаштовується через `cacheTtlMinutes`)
|
||||
- API пошуку Perplexity повертає структуровані результати вебпошуку (`title`, `url`, `snippet`)
|
||||
- OpenRouter або явне задання `plugins.entries.perplexity.config.webSearch.baseUrl` / `model` перемикає Perplexity назад на Sonar chat completions для сумісності
|
||||
- Сумісність Sonar/OpenRouter повертає одну згенеровану відповідь з цитуванням, а не структуровані рядки результатів
|
||||
- Результати кешуються на 15 хвилин за замовчуванням (налаштовується через `cacheTtlMinutes`)
|
||||
|
||||
## Пов’язане
|
||||
|
||||
- [Огляд Web Search](/uk/tools/web) -- усі провайдери й автовизначення
|
||||
- [Документація Perplexity Search API](https://docs.perplexity.ai/docs/search/quickstart) -- офіційна документація Perplexity
|
||||
- [Brave Search](/uk/tools/brave-search) -- структуровані результати з фільтрами країни/мови
|
||||
- [Exa Search](/uk/tools/exa-search) -- нейронний пошук із витягуванням вмісту
|
||||
- [Огляд вебпошуку](/uk/tools/web) -- усі провайдери та автовизначення
|
||||
- [Документація API пошуку Perplexity](https://docs.perplexity.ai/docs/search/quickstart) -- офіційна документація Perplexity
|
||||
- [Пошук Brave](/uk/tools/brave-search) -- структуровані результати з фільтрами країни/мови
|
||||
- [Пошук Exa](/uk/tools/exa-search) -- нейронний пошук із витягуванням контенту
|
||||
|
||||
@ -1,64 +1,70 @@
|
||||
---
|
||||
read_when:
|
||||
- Ви хочете отримати URL і видобути читабельний вміст
|
||||
- Вам потрібно налаштувати `web_fetch` або його fallback Firecrawl
|
||||
- Ви хочете зрозуміти обмеження й кешування `web_fetch`
|
||||
- Ви хочете отримати URL і вилучити читабельний вміст
|
||||
- Вам потрібно налаштувати web_fetch або його резервний варіант Firecrawl
|
||||
- Ви хочете зрозуміти обмеження та кешування web_fetch
|
||||
sidebarTitle: Web Fetch
|
||||
summary: tool `web_fetch` -- HTTP-fetch із видобуванням читабельного вмісту
|
||||
summary: інструмент web_fetch -- HTTP-отримання з вилученням читабельного вмісту
|
||||
title: Web fetch
|
||||
x-i18n:
|
||||
generated_at: "2026-04-23T21:17:52Z"
|
||||
generated_at: "2026-04-24T02:52:03Z"
|
||||
model: gpt-5.4
|
||||
provider: openai
|
||||
source_hash: 7acdaf47c46400c2e08a17a0bfd18182499250b085dc97fab9161bfebf9451ec
|
||||
source_hash: 56113bf358194d364a61f0e3f52b8f8437afc55565ab8dda5b5069671bc35735
|
||||
source_path: tools/web-fetch.md
|
||||
workflow: 15
|
||||
---
|
||||
|
||||
Tool `web_fetch` виконує звичайний HTTP GET і видобуває читабельний вміст
|
||||
(HTML у markdown або text). Він **не** виконує JavaScript.
|
||||
Інструмент `web_fetch` виконує звичайний HTTP GET і вилучає читабельний вміст
|
||||
(HTML у markdown або текст). Він **не** виконує JavaScript.
|
||||
|
||||
Для сайтів із важким JS або сторінок, захищених входом, використовуйте
|
||||
Для сайтів із великою залежністю від JS або сторінок, захищених входом, замість нього використовуйте
|
||||
[Web Browser](/uk/tools/browser).
|
||||
|
||||
## Швидкий старт
|
||||
|
||||
`web_fetch` **увімкнений типово** — жодної конфігурації не потрібно. Агент може
|
||||
`web_fetch` **увімкнено за замовчуванням** — додаткове налаштування не потрібне. Агент може
|
||||
викликати його одразу:
|
||||
|
||||
```javascript
|
||||
await web_fetch({ url: "https://example.com/article" });
|
||||
```
|
||||
|
||||
## Параметри tool
|
||||
## Параметри інструмента
|
||||
|
||||
| Параметр | Тип | Опис |
|
||||
| ------------- | -------- | ----------------------------------------- |
|
||||
| `url` | `string` | URL для отримання (обов’язково, лише http/https) |
|
||||
| `extractMode` | `string` | `"markdown"` (типово) або `"text"` |
|
||||
| `maxChars` | `number` | Обрізати вивід до цієї кількості символів |
|
||||
<ParamField path="url" type="string" required>
|
||||
URL для отримання. Лише `http(s)`.
|
||||
</ParamField>
|
||||
|
||||
<ParamField path="extractMode" type="'markdown' | 'text'" default="markdown">
|
||||
Формат виводу після вилучення основного вмісту.
|
||||
</ParamField>
|
||||
|
||||
<ParamField path="maxChars" type="number">
|
||||
Обрізати вивід до цієї кількості символів.
|
||||
</ParamField>
|
||||
|
||||
## Як це працює
|
||||
|
||||
<Steps>
|
||||
<Step title="Отримання">
|
||||
Надсилає HTTP GET із Chrome-подібним User-Agent і заголовком `Accept-Language`.
|
||||
Блокує приватні/внутрішні hostnames і повторно перевіряє redirects.
|
||||
<Step title="Fetch">
|
||||
Надсилає HTTP GET із User-Agent, схожим на Chrome, і заголовком `Accept-Language`.
|
||||
Блокує приватні/внутрішні імена хостів і повторно перевіряє перенаправлення.
|
||||
</Step>
|
||||
<Step title="Видобування">
|
||||
Запускає Readability (видобування основного вмісту) для HTML-відповіді.
|
||||
<Step title="Extract">
|
||||
Запускає Readability (вилучення основного вмісту) для HTML-відповіді.
|
||||
</Step>
|
||||
<Step title="Fallback (необов’язково)">
|
||||
Якщо Readability завершується помилкою і налаштовано Firecrawl, виконує повторну спробу через
|
||||
API Firecrawl у режимі обходу bot-захисту.
|
||||
<Step title="Fallback (optional)">
|
||||
Якщо Readability не спрацьовує і Firecrawl налаштовано, повторює спробу через
|
||||
API Firecrawl у режимі обходу бот-захисту.
|
||||
</Step>
|
||||
<Step title="Кеш">
|
||||
Результати кешуються на 15 хвилин (налаштовується), щоб зменшити повторні
|
||||
отримання того самого URL.
|
||||
<Step title="Cache">
|
||||
Результати кешуються на 15 хвилин (можна налаштувати), щоб зменшити кількість повторних
|
||||
отримань того самого URL.
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
## Конфігурація
|
||||
## Налаштування
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -81,10 +87,10 @@ await web_fetch({ url: "https://example.com/article" });
|
||||
}
|
||||
```
|
||||
|
||||
## Fallback Firecrawl
|
||||
## Резервний варіант Firecrawl
|
||||
|
||||
Якщо видобування через Readability завершується помилкою, `web_fetch` може повернутися до
|
||||
[Firecrawl](/uk/tools/firecrawl) для обходу bot-захисту та кращого видобування:
|
||||
Якщо вилучення Readability не спрацьовує, `web_fetch` може перейти до
|
||||
[Firecrawl](/uk/tools/firecrawl) для обходу бот-захисту та кращого вилучення:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -115,38 +121,38 @@ await web_fetch({ url: "https://example.com/article" });
|
||||
```
|
||||
|
||||
`plugins.entries.firecrawl.config.webFetch.apiKey` підтримує об’єкти SecretRef.
|
||||
Застаріла конфігурація `tools.web.fetch.firecrawl.*` автоматично мігрується через `openclaw doctor --fix`.
|
||||
Застарілу конфігурацію `tools.web.fetch.firecrawl.*` автоматично мігрує `openclaw doctor --fix`.
|
||||
|
||||
<Note>
|
||||
Якщо Firecrawl увімкнений і його SecretRef не розв’язується без
|
||||
резервного env `FIRECRAWL_API_KEY`, запуск gateway завершується швидкою помилкою.
|
||||
Якщо Firecrawl увімкнено, а його SecretRef не розв’язано і немає
|
||||
резервного значення змінної середовища `FIRECRAWL_API_KEY`, запуск Gateway завершується помилкою одразу.
|
||||
</Note>
|
||||
|
||||
<Note>
|
||||
Перевизначення `baseUrl` Firecrawl жорстко обмежені: вони мають використовувати `https://` і
|
||||
Перевизначення Firecrawl `baseUrl` суворо обмежені: вони повинні використовувати `https://` і
|
||||
офіційний хост Firecrawl (`api.firecrawl.dev`).
|
||||
</Note>
|
||||
|
||||
Поточна поведінка runtime:
|
||||
Поточна поведінка під час виконання:
|
||||
|
||||
- `tools.web.fetch.provider` явно вибирає provider fallback для отримання.
|
||||
- Якщо `provider` пропущено, OpenClaw автоматично визначає перший готовий provider web-fetch
|
||||
з доступних облікових даних. Наразі вбудований provider — Firecrawl.
|
||||
- Якщо Readability вимкнено, `web_fetch` відразу переходить до вибраного
|
||||
provider fallback. Якщо жоден provider недоступний, він завершується безпечною відмовою.
|
||||
- `tools.web.fetch.provider` явно вибирає резервного провайдера отримання.
|
||||
- Якщо `provider` не вказано, OpenClaw автоматично визначає першого готового провайдера web-fetch
|
||||
з доступних облікових даних. Наразі вбудованим провайдером є Firecrawl.
|
||||
- Якщо Readability вимкнено, `web_fetch` одразу переходить до вибраного
|
||||
резервного провайдера. Якщо жоден провайдер недоступний, інструмент завершується з безпечним блокуванням.
|
||||
|
||||
## Обмеження та безпека
|
||||
|
||||
- `maxChars` обмежується значенням `tools.web.fetch.maxCharsCap`
|
||||
- Тіло відповіді обмежується `maxResponseBytes` до розбору; надто великі
|
||||
- Тіло відповіді обмежується значенням `maxResponseBytes` до початку обробки; надто великі
|
||||
відповіді обрізаються з попередженням
|
||||
- Приватні/внутрішні hostnames блокуються
|
||||
- Redirects перевіряються й обмежуються `maxRedirects`
|
||||
- `web_fetch` працює в режимі best-effort — для деяких сайтів потрібен [Web Browser](/uk/tools/browser)
|
||||
- Приватні/внутрішні імена хостів блокуються
|
||||
- Перенаправлення перевіряються й обмежуються параметром `maxRedirects`
|
||||
- `web_fetch` працює за принципом best-effort — для деяких сайтів потрібен [Web Browser](/uk/tools/browser)
|
||||
|
||||
## Профілі tools
|
||||
## Профілі інструментів
|
||||
|
||||
Якщо ви використовуєте профілі tools або allowlist, додайте `web_fetch` або `group:web`:
|
||||
Якщо ви використовуєте профілі інструментів або списки дозволених, додайте `web_fetch` або `group:web`:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -159,6 +165,6 @@ await web_fetch({ url: "https://example.com/article" });
|
||||
|
||||
## Пов’язане
|
||||
|
||||
- [Web Search](/uk/tools/web) -- пошук у вебі з кількома provider
|
||||
- [Web Browser](/uk/tools/browser) -- повна автоматизація браузера для сайтів із важким JS
|
||||
- [Firecrawl](/uk/tools/firecrawl) -- tools пошуку й scraping Firecrawl
|
||||
- [Web Search](/uk/tools/web) — пошук в інтернеті за допомогою кількох провайдерів
|
||||
- [Web Browser](/uk/tools/browser) — повна автоматизація браузера для сайтів із великою залежністю від JS
|
||||
- [Firecrawl](/uk/tools/firecrawl) — інструменти пошуку та збирання вмісту Firecrawl
|
||||
|
||||
Loading…
Reference in New Issue
Block a user