Skip to content

fix(search): API 后端失败兜底从 DuckDuckGo 换成 Bing - #35

Merged
h3c-hexin merged 1 commit into
pinvou3-cleanfrom
feat/search-keyless-tail-bing
Aug 28, 2026
Merged

fix(search): API 后端失败兜底从 DuckDuckGo 换成 Bing#35
h3c-hexin merged 1 commit into
pinvou3-cleanfrom
feat/search-keyless-tail-bing

Conversation

@h3c-hexin

Copy link
Copy Markdown

概述

API 后端(Tavily/Bocha/Metaso/Baidu/SearXNG/Volcengine/Sofya)运行失败或空结果后的免 key 链尾兜底,由 DuckDuckGo 换成 Bing;全链失败的错误补充 API 后端配置建议。

背景

实测(广州·中国移动出口):

  • DuckDuckGo 在中国大陆网络下完全不可达——DNS 被污染(html.duckduckgo.com 解析到 Facebook 段 2a03:2880:...face:b00c),且用真实 IP 直连 TLS 握手 0.07s 即被 SNI 重置,双层封锁。DDG 链尾会把 API 后端故障放大为必然整体失败:先撞死 DDG 挂满超时再报错。
  • Bing 全球与国内端点均免 key 可达:国内出口访问 www.bing.com/search 由必应按出口 IP 自动 302 到 cn.bing.com,返回标准 b_algo 结构;现有解析器对两版页面均兼容。国外出口直接返回国际版结果。

链尾按可达性选择,引擎不做地理探测(与既有 "does not guess geography" 原则一致)。Bing 与 DuckDuckGo 自身仍为单后端链:DDG 保留其内部挑战页/空结果的 Bing 回退,私有 DDG 兼容搜索服务(provider = "duckduckgo" + base_url)不受影响。

变更

  • SearchBackendChain::from_context:非 Bing/DDG 后端追加的免 key 兜底改为 Bing。
  • 全链失败 not_available 错误追加 configure an API-backed [search] provider (...) 建议;仍只含 backend id,不泄 provider 私有响应体(负向断言保留)。
  • 新增 forkguard_api_provider_chain_tail_is_bing 行为测试:7 个 API 后端链尾均为 Bing、Bing/DDG 保持单后端链。
  • config/search.rs 枚举文档与 docs/CONFIGURATION.md Web Search Provider 一节同步。

验证

  • cargo test -p codewhale-tui --lib tools::web::backend --locked:9 passed
  • cargo test -p codewhale-tui --lib tools::web_search --locked:63 passed
  • cargo fmt --all -- --check 通过
  • 父仓侧 ./scripts/fork-guard.sh 全量四层通过(含 57 条 forkguard 回归)

Checklist

  • Updated docs or comments as needed
  • Added or updated tests where relevant
  • Verified TUI behavior manually if UI changes(无 UI 变更)
  • Harvested/co-authored credit uses a GitHub numeric noreply address(不适用)

No-Issue: 与父仓 Pinvou/pinvou-agent 的配套 PR(gitlink + fork 登记)同批提交。

DuckDuckGo 在中国大陆网络下被 DNS 污染 + SNI 重置,完全不可达;
API 后端失败后撞 DDG 兜底等于必然整体失败。Bing 是唯一全球与
中国大陆均免 key 可达的引擎,链尾按可达性选择,不做地理探测。
全链失败错误补充 API 后端配置建议。

Signed-off-by: pinvou3-dev <dev@pinvou3.local>
@h3c-hexin
h3c-hexin force-pushed the feat/search-keyless-tail-bing branch from 2e429c3 to 33a37ed Compare August 28, 2026 09:13
@h3c-hexin
h3c-hexin merged commit 9c5f4f1 into pinvou3-clean Aug 28, 2026
11 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant