为模型接入官方搜索与网页抓取工具
30.8/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/19 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add lxyztmds/dsh-plugin-deepseek-search该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · search
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 12 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🟢 扫描:未发现敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描未发现敏感能力:最多只发网络请求、读取自身元数据或只读文件,未发现执行命令、文件写入或敏感信息读取。
发起外部网络请求
查看扫描证据(共 1 处,展示前 1 条)
- 发起网络请求lib/client.js:107
fetchImpl = (...args) => globalThis.fetch(...args),
扫描于 2026/11/1(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-tools@deepseek-ai/schemastery给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
README
由 DeepSeek 最新模型翻译生成dsh-plugin-deepseek-search
把 DeepSeek 官方 Search / Fetch API 接入 DeepSeek Harness(DSH)的插件。安装后模型获得两个工具:
| 工具 | 底层接口 | 作用 |
| deepseek_search | POST https://api.deepseek.com/v1/tools/search | 用 DeepSeek 自研搜索引擎检索网页,返回标题、URL、摘要、发布时间、权威性、排序分;可选返回网页正文 |
| deepseek_fetch | POST https://api.deepseek.com/v1/tools/fetch | 抓取单个网页,返回标题与 Markdown 正文 |
接口文档:<https://api-docs.deepseek.com/zh-cn/guides/search/>
- 插件只读、无缓存、无遥测;不会写入工作区。
- 与 DSH 内置的 web_search / web_fetch 互不冲突:本插件注册独立工具名,不接管 ctx.web 的 provider 选择,也不改动内置设置。
展开完整文档(README 剩余 1 节)
dsh-plugin-deepseek-search
把 DeepSeek 官方 Search / Fetch API 接入 DeepSeek Harness(DSH)的插件。安装后模型获得两个工具:
| 工具 | 底层接口 | 作用 |
| deepseek_search | POST https://api.deepseek.com/v1/tools/search | 用 DeepSeek 自研搜索引擎检索网页,返回标题、URL、摘要、发布时间、权威性、排序分;可选返回网页正文 |
| deepseek_fetch | POST https://api.deepseek.com/v1/tools/fetch | 抓取单个网页,返回标题与 Markdown 正文 |
接口文档:<https://api-docs.deepseek.com/zh-cn/guides/search/>
- 插件只读、无缓存、无遥测;不会写入工作区。
- 与 DSH 内置的 web_search / web_fetch 互不冲突:本插件注册独立工具名,不接管 ctx.web 的 provider 选择,也不改动内置设置。
- 鉴权默认使用 DSH 凭据服务里的凭据引用(默认 DEEPSEEK_API_KEY),每次调用实时解析,换 Key 不需要重启;显式配置 apiKey 字面值时会优先使用它。
目录结构
dsh-plugin-deepseek-search/
├── package.json # 包清单:dsh.bundle.patch 声明 + peerDependencies ├── cordis.patch.yml # bundle patch 层:插入插件行 deepseek-search ├── lib/ │ ├── index.js # 插件入口:Config schema、apply、两个 defineTool 定义 │ ├── client.js # Search/Fetch HTTP 客户端:鉴权、超时、重试、错误映射、响应校验 │ └── format.js # 模型侧渲染 + Web 结果卡片(presentationMeta / presentResult) ├── locale/{zh,en}.json # 插件列表里的标题与描述 ├── scripts/ │ └── install-bundle-entry.mjs # 手工安装辅助:安全地把 bundle 名写进 profile 清单 ├── test/ │ ├── client.test.mjs # 单元测试:请求/重试/错误/校验(25 个用例) │ ├── format.test.mjs # 单元测试:渲染、截断、presentation(15 个用例) │ └── live-smoke.mjs # 真实 API 冒烟测试(需要 Key) ├── icon.svg └── LICENSE
安装
DSH 的插件是 profile 的一个 bundle:profile 的 package.json 的 dsh.profile.bundles 引入它,它的 cordis.patch.yml 把插件行插进加载树。
最省事的方式:装好后在 插件 → 发现 里搜索本插件,或在命令行执行(非 desktop profile):
GitHub 源码安装
dsh plugin --profile <profile-name> add github:lxyztmds/dsh-plugin-deepseek-search
npm 安装(发布 npm 后可用;预构建、免 allowBuilds 授权)
dsh plugin --profile <profile-name> add dsh-plugin-deepseek-search
下面是本地/手工安装的三种方式。
方式一:图形界面安装(即时生效,推荐)
1. 打开 DSH 侧边栏的 插件 页;
2. 在安装输入框填入本插件目录的绝对路径,例如 C:\Users\Administrator\Desktop\开发相关\dsh-plugin-deepseek-search;
3. 安装完成后插件默认启用。DSH 运行在 HMR 模式下,本插件属于纯 Host 端插件,安装/启用后立即出现在后续会话的工具列表里。
方式二:命令行安装(适用于非 Electron 托管的 profile)
dsh plugin --profile <profile-name> add "file:C:\path\to\dsh-plugin-deepseek-search"
然后重启该 profile
desktop 这个 profile 名被 Electron 独占:独立 dsh CLI 会拒绝,请用方式一或方式三;Desktop 自带的 dsh 命令可管理该 profile(例如 dsh plugin --profile desktop why <pkg>),但跨版本行为不一致,手工路径最稳。
方式三:手工安装(当前 Desktop profile 已按此方式装好)
1) 拷一份到 ASCII 路径(避免中文路径在 pnpm/命令行链路上被错误转码) robocopy "<插件源码目录>" "C:\Users\Administrator\.dsh\plugins-local\dsh-plugin-deepseek-search" /E /XD node_modules .git
2) 在 profile 目录安装依赖
pnpm --dir "C:\Users\Administrator\.dsh\profiles\desktop" add "file:C:\Users\Administrator\.dsh\plugins-local\dsh-plugin-deepseek-search"
3) 把 bundle 名追加进 dsh.profile.bundles(node 脚本,避免手工改 JSON 出错)
node "<插件目录>\scripts\install-bundle-entry.mjs" "C:\Users\Administrator\.dsh\profiles\desktop\package.json"
第 1、2 步也可以交给命令行,用一条 dsh plugin --profile <name> add <path> 完成(仅限非 Electron 托管的 profile;独立命令行会拒绝 desktop)。命令行执行成功后,第 3 步的 bundles 追加会自动完成。
手工改过 profile 后,一般需要重启 DSH Desktop 才会生效;如果该 DSH 版本运行在 HMR 模式,运行时也可能检测到 profile 变化并热加载(本机安装时即自动生效)。
配置
配置项定义在 lib/index.js 的 Config(schemastery schema)里,默认值由 schema 提供(bundle patch 只显式写了 apiKeyEnv)。你可以在 profile 的 cordis.patch.yml 里用 id 定向覆盖:
- id: deepseek-search
config:
apiKeyEnv: DEEPSEEK_API_KEY
count: 5
needContent: false
timeoutMs: 60000
retries: 2
maxOutputChars: 60000
| 字段 | 默认值 | 含义 |
| apiKey | 空 | 直接写入的 API Key(secret role;不推荐,优先用凭据引用) |
| apiKeyEnv | DEEPSEEK_API_KEY | 凭据引用名,按调用经 ctx.credentials 解析;没有凭据服务时回退到启动进程的环境变量 |
| baseURL | https://api.deepseek.com/v1/tools | Search/Fetch API 基础地址(含 /v1/tools,不含 /search、/fetch);必须是带 host 的 http(s) URL,且不能包含用户名/密码,非 https 会明文传输 Key |
| count | 10 | deepseek_search 未显式传 count 时的默认条数(1–50) |
| needContent | false | deepseek_search 未显式传 need_content 时的默认值 |
| timeoutMs | 60000 | 一次工具调用的总预算(含重试退避),到点返回 TIMEOUT |
| retries | 2 | 遇到 408 / 429 / 5xx / 网络错误时的重试次数(0–5),429 会优先遵守 Retry-After |
| maxOutputChars | 60000 | 单次调用返回给模型的最大字符数;超出会截断并注明 |
| sendOriginalQuestion | true | 把触发本轮的用户问题(折叠空白、截断 128 字符)作为 ori_question 发送 |
Key 从哪里来
1. apiKey 字面值(若配置);
2. ctx.credentials.resolve(apiKeyEnv):Desktop/Web 的凭据服务会读 ~/.dsh/.credentials.yaml 的 refs:,或 Web 模型页保存的 Key;
3. 启动进程环境变量 process.env[apiKeyEnv](例如 dsh 前 set DEEPSEEK_API_KEY=sk-...)。
三处都没有时,工具仍会显示在工具列表里,执行时返回带修复指引的 MISSING_CREDENTIAL 错误。
工具参数
deepseek_search
| 参数 | 类型 | 必填 | 说明 |
| query | string | 是 | 1–128 个 Unicode 字符,不能全为空白;支持搜索语法(见下) |
| count | integer | 否 | 1–50,缺省用部署配置;越界会返回参数错误 |
| need_content | boolean | 否 | 是否同时返回网页正文(更大、更慢) |
query 支持的搜索语法(原样传给搜索服务):
| 操作符 | 示例 |
| site: | DeepSeek site:github.com OR site:huggingface.co |
| -site: | DeepSeek -site:example.com |
| - / -"..." | DeepSeek -广告、DeepSeek -"release notes" |
| "..." | DeepSeek "精确短语" |
| lang: | DeepSeek lang:zh,en |
| after: / before: | DeepSeek after:2025-01-01 before:2026-06-01 |
结果包含 title、url、snippet、summary、date、authority(0–4,-1 未知)、rerankScore(0–3,≥1.5 为优质),need_content 时还有 content。
deepseek_fetch
| 参数 | 类型 | 必填 | 说明 |
| url | string | 是 | 绝对 http(s) URL,≤8192 字符,必须带 host,不能携带用户名/密码 |
返回 { url, title, content }:title 被限制在 300 字符(防止畸形 冲爆输出),content 为 Markdown 正文,插件对单页保留上限为 200,000 字符(MAX_FETCH_CONTENT_CHARS),超出会截断并标注。
错误与重试
插件把文档里的状态码映射成模型可执行的错误文本,并附带 endpoint 与排查建议:
| 状态码 | 行为 |
| 400 | 不重试,提示 query/count/JSON 约束 |
| 401 | 不重试,提示配置 Key 的三种途径 |
| 402 | 不重试,提示充值 |
| 403 / 404 | 不重试(Fetch 被安全策略拒绝 / 页面无可提取正文) |
| 408 / 429 | 按 Retry-After 或指数退避重试,超过次数后报错 |
| 413 | 不重试,提示请求体超过 API 大小限制 |
| 任意 5xx(500/502/503/504/501/505…) | 按 Retry-After 或指数退避重试,超过次数后报错;502/503 有专门的排障提示 |
| 网络失败 | 重试后报错,提示检查网络与 baseURL |
本地错误码会以 [CODE] 前缀出现在错误文本里,便于模型和日志路由:MISSING_CREDENTIAL(未配置 Key)、ABORTED(用户取消)、TIMEOUT(总预算耗尽)、INVALID_RESPONSE(返回体不符合文档结构)、INVALID_BASE_URL(baseURL 不合法)。
Search 与 Fetch 都是只读请求,重试安全。
计费与限速
按 DeepSeek 文档:
- Search / Fetch 均按成功请求次数计费,5 元 / 1000 次;失败、无结果不计费;count 不影响单次价格。
- 每个账号 Search、Fetch 各自独立限速 5 QPS,超限返回 429。
- 在 DeepSeek Harness / Claude Code / Codex 中通过服务端工具调用访问 Search/Fetch 目前不计费,自 2026-11-01 00:00(北京时间) 起按次收费。
本插件是显式工具调用,属于按次计费路径,请按需控制 count 与调用频率。
安全与隐私
- 插件只把 Authorization: Bearer <key> 发给配置的 baseURL;Key 不写入消息、日志或模型上下文,上游错误体里若回显了 Key 会被替换为 [redacted]。
- baseURL 必须是有 host 的 http(s) URL,且拒绝携带用户名/密码的 URL;非 https 地址会明文发送 Key,只应指向信任的本地网关。
- query、url 会发给 DeepSeek API;sendOriginalQuestion 开启时还会发送本轮用户问题的前 128 字符,关闭它即可不发送。
- 页面正文属于外部不可信内容,工具结果带有 "external, untrusted data" 提示;插件不做 HTML 渲染,不执行页面内容。
- 所有 provider 可控字符串(标题、摘要、正文、URL)在渲染与持久化元数据前都有字符上限,畸形页面无法撑爆输出;标题里的 [/] 会被转义,避免伪造 Markdown 链接。
- 跟随重定向被禁用(redirect: 'error'),避免凭据被带到别的地址。
开发
单元测试(不联网;40 个用例:25 client + 15 format)
node --test test/client.test.mjs test/format.test.mjs
真实 API 冒烟测试(读取 DEEPSEEK_API_KEY 或 ~/.dsh/.credentials.yaml)
node test/live-smoke.mjs
实现要点:
- lib/client.js 不依赖 DSH 运行时,可独立测试;createDeepSeekApi 通过 fetchImpl / sleep(ms, signal, operation) 注入网络与时钟。
- 一次调用的所有重试与退避共享 timeoutMs 总预算(AbortSignal.timeout),等待期间也会响应取消/超时;取消使用调用方 exec.signal,两者用 AbortSignal.any 合并。
- deepseek_search / deepseek_fetch 都声明了 isConcurrencySafe: () => true(只读,可并行),并声明 timeoutMs 供 DSH 的超时策略做兜底。
- 输出先经过 canonical JSON schema 校验,再渲染成模型文本;渲染有总字符预算,超限注明 "Showing the first N of M";Fetch 的页眉/标题也计入预算,presentResult 的 truncated 与渲染文本共用同一次计算。
- presentationMeta 把结构化来源/抓取摘要持久化(字段亦有长度上限),presentResult 让 Web 客户端渲染成 web 结果卡片,且对错误结果返回 undefined。
- 本地错误码(MISSING_CREDENTIAL/TIMEOUT/…)会以 [CODE] 前缀进入错误文本,模型和日志可以直接路由。
卸载 / 回退
- 图形界面:插件页停用或删除本插件。
- 手工:从 profile 的 dsh.profile.bundles 删掉 dsh-plugin-deepseek-search,再 pnpm --dir <profile> remove dsh-plugin-deepseek-search,重启。
License
MIT预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
lxyztmds/dsh-plugin-deepseek-search
为模型接入官方搜索与网页抓取工具
相关插件 · 搜索 / 抓取
LLM 知识平台Tencent/WeKnora
概览 ·快速开始 ·新特性 ·功能 ·客户端 ·文档 ·开发
★ 36,032已汉化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