AI 搜索每次往模型里塞多少字?抓包实测上下文拼接与搜索注入

举报
yd_223480201 发表于 2026/11/15 08:24:43 2026/11/15
【摘要】 转载自 OpenGEO 项目。抓包实测千问和腾讯元宝:追问不重发历史,不搜索时历史逐字累加,联网搜索每轮向模型注入上万 token 材料,下一轮不搜索即不再保留。

原文链接:https://opengeo.page/observations/002-context-token-probe/

一句话结论:追问时,浏览器不重发之前的对话。千问和腾讯元宝回传的输入 token 显示,不搜索时历史是逐字往上加的;打开搜索后,当轮会再塞进一大段网页和地点材料。这段材料只在当轮看得到,下一轮若不再搜索,输入就跌回「固定前缀 + 已写出的问答」。

观测记录 #001 看到对话历史会改变搜索词和最终推荐。这篇接着问两件事:多轮对话时,模型实际带上了多少历史;打开联网搜索后,检索材料按多大的量进入模型。

材料来自 DeepSeek、豆包、千问、腾讯元宝、Kimi 五个网页端。能算出输入 token 的只有千问和腾讯元宝,另外三家的请求形状可以看,输入量看不到。

本文要点

  • 追问不重发历史【实测】。五家的后续请求都只带新问题和指向上一条的编号。记录到的请求体积大约是 DeepSeek 220 字节、Kimi 550 字节、千问 720 字节、腾讯元宝 800 字节、豆包 2.3 KB。豆包那个体积主要来自定位权限等客户端信息,不是历史正文。
  • 不搜索时,历史逐字增加【实测】。6 轮等长问题里,千问和腾讯元宝每一轮新增的输入,都接近「上一轮回答 + 这一轮问题」。6 轮内没有出现突然变平的截断。
  • 固定前缀差很多【推断】。第 1 轮输入扣掉问题本身后,千问大约还剩 5700 token,腾讯元宝大约剩 1060 token。请求里没有单独给出系统提示,所以这是估算。
  • 搜索注入是当轮的大头【实测】。腾讯元宝这 6 轮每轮输入 21162 至 25156 token,公开数据里的引用文档数是 17 至 19。千问走通用模型时,1 条搜索词对应回答轮比规划轮多出 6248 至 6696 token,2 条搜索词多出 11295 至 11607 token。
  • 下一轮不搜索,搜索材料就不在了【实测】。千问从 17031 跌到 6933,腾讯元宝从 22657 跌到 2960。两家都能一字不差复述第 1 问的原话,说明问题文本还在,网页原文没有一起留下。
  • 按引用文档数平均,每篇大约 1100 至 1240 token【推断】。这是估算注入除以 cited_docs,不是测到了每一篇的长度。

说明:【实测】是抓包或服务端回传里直接读到的。【推断】是用这些数字做的估算。【未知】是没有下发、因此不能判断的。

追问时,浏览器会把之前的对话重发一遍吗?

不会。五家后续请求都只带新问题和消息编号【实测】。

五家各开新会话,连续追问本地餐饮问题,记录每一轮的 POST。没有一家在追问时重发历史全文【实测】。

平台 追问时实际发送的字段 请求体积 证据
DeepSeek parent_message_id 递增,加新的 prompt 约 220 字节 【实测】
Kimi chat_id,加 message.parent_id,加新的 blocks 约 550 字节 【实测】
千问 parent_req_id,加 session_id,messages 里只有新消息 约 720 字节 【实测】
腾讯元宝 会话 ID 在 URL 里,正文是新的 prompt 约 800 字节 【实测】
豆包 conversation_id,加 last_message_index,加新问题 约 2.3 KB 【实测】

因此,从浏览器发出去的请求看不出模型读了多少历史。豆包的 2.3 KB 也不能当成历史正文,里面主要是 client_meta 一类的客户端字段【实测】。有没有人能用改过的请求骗过服务端,这次没有测【未知】。

五家里,千问和腾讯元宝在响应里给了每轮输入 token。DeepSeek 这次只看到会话累计用量,豆包和 Kimi 没有下发 token 统计【实测】。下面的输入量结论只覆盖千问和腾讯元宝。

不联网搜索时,模型看到的历史是全文还是摘要?

这 6 轮里是逐字往上加,没有出现截断【实测】。

千问和腾讯元宝各开一个新对话,明确要求不联网。连续发送 6 轮字数相同的问题,每轮 42 字:前半句是「不要联网搜索。把这句话翻译成英文,再用中文写约100字赏析:」,后接一句 12 字的日常描写。遥测里这 6 轮的搜索次数和工具调用都是 0【实测】。

如果历史是全文拼接,那么:

残差 = 本轮输入 - 上一轮输入 - 上一轮输出

