为内置搜索与网页抓取接入 TinyFish 后端
29.6/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/12 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add HateYouLittle/dsh-web-tinyfish该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:待复验
是什么
dsh 原生插件 · search
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 32 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🟢 扫描:未发现敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描未发现敏感能力:最多只发网络请求、读取自身元数据或只读文件,未发现执行命令、文件写入或敏感信息读取。
发起外部网络请求
查看扫描证据(共 3 处,展示前 3 条)
- 发起网络请求index.js:108
response = await fetch(url, { - 发起网络请求fetch.js:100
async fetch(request, signal) { - 发起网络请求fetch.js:114
response = await fetch(endpoint, {
扫描于 2026/11/2(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 接入搜索后端
- 接入网页抓取后端
TinyFish 搜索 + 抓取服务商,为 DeepSeek Harness(dsh)内置的 web_search 和 web_fetch 工具提供支持。
README
由 DeepSeek 最新模型翻译生成dsh-web-tinyfish
DeepSeek Harness(dsh)的 TinyFish 搜索与抓取 provider,为内置的 web_search 与 web_fetch 工具提供后端。
| 工具 | seam 方法 | 注册表 | TinyFish 端点 |
| web_search | ctx.web.search() | search | GET https://api.search.tinyfish.ai |
| web_fetch | ctx.web.fetch() | fetch | POST https://api.fetch.tinyfish.ai |
一个 bundle、两条 plugin row。DSH 自带 deepseek-official(搜索,@deepseek-ai/dsh-web-search-deepseek)和 http(抓取,@deepseek-ai/dsh-web-fetch-http);web seam 本身可插拔,本 bundle 给两个注册表 各加一个 tinyfish provider,并把两个设置都 pin 过去。自带的 provider 保持安装状态,因此回退只需改一行配置。
展开完整文档(README 剩余 1 节)
dsh-web-tinyfish
DeepSeek Harness(dsh)的 TinyFish 搜索与抓取 provider,为内置的 web_search 与 web_fetch 工具提供后端。
| 工具 | seam 方法 | 注册表 | TinyFish 端点 |
| web_search | ctx.web.search() | search | GET https://api.search.tinyfish.ai |
| web_fetch | ctx.web.fetch() | fetch | POST https://api.fetch.tinyfish.ai |
一个 bundle、两条 plugin row。DSH 自带 deepseek-official(搜索,@deepseek-ai/dsh-web-search-deepseek)和 http(抓取,@deepseek-ai/dsh-web-fetch-http);web seam 本身可插拔,本 bundle 给两个注册表 各加一个 tinyfish provider,并把两个设置都 pin 过去。自带的 provider 保持安装状态,因此回退只需改一行配置。
两条 row 都注册在 id tinyfish 下 —— seam 的 search / fetch 是两张独立注册表,不会冲突,一个名字覆盖两种能力。
为什么用 TinyFish
TinyFish 的 Search 与 Fetch 在任何余额下都免费(账号只需开通 API 访问权限)。与 DSH 自带的匿名本地 HTTP 抓取相比,TinyFish fetch provider 多了:
- JavaScript 渲染 —— SPA、脚本驱动的文档站能拿到真实内容,而不是空壳;
- 反爬处理 —— 被拦的页面以明确的 bot_blocked 错误呈现,而不是把挑战页正文交给模型;
- PDF 文本提取 —— 本地 provider 完全不支持 PDF;
- 免清洗正文提取 —— 直接返回干净的 Markdown(或 HTML/JSON)和页面元数据,而不是需要下游转换的原始 HTML。
代价是:抓取的 URL 会发给 TinyFish,而不是从你自己机器发起。TinyFish 会拒绝私网 IP、localhost 和云 metadata 端点,所以本地 provider 提供的 SSRF 防护依然在,只是改由 TinyFish 服务端执行。抓敏感地址时把 fetchProvider 改回 http 即可。
安装
需要 DSH 和一枚 TinyFish API key(在 https://agent.tinyfish.ai/api-keys 创建)。
dsh plugin --profile <profile> add dsh-web-tinyfish
profile 必须已存在 —— 这个 CLI 会先 boot profile 再执行命令。Desktop 托管的 desktop profile CLI 会拒绝操作,请改用 Web 界面:Plugins → Add plugin,填 dsh-web-tinyfish,然后 Enable now。
安装即应用该 bundle 的 patch 层,它会注册两个 provider 并把 web.searchProvider / web.fetchProvider pin 到 tinyfish。
请在安装前或安装时就把 key 配好。 因为 bundle 会 pin 这两个设置,若某个 profile 里没有 key (TINYFISH_API_KEY 凭据、环境变量或私有配置覆盖),两个 provider 都会报不可用,web_search 与 web_fetch 会以 WEB_PROVIDER_CONFIGURED_UNAVAILABLE 失败。回退只需一行:把 web.searchProvider 改回 deepseek-official、web.fetchProvider 改回 http。
提供 API key
本包刻意不携带任何 API key。provider 按以下顺序解析:
1. 行配置里的字面量 apiKey;
2. 凭据服务中由 apiKeyEnv(默认 TINYFISH_API_KEY)指定的条目;
3. 启动进程的 TINYFISH_API_KEY 环境变量。
推荐放进凭据服务。若想用配置字面量,请写在私有覆盖里而不是本包内 —— DSH 自己的用户层($DSH_HOME/profiles/<name>/cordis.patch.yml)不会被发布,且在所有 bundle 层之后应用:
- id: web-search-tinyfish
config:
apiKey: 'sk-tinyfish-...'
- id: web-fetch-tinyfish
config:
apiKey: 'sk-tinyfish-...'
Loader 的 patch 是整体替换该行的 config,所以只写 apiKey 的私有覆盖,其余字段会回落到本 bundle 的默认值。
配置
Row web-search-tinyfish
| 字段 | 默认 | 含义 |
| apiKey | — | 字面量 key(role: secret),优先级最高 |
| apiKeyEnv | TINYFISH_API_KEY | 凭据引用与环境变量回退名 |
| baseURL | https://api.search.tinyfish.ai | 端点;TINYFISH_SEARCH_BASE_URL 同样可覆盖 |
| purpose | — | 为什么要搜索(≤ 2000 字符),可提升结果质量 |
| location | API 默认(US) | 国家/地区码,如 HK |
| language | API 默认(en) | 语言码,如 zh |
| domainType | web | web、news 或 research_paper |
| recencyMinutes | — | 时间窗口,1 … 5256000 |
| page | 0 | 结果页,0 … 10 |
Row web-fetch-tinyfish
| 字段 | 默认 | 含义 |
| apiKey | — | 字面量 key(role: secret) |
| apiKeyEnv | TINYFISH_API_KEY | 凭据引用与环境变量回退名 |
| baseURL | https://api.fetch.tinyfish.ai | 端点;TINYFISH_FETCH_BASE_URL 同样可覆盖 |
| format | markdown | markdown → seam 的 text body;html → seam 的 html body(由工具转换) |
| ttl | 0 | 缓存新鲜度(秒);0 = 每次实时抓取 |
| perUrlTimeoutMs | — | 单 URL 超时预算,1 … 110000 ms |
| maxBodyChars | 100000 | 正文上限;超出会截断并置 truncated |
| purpose | — | 为什么要抓这个页面 |
seam 的 pin
bundle 还会覆盖 DSH 自己的 web 行。该覆盖整体替换 config,因此两个自带字段都要重述:
- id: web
name: '@deepseek-ai/dsh-web'
config:
searchProvider: tinyfish # 原为 deepseek-official fetchProvider: tinyfish # 原为 http
行为
搜索
- 把 TinyFish 单页结果映射为 seam 的 source:title → title、snippet → snippet、date → publishedAt;无 URL 的条目丢弃,URL 去重。
- 自身不做截断:web_search 会把 maxResults(默认 8)传给 seam,由 seam 负责截断并置 truncated。
抓取
- format: markdown 映射为 seam 的 kind: "text",工具直接透传文本,不做 HTML→markdown 转换; format: html 映射为 kind: "html"。
- url 取跳转后的 final_url;成功时 statusCode 为 200。
- TinyFish 把每个 URL 的失败放在 HTTP 200 的 errors[] 里,而 seam 的建模方式不同,因此本 provider 做了转换:
- page_not_found / target_http_error 带有源站状态码。seam 把非 2xx 的源站响应当作结果,所以这两类会变成带该 statusCode 的结果,并附一段说明正文 —— 模型看到的是 Fetched … (HTTP 404),而不是不透明的失败;
- 其余每 URL 错误码变成带类型的 WebError:timeout → WEB_FETCH_TIMEOUT、content_too_large → WEB_FETCH_TOO_LARGE、invalid_url → WEB_INVALID_URL、invalid_redirect_url → WEB_BLOCKED_URL,以及 bot_blocked、login_required、target_unreachable、proxy_error、empty_content、selector_ → WEB_PROVIDER_ERROR 并附原因说明。
两者共同
- 失败都是带类型的 WebError:取消 → WEB_ABORTED;解析不到 key → WEB_PROVIDER_CREDENTIAL_MISSING; HTTP/传输/响应体无法表示 → WEB_PROVIDER_ERROR。401/402/403/429/503 的消息会带上对应的恢复建议。
- 携带凭据的请求都设置了 redirect: "error",重定向响应会在 API key 可能被转发到其他源之前就被拒绝。
兼容性
本包不声明任何依赖。@deepseek-ai/schemastery、@deepseek-ai/dsh-web、@deepseek-ai/dsh-credentials、 @deepseek-ai/dsh-launch-environment 都由 DSH 安装本身携带,并通过 DSH 的 runtime resolution 提供给 profile 代码,因此从已安装的 bundle 里 import 它们无需重新安装。
DSH 处于 developer preview 阶段,官方明确预告会有破坏性变更。社区包如果按已发布的 npm 版本去 pin @deepseek-ai/ 的 peer,很容易触发 DSH 的插件兼容性检查(安装的 runtime 通常领先于已发布版本线),这也是本包不声明依赖的原因。
验证
安装后,Plugins 页面该 bundle 下应能看到两条 row。然后:
- 用任意查询跑 web_search —— 结果应引用 TinyFish Search 返回的真实 URL;
- 对一个 JavaScript 较重的页面跑 web_fetch —— 返回正文应是干净的 Markdown,而不是原始标记;
- 想端到端确认抓取链路,可把 baseURL 指向一个本地服务,抓取后观察那个带
{"urls":[...],"format":"markdown","ttl":0} 的 POST 请求。
许可证
MIT预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
HateYouLittle/dsh-web-tinyfish
为内置搜索与网页抓取接入 TinyFish 后端
相关插件 · 搜索 / 抓取
LLM 知识平台Tencent/WeKnora
概览 ·快速开始 ·新特性 ·功能 ·客户端 ·文档 ·开发
★ 36,161已汉化DSH
72.1
智能体记忆系统MemTensor/MemOS
MemOS 2.0 Stardust星尘
★ 12,195已汉化DSH
71.2
跨代理记忆库zilliztech/memsearch
跨平台语义记忆,专为 AI 编程智能体打造。
★ 2,799已汉化DSH
70.9
技能语料库EverMind-AI/SkillCorpus
SkillCorpus 能给你什么
★ 694已汉化DSH
69.7
代码图谱记忆syncable-dev/memtrace-public
你的智能体值得拥有结构化记忆。
★ 509已汉化MCP
67.9
AnySearch 搜索插件anysearch-team/anysearch-dsh
AnySearch 网页搜索服务商,为 DeepSeek Harness(DSH)提供高级搜索工具
★ 457已汉化DSH
66.6