npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@buddhilive/dsh-web-search-deepseek

v0.1.2-alpha.3

Published

DeepSeek-backed search provider (native web_search via the Anthropic-compatible API) for the DeepSeek Harness web capability seam (ctx.web)

Readme


description: "ctx.web 的 DeepSeek 搜索提供方:部署方如何通过 Anthropic 兼容 Messages API 挂载 DeepSeek 原生 web 搜索,并逐次解析凭据。" kind: "package-reference"

@buddhilive/dsh-web-search-deepseek

English | 中文

概述

有了 dsh-web-search-deepseek,harness 可以通过 DeepSeek 原生搜索检索 web,使用部署已有的 DEEPSEEK_API_KEY。当部署希望使用 DeepSeek 原生搜索、并接受一次搜索在延迟与 token 上消耗一个完整模型轮次时选择它,因为 DeepSeek 不提供专用搜索端点。结果来自 DeepSeek 返回的结构化搜索块,绝不会从回复文本中抓取。凭据缺失时调用以结构化错误失败;响应缺少搜索结果块时会响亮地失败,而非降级。面向模型的 web_search 工具位于 dsh-tool-web。

目录


使用本包

在已加载 web 服务的组合中挂载本提供方;它以 deepseek-official 搜索提供方身份注册,因此当它是唯一可用的搜索后端时,ctx.web.search() 会自动解析到它——也可以用 searchProvider: deepseek-official 固定。

何时选择

当部署希望使用 DeepSeek 原生服务端 web 搜索、且已持有 DEEPSEEK_API_KEY 时选择此后端——提供方复用该凭据引用。一次搜索比专用检索端点更重:DeepSeek 在完整模型轮次内执行搜索,因此每次搜索都要预期一次 Messages 调用的延迟与生成 token,每次请求最多 maxUses 次服务端搜索。当单次搜索的成本或延迟占主导时避免使用它。

最小配置

