按会话路由的模型供应商自动匹配搜索端点与凭据
28.6/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/9/19 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add NattoCB/dsh-web-search-session-follow该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:待复验
是什么
dsh 原生插件 · model
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 59 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件发起外部网络请求
查看扫描证据(共 8 处,展示前 8 条)
- 写入本地文件src/index.js:58
mkdirSync(dir, { recursive: true }); - 写入本地文件src/index.js:59
appendFileSync(join(dir, "audit.jsonl"), `${JSON.stringify({ time: Date.now(), ...entry })}\n`); - 发起网络请求src/index.js:159
const response = await fetch(endpoint, { - 发起网络请求client/client.js:23
const res = await fetch("/web-search/" + path, { - 读取本地文件src/runtime-config.js:67
return normalizeRuntimeConfig(JSON.parse(readFileSync(runtimeConfigPath(root), "utf8"))); - 写入本地文件src/runtime-config.js:84
mkdirSync(join(root, "web-search-session-follow"), { recursive: true }); - 写入本地文件src/runtime-config.js:86
writeFileSync(tmp, JSON.stringify(next, null, "\t") + "\n"); - 写入本地文件src/runtime-config.js:87
renameSync(tmp, file);
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 全包扫描 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 按会话路由匹配服务商
- 配置端点与凭据
- 内置官方兜底
README
由 DeepSeek 最新模型翻译生成dsh-web-search-session-follow
一个 DSH web_search provider,跟随对话的路由模型 —— 按 provider 使用各自的端点、凭据与协议方言。
每次调用读会话真实路由 —— ctx.web.registerSearchProvider
一个替换 DeepSeek Harness 内置 web_search 搜索后端的 provider 插件。
内置实现把端点和凭据写死为 DeepSeek 官方(自配网关的用户必现认证失败);本插件改为按当前会话路由的 model provider 查路由表:用该 provider 自己的端点、凭据引用与协议方言完成搜索,未识别的 provider 默认回退内置官方方案,整条链路在报错中透明说明。English: per-session routed search with a configurable dialect table and a built-in official fallback.
能力
| 能力 | 机制 |
| 运行时优先级链 | 每次搜索按优先级列表从上到下尝试,第一个成功的路由生效;特殊键 session = 跟随当前会话路由。
展开完整文档(README 剩余 1 节)
dsh-web-search-session-follow
一个 DSH web_search provider,跟随对话的路由模型 —— 按 provider 使用各自的端点、凭据与协议方言。
每次调用读会话真实路由 —— ctx.web.registerSearchProvider
一个替换 DeepSeek Harness 内置 web_search 搜索后端的 provider 插件。
内置实现把端点和凭据写死为 DeepSeek 官方(自配网关的用户必现认证失败);本插件改为按当前会话路由的 model provider 查路由表:用该 provider 自己的端点、凭据引用与协议方言完成搜索,未识别的 provider 默认回退内置官方方案,整条链路在报错中透明说明。English: per-session routed search with a configurable dialect table and a built-in official fallback.
能力
| 能力 | 机制 |
| 运行时优先级链 | 每次搜索按优先级列表从上到下尝试,第一个成功的路由生效;特殊键 session = 跟随当前会话路由。设置 UI「Web 搜索」面板可拖动调整,保存即生效(持久化到 /web-search-session-follow/config.json,每次调用现读、无需重启) |
| 会话跟随路由 | session 键实时读 agents.currentInitiator().session.requestHeader().config 的 {provider, model},不缓存、不猜测 |
| 方言路由表 | 路由条目 protocol 三选一:anthropic-web-search(Anthropic Messages + server tool web_search_20250305)|openrouter-online(chat/completions + 服务端 web 插件,解析 url_citation 注释)|zai-web-search(智谱 bigmodel Anthropic 兼容端点,web_search_prime 引擎,解析 tool_result 块的字符串化 JSON 内容) |
| 官方方案回退 | 优先级链全部失败才回退内置官方路由(同 @deepseek-ai/dsh-web-search-deepseek 默认值);错误信息列出每一跳的失败原因;fallback: none 可关闭(省余额) |
| 设置 UI 面板 | Web GUI 设置弹窗侧栏「Web 搜索」:优先级排序(↑↓/增删)、回退策略切换、每路由一键连通性测试(真实发一次搜索) |
| 凭据分平面 | 解析顺序与内置一致:字面 apiKey → credentials 服务(apiKeyEnv 引用)→ 环境变量;聊天 key 与搜索 key 各管各的 |
| 模型跟随 | 路由未指定 model 时:anthropic 方言用会话当前模型(兜底 deepseek-v4-flash)、openrouter 方言用会话当前模型、zai 方言固定用路由模型(兜底 glm-5.3-flash,绝不继承外来会话模型名) |
| 调用审计 | 每次搜索追加一行 JSON 到 /web-search-session-follow/audit.jsonl(provider/endpoint/fallback/失败跳 attempts 标记,不含密钥)。不写会话日志,原因见「会话日志安全」 |
会话日志安全
本插件绝不向会话日志写自定义事件类型。 Harness 核心对事件类型采取白名单制(@deepseek-ai/dsh-session 的 KNOWN_SESSION_EVENT_TYPES),且 Session.append 不支持把事件标记为 ignorable。写入白名单之外的自定义类型后:会话在内存中一切正常,但任何冷读(子代理目录树、历史打开、续跑、automation 汇总)都会抛 SessionFormatUnsupportedError: ... unknown to this harness and not marked ignorable; refusing to interpret the log — it was likely written by a newer harness——子代理在目录里显示为「不可用」、整个会话无法从磁盘重开。
v0.1.0 曾以 web/session-follow-search-request 事件做调用审计,正踩中此坑(v0.1.1 起改为本地文件审计)。已污染的日志可修复:给对应事件行补 "ignorable":true (信封契约允许、seq 不变),或等上游暴露 ignorable / 类型注册机制后原生解决。
快速开始
前置:DeepSeek Harness(开发者预览版,dsh web 可用)。
本地目录安装(也可推到 GitHub 后 github:owner/repo 安装)
dsh plugin --profile web add /path/to/dsh-web-search-session-follow
在 profile 的 cordis.patch.yml 把搜索选择器切到本插件:
- id: web
config:
searchProvider: session-follow
重启 dsh web 生效。回滚 = 删除上面的覆盖段,恢复内置行为。
配置
路由表随插件自带默认值安装,可在插件的 cordis.patch.yml 或安装副本中调整:
config:
priority: [zai-coding-cn, openrouter] # 部署种子优先级;首次在设置 UI 保存后由 config.json 接管
fallback: official # official(默认)| none:链全失败时回退官方方案还是保持报错 routes: zai-coding-cn: # 智谱 bigmodel:Anthropic 兼容端点 + web_search_prime 引擎 protocol: zai-web-search baseURL: https://open.bigmodel.cn/api/anthropic/v1 apiKeyEnv: ZAI_CODING_CN_API_KEY model: glm-5.3-flash deepseek-official: # key = 会话里看到的 provider id baseURL: https://api.deepseek.com/anthropic/v1 apiKeyEnv: DEEPSEEK_API_KEY model: deepseek-v4-flash # 缺省跟随会话模型(anthropic 方言缺省内置默认) openrouter: protocol: openrouter-online # OpenRouter 自己的搜索方言 apiKeyEnv: OPENROUTER_API_KEY maxResults: 5 # 注入的搜索结果条数
baseURL: https://
apiKeyEnv:
| 字段 | 适用方言 | 说明 |
| priority | 全部 | 优先级链(路由 key 数组,可含 session);来源优先级:设置 UI 保存的 config.json > 插件 config 种子 > ["session"](v0.1 兼容行为) |
| protocol | 全部 | 缺省 anthropic-web-search;OpenRouter 网关填 openrouter-online;智谱 bigmodel 填 zai-web-search |
| baseURL | 全部 | anthropic/zai 方言自动追加 /messages;openrouter 方言追加 /chat/completions |
| apiKeyEnv / apiKey | 全部 | 凭据引用名 / 字面密钥(二选一,字面优先) |
| model | 全部 | 缺省跟随会话模型(zai 方言固定兜底 glm-5.3-flash,anthropic 方言兜底 deepseek-v4-flash) |
| maxResults | openrouter | 服务端 web 插件注入的结果条数(默认 5) |
| maxTokens / maxUses / apiVersion | 全部 | 同内置默认(4096 / 5 / 2023-06-01;openrouter maxTokens 默认 1024) |
运行时优先级(设置 UI)
Web GUI → 设置 → 侧栏「Web 搜索」:
- 优先级链:列表即尝试顺序,↑↓ 调序、✕ 移除、下拉加回;每一项可「测试」真实发一次搜索并显示结果数与样例链接。
- 回退策略:official(链全失败后用内置 DeepSeek 官方方案兜底)/ none(不回退,省余额)。
- 保存写入 /web-search-session-follow/config.json,下一次搜索立即生效,无需重启。
- 面板背后的 HTTP API(同机可用):GET /web-search/config、POST /web-search/config {priority?, fallback?}、POST /web-search/test {key}。
常见问题
和内置 provider 的区别?
内置 deepseek-official 只有一个写死的端点 + 一把固定引用的 key;本插件按会话路由切换端点/凭据/方言,并对未知 provider 回退而非报死。参见上游讨论 deepseek-harness #408、#1078。
任意网关都能接吗?
只有说这三种方言之一的网关可以纯配置接入。网关完全不支持服务端搜索时(如仅 OpenAI chat-completions 的代理),换 key 无法修复——要么让它走回退的官方方案,要么在 routes 里把它指向一个支持搜索的端点。
成本怎么算?
三种方言都是「一次搜索 = 一轮带搜索结果的完整模型调用」:anthropic/zai 方言计费在端点所属 provider (zai 的 web_search_prime 在实测中 usage.server_tool_use.web_search_requests: 0,疑似随编码套餐计,不单扣资源包,但请自行留意账单),openrouter 方言按你 OpenRouter 账号上的模型计费。
开发
npm test # node --test,35 例:优先级链 / 三方言响应映射 / 路由决策 / 回退链路 / 凭据解析序 / 运行时配置文件 / 设置 API / 端到端 fetch / 会话日志安全回归
Footer
MIT License · 为 DeepSeek Harness 插件生态编写预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
NattoCB/dsh-web-search-session-follow
按会话路由的模型供应商自动匹配搜索端点与凭据
相关插件 · 模型接入
API 中继安全审计toby-bridges/api-relay-audit
面向 AI API 中转与 LLM 代理的本地安全审计。
★ 897已汉化DSH
69.4
免费搜索插件DDDMUC/dsh-free-search
DeepSeek Harness 免费搜索插件 —— 无需 API key,零成本,多引擎可切换。 一个插件,给…
★ 850已汉化DSH
68.9
免费联网搜索liustack/modsearch
在官方 App 里模型能联网,切到 API 就不能了。ModSearch 把联网补回来:网页搜索、X…
★ 863已汉化DSH
68.5
OpenCode 免费模型FishBottle7/opencode2dsh
在 DSHDeepSeek Harness里原生使用 OpenCode Zen 的免费匿名模型。
★ 385已汉化DSH
67.9
AI 模型网关tingly-dev/tingly-box
Tingly Box Web UI 演示
★ 373已汉化DSH
67.4
WorkBuddy 账号池XDTrees/dsh-xdpool
把你能白嫖的模型额度接进 DSH 同一个池:WorkBuddy 多账号自动容错、十三家扫码登录、76…
★ 359已汉化DSH
67.1
这是你的仓库?认领条目