残差应该接近「本轮这句 42 字的问题 + 固定的消息分隔」。6 轮的数如下【实测】。

轮次 千问输入 千问输出 千问新增输入 千问残差 元宝输入 元宝输出 元宝新增输入 元宝残差
第 1 轮 5748 133 — — 1086 112 — —
第 2 轮 5933 151 +185 52 1223 130 +137 25
第 3 轮 6120 149 +187 36 1377 133 +154 24
第 4 轮 6305 160 +185 36 1537 153 +160 27
第 5 轮 6502 163 +197 37 1717 133 +180 27
第 6 轮 6700 156 +198 35 1876 139 +159 26

从第 3 轮起,千问残差停在 35 至 37,腾讯元宝停在 24 至 27。第 2 轮千问残差是 52,比后面多出约 16。增长没有在某一轮突然变平【实测】。多出来的 16 个 token 像是多轮消息多了一段固定开头,但响应里没有单独标出这段模板【推断】。

第 1 轮输入扣掉问题本身以后,千问大约还剩 5700 token,腾讯元宝大约剩 1060 token【推断】。千问这一路的模型名是 qwenchat-fast-complex-base,腾讯元宝请求里写的是 hunyuan_gpt_175B_0404【实测】。差出来的部分包含什么,请求里没有分开【未知】。

打开联网搜索后,服务端往模型里塞了多少字?

腾讯元宝每轮输入约 2.1 万至 2.5 万 token。千问走通用模型时,搜索材料按搜索词条数增加;同一会话里还会换到另一个模型名【实测】。

另开新会话,要求联网。连续发送等长问题,每轮 34 字,问苏州老字号的地址、招牌菜和人均价格。两家的顺序不一样。千问是松鹤楼、得月楼、朱鸿兴、黄天源、采芝斋、陆稿荐。腾讯元宝第 2 轮是陆稿荐,第 3 轮才是得月楼。元宝还有第 7 轮,再次提交陆稿荐;这一轮只有 web_search,没有 poi_search,输入 24843,引用文档数 19。下面的表只用前 6 轮。

腾讯元宝:前 6 轮的引用文档数是 17 至 19

这 6 轮都同时出现了 poi_search 和 web_search【实测】。表里的引用文档数是公开文件 context_probe.jsonl 的 cited_docs。本地汇总 ctx-results.json 里同一轮的 docs 是 37、35、35、33、37、35,不是这个数,公开文件也没有放字符总长,所以这里不用。

轮次 询问对象 输入 token 输出 token 引用文档数 减去不搜索同轮输入
第 1 轮 松鹤楼 24616 391 19 约 23530
第 2 轮 陆稿荐 23219 288 18 约 21996
第 3 轮 得月楼 21162 254 18 约 19785
第 4 轮 朱鸿兴 21312 366 17 约 19775
第 5 轮 黄天源 25156 307 19 约 23439
第 6 轮 采芝斋 21769 416 18 约 19893

最后一列用的是另一段「不搜索」对话的同序号轮次,不是从同一个会话里扣掉搜索结果。问题和已经积累的回答都不一样,所以它是估算,不是精确的搜索材料长度【推断】。数量级是清楚的:这 6 轮的输入比不搜索时大一个数量级,每轮都在 2 万 token 上下【实测】。

千问:通用模型按搜索词增加,老字号问题会换模型

千问的 chat_odps 把一轮拆成两段:规划轮 R1,回答轮 R2【实测】。下面把老字号实验、餐饮追问和主会话放在一起。

会话与轮次 提问内容 模型名 规划轮 R1 搜索词数 回答轮 R2 R2 减 R1
老字号 T1 松鹤楼地址、招牌菜和人均 rag-fliggy-308x — — 8015 没有这段拆分
老字号 T2 得月楼地址、招牌菜和人均 rag-fliggy-308x — — 7980 没有这段拆分
老字号 T3 朱鸿兴地址、招牌菜和人均 qwenchat-fast-complex-base 6004 1 12252 6248
老字号 T4 黄天源地址、招牌菜和人均 qwenchat-fast-complex-base 6135 1 12831 6696
老字号 T5 采芝斋地址、招牌菜和人均 rag-fliggy-308x — — 8290 没有这段拆分
老字号 T6 陆稿荐地址、招牌菜和人均 rag-fliggy-308x — — 8871 没有这段拆分
餐饮追问 T1 苏州值得去的百年老字号 qwenchat-fast-complex-base 5736 见注 17031 11295
主会话 Q1 苏州当地有名的护肤品 qwenchat-fast-complex-base 7626 见注 19233 11607

