dsh-weknora
Tencent/WeKnora把 WeKnora 知识库接入 dsh 的四个只读工具:列出知识库、混合检索原文片段、按顺序还原单篇文档,以及直接取用 WeKnora 自己带引用的 RAG 或 ReAct agent 回答(含可续聊的 session id)。
中文 | English
DeepSeek Harness (dsh) 的免费 Web Search / 网页抓取插件。它把 dsh 默认的 deepseek-official 通道换成多引擎 + 自动 fallback:按你排的顺序依次尝试已填 Key 的引擎,失败或额度用尽就换下一个;同一引擎可填多个 Key(每行一个),按序轮换。
官方通道 deepseek-official 的每次搜索都是一次完整的模型调用(带服务端 web_search 工具),搜索请求本身和回灌进上下文的 sources 都从 DEEPSEEK_API_KEY 余额扣 token。
· 官方 deepseek-official · 本插件 web-search-free 检索方式 · LLM 调用 + 服务端搜索工具 · 直接调引擎检索端点 模型 token · 每次搜索都消耗 · 0 计费 · DeepSeek API 余额 · 各搜索 API 自身额度(多数有免费层) 凭据 · 必须 DEEPSEEK_API_KEY · 各引擎自己的 Key 结果 · 只有 sources,未被模型引用的结果没有 snippet · sources + snippet;Tavily 另给直接回答
如果你的对话模型走第三方渠道、没配DEEPSEEK_API_KEY,官方通道仍会被选中,直到模型真正调用web_search才报WEB_PROVIDER_CREDENTIAL_MISSING。本插件不依赖任何 LLM 凭据。
引擎 · 搜索 · 抓取 · 结果日期 · 免费额度 · 获取 API Key TinyFish · ✓ · ✓ · 部分 · 免费,仅限速率 · SearXNG · ✓ · ✗ · 部分 · 自建实例,不限量(「Key」填实例地址) · AnySearch · ✓ · ✓ · ✗ · 1,000 次/天 · 百度千帆 · ✓ · ✗ · 部分 · 每日免费额度(以控制台为准) · Tavily · ✓ · ✓ · ✗ · 1,000 credits/月 · Brave Search · ✓ · ✗ · 多数 · $5 额度/月(需绑卡,不扣费) · Exa (Metaphor) · ✓ · ✓ · 部分 · 注册送 $20 + 每月补 $10(累积) · Firecrawl · ✓ · ✓ · ✗ · 1,000 credits/月(搜索 2 credits/10 结果) · 火山引擎(豆包搜索) · ✓ · ✗ · 部分 · 500 次/月 · SerpApi · ✓ · ✗ · 弱 · 250 次/月 · Jina AI · ✓ · ✓ · 部分 · 新 Key 送 10M tokens(一次性) · Serping API · ✓ · ✗ · 部分 · 每账号 1,000 次(一次性,无需绑卡) ·
表格顺序即默认调用顺序:按可持续免费次数从多到少(不限量 > 每日重置 > 每月重置 > 一次性),相当时注册/绑卡门槛低的优先。
web_fetch 退回无 Key 的 Jina Reader 和 dsh 本地抓取(见高级设置)。各引擎注意事项
s.jina.ai 每次扣 1 万 token,约够 1,000 次搜索,用完不重置。https://searx.example.com),每行一个。实例需在 settings.yml 的 search.formats 里加上 json,否则返回 403。前置条件:dsh ≥ 0.1.2-rc.1,pnpm 在 PATH 上。
在 dsh 界面里安装:侧边栏「插件」→ 右上角「添加插件」→ 输入 dsh-web-search-free → 「安装」。
或用命令行安装。配置卡片只在 Web 界面出现,因此一般装到 web profile:
dsh plugin --profile web add dsh-web-search-free安装后 dsh 自动对账 dsh.profile.bundles,插件即接管 web 搜索与抓取。
从本地源码安装
pnpm install
pnpm build # 生成 dist/(已 gitignore)
dsh plugin --profile web add .本地目录以链接方式安装,之后重新 pnpm build 即生效;改客户端代码后刷新浏览器即可。
dsh ≤ 0.1.2-alpha.5 不挂载 web 工具,装本插件后只有搜索、没有 web_fetch,请改用插件 1.3.0。运行 dsh web,找到配置卡片:
dsh 版本 · 卡片位置 ≥ 0.1.6 · 侧栏 插件 → 「已安装」→ web-search-free ≤ 0.1.5 · 设置 → 插件 → 插件配置 → 免费网页搜索
web_fetch 会收到明确的错误。至少要配一个引擎,否则搜索报 No web search providers configured.
卡片还提供(需 dsh 支持插件路由,已在 0.2.0-rc.2 验证;旧版本自动隐藏):
卡片底部「高级设置」默认收起,不改也能用。顶部的快捷预设(省额度 / 速度优先 / 质量优先 / 中文优先 / 恢复默认)可叠加,保存后生效。
设置 · 字段 · 说明 搜索策略 · searchStrategy · fallback(默认)逐个尝试,最省额度;race 同时调前 N 个、取最快;merge 同时调前 N 个并合并去重,结果最全但消耗 N 倍额度 并发引擎数 · parallelEngines · 2–4,默认 2,仅 race / merge 使用 结果地区 / 语言 · region / language · 默认 auto。Brave、SerpApi、Serping API、TinyFish、AnySearch 两项都支持;Tavily、Exa 仅地区;SearXNG 仅语言;其余不支持 时间范围 · freshness · any(默认)/ day / week / month / year。AnySearch、Jina 不支持;百度千帆的 day 按一周查 屏蔽域名 · blockedDomains · 每行一个,含子域名 优先域名 · preferredDomains · 每行一个,这些域名的结果排到最前 摘要长度 · snippetLength · 100–1000,默认 300 Tavily 搜索深度 · tavilySearchDepth · basic(默认,1 credit)/ advanced(2 credits) 抓取来源 · fetchSource · providers(默认):有 Key 的引擎 → 无 Key Jina → dsh 本地抓取;dsh:只用 dsh 本地抓取(免费、不经第三方,但不渲染 JS) 无 Key 抓取兜底 · keylessJinaFetch · 默认开启,有 Key 的抓取都失败时用无 Key 的 Jina Reader(20 次/分钟,URL 会发给 Jina) 缓存时长 · cacheMinutes · 0–60 分钟,默认 10;相同请求直接返回缓存,不耗额度。0 为关闭
每次 (引擎, Key) 尝试单独限时(搜索 10 秒、抓取 20 秒)。返回 401/402/403/429 或提示额度用尽的 Key 会暂时排到链尾(429 为 2 分钟,其余 30 分钟)。全部失败时,报错会列出每次尝试的原因(Key 已打码)。
找不到卡片时(浏览器控制台会打印 [web-search-free] no settings card mounted: …,欢迎贴到 issue),可以直接编辑 ~/.dsh/profiles/web/cordis.patch.yml。插件安装时已插入 web-search-free 行,这里按 id 覆盖它的 config,不要再写 insert:
- id: web-search-free
config:
tavilyApiKey: tvly-xxxxxxxx
exaApiKey: |-
key-1
key-2
providerOrder: [tavily, exa, tinyfish]
searchStrategy: merge字段名见 src/index.ts 的 Config:ApiKey(多个 Key 用多行字符串)、enableFetch、providerOrder 以及上表字段。改完重启 dsh 生效。dsh ≥ 0.1.7 的卡片也写这个文件,保存时会覆盖同名字段。
dsh 0.1.7 把配置从 ~/.dsh/settings.yaml 迁移到 profile 的 cordis.patch.yml,迁移只跑一次。如果当时插件没能启动(1.5.x 在 0.1.7 上会卡在 "Failed to load plugins"),Key 会留在 ~/.dsh/settings.yaml.imported 里。插件检测到这种情况时,会在日志和卡片上提示。可以在卡片里重新填 Key,或者把下面这段交给 dsh:
把 dsh 主目录(默认 ~/.dsh)下 settings.yaml.imported 里 web-search-free 段的所有字段,原样写进当前 profile 的 cordis.patch.yml,作为 id 为 web-search-free 的 entry 的 config;该 entry 不存在就新增。保留原文件的注释和格式,改动前先备份。
dsh plugin --profile web update dsh-web-search-free
dsh plugin --profile web remove dsh-web-search-free卸载后 web 搜索/抓取回落到 deepseek-official。注意:
WEB_PROVIDER_CONFIGURED_MISSING。插件是一个 dsh bundle 层:cordis.patch.yml 插入 web-search-free 行,并把 web 行的 searchProvider / fetchProvider 指向它。宿主半边(src/index.ts)注册搜索与抓取 provider,按 providerOrder 依次调用;客户端半边(src/client.tsx)提供配置卡片。实现细节见源码注释。
开发提示:@deepseek-ai/* 不能进 dependencies 或非 optional 的 peerDependencies,否则会在用户 profile 里装出一份私有副本、遮蔽宿主实例。改动 package.json 后请运行 pnpm run check(发布前也会自动检查)。
dsh 仍在快速迭代,插件可能有跟不上的时候。遇到问题请提 issue,附上 dsh 版本和报错信息。