Search Tools Studio (Русский)
Search Tools Studio превращает /dashboard/search-tools из простой среды для экспериментов с поиском в
трёхвкладочную Студию, объединяющую веб-поиск, извлечение веб-контента и параллельное сравнение провайдеров.
┌ Инструменты поиска ────────────────────────────────────────────────────┐│ [🔍 Поиск] [📄 Извлечение] [⚖ Сравнение] 142ms · $0.001 </> ││ ⓘ [Руководство по модальностям] │├──────────────────────────────────────────┬─────────────────────────────┤│ {содержимое активной вкладки} │ ─ Конфигурация ││ │ Провайдер [авто ∨] ││ │ 🟢 Serper $0.001 ││ │ 🟢 Tavily $0.008 ││ │ 🔥 Firecrawl (получение) ││ │ Тип [веб | новости] ││ │ Вся страница [ ] (извлеч.) ││ │ Формат [md|текст|html] ││ │ Модель реранжир. [∨] │└──────────────────────────────────────────┴─────────────────────────────┘Вкладки
Заголовок раздела «Вкладки»Вкладка поиска
Заголовок раздела «Вкладка поиска»Развивает существующие SearchForm + ResultsPanel + RerankPanel, объединяя их во вкладку:
- Запрос → результаты (заголовок, URL, фрагмент, оценка релевантности).
- Метаданные провайдера на панели конфигурации (стоимость, квота, статус).
- Раздел реранжирования: выбор модели реранжирования, изменение порядка результатов, отображение
positionDelta. - Пустое состояние с призывом к действию, когда провайдеры поиска не настроены.
- История поиска через
SearchHistory.tsx. - Вызывает
POST /v1/search(существующая конечная точка, без изменений).
Вкладка извлечения
Заголовок раздела «Вкладка извлечения»Новая вкладка для извлечения содержимого по URL через POST /v1/web/fetch (создана в плане 05):
- Ввод: URL + переключатель полной страницы + выбор формата (Markdown / текст / HTML).
- Отправка → получение → отображение
ScrapeResult.tsx. ScrapeResultотображает предварительный просмотр Markdown + переключатель исходного содержимого.- Ограничение: если тело ответа превышает 256 КБ, интерфейс показывает
(обрезано, посмотреть исходное содержимое)и открывает исходное содержимое в модальном окне Monaco (D21). - Панель метаданных: провайдер (firecrawl/jina-reader/tavily-search/tinyfish/nimble-search/anysearch-search), задержка, стоимость, размер ответа, количество ссылок.
- Использует хук
useScrapeFetch.ts.
Вкладка сравнения
Заголовок раздела «Вкладка сравнения»Выполняет один и тот же запрос/URL параллельно через не более чем 4 провайдеров (D22):
- Расположенные рядом столбцы для каждого провайдера.
- Метрики: задержка, стоимость, количество результатов, размер ответа.
- Расчёт пересечения URL для поиска (количество общих URL относительно исходного результата).
- Вызывает
POST /v1/search(поиск) илиPOST /v1/web/fetch(извлечение) для каждого провайдера.
Панель конфигурации (общая)
Заголовок раздела «Панель конфигурации (общая)»SearchToolsConfigPane.tsx — отображается всегда, можно свернуть.
| Поле | Примечания |
|---|---|
| Провайдер | Выпадающий список с индикатором статуса (настроен / отсутствует / ограничен) |
| Тип | web или news (только для поиска) |
| Полная страница | Переключатель для извлечения — получает всю страницу или только видимый контент |
| Формат | markdown, text или html (только для извлечения) |
| Модель реранжирования | Необязательная модель для реранжирования после поиска |
| История | Сворачиваемый раздел истории поиска |
SearchConceptCard
Заголовок раздела «SearchConceptCard»SearchConceptCard.tsx — всегда видимый сворачиваемый аккордеон. Содержит пояснения:
| Концепция | Краткое описание |
|---|---|
| Поиск | Получает список веб-результатов (заголовок, URL, фрагмент, оценка релевантности) |
| Извлечение | Извлекает полное содержимое URL (markdown, текст или HTML) |
| Сравнение | Выполняет один и тот же запрос параллельно у N провайдеров |
| Переранжирование | Переупорядочивает результаты с помощью LLM для повышения релевантности запросу |
| Авто (дешевле) | Автоматически выбирает самого дешёвого доступного провайдера |
Каталог провайдеров
Заголовок раздела «Каталог провайдеров»ProviderCatalog.tsx предоставляет полный список провайдеров из GET /api/search/providers
(расширенный в F4 для включения провайдеров извлечения):
| kind | "search" (20 провайдеров) или "fetch" (firecrawl, jina-reader, tavily-search, tinyfish, nimble-search, anysearch-search) |
Статус определяется во время запроса путём проверки наличия учётных данных и того, находятся ли все ключи в данный момент в периоде ожидания.
Экспорт кода
Заголовок раздела «Экспорт кода»ExportCodeModal (импортируется из Playground Studio) + codeExport.ts генерируют
фрагменты curl / Python / TypeScript для вызовов /v1/search и /v1/web/fetch.
Заполнителем API-ключа всегда является $OMNIROUTE_API_KEY (D11, используется совместно с Playground Studio).
Изменения в бэкенде
Заголовок раздела «Изменения в бэкенде»Для этой функции потребовалось только одно изменение в бэкенде:
Расширенный GET /api/search/providers
Заголовок раздела «Расширенный GET /api/search/providers»src/app/api/search/providers/route.ts был расширен следующим образом:
- В массив добавлены все 6 провайдеров извлечения (
firecrawl,jina-reader,tavily-search,tinyfish,nimble-search,anysearch-search). - В каждый элемент добавлено поле
kind: "search" | "fetch". - Добавлено поле
status: "configured" | "missing" | "rate_limited", определяемое на основе актуального состояния учётных данных. - Сохранена обратная совместимость — существующие поля (
id,nameи т. д.) не изменены.
Ключевые файлы
Заголовок раздела «Ключевые файлы»| Путь | Назначение |
|---|---|
src/app/(dashboard)/dashboard/search-tools/SearchToolsClient.tsx |
Оболочка студии, управление вкладками |
src/app/(dashboard)/dashboard/search-tools/components/SearchToolsTopBar.tsx |
Вкладки + метрики + кнопка экспорта |
src/app/(dashboard)/dashboard/search-tools/components/SearchToolsConfigPane.tsx |
Общая панель конфигурации |
src/app/(dashboard)/dashboard/search-tools/components/SearchConceptCard.tsx |
Карточки с пояснениями (всегда видимы) |
src/app/(dashboard)/dashboard/search-tools/components/ProviderCatalog.tsx |
Список провайдеров с метаданными |
src/app/(dashboard)/dashboard/search-tools/components/ScrapeResult.tsx |
Предпросмотр markdown + переключатель исходного текста |
src/app/(dashboard)/dashboard/search-tools/components/tabs/SearchTab.tsx |
Вкладка поиска + переранжирования |
src/app/(dashboard)/dashboard/search-tools/components/tabs/ScrapeTab.tsx |
Вкладка извлечения |
src/app/(dashboard)/dashboard/search-tools/components/tabs/CompareTab.tsx |
Вкладка сравнения нескольких провайдеров |
src/app/(dashboard)/dashboard/search-tools/hooks/useScrapeFetch.ts |
Хук запроса для извлечения |
src/app/api/search/providers/route.ts |
Расширен полями kind + status + провайдерами извлечения |
open-sse/config/searchRegistry.ts |
Источник достоверных метаданных провайдеров поиска |
Устранение неполадок
Заголовок раздела «Устранение неполадок»| Симптом | Причина | Решение |
|---|---|---|
| На вкладке Scrape отображается «endpoint недоступен» | /v1/web/fetch не подключён |
Убедитесь, что план 05 объединён; проверьте наличие src/app/api/v1/web/fetch/route.ts |
| В каталоге провайдеров все они отображаются как «отсутствующие» | Учётные данные не настроены | Добавьте учётные данные в /dashboard/providers |
| Содержимое Scrape обрезано | Размер ответа превышает лимит в 256 КБ | Ожидаемое поведение (D21). Используйте кнопку «просмотреть исходное содержимое» для просмотра полного содержимого |
| На вкладке Compare отображаются только 2 провайдера | Активно ограничение частоты запросов | Два или более провайдера могут находиться в режиме ожидания — проверьте их статус на панели Config |
| В таблице вместо «Size» отображается необработанный ключ | Отсутствует ключ i18n | Убедитесь, что search.size существует в файле локали; пересоберите i18n |
- Основной план:
_tasks/features-v3.8.6/refactorpages/_orchestration/master-plan-group-C.md - План функции:
_tasks/features-v3.8.6/refactorpages/18-search-tools-studio-redesign.plan.md - Реестр поисковых провайдеров:
open-sse/config/searchRegistry.ts - Playground Studio (общие
ExportCodeModalиcodeExport.ts):docs/frameworks/PLAYGROUND_STUDIO.md - Бэкенд веб-загрузки:
src/app/api/v1/web/fetch/route.ts
HagiCode
HagiCode — агентная среда разработки со структурированными процессами, параллельным выполнением несколькими агентами и интерфейсами Hero Dungeon.
Превращайте идеи в полезное ПО с более умным, быстрым и увлекательным агентным рабочим процессом.

- SmartСтруктурированные процессы превращают намерение в исполнимый путь от идеи до готового изменения.
- EfficientМультиагентные процессы параллельно продвигают исследование, реализацию и проверку.
- FunHero Dungeon делает длительную совместную разработку наглядной и увлекательной.