搜索词数要分开看。T3、T4 的 1 条,来自 context_probe.jsonl 的 search_query_count。餐饮追问和主会话这两行,公开的 token 记录没有这个计数。queries.jsonl 里,两行都有 2 条页面展示的搜索词,字段是 multi_load 的 query_list;同一轮还有别的改写字段,不能把它们加进去当成 3 条或 4 条。本地 qwen-context-growth.json 的 searchQ 也是 2,但 qwen-server-telemetry.json 没有导出这个字段。

R2 减 R1 是同一轮里的两个数,这个减法是直接读到的【实测】。把它解释成「每条展示搜索词大约分到 5600 至 6700 token」,目前只有这四轮【推断】。

同一串老字号问题里,T1、T2、T5、T6 的模型名是 rag-fliggy-308x,T3、T4 仍是 qwenchat-fast-complex-base【实测】。所以模型名不是整段会话锁死的。飞猪这一路没有给出 R1、R2 和搜索词条数,内部用了什么材料看不到【未知】。

单篇网页能分到多少?搜到的内容会留到下一轮吗?

按公开的引用文档数除,每篇大约 1100 至 1240 token。下一轮一旦不搜索,万级的搜索输入不会留下【推断;跌落本身是实测】。

1. 每篇大约 1100 token,是除出来的

  • 腾讯元宝前 6 轮输入约 2.1 万至 2.5 万 token,引用文档数是 17 至 19。用上表估算的搜索注入除以这个数,大约每篇 1100 至 1240 token【推断】。本地汇总的 docs 是 33 至 37,字符总长约 3 万至 4 万,两个数都没进公开文件,不拿来当每篇长度。
  • 千问主会话 Q1 的 rerank_doc_count 是 10。同一轮 R2 比 R1 多 11607 token。10 篇一起分这 1.1 万 token,平均大约 1100 token,和「一条展示搜索词」不是同一个口径【推断】。Q2「问兰药业是什么」的 rerank_doc_count 是 0,不能把 10 篇套到这一问上【实测】。
  • 千问 Q1 的 web_search@ai_retriever 耗时 1141 毫秒,Q2 是 1028 毫秒。首包延迟分别是 2512 毫秒和 1972 毫秒【实测】。这是检索器这一次调用的耗时,不是目标网页的首字节时间,响应里也没有超时阈值【未知】。

2. 关掉搜索的下一轮,输入会跌下去

一组是「先搜索两轮,再明确要求不搜索」【实测】。

轮次 提问 千问输入 腾讯元宝输入
第 1 轮 苏州百年老字号餐饮,联网搜索 17031(规划轮 5736) 21140
第 2 轮 哪家适合带孩子,联网搜索 8943(模型名为 rag-fliggy-308x) 22657
第 3 轮 不用搜索,一句话总结刚才聊了什么 6933 2960
第 4 轮 不用搜索,重复上一句 7011(加 78) 3026(加 66)
第 5 轮 不用搜索,复述第一个问题的原话 7066(加 55) 3421

第 3 轮起不再搜索,千问从 17031 跌到 6933,腾讯元宝从 22657 跌到 2960【实测】。6933 接近千问不搜索实验里的水位。第 5 轮两家都复述出了第 1 问的原话【实测】。

这只能说明:在这次「明确要求不搜索」的轮次里,之前那一万多 token 的搜索输入没有留在新的输入里。用户如果继续用一句会触发搜索的话来追问,服务端会不会再搜、会不会仍丢掉上一轮材料,这次没有测【未知】。

千问和腾讯元宝这次对得上的拼法是【推断】:

本轮输入 = 固定前缀
        + 此前各轮的「问题 + 最终回答」
        + 本轮如果搜索,再加本轮的搜索材料
        + 本轮问题

这对内容作者意味着什么?

  • 不要把平均值写成一条硬配额。 按公开的引用文档数除,元宝大约是每篇 1100 至 1240 token;按千问重排保留的 10 篇除,大约是 1100 token。这足够提醒人不要把唯一的事实埋在长背景后面,但这次没有看到检索器在第几个字截断【推断】。
  • 没被写进回答的材料,在一次不再搜索的追问里用不上。 证据只到这里:下一轮被要求不搜索时,模型还能复述上一轮的问题和回答,输入里已经没有上一轮那一万多 token。不能推广成「所有第二轮追问都会把来源名单清掉」【实测的范围见上一节】。
  • 不能从 1.1 秒推出「网站必须 1 秒内响应」。 1141 毫秒和 1028 毫秒是千问检索器整次调用的耗时。这里面有查询、检索服务和结果组装,没有分成每个目标网站的 TTFB,也没有给出超时就被丢弃的阈值【未知】。

常见问题

用户追问时,AI 会重新阅读上一轮搜出来的网页原文吗?

