diff --git a/docs/uk/concepts/qa-e2e-automation.md b/docs/uk/concepts/qa-e2e-automation.md index 53b93badb..8f056da7e 100644 --- a/docs/uk/concepts/qa-e2e-automation.md +++ b/docs/uk/concepts/qa-e2e-automation.md @@ -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=` у лог-файл усередині репозиторію. +Цей 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=` на локальний щодо репозиторію файл логу. -Для 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 `, щоб налаштувати -кількість worker-процесів, або `--concurrency 1` для послідовного виконання. -Команда завершується з ненульовим кодом, якщо будь-який сценарій завершується невдачею. Використовуйте `--allow-failures`, коли +Він повторно використовує ту саму поведінку вибору сценаріїв, що й `qa suite` на хості. +Запуски suite на хості та в Multipass за замовчуванням виконують кілька вибраних +сценаріїв паралельно з ізольованими worker Gateway. Для `qa-channel` +типове значення concurrency — 4, обмежене кількістю вибраних сценаріїв. Використовуйте `--concurrency `, щоб налаштувати +кількість 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//*.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=`. `--thinking ` і далі задає -глобальне резервне значення, а старіша форма `--model-thinking ` -зберігається для сумісності. -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=`. `--thinking ` як і раніше задає +глобальне резервне значення, а старіша форма `--model-thinking ` збережена +для сумісності. +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) diff --git a/docs/uk/tools/brave-search.md b/docs/uk/tools/brave-search.md index af7caebdb..9736180f8 100644 --- a/docs/uk/tools/brave-search.md +++ b/docs/uk/tools/brave-search.md @@ -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) | + +Пошуковий запит. + + + +Кількість результатів для повернення (1–10). + + + +2-літерний код країни ISO (наприклад, `US`, `DE`). + + + +Код мови ISO 639-1 для результатів пошуку (наприклад, `en`, `de`, `fr`). + + + +Код мови пошуку Brave (наприклад, `en`, `en-gb`, `zh-hans`). + + + +Код мови ISO для елементів інтерфейсу. + + + +Фільтр часу — `day` означає 24 години. + + + +Лише результати, опубліковані після цієї дати (`YYYY-MM-DD`). + + + +Лише результати, опубліковані до цієї дати (`YYYY-MM-DD`). + **Приклади:** ```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) -- нейронний пошук із витягуванням вмісту diff --git a/docs/uk/tools/duckduckgo-search.md b/docs/uk/tools/duckduckgo-search.md index b15310cab..35a6fff84 100644 --- a/docs/uk/tools/duckduckgo-search.md +++ b/docs/uk/tools/duckduckgo-search.md @@ -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-ключ +або обліковий запис не потрібні. DuckDuckGo — це **експериментальна, неофіційна** інтеграція, яка отримує результати - зі сторінок пошуку DuckDuckGo без JavaScript, а не з офіційного API. Очікуйте - періодичних збоїв через сторінки bot-challenge або зміни HTML. + зі сторінок пошуку DuckDuckGo без JavaScript — а не з офіційного API. Можливі + періодичні збої через сторінки bot-challenge або зміни HTML. ## Налаштування -API key не потрібен — просто задайте DuckDuckGo як провайдера: +API-ключ не потрібен — просто вкажіть DuckDuckGo як свого провайдера: - + ```bash openclaw configure --section web - # Виберіть "duckduckgo" як провайдера + # Select "duckduckgo" as the provider ``` @@ -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` | + +Пошуковий запит. + -Регіон і SafeSearch також можна задати в config Plugin (див. вище) — параметри -інструмента перевизначають значення config для кожного запиту. + +Кількість результатів для повернення (1–10). + + + +Код регіону DuckDuckGo (наприклад, `us-en`, `uk-en`, `de-de`). + + + +Рівень SafeSearch. + + +Регіон і 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**, якщо його не налаштовано - Для використання в production розгляньте [Brave Search](/uk/tools/brave-search) (доступний + Для використання у production розгляньте [Brave Search](/uk/tools/brave-search) (доступний безкоштовний рівень) або іншого провайдера з API. ## Пов’язане -- [Огляд Web Search](/uk/tools/web) -- усі провайдери й автовизначення +- [Огляд Web Search](/uk/tools/web) -- усі провайдери та автовизначення - [Brave Search](/uk/tools/brave-search) -- структуровані результати з безкоштовним рівнем - [Exa Search](/uk/tools/exa-search) -- нейронний пошук із витягуванням вмісту diff --git a/docs/uk/tools/exa-search.md b/docs/uk/tools/exa-search.md index 154929898..2d2cd0340 100644 --- a/docs/uk/tools/exa-search.md +++ b/docs/uk/tools/exa-search.md @@ -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-ключа - Зареєструйтеся на [exa.ai](https://exa.ai/) і згенеруйте API key у своїй + Зареєструйтеся на [exa.ai](https://exa.ai/) і згенеруйте API-ключ у своїй панелі керування. @@ -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` | Параметри витягування вмісту (див. нижче) | + +Пошуковий запит. + + + +Кількість результатів для повернення (1–100). + + + +Режим пошуку. + + + +Часовий фільтр. + + + +Результати після цієї дати (`YYYY-MM-DD`). + + + +Результати до цієї дати (`YYYY-MM-DD`). + + + +Параметри витягування вмісту (див. нижче). + ### Витягування вмісту -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) -- структуровані результати з фільтрацією за доменами diff --git a/docs/uk/tools/perplexity-search.md b/docs/uk/tools/perplexity-search.md index ace01264a..87bdddb88 100644 --- a/docs/uk/tools/perplexity-search.md +++ b/docs/uk/tools/perplexity-search.md @@ -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) | + +Пошуковий запит. + + + +Кількість результатів для повернення (1–10). + + + +2-літерний код країни ISO (наприклад, `US`, `DE`). + + + +Код мови ISO 639-1 (наприклад, `en`, `de`, `fr`). + + + +Часовий фільтр — `day` означає 24 години. + + + +Лише результати, опубліковані після цієї дати (`YYYY-MM-DD`). + + + +Лише результати, опубліковані до цієї дати (`YYYY-MM-DD`). + + + +Масив allowlist/denylist доменів (максимум 20). + + + +Загальний бюджет контенту (максимум 1000000). + + + +Ліміт токенів на сторінку. + Для застарілого шляху сумісності 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) -- нейронний пошук із витягуванням контенту diff --git a/docs/uk/tools/web-fetch.md b/docs/uk/tools/web-fetch.md index 41e33cfc8..e75d97318 100644 --- a/docs/uk/tools/web-fetch.md +++ b/docs/uk/tools/web-fetch.md @@ -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` | Обрізати вивід до цієї кількості символів | + +URL для отримання. Лише `http(s)`. + + + +Формат виводу після вилучення основного вмісту. + + + +Обрізати вивід до цієї кількості символів. + ## Як це працює - - Надсилає HTTP GET із Chrome-подібним User-Agent і заголовком `Accept-Language`. - Блокує приватні/внутрішні hostnames і повторно перевіряє redirects. + + Надсилає HTTP GET із User-Agent, схожим на Chrome, і заголовком `Accept-Language`. + Блокує приватні/внутрішні імена хостів і повторно перевіряє перенаправлення. - - Запускає Readability (видобування основного вмісту) для HTML-відповіді. + + Запускає Readability (вилучення основного вмісту) для HTML-відповіді. - - Якщо Readability завершується помилкою і налаштовано Firecrawl, виконує повторну спробу через - API Firecrawl у режимі обходу bot-захисту. + + Якщо Readability не спрацьовує і Firecrawl налаштовано, повторює спробу через + API Firecrawl у режимі обходу бот-захисту. - - Результати кешуються на 15 хвилин (налаштовується), щоб зменшити повторні - отримання того самого URL. + + Результати кешуються на 15 хвилин (можна налаштувати), щоб зменшити кількість повторних + отримань того самого URL. -## Конфігурація +## Налаштування ```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`. - Якщо Firecrawl увімкнений і його SecretRef не розв’язується без - резервного env `FIRECRAWL_API_KEY`, запуск gateway завершується швидкою помилкою. + Якщо Firecrawl увімкнено, а його SecretRef не розв’язано і немає + резервного значення змінної середовища `FIRECRAWL_API_KEY`, запуск Gateway завершується помилкою одразу. - Перевизначення `baseUrl` Firecrawl жорстко обмежені: вони мають використовувати `https://` і + Перевизначення Firecrawl `baseUrl` суворо обмежені: вони повинні використовувати `https://` і офіційний хост Firecrawl (`api.firecrawl.dev`). -Поточна поведінка 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