Replies: 3 comments 2 replies
|
这个报告质量很高,表格给的全是源码位置,我逐条对照当前 master( 复核结果(对照 0a53fb5)
唯一微调:你引的 这确实是"刻意设计 + 披露缺口"的组合,且披露缺口有真实成本 设计意图我认同——单 key onboarding 让新手"填一把 key 就能搜索"的体验成立, 这和此前报告的计费错配是同一族(#3552 子代理账单错配、#4077 配额烧光类):辅助模型调用与主会话模型的解耦是平台的合理设计,但"谁在扣哪把 key"必须对用户透明。搜索每次扣一个完整模型轮次的 token(4096 max_tokens),如果用户日常重搜索,官方账户的配额消耗完全可能无感爆掉。 可操作建议
报告值得官方正式回应——这不是"藏得深"的吹毛求疵,是会产生真实账单意外(且涉及 key 复用面)的用户成本问题。 |
|
用我的插件,去tinyfish注册,一天4万次联网搜索。 |
|
是的,而且我deepseek账户没钱了,用的第三方api,也有websearch,但就提示Error: Insufficient Balance |
Uh oh!
There was an error while loading. Please reload this page.
web_search 在会话模型切到第三方 provider 后仍走 DEEPSEEK_API_KEY 独立计费——披露藏在参考页一行里,且从不说破计费后果
一句话总结
web_search由独立 provider(web-search-deepseek,id =deepseek-official)直接调用 DeepSeek 官方 Anthropic 兼容端点,刻意不走会话的 LLM provider(ctx.llm)。用户在 onboarding 存了DEEPSEEK_API_KEY、后来又在 Models 页把会话模型切到第三方 provider 后,会话 token 走第三方账户,而每一次web_search仍用deepseek-v4-flash扣 DeepSeek 官方账户。社区文档仅在多模型路由参考页的表格里一行带过该机制(且只说机制、不说计费后果),快速上手文档与 Web UI 均不提及。源码证据
fetchclient are provider-private and do not usectx.llm"packages/web/web-search-deepseek/src/provider.ts:5deepseek-officialprovider.ts:27https://api.deepseek.com/anthropic/v1(不是 chat-completions 的api.deepseek.com;不复用$DEEPSEEK_BASE_URL,只共享 key)provider.ts:29-35deepseek-v4-flashprovider.ts:38max_tokens: 4096、原生web_search_20250305工具、max_uses: 5)provider.ts:204-213;README:"一次搜索会产生完整模型轮次的延迟与 token 开销"apiKey→ctx.credentials的DEEPSEEK_API_KEY引用 → 进程环境provider.ts:278-300、index.ts:43searchProvider: deepseek-official+apiKeyEnv: DEEPSEEK_API_KEY;注释明言 "Search is a full auxiliary model request with server-side retrieval"packages/bundle/base/cordis.patch.yml:404-417llm-pi-ai(Models 页写入的就是它)与 web seam 无任何关联cordis.patch.yml:88-96packages/web/web-search-deepseek/README.zh.md:15复现与验证
DEEPSEEK_API_KEY(~/.dsh/.credentials.yaml)。llm-pi-ai:段)并把会话模型切过去。web_search。deepseek-v4-flash@/anthropic/v1)。无需抓包即可验证:每次搜索在发出前一刻都会往会话日志追加脱敏的
web/deepseek-search-llm-request事件(provider.ts:117-122),携带已解析的端点和请求体:设计意图(承认这是刻意的)
searchProvider未显式配置时单一可用 provider 自动选中(packages/web/web/src/index.ts:172-194),base 里也显式钉死了deepseek-official。web-search-deepseekREADME、docs/tool-catalog.md"提供方选择置于 ctx.web 之后")。问题:披露存在,但藏得深、且从不说破后果
DEEPSEEK_API_KEY、只说"想用别的 provider / 自建网关,配llm-pi-ai.providers",全文对web_search零提及。llm-pi-aiprofile,但按源码看没有任何界面元素披露搜索的计费归属(此点我未运行 Web UI 实测,如已有披露,本帖降级为"让它可被发现",诉求不变)。影响人群
web_search以WEB_PROVIDER_CREDENTIAL_MISSING失败,且available()无法探测异步凭据存储(README 已知限制),UI 没有任何提示告诉他是哪个能力缺 key。建议方向
searchProvider时,web_search默认跟随会话当前 provider;searchProvider/$DSH_WEB_SEARCH_PROVIDER保留为显式覆盖。核心诉求一句话:要么全耦合,要么全解耦+披露;当前"配置时一个账户、运行时两个账户"的接缝,就是这次计费惊吓的来源。 现在是 Developer Preview,正是定默认值的最佳时机——别等 npm 通道变成正式产品再改。
验证边界
deepseek-official、快速上手文档零提及、多模型路由参考页仅一行机制描述且无计费后果说明。English TL;DR:
web_searchin DSH is executed by a standalone provider (web-search-deepseek, iddeepseek-official) that calls DeepSeek's Anthropic-compatible endpoint (api.deepseek.com/anthropic/v1, modeldeepseek-v4-flash) directly and deliberately does not use the session's LLM provider (ctx.llm). If you store aDEEPSEEK_API_KEYduring onboarding and later switch the conversation model to a third-party provider via the Models page, everyweb_searchkeeps billing your DeepSeek account while conversation tokens bill the third party — two accounts burning under one mental model. The billing consequence is not stated on any user-facing surface: the quickstart never mentionsweb_search, and the multi-model routing reference only notes the mechanism ("Web search uses a separate endpoint, reuses the main key") without ever spelling out the billing consequence. Suggested directions: (A) routeweb_searchthrough the session's active provider by default, keepingsearchProvider/$DSH_WEB_SEARCH_PROVIDERas an explicit override; or (B) keep the decoupling but disclose the attribution in the Models page, the quickstart, and/or a one-time notice on first search. This is Developer Preview — a good moment to settle the default before the npm channel ships.All reactions