Перейти к содержимому
OmniRoute source

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.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).


Для этой функции потребовалось только одно изменение в бэкенде:

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

Исходный код OmniRoute (a58000c7685f)

HagiCode

HagiCode — агентная среда разработки со структурированными процессами, параллельным выполнением несколькими агентами и интерфейсами Hero Dungeon.

Превращайте идеи в полезное ПО с более умным, быстрым и увлекательным агентным рабочим процессом.

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