核验清单
- ✓账单里把模型输入/输出 token 和联网搜索按次分成两列,不要用 token 合计解释搜索费。
- ✓在代码和百炼应用里搜
enable_search、web_search、forced_search,确认是否仍为打开。 - ✓DashScope 响应看
search_info和usage.plugins。OpenAI 兼容协议看输入 token 是否远超问题本身。 - ✓核对接入地域。华北2(北京)的 turbo 单价,不能套到新加坡的 agent。
- ✓不要把 MCP 广场前 2000 次免费,当成内置联网搜索的免费次数。
1. 搜索费不是模型 token 的余数
模型 token 对上了,不代表这张百炼账单对上了。联网搜索文档把内置搜索写成两段费用:一段是搜索策略,按调用次数收;另一段是检索到的网页被拼进提示词之后,多出来的输入 token,按该模型的标准输入价收。两段挂在同一次 HTTP 上,账单却不是一行。
账单说明把这件事写进了「没怎么用却欠费」:联网搜索等附加功能按次后付费,和模型推理分开出账。代码或历史应用里只要还留着 enable_search,人不打开控制台,每次被调用仍会产生搜索费。停对话窗口、停看控制台,都不是关开关。
财务若只按「这个月这个模型多少钱」汇总,会把按次费摊进 token 单价,然后有人去换更便宜的模型。该关的是搜索开关和接入地域,不是权重。模型名相同,只能说明 token 那一列用的是同一张价目,说明不了搜索有没有另开一张。
2. 单价写在策略和地域上,参数可能被静默忽略
文档写明:内置联网搜索本身不提供免费调用次数。华北2(北京)从 2026-02-27 00:00 起,turbo 每千次 3 元,max 每千次 4 元,这条标准只适用于北京。agent 在北京、美国(弗吉尼亚)、中国香港、日本(东京)、德国(法兰克福)是每千次 4 元;新加坡写成 73.392381 元。同一份代码,接入点换到新加坡,按次单价不是「贵一点」,是另一个数量级。agent_max 的搜索费与对应地域的 agent 同价,网页抓取限时免费,且只适用于 qwen3-max 与 qwen3-max-2026-01-23 的思考模式。
Responses API 更隐蔽。文档写:传入 search_options.search_strategy 会被静默忽略,不会因此触发搜索。是否联网,取决于有没有挂 web_search 工具,以及模型自己的决定。用 Responses API 时,联网搜索工具的计费和 agent 策略相同。兼容层里写着 turbo,账单仍可能按 agent 出。参数被吃掉,不会返回 400,代码审查也看不到报错。
日常查询文档建议用默认 turbo。要多源交叉验证再用 max 或 agent。把 agent 当成「更准所以只贵一点」会漏掉地域。新加坡的 agent 不是北京 turbo 加一块钱,是另一条价目。单价以官方页为准,会改;对账时要记下调用当天的地域,而不是只记下模型名。
3. 开关开着,也不等于这次搜了
enable_search: true 不是「每次都搜、每次都按次扣」。模型可以判断这个问题不涉及实时信息,直接用自身知识回答。要每次都搜,得在 search_options 里设 forced_search: true。强制搜索把偶发的按次费变成每请求一笔,外加每次都把网页拼进输入。评测集若默认强制联网,token 账单和按次账单会一起跳。
限流是另一条静默路径。联网搜索 15 RPS,按阿里云主账号算,所有 API Key、所有模型加在一起,不按单个模型拆池。超出时 API 不报错,搜索链路不触发。监控只看 4xx/5xx,什么都不会响。用户看到的是「开了联网,回答却像没搜」。这和「搜索免费」不是一回事:没触发,响应里就没有按次的依据;触发了,才进入策略计次。
DashScope 协议能对上。执行了搜索,响应有 search_info,usage 里有 plugins;没执行,两个都没有。OpenAI 兼容协议暂时不能从响应明确判断是否搜过,只能看输入 token 是否远超问题本身。文档的例子是「杭州天气」:不联网时输入约 10 token,联网后变成约 1953。兼容协议的日志若只存 enable_search,会把「请求想搜」记成「已经按次付费」。
还有一种失败看起来像没搜成。搜索结果触发内容安全时,返回 DataInspectionFailed,HTTP 400,正文是无法回答。文档没有写这次 400 就退搜索策略费。拒答不能当成没计次。排查方法是关掉联网再发同一句:若此时能答,拦截来自搜索结果,不是模型本身拒答。兼容协议连 plugins 都没有,只能看输入 token 有没有已经膨胀。
4. 免费额度抵得掉哪一笔
免费额度文档写的是:额度只抵扣模型实时推理。内置联网搜索文档另写:这个功能本身不提供免费调用额度。两句合在一起,按次的策略费不在新人免费额度里;拼进提示词的那些输入 token,仍按模型标准价走实时推理,那一部分才可能被额度、资源包或节省计划抵掉。拿「免费额度还剩很多」去解释搜索费,对的是 token 那一列,不是按次那一列。
MCP 广场的「联网搜索 MCP」是另一本账。同一篇联网搜索文档写明:全部用户前 2000 次免费,用尽后按 29 元/千次,和内置搜索互不抵扣。Kimi 系列在百炼上可以走 enable_search,也可以在智能体里挂 bailian_web_search。名字都叫联网,发票不是一张。把 MCP 的 2000 次免费当成内置 turbo 的免费次数,对账一定差一截。
欠费弹窗也不等于模型 token 超了。账单说明同时列出两种原因:enable_search 仍在被调用;或者同一个阿里云账号下的 ECS、OSS 等按量产品把可用额度打成负数。可用额度是账号级的。先看账单里的产品,再决定是关搜索还是去结别的产品。按量还是「预占 + 月结」,出账不等于钱已经划走。推理账单通常调用后 2 到 10 分钟才出现,停了调用之后仍可能收到延迟出账,欠费数字会在停服后继续变。
5. 对账拆两本账,换卡关不掉搜索
复盘至少留四列:请求里的 enable_search 和 search_strategy、实际接入地域、响应里的 search_info 或 plugins(兼容协议则看输入 token 落差)、账单里模型 token 之外的按次行。四列不一致时,先信响应和账单。参数写了 turbo、Responses API 却按 agent 出,是参数被忽略,不是丢单。HTTP 200 且没有 plugins,是没搜成,不是搜索免费。
搜索费从阿里云账户余额出,不从卡 BIN 出。换一张虚拟卡,关不掉代码里的 enable_search,也改不了新加坡和北京的按次差价。网页席位的自动续费可以和云账户充值分开,例如用可设额度的虚拟卡 RDVCC 去付订阅,避免席位续费和 API 充值抢同一条卡。虚拟卡改变不了 15 RPS 的静默跳过,也改变不了策略费按次单列。