前言¶
在 DeepSeek Harness(DSH)里用官方 @deepseek-ai/dsh-web-search-deepseek 做联网搜索时,插件会直接 fetch 调用 api.deepseek.com/anthropic/v1/messages,走原生 server tool web_search_20250305。响应体里的 usage 既不会进入会话日志,也不会被上层统计看到——若你还想用 dsh-turn-cost 一类插件做整会话成本核算,搜索这一段调用开销相当于「黑盒」。
下面介绍社区插件 dsh-search-audit(维护者 WhAIthere,分类 admin-security):在 Host 进程里只读包一层 globalThis.fetch,把符合条件的搜索响应里的 usage 追加写入本地 JSONL,请求与响应本身不改、不截断。
这是什么¶
dsh-search-audit 是 DSH Host 插件(npm 包名 dsh-search-audit,当前资料中版本 0.1.0,MIT 许可证,要求 Node >=20)。它不做计费折算,只落盘原始 token 字段,价格策略交给下游消费者,避免两处维护单价。
SkillHub 目录页与 GitHub 简介一致:Read-only observer for native DeepSeek Search calls in DeepSeek Harness (dsh): appends each call’s token usage to ~/.dsh/search-usage.jsonl so accounting plugins can price it. Requests and responses are untouched.
为什么要单独记搜索 usage¶
官方搜索路径的特点(来自插件 README 说明)可以概括为:
- 调用走 Anthropic 兼容端点
/anthropic/v1/messages,且 body 里包含web_search_20250305。 - 同一路径上的
usage在官方实现里被丢弃,常规会话统计覆盖不到。 - free-search 等普通工具不经过这条链路,本插件也不需要观测它们。
因此若你的目标是「会话级 token / 成本可审计」,需要一条旁路把搜索模型的 usage 单独记下来。
核心功能¶
旁路 fetch,只认目标请求¶
Host 启动后插件自动安装 fetch 包装,无需配置、无需 API key。仅当请求 URL 为 /anthropic/v1/messages 且 body 含 web_search_20250305 时,在响应返回后异步解析 usage 并写日志;其余请求原样透传。
落盘格式¶
默认路径:~/.dsh/search-usage.jsonl(每行一条 JSON)。可用环境变量覆盖:
| 项 | 说明 |
|---|---|
DSH_SEARCH_AUDIT_LOG |
覆盖落盘路径(默认 ~/.dsh/search-usage.jsonl) |
成功示例(字段以 README 为准):
{"ts":1792392407024,"endpoint":"https://api.deepseek.com/anthropic/v1/messages",
"sessionId":"session-0123…",
"model":"deepseek-v4-flash","query":"开源 批量 翻译","maxUses":5,
"ok":true,"status":200,
"usage":{"inputTokens":93,"outputTokens":1874,"cacheReadTokens":0,"cacheWriteTokens":0},
"source":"dsh-search-audit"}
失败调用也会记一条(ok:false、usage:null),便于区分「搜了但失败」和「没搜」。
可靠性与边界¶
README 中强调的约束:
- 纯旁路:不改官方代码、不碰
app.asar;官方升级不会覆盖本插件。 - 记账全程异步并
try/catch,不影响原调用;写失败则少一条记录,不向调用方抛错。 - 只记录原始
usage,不折算金额。 - 若官方改为注入式 fetch / undici 等实现,本插件可能失效,需靠回归测试与真实搜索验证。
安装与启用¶
社区目录 SkillHub - dsh-search-audit 的安装指引为:在 DSH 中安装插件 WhAIthere/dsh-search-audit(页面提供「发送给 DeepSeek Harness 安装」的说明文案)。资料中未给出独立的 CLI 安装命令行片段;安装前请阅读 GitHub 仓库 源码与 LICENSE,确认以当前 DSH 进程权限运行可接受。
启用后随 Host 启动生效,除可选环境变量 DSH_SEARCH_AUDIT_LOG 外无额外配置项。
典型用法与验证¶
消费 JSONL¶
下游插件(如 README 提到的 dsh-turn-cost)读取 ~/.dsh/search-usage.jsonl,按自家价格表把 usage 并入会话成本。本插件不负责读回或展示。
回归测试¶
仓库 README 提供的测试命令(44 项回归,退出码 0 表示 PASS):
node tool/dsh-search-audit/tests/run_tests.mjs
package.json 中另声明 "test": "node tests/run_tests.mjs";以你克隆或安装后的目录结构为准选用对应路径。
适用场景与注意¶
适合:需要在 DSH 内对官方 DeepSeek 搜索做 token 级审计、并与 turn 级记账插件对接的开发者或管理员。
注意:
- 插件在 Host 进程内包装
globalThis.fetch,安装前应审阅源码与 MIT 许可证。 - 只覆盖原生
web_search_20250305搜索链路,不能替代全链路 observability。 - SkillHub 为社区目录站点,与 DeepSeek / 幻方无官方从属关系;插件星标在目录线索中为 0,选用时以实际需求与源码为准。
小结¶
dsh-search-audit 用最小侵入方式补上官方搜索调用丢弃的 usage,写入 ~/.dsh/search-usage.jsonl,方便记账类插件定价。目录页:https://www.skillhub.cn/plugins/WhAIthere/dsh-search-audit;源码与说明:https://github.com/WhAIthere/dsh-search-audit。