千问和腾讯元宝在下一轮被明确要求不搜索时,输入 token 会从一万多跌到只剩固定前缀和此前的问答。留下的是上一轮的最终回答,不是上一轮的网页原文。豆包、Kimi 和 DeepSeek 没有下发输入 token,看不出是不是同样处理。

AI 搜索一次能读完一整篇长文章吗?

这次没有测到截断位置。公开数据里,腾讯元宝前 6 轮的引用文档数是 17 至 19。用估算的搜索注入除以这个数,大约每篇 1100 至 1240 token。这是平均值,不是每一篇的实测长度。

为什么同一个对话里,千问有时走网页搜索,有时换成另一个模型?

六轮句式相同的老字号问题里,四轮的模型名是 rag-fliggy-308x,两轮是 qwenchat-fast-complex-base。模型名按轮变化,飞猪这一路内部检索了什么没有下发。

为什么千问和腾讯元宝的固定输入差这么多?

不搜索的第一轮,扣掉问题本身之后,千问大约还剩 5700 token,腾讯元宝大约剩 1060 token。请求里没有单独的系统提示字段,这个差是用输入减去问题估算的。

测试方法与局限

  • 发布时间:2026-11-13。抓包时间是 2026-10-30 23:00 至 2026-10-31 03:05(北京时间)。6 轮控制实验集中在 10 月 31 日 01:52 至 03:05;护肤品主会话和餐饮追问是同一段抓包里更早的会话,不是 #001 的医美问题。
  • 条件:单账号,桌面 Chromium,用 CDP 记录请求和流式响应。出口是苏州电信。千问遥测里的 user_city 是苏州市、user_prov 是江苏省【实测】。
  • 能看到:五家追问请求的字段;千问和腾讯元宝每轮的输入、输出 token;千问的模型名、R1/R2、老字号实验的搜索词计数、检索耗时和 rerank_doc_count;腾讯元宝的引用文档数。本地还有召回资料数和字符总长,但公开文件没有。
  • 看不到:豆包、Kimi、DeepSeek 的输入 token;两家都没有下发 cached_tokens;6 轮以后会不会截断;rag-fliggy-308x 内部的材料;每个目标网站的响应时间和超时阈值。
  • 平台页只收录这次能分开写的两家:千问、腾讯元宝。

数据与复算

公开数据集 Maodian/opengeo-observation-001 里,这篇用到三个文件:data/context_probe.jsonl、data/signals.jsonl、data/queries.jsonl。下表的筛选条件都指这三个文件。本地的 ctx-results.json、qwen-context-growth.json、qwen-server-telemetry.json 是同一次抓包的汇总,没有放进数据集。

文中的数字 怎么复算 结果
千问不搜索:5748、5933、6120、6305、6502、6700 context_probe.jsonl,platform=qwen、condition=search_off_prompt,读 prompt_tokens 和 completion_tokens 第 3 至 6 轮残差为 36、36、37、35
元宝不搜索:1086、1223、1377、1537、1717、1876 同文件 platform=yuanbao、condition=search_off_prompt 第 2 至 6 轮残差为 25、24、27、27、26
元宝联网输入 21162 至 25156,引用文档 17 至 19 同文件 condition=search_on_prompt 的前 6 轮,读 prompt_tokens 和 cited_docs;第 7 轮单独是 24843 和 19 与表中一致
千问 T3、T4 相差 6248、6696,搜索词数为 1 同文件 qwen、search_on_prompt 的 turn 3 和 4;per_round_prompt_tokens 的后一个减前一个,search_query_count 为 1 12252 减 6004;12831 减 6135
追问和主会话相差 11295、11607 signals.jsonl,千问 followup_recall turn 1 的 token_usage 是 17031;main turn 1 是 19233。规划轮 5736 和 7626 没有单独进公开文件,只能从本地 qwen-context-growth.json 和 qwen-server-telemetry.json 的分轮字段复算 17031 减 5736;19233 减 7626
这两行的展示搜索词各有 2 条 queries.jsonl,query_source 为 multi_load 的 query_list:followup_recall turn 1 和 main turn 1 不要把同轮其他 query_source 的改写字段加进去
不搜索后千问跌到 6933 signals.jsonl,qwen、followup_recall、turn 1 和 turn 3 的 token_usage 17031 到 6933
元宝从 22657 跌到 2960 本地追问遥测的 promptTokens。signals.jsonl 和 context_probe.jsonl 都没有这两个数 不能只用公开文件复算
Q1 重排篇数为 10,Q2 为 0 signals.jsonl,signal=rerank_doc_count,qwen、main、turn 1 和 turn 2 10;0
检索耗时 1141 毫秒、1028 毫秒 只在本地 qwen-server-telemetry.json 的 tool 字段里,没有进公开数据集 公开文件不能复算这一行

原文链接:https://opengeo.page/observations/002-context-token-probe/

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。