跳转到内容
OmniRoute source

Search Tools Studio (中文 (简体))

Search Tools Studio 将 /dashboard/search-tools 从基础搜索试验场升级为一个包含三个标签页的 Studio,统一提供 Web 搜索、Web 抓取和并排提供者比较功能。

┌ 搜索工具 ──────────────────────────────────────────────────────────────┐
│ [🔍 搜索] [📄 抓取] [⚖ 比较] 142ms · $0.001 </> │
│ ⓘ [模态类型指南] │
├──────────────────────────────────────────┬─────────────────────────────┤
│ {当前标签页内容} │ ─ 配置 │
│ │ 提供者 [自动 ∨] │
│ │ 🟢 Serper $0.001 │
│ │ 🟢 Tavily $0.008 │
│ │ 🔥 Firecrawl(获取) │
│ │ 类型 [Web | 新闻] │
│ │ 完整页面 [ ](抓取) │
│ │ 格式 [md|文本|html] │
│ │ 重排序模型 [∨] │
└──────────────────────────────────────────┴─────────────────────────────┘

将现有的 SearchForm + ResultsPanel + RerankPanel 扩展为一个标签页:

  • 查询 → 结果(标题、URL、摘要、相关性分数)。
  • 配置窗格中的提供者元数据(成本、配额、状态)。
  • 重排序部分:选择重排序模型、重新排列结果、显示 positionDelta。
  • 未配置搜索提供者时,显示带有 CTA 的空状态。
  • 通过 SearchHistory.tsx 提供搜索历史记录。
  • 调用 POST /v1/search(现有端点,无变更)。

用于通过 POST /v1/web/fetch(在计划 05 中创建)从 URL 提取内容的新标签页:

  • 输入:URL + 完整页面开关 + 格式选择器(Markdown / 文本 / HTML)。
  • 提交 → 获取 → 渲染 ScrapeResult.tsx。
  • ScrapeResult 渲染 Markdown 预览和原始内容切换选项。
  • 上限:如果响应正文大于 256 KB,UI 将显示(已截断,查看原始内容),并在 Monaco 模态框中打开原始内容(D21)。
  • 元数据面板:提供者(firecrawl/jina-reader/tavily-search/tinyfish/nimble-search/anysearch-search)、延迟、成本、响应大小、链接数量。
  • 使用 useScrapeFetch.ts Hook。

跨最多 4 个提供者并行运行相同的查询/URL(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 可为 /v1/search 与 /v1/web/fetch 调用生成 curl / Python / TypeScript 代码片段。 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 Studio 外壳、选项卡编排
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 抓取请求 Hook
src/app/api/search/providers/route.ts 扩展了 kind + status + 抓取提供者
open-sse/config/searchRegistry.ts 搜索提供者元数据的唯一事实来源

症状 原因 修复方法
抓取选项卡显示“端点不可用” /v1/web/fetch 未接入 确认计划 05 已合并;检查 src/app/api/v1/web/fetch/route.ts 是否存在
提供者目录中所有提供者均显示为“缺失” 未配置凭据 在 /dashboard/providers 中添加凭据
抓取内容被截断 响应超过 256 KB 上限 预期行为 (D21)。使用“查看原始内容”按钮查看完整内容
比较选项卡仅显示 2 个提供者 速率限制生效 两个或更多提供者可能正处于冷却期——请在配置窗格中检查提供者状态
表格中的“大小”显示为原始键名 缺少 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
  • Web fetch 后端:src/app/api/v1/web/fetch/route.ts

OmniRoute 源码 (a58000c7685f)

HagiCode

HagiCode 是一套智能体编码工作台:结构化工作流、多 Agent 并行执行与 Hero Dungeon 视图,把想法变成真正交付的软件。

让想法更快变成好用的软件,让智能编码更聪明、更高效,也更有趣。

HagiCode 浅色主题主界面截图
  • Smart结构化工作流将意图转化为从想法到交付的可执行路径。
  • Efficient多 Agent 工作流让调研、实现与审阅并行推进。
  • FunHero Dungeon 让长时间编码协作更直观、更有参与感。
访问 HagiCode