AI 搜索如何推荐?抓包实测 5 家国产 AI 的搜索词与引用来源
本文转载自 opengeo.page,原文链接:https://opengeo.page/observations/001-suzhou-yimei/
来源:OpenGEO 项目。原文采用 CC BY 4.0 许可(文中第三方截图、引文与商标除外);本次未转载图片。
一句话结论:AI 搜索不会直接拿你的原话去搜。它会先判断你的位置,把问题改写成多条搜索词,再从搜到的结果里挑出一部分交给模型。这几步各家做法不同,前面聊过什么也会掺进来,所以同一个问题,四家给出的推荐名单只有 2 家重合。
我在 5 家国产 AI 上问了同一句话:「苏州当地有哪些医美?」然后抓包看它们背后的请求。5 家都问了,但数据不齐:搜索词能对比的是豆包、千问、Kimi 3 家;最终回答能对比的是这 3 家加腾讯元宝;DeepSeek 这一问没有纳入对比,只在下一问里看到了多轮检索。这一问里能看到的差异,主要集中在下面三个环节。
图 1:从提问到回答的流程。黑框是这次抓包看到差异的三个环节。
本文要点
-
位置识别:3 家在问题之外处理了位置相关信息,例如 IP 归属地、浏览器定位权限、地区检索工具。
-
搜索词改写:同一句话,有平台改写出 1 条搜索词,有的 3 条,有的 5 条,方向也各不相同。
-
对话历史会进入搜索词和回答:其中一家把上一轮聊过的企业名带进了这一轮的搜索词,回答也按之前聊过的内容整个改了。
-
来源筛选:其中一家检索到 20 条素材,最后只把 5 条送进模型。
-
最终推荐:四家推荐的机构从 6 家到 16 家不等,四家都提到的只有 2 家。
-
对 GEO 的启示:要研究的是 AI 改写后的搜索词,不只是用户输入的关键词;测试推荐率时,会话上下文必须作为变量控制。
说明:诊所和药企名称用 XX 代替。【实测】是抓包里直接看到的,【推断】是根据实测推出来的,【未知】是没抓到或判断不了的。
AI 搜索会获取你的位置吗?
会,至少有 3 家这样做。
| 平台 | 观察到的动作 | 证据 |
|---|---|---|
| 豆包 | 请求里带了 3 项浏览器定位权限状态,没有坐标 | 【实测】 |
| 千问 | 提问前先查 IP 归属地,埋点 user_city 为「苏州市」,意图标为「本地生活-地点周边信息查询」 | 【实测】 |
| 腾讯元宝 | 调用了 region_search 地区检索工具 | 【实测】 |
| Kimi | 未观察到 | 【未知】 |
| DeepSeek | 未观察到 | 【未知】 |
不过问题里已经写了「苏州」,所以这次判断不了定位有没有影响推荐结果【未知】。对本地服务类商家来说,值得关注的是:即使用户没写城市,AI 也可能自己判断出来。
AI 搜索实际搜的是什么词?
不是你的原话。AI 会先把问题改写成搜索词,即「查询改写」(Query Rewriting)。
| 平台 | 条数 | 实际搜索词 |
|---|---|---|
| 千问 | 1 | 苏州当地医美机构及医疗美容医院 |
| Kimi | 3 | 苏州 医美机构 知名 排行榜 2025;苏州 整形医院 公立 医疗美容科;苏州 医美 产业 企业 |
| 豆包 | 5 | 苏州正规医美机构 公立三甲皮肤科 连锁医美 敏感肌;苏州姑苏XX医美诊所介绍;苏州吴中 高新区 医美机构推荐 敏感肌;苏州敏感肌医美面诊避坑;苏州光子嫩肤红血丝机构测评 |
腾讯元宝的改写词这次没抓到,DeepSeek 这一问没有计入。
图 2:同一句话改写出的搜索词,千问 1 条、Kimi 3 条、豆包 5 条。
三家的思路很不一样【实测】:
-
千问基本照原意搜。
-
Kimi 加了排行榜、公立医院和产业方向。
-
豆包拆得最细,敏感肌、面诊避坑、光子嫩肤都单独搜了。不过这个对话里此前聊过护肤,「敏感肌」「红血丝」这类词很可能来自对话历史,不全是它自己拆出来的【推断】。
用户问的是「苏州医美」,AI 实际搜的可能是「敏感肌面诊避坑」。只围着原始关键词做内容,覆盖不到这些搜索。
聊过的内容会影响 AI 搜索吗?
会,而且不只影响搜索词。这次在豆包身上看到了完整的一条链。
搜索词里出现了上一问的企业。 豆包的第二条搜索词是「苏州姑苏XX医美诊所介绍」。我这一问没提过这家诊所,但它和我上一问「XX药业是什么」里的药企同名【实测】。
| 对话轮次 | 内容 |
|---|---|
| 第 2 问 | 「XX药业是什么」 |
| 第 3 问 | 「苏州当地有哪些医美」 |
| 豆包生成的搜索词 | 「苏州姑苏XX医美诊所介绍」 |
回答也按对话历史改了。 豆包的回答开头写「结合你的情况」,列出了几项肤质问题,还说某家机构离我所在的区很近。这些我在这一问里都没说,来自同一对话里更早聊过的护肤内容【实测】。和上一问药企同名的那家诊所,在回答里被单独列为一项,并标为重点【实测】。
脱敏说明:肤质、诊所名称和回答里对这家诊所的评价,这里都不写出。
对话历史出现在了搜索词里,也出现在了最终回答里【实测】。由此推断,AI 改写搜索词和组织回答时,都会参考对话历史【推断】。
要说明的是,豆包这个对话里,同样的三问此前已经问过一轮,「XX药业」在历史里出现了不止一次,影响可能被放大了。千问、DeepSeek 的对话里也有前一轮历史,但这次没看到同样的情况,不能因此说它们不用对话历史【未知】。
这对 GEO 测试影响很大:新开对话直接问,和聊了几轮之后再问,AI 搜的东西可能不一样。
AI 搜到的内容都会用吗?
不会。搜到、读到、引用,是三件事。
千问:检索 20 条,送进模型 5 条。 material_stat 字段显示检索到 20 条素材,最后送进模型的只有 5 条【实测】。这 5 条怎么挑出来的,还原不了【未知】。
图 3:千问检索到 20 条素材,送进模型的只有 5 条。
豆包:抖音和工商信息占比不低。 页面显示参考了 29 篇,我抓到其中 17 条带链接的来源【实测】:
| 来源类型 | 条数 |
|---|---|
| 同名诊所相关(企查查、区政府备案公告、黄页、爱企查、招聘页、点评页) | 6 |
| 抖音视频 | 4 |
| 医院官网 | 2 |
| 中华网 | 2 |
| 其他(杭州网、潮新闻、小荷各 1) | 3 |
此前问护肤品时,29 篇里也有 10 篇来自抖音。工商、备案这类实体信息,同样进入了引用。不过这些只是被引用的来源,不等于全部候选,各自权重多大看不出来【未知】。各平台的部分单独整理成了平台页:豆包、千问、Kimi、腾讯元宝、DeepSeek。
Kimi:一轮检索,引用定位到段落。 Kimi 搜了一轮,回答里标了 12 处引用,来自 8 个不同网页。每处引用都能关联到原网页里的具体段落,不只是一个网址【实测】。
DeepSeek:会根据第一轮结果再搜。 这组数据来自下一问:开着深度思考,问苏州光子嫩肤的价格。它先搜 5 个词拿到 30 条结果,打开 7 个网页;接着搜了 4 个更具体的词,细到「苏州市立医院 东区 光子嫩肤 M22 价格 单次」,再打开 3 个网页,然后才回答【实测】。这是另一道题,不能和其他平台直接比较,但说明有的 AI 会多轮追加检索【推断】。
AI 最后推荐了谁?
四家的推荐名单重合得很少。
| 平台 | 推荐机构数 | 回答的特点 |
|---|---|---|
| 豆包 | 16(公立 6) | 按对话历史定制;单列与上一问药企同名的诊所 |
| 千问 | 12 | 名单偏消费向,另附一张项目价格参考表 |
| Kimi | 10,末尾另列 7 个名字 | 12 处引用都带段落锚点;提醒网上的「十大排名」多出自医美营销网站 |
| 腾讯元宝 | 6(公立 2) | 最克制,每家附地址 |
四家都提到的只有 2 家:一家市属公立医院,一家全国连锁医美【实测】。被三家提到的有 5 家(不算 Kimi 末尾只列名字的 7 家)【实测】。
机构名单本身不是这次要比的,所以除计数外不列名字。回答原文含个人信息和对商业机构的评价,没有公开。
这就回到了开头的问题:位置、搜索词、来源、对话历史,每一步都不同,最后推荐的机构也不同。同一句话,在一家 AI 里被推荐,不代表在另一家也会被推荐【推断】。
这对 GEO 优化意味着什么?
-
研究 AI 改写后的搜索词,而不只是用户的原词。豆包的 5 条搜索词里,4 条带上了人群(敏感肌)、项目(光子嫩肤)、顾虑(避坑)或区域,没有一条是原话。内容能覆盖这些细分问题,才更可能被搜到。
-
测 AI 推荐率时,要控制会话上下文。同一个对话里聊过护肤,豆包的搜索词和推荐名单就都跟着变了。不说明是新会话还是连续会话的推荐率数据,很难复现。
-
被检索、被读取、被引用、被推荐,要分开看,也要分平台看。千问检索到 20 条只送 5 条进模型;四家的推荐名单只有 2 家重合。只看一家 AI 的最终推荐,既解释不了优化为什么有效,也代表不了你在其他 AI 里的位置。
常见问题
AI 搜索和传统搜索引擎有什么区别?
传统搜索直接按关键词返回网页排名。AI 搜索会先改写问题、可能多轮检索,再从结果里挑一部分交给模型生成回答。所以 AI 推荐并不等于「搜索排名靠前的网页」。
为什么不同 AI 对同一个问题推荐不一样?
从这次抓包看,原因至少有三个:位置处理方式不同,改写出的搜索词不同,从检索结果里挑选的来源也不同。之前聊过的内容也会改变推荐。这次四家的推荐名单,只有 2 家重合。
AI 搜索会参考之前的对话吗?
会。这次观察到一家平台把上一轮的企业名带进了搜索词,回答也按之前聊过的内容重新组织。其他平台没观察到,但不能排除。
GEO 优化应该从哪里入手?
先搞清楚 AI 针对你的行业会改写出哪些搜索词,再看哪些类型的来源容易被引用,比如官网、工商备案、短视频、媒体报道。测试时注意区分新会话和连续会话。
测试方法与局限
-
时间:2026-10-30 23:22 至 23:35(CST);Kimi 另行采集,为 10-31 01:34 至 01:37
-
条件:单账号,单次连续对话,苏州电信网络
-
上下文:目标提问是会话第 3 问,前两问是苏州有名的护肤品和「XX药业是什么」。豆包、千问、DeepSeek 的对话里,同样三问此前已经问过一轮(未采集);腾讯元宝、Kimi 是新对话
-
能看到:搜索词、部分检索结果与引用、部分埋点字段、工具调用名;豆包、千问、Kimi、腾讯元宝的最终回答
-
看不到:系统提示词、模型实际读了哪些正文、内部排序规则;腾讯元宝这一问的搜索词,以及 DeepSeek 这一问的回答(DeepSeek 这一问搜了 4 个词,数据里保留了,文中没有统计)
只测了一次,结论不代表平台的普遍表现,只能作为后续控制变量实验的假设。
采集步骤、各平台的模式和未知项,见采集方法。
脱敏后的抓包提取数据(搜索词、来源、工具调用、埋点字段,CC BY 4.0)已公开在 Hugging Face:Maodian/opengeo-observation-001。数据卡逐条列出了文中各项数字对应的记录,并写明了采集时间等细节。最终回答的原文含个人信息和对商业机构的评价,没有放进数据集。
数据与复算
文中大部分数字可以用公开数据自己算一遍。
数据集里有什么
数据集是 Maodian/opengeo-observation-001,复算用固定版本 0ef3c61,CC BY 4.0。共 6 个 JSONL 文件,一行一条记录:
| 文件 | 行数 | 内容 |
|---|---|---|
turns.jsonl |
69 | 每一轮提问:平台、会话、轮次、原话、采集时间、模式开关 |
queries.jsonl |
96 | 平台实际搜索的词:第几次检索、第几个词、搜索词、取自哪个字段 |
sources.jsonl |
685 | 来源:所处环节(展示、引用、检索、打开)、序号、网址、域名、标题、按域名的粗分类、是否脱敏、引用次数 |
tool_calls.jsonl |
81 | 工具调用:顺序、工具名、带了几个搜索词 |
signals.jsonl |
677 | 埋点和信号:位置、意图、检索计数、对话历史、模型、用量 |
context_probe.jsonl |
25 | 上下文探针:每轮输入和输出 token |
本文用到的是 session = main(主会话三问)和 session = main_q4(DeepSeek 深度思考那一问)。字段说明见数据卡。
去掉了什么
-
不公开:原始请求和响应、请求头、Cookie 和鉴权信息、各类 ID、账号、IP 地址(只留城市「苏州市」)、经纬度、设备信息、回答正文、思考过程、网页摘要。
-
第 2 问的药企和同名诊所,在提问、搜索词、标题里换成 XX。能指向它的网址整条删除,只留域名,并标记 entity_masked = true。
-
人名换成「某某」,标题里的手机号换成「[电话已移除]」。网址只保留白名单内的查询参数。
-
四家的最终回答不在数据集里,所以「AI 最后推荐了谁」一节的机构数无法复算。
怎么复算
-
下载复算脚本
recompute.py(MIT 授权,只用 Python 标准库)。 -
运行 python3
recompute.py。脚本从 Hugging Face 下载上面的固定版本,先核对 5 个数据文件的 SHA-256,不符就停止。已经下载了数据的,用 python3recompute.py--data 数据目录,不联网。 -
脚本逐项打印复算值和应为值。2026-11-08 运行结果:34 项全部一致,退出码 0。
各项怎么算:
| 文中的数字 | 怎么算 | 复算结果 |
|---|---|---|
| 豆包改写出 5 条搜索词,第 2 条是「苏州姑苏XX医美诊所介绍」 | queries:doubao、main、turn 3 |
5 条,query_index 2 一致 |
| Kimi 3 条,千问 1 条 | queries:kimi turn 3;qwen turn 3 中 query_source 为 intent_data.hotspot_intent.rewrite_content 的行 |
3;1 |
| 千问检索 20 条,送进模型 5 条 | signals:qwen turn 3 的 hotspot_intent.material_stat.total 和 sent_to_model |
20;5 |
| 豆包参考 29 篇,抓到 17 条带链接的来源 | sources:doubao turn 3 共 29 行。12 行是无链接的视频卡片(source_type 以 card_without_url 开头),其余 17 行有标题或网址 |
29;12;17 |
| 其中同名诊所相关 6 条 | 17 行里 entity_masked = true 的行,网址已删 |
6 |
| 抖音 4、医院官网 2、中华网 2、其他 3 | 剩下 11 行有网址,按 domain 计数 |
4、2、2、3 |
| 问护肤品时,29 篇里有 10 篇来自抖音 | sources:doubao turn 1,source_type = short_video |
29 行里 10 行 |
| Kimi 12 处引用,来自 8 个不同网页,都带段落锚点 | sources:kimi turn 3 中 cited = true 的行,数不同网址,再合计 cite_events 和 cite_with_text_fragment |
8;12;12 |
| Kimi 只搜了一轮 | tool_calls:kimi turn 3 的 web_search |
1 次 |
| DeepSeek 先搜 5 个词、拿到 30 条结果、打开 7 个网页;再搜 4 个词、打开 3 个 | queries、sources、tool_calls:deepseek main_q4,按 round 计数 |
5、30、7;4、3 |
| 豆包 3 项定位权限、没有坐标;千问 user_city 为苏州市,意图为本地生活;元宝调用 region_search | signals 和 tool_calls |
一致 |
几点说明:
-
医院官网的 2 条是同一家医院的两个页面。
-
千问的「1 条」只指 hotspot 模块的改写词。同一轮里 RAG 检索工具用了 2 条(主查询加子查询),20 条和 5 条也属于 hotspot 模块,见数据卡。
-
抓到的 17 条里,同名诊所相关的 6 条网址已删,公开数据只能核对剩下 11 个网址。
-
turns.jsonl 里 Kimi 第 1 问的 user_prompt 是乱码(UTF-8 文字被按 Latin-1 解码),用 .encode(“latin-1”).decode(“utf-8”) 可以还原。不影响上面的数字。
- 点赞
- 收藏
- 关注作者
评论(0)