全部插件

DSH / BUNDLE / CLIENT-UI

@fffangchenghao/dsh-web-search

v0.24.0fangchenghao / dsh-web-search43f5c88bd2

可安装组合包UI 与客户端插件社区 · Topic 自动分析Web UI

概览

@fffangchenghao/dsh-web-search

源码级技术说明DSH bundle: key-free web search, page fetch and one web_tools action tool for verticals, platforms and cited research; eight engines fused with RRF, 34 vertical sources, arXiv research lookups and readable papers, official release facts, a replayable benchmark, an optional Firecrawl key and a dependency-free MCP server.展开完整技术说明收起技术说明
DSH bundle: key-free web search, page fetch and one web_tools action tool for verticals, platforms and cited research; eight engines fused with RRF, 34 vertical sources, arXiv research lookups and readable papers, official release facts, a replayable benchmark, an optional Firecrawl key and a dependency-free MCP server.

README / ZH

插件文档

目录摘要

DSH bundle: key-free web search, page fetch and one web_tools action tool for verticals, platforms and cited research; eight engines fused with RRF, 34 vertical sources, arXiv research lookups and readable papers, official release facts, a replayable benchmark, an optional Firecrawl key and a dependency-free MCP server.

dsh.pub 核对固定版本的组合包契约、运行时事实与分发语义;完整 README 请查看源仓库。

在 GitHub 阅读完整 README

LIMITATIONS

已知限制

- **相关性受上游结果页限制**,整体不如商业搜索 API。免密钥抓取会碰到限流:实测 360 会回 `访问异常页面` 加验证码,另一家国内引擎回 `x5sec` 惩罚页。现在这类页面会被识别成 `SEARCH_BLOCKED`(不再伪装成 0 条),360 也已降为兜底档;冷却和多引擎互补仍然只是兜底,兜不住全部。 - **Google 在本网络下不可达**:走隧道请求 `www.google.com/search` 只回 JS 空壳(94 KB、1–3 个链接),无头 Chrome 被重定向到 `google.com.hk` 并回 reCAPTCHA;`gbv=1`、consent cookie、移动端 UA 都试过,均无效。8 个公共 SearXNG 实例同样不可用(429/403/非 JSON)。 - **依赖上游 HTML 结构**。上游改版会让解析失败,此时该引擎记一条原因并让位,不会静默返回空列表。 - **结果里只有标题、链接、摘要,没有正文**。正文要 `web_fetch`。 - **`web_fetch` 抓回来的正文不能从中间续读**:宿主的 `WebFetchRequest` 只有 `url` 一个字段,超过 `fetchMaxLength` 的部分要靠 `read_page` 接着读,或调大上限、抓更窄的页面。 - **`read_page` 一页最多留 2,000,000 字符**:超过的部分会被硬上限截掉并标记 `truncated`;插件内最多缓存 8 页正文,第 9 页会挤掉最久未用的那一页。 - **正文提取只保留「像正文」的部分**:纯 JavaScript 渲染的页面默认抓回来接近空壳;自己装了 Playwright 并开启 `renderJs` 才会执行脚本。选定正文根之外的内容(比如侧栏里的表格)仍会跟导航一起丢掉。 - **浏览器渲染没有真实正文的实测数据**:本项目开发环境没装 Playwright;已验证的是壳页面识别、无渲染器时的静默回退,以及用注入的假渲染器跑通的渲染、超时和回退路径(`render-js.test.ts`)。真实站点「渲染后的正文」尚未测量。 - **基准只有 20 条查询**:新闻类 recall 0.367,`zh-linux-612` 0 命中;参数差异只值 1–4 个命中时不足以区分版本。它用来判断方向,不是统计显著性。 - **`search_many` 一次最多 5 条查询,批内最多 3 条并发。** - **两个进程共用一个缓存文件是后写覆盖**:不会写坏文件,但一个进程较新的快照可能被另一个进程较旧的快照盖掉。 - **时间窗只能过滤「有日期」的结果**:日期从结果页解析,引擎不给日期时这条就没有年龄信息;窗口内一条带日期的都没有时会退回无日期结果,并在 `Note` 中说明这些行没有被证明落在窗口内。Bing 与 360 的时间参数实测无效,真正下推的只有 DuckDuckGo 的 `df=`。 - **领域搜索是发现,不是完整记录**:GitHub 搜索不返回 release tag,Wikipedia 搜索不返回修订时间,Hacker News 搜索不返回最高赞评论,Stack Overflow 搜索不返回 accepted answer 正文;要精确记录时用 `web_fetch` 或 `read_page` 追一层。 - **PyPI 只支持精确包名**:它没有公开搜索 API,插件取查询的第一个词当包名;拼错就是空结果。 - **Wikipedia 只查单一语言**:含中日韩字符查 `zh`,否则查 `en`。 - **社区平台是尽力而为**:B 站、V2EX、Reddit、YouTube、掘金会改接口或拦截自动请求;工具会退到限定域名的网页搜索,并按平台域名过滤。知乎在本环境没有可用的免密钥 API,只能走兜底,仍可能一条都拿不到。 - **`cache_search` 只在进程内**:research 正文最多保留 7 天、24 篇、每篇 40 万字符,重启即消失;不会写进搜索结果缓存。 - **官方站补查有边界**:`research` 只对少数发布机构(欧盟、网信办、Chrome Releases、Python、Redis、W3C)补聚焦 `site:` 查询,其他官方机构仍靠普通排序。 - **时间窗不能凭空造日期**:所有结果都没有日期时,`advanced_search` / `domain_search` 会在 `note` 里说明,不会把无日期结果说成在窗口内。 - **插件自有工具都依赖宿主提供工具注册表**:没有 `ctx.tools` 时 `domain_search`、`search_many`、`advanced_search`、`read_page`、`research`、`cache_search`、`platform_search`、`engine_test` 都不注册,`web_search` 不受影响。 - **AnySearch 匿名调用每次最多 10 条。** - **只支持 HTTP 代理**,不支持 `socks5://`。 - **`limit` 上限 20;`domainLimit` 上限也是 20。**