加载 web 服务与本提供方;密钥在已挂载 ctx.credentials 服务时从其解析,否则从进程环境解析。搜索端点使用 Anthropic 兼容基址(https://api.deepseek.com/anthropic/v1),不同于 LLM(大语言模型)适配器使用的 chat-completions 基址——绝不复用 $DEEPSEEK_BASE_URL。

- name: '@buddhilive/dsh-web'
- name: '@buddhilive/dsh-web-search-deepseek'
  config:
    apiKeyEnv: DEEPSEEK_API_KEY
    baseURL: https://gateway.internal/anthropic/v1

| 字段 | 默认值 | 含义 | |---|---|---| | apiKey | 未设置 | DeepSeek API 密钥字面值;优先使用 apiKeyEnv,避免密钥进入配置。非空字面值优先 | | apiKeyEnv | DEEPSEEK_API_KEY | 每次搜索通过 ctx.credentials 解析的凭据引用;没有该服务时从进程环境解析。值缺失时调用以 WEB_PROVIDER_CREDENTIAL_MISSING 失败 | | baseURL | https://api.deepseek.com/anthropic/v1 | Anthropic 兼容端点基址;追加 /messages。缺省时回退到 $DEEPSEEK_SEARCH_BASE_URL;无法解析时提供方不可用 | | model | deepseek-v4-flash | Anthropic 格式模型名称 | | apiVersion | 2023-06-01 | anthropic-version 标头值 | | maxTokens | 4096 | Messages 请求生成 token 的正整数上限 | | maxUses | 5 | 每次请求使用 web_search 服务器工具的正整数上限 |

生成的配置目录是每个受支持字段及其 JSDoc 的穷尽式真源。上面的条目是提供方 Settings 段的 base 层;叠加其上的用户层会作用于下一次搜索,因为提供方是按次投影该段,而不是在注册时固化它。

搜索返回什么

content 始终省略:DeepSeek 的提供方文本不作为答案受到信任。sources[] 来自 web_search_tool_result 块内的 web_search_result 条目——url、title、publishedAt 取自 page_age——snippet 在存在摘录时按 URL 关联的 cited_text 条目拼接。结果按 URL 去重,且由于 DeepSeek 不公开结果数量旋钮,服务通过截断并标记来强制执行 maxResults。

请求日志

由发起 agent(智能体)运行的搜索会在发出请求前一刻,追加仅用于日志的 web/deepseek-search-llm-request 会话事件。其中包含已解析端点、API 版本,以及发送给 DeepSeek 且不含密钥的精确 JSON 请求体;不包含标头和凭据。发出请求前发生凭据失败或取消时不会创建事件,而发出请求后的 HTTP 或响应失败会保留本次请求尝试的持久记录。

失败与恢复

失败抛出携带可按机器路由 code 的 WebError:凭据缺失为 WEB_PROVIDER_CREDENTIAL_MISSING,调用方取消为 WEB_ABORTED,提供方或传输失败,包括响应中没有 web_search_tool_result 块,为 WEB_PROVIDER_ERROR。HTTP 重定向会在接触 Location 指向的目标之前被拒绝。请求发出后的每项失败都会指出已解析的搜索端点,并说明搜索端点配置独立于聊天端点。如果该端点不符合用户预期,错误消息会要求会话模型指导用户进入 Settings > Plugins > Plugin configuration > Web search,修改 Endpoint 字段并保存。该页面不可用时,消息会把 DEEPSEEK_SEARCH_BASE_URL 和 web-search-deepseek.baseURL 作为部署配置方式。模型不得替用户选择或修改端点。面向模型的 web_search 工具会在自己的错误包装层内呈现这段文本。


理解实现

本节解释提供方背后的设计决策;可观察行为已在使用本包中完整说明。

设计理念

本提供方建立在两项承诺之上:

  • 只取结构化块。 DeepSeek 在服务端执行搜索并返回结构化的 web_search_tool_result 块;提供方解析这些块,绝不从模型文本中抓取 URL。严格模式下,没有此类块的响应会抛出 WEB_PROVIDER_ERROR,而非降级。
  • 一个凭据,逐次解析。 提供方复用 DEEPSEEK_API_KEY 引用(不新增密钥),但不复用 $DEEPSEEK_BASE_URL,因为搜索使用 Anthropic 兼容 Messages API。已挂载的凭据服务具有权威性;没有该服务时回退到启动进程的环境。按次解析意味着在 Web 的 Models 页中存储或轮换的密钥无需重启,即可用于下一次搜索。

源码地图

| 文件 | 职责 | |---|---| | src/index.ts | 插件入口:配置 schema、Settings 段安装、逐次选项投影 | | src/provider.ts | DeepSeekSearchProvider:Messages 请求分发、块解析、引用拼接、凭据解析 | | src/types.ts | 搜索响应的 Anthropic 协议类型 | | src/invariant.ts | 不变式伴生插件(无运行时不变式;约定在服务处强制执行) |

请求流程

每次搜索先把当前 Settings 段投影为提供方选项——端点、模型、密钥引用、上限——然后通过 ctx.credentials(或环境)解析凭据引用,追加仅用于日志的会话事件,并以原生 web_search 服务器工具分发 Messages 请求。响应中的 web_search_tool_result 块变为 sources[];文本块中的 cited_text 条目按其 URL 拼接为 snippet;结果按 URL 去重;服务在返回路径上强制执行请求的来源上限。


进一步探索

当包级约定不够用时阅读以下页面。它们从共享词汇逐步进入服务、面向模型的工具与设计依据。


模型体验

辅助 DeepSeek 搜索请求

模型看到的内容

独立的 DeepSeek 模型会原样接收 Perform a web search for the query: <query> 作为用户文本,并收到一个原生 web_search 服务器工具定义。该请求不属于会话模型上下文。

Token 影响

每次搜索都会产生独立的提供方输入与输出 token;maxTokens 限制生成输出,maxUses 限制原生搜索次数。

KV Cache 影响

与会话请求缓存相互独立。辅助指令与原生工具定义可以形成稳定前缀,但查询或模型路由的每次变化都会阻止从首个差异起的复用。

间接的会话工具结果

模型看到的内容

通过 dsh-tool-web,会话模型会看到结构化搜索块中去重后的 URL、标题、日期与引用 snippet;提供方文本不会作为答案受到信任。该提供方的具体失败消息包括带有处理指引的凭据缺失消息、DeepSeek search credential resolution failed: <error> 和 DeepSeek search aborted。请求、HTTP、原生搜索和响应正文失败会追加已解析端点及前述条件式配置指引。错误包装属于消费方。

Token 影响

注册不会直接产生会话 token。结果 token 随返回源与 snippet 增长,随后服务强制执行请求的来源上限。

KV Cache 影响

仅追加;新可见内容位于可复用请求前缀之后,不会使现有 KV Cache 条目失效。

已知限制与延期工作

这些限制说明提供方在哪些情况下昂贵或不完整。它们是当前包约束。

  • 一次搜索消耗一个完整的 Messages 模型轮次——产生延迟与生成 token,最多执行 maxUses 次服务端搜索;DeepSeek 不公开专用检索端点。
  • 动态凭据的可用性在操作内部解析——同步可用性检查可以确认解析器存在,但无法查询异步凭据存储,因此选中的无密钥提供方会使搜索以 WEB_PROVIDER_CREDENTIAL_MISSING 失败;稳定的 web_search schema 仍保持注册。
  • 超量返回的来源仍消耗 token——协议没有结果数量旋钮,maxResults 只能由服务在事后截断。
  • 未引用的结果没有 snippet——只有当文本块引用(cited_text)匹配其 URL 时,来源才会获得 snippet。

开发备注

本开发备注是维护者的工作上下文:开放问题与尚未决定的探索方向。它明确不具权威性——已交付的行为、限制与既定理由以上文和相关 Agent Note 为准。

未来:专用检索端点

能够避免完整模型轮次的 DeepSeek 原生搜索端点将消除主要成本;在 DeepSeek 公开此类端点之前,本提供方仍是 Messages 调用适配器。