Skip to content

希望把所用的搜索引擎做成用户可配置项 #63

Description

@nameless-name

What do you want? (你想要什么?)

希望把所用的搜索引擎做成用户可配置项,具体包含:

  1. 选择默认搜索引擎:可指定首选的搜索引擎(默认顺序第一项)。
  2. 自定义搜索引擎:允许新增自定义引擎,配置「名称 + 搜索 URL 模板(含 {query} 占位符)+ 结果区 CSS 选择器(或许可以让 agent 自动探测?)」;内置一批常见引擎预设(如 Kagi / Startpage / SearXNG / 必应国内 / 360 等)。
  3. 调整顺序 / 启用禁用:对现有 Bing / Brave / Google / DuckDuckGo / Baidu 可排序、可禁用。
  4. 确定性回退:当一个引擎不可用(无结果 / 命中验证码 / 抓取失败)时,按顺序自动切换到下一个。

Why? (为什么?)

当前搜索引擎列表(顺序 + URL 模板 + 结果区 selector)写死在 system-prompt.ts 的默认提示词 ### Searching the Web 段里。这带来几个问题:

  1. 用户无法使用自己偏好的引擎(Kagi、Startpage、自建 SearXNG、或所在地区可用的引擎)。
  2. 引擎顺序固定,无法按地区 / 网络环境调整(例如某地区 Google 不可用却排在 Brave 之前,每次都要多试几次才能轮换到可用的)。
  3. 引擎 URL 模板或结果页结构一旦变化,必须等发版才能更新,用户无法自行修正 selector。
  4. 回退逻辑目前只是 prompt 层的软约束(依赖 AI 自觉「captcha / blocked / no results 才换下一个」),不可靠。

How? (怎么做? — 可选)

  1. lib/persistence/storage.ts 里新增一个存储项,数据结构大致为引擎数组:{ id, name, urlTemplate(含 {query}), resultSelector, enabled } + 顺序,内置现有 5 个引擎作为默认值(保证向后兼容、未配置时行为不变)。
  2. system-prompt.tsDEFAULT_SYSTEM_PROMPT 里把 ### Searching the Web 段的引擎列表改为 {{SEARCH_ENGINES}} 占位符。
  3. prompt-composer.tscomposeSystemPrompt 里读该存储项、动态生成 {{SEARCH_ENGINES}} 段(复用现有的「读存储 → 生成变量 → 替换占位符」翻译层)。
  4. 设置页新增「搜索」配置区:默认引擎选择、引擎排序 / 启用禁用、自定义引擎表单(URL 模板 + selector,selector 选填并留「自动探测」兜底)。
  5. 回退从 prompt 软约束升级为代码层确定性遍历(read_page 返回空 / 无结果 / 验证码时按序切下一个)。

Alternatives considered (考虑过的替代方案 — 可选)

让浏览器用默认引擎发起搜索 —— 部分可行,依赖 Chrome 专有 API chrome.search.query()
它的行为是:让浏览器在当前默认搜索引擎上执行一次搜索,并打开结果页。但是:

  1. 不返回引擎名称、不返回 URL 模板、也不返回任何结果内容(void)。
  2. 只做「打开一个结果页」这件事 —— 等价于「在一个新标签页里搜了一下」。
  3. 拿不到默认引擎 → 无法精确定位结果区。 原来写死的方案里每个引擎配了精确 selector(Bing #b_results、Google #rso、DuckDuckGo .results),能只读结果、剥掉导航噪声。走 chrome.search.query() 后 agent 只能读整页,噪音大;而且 Google 结果页现在大量 JS 渲染 + 反爬,read_page 很可能抓不到有用内容。
  4. 需要新增 search 权限。 现在 wxt.config.ts:39-45permissions 里没有 search
  5. Chrome 专有、Firefox 不支持。 Cebian 有 Firefox 版(发行到 Firefox Add-ons)。chrome.search 不是标准 WebExtension API,Firefox 没有等价物,会破坏 Firefox 兼容,必须做浏览器判断 + 降级。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions