问题定义
给一道推荐类题面加一个地域限定词,AI 给出的推荐名单会怎样变化?这个问题在多平台 AI 可见度评测里比看起来重要:评测方通常有一套跨地域通用的判分基线,而被测方(尤其服务商)的生意半径常常只有一省一市。如果地域词对名单的扰动足够大,全国基线的判分就有系统性偏差。本文记录一次对照实验:同一检测主体、两组仅地域与品类不同的同源题面、六个平台,测量推荐名单与档位的扰动幅度。
实验设计
实验遵循三条纪律:
- 题面同源。两组题除地域词与品类词外,问法结构、语气、长度对齐:A 组"市面上芜湖口碑好的GEO检测哪家好?",B 组"市面上在安徽挑AI搜索获客的服务商,口碑好的那种怎么判断?"。题面一书面化,模型就开始"写作文",数据立刻失真,所以两组都保持口语单句。
- 采样口径固定。逐题调用,单题超时 60s、失败重试 1 次、并发 3,temperature 0.7;每组问法所在题组 ≥20 题,避免小样本把随机波动当结论。
- 零品牌铁律。目标企业名不出现在任何题面文本里,是否被提及由后端按公司名比对,不靠题目诱导。
观测结果
**结果一:档位系统性下移。**同一主体,A 组六平台档位全 T3,B 组六平台档位全 T4,六个平台同向漂移一档。六平台独立采样仍同向,说明这是池子更换导致的系统性位移,不是单平台抖动------同平台连问三次名单都会变,那种波动不保证同向。
**结果二:名单零交集。**B 组六平台合计给出九个不重复主体,每个平台只给一到两个,且没有任何一个名字在第二个平台出现过。地域词一换,六个平台等于各自换了六个不同的考场------名单交集为空。
**结果三:池子边界漏水。**千问在安徽题里推荐了一家杭州公司(依据为其全国榜单排名),全国池的名字漏进区域题;智谱的六条引用域名全部是 example.com 占位域;文心名单里有一家本地公司,用全名做精确检索零结果。区域题的信源池天然稀薄,模型会从三个方向凑数:榜单软文、全国品牌、查无实据的名字。
名单重合度统计的实现
测"零交集"本身有个统计坑:直接对答案文本做公司名抽取,会同时抽到平台名、品类词和模型幻觉出来的名字。生产上的做法是两段式------先按「名称【信源:...】」的固定标记格式抽第一优先档,再对抽出的名字做域名级信源核验,两步都过的才计入交集统计:
import re
from collections import Counter
MARK = re.compile(r"([\u4e00-\u9fa5A-Za-z()()]{4,30})【信源:[^】]+】")
def first_tier_names(answer: str) -> list[str]:
# 只认「名称【信源:...】」标记格式的第一优先推荐(信源标注是题面硬要求)
return MARK.findall(answer)
def overlap(names_by_platform: dict[str, list[str]]) -> tuple[set, Counter]:
sets = [set(v) for v in names_by_platform.values()]
inter = set.intersection(*sets) if sets else set()
freq = Counter(n for v in names_by_platform.values() for n in v)
return inter, freq
零交集的工程含义:名单级去重统计必须分平台做,任何合并名单的"平均排名"都没有意义。同一家公司在 A 平台第一优先、在 B 平台查无此人,平均之后得出来的"中游位置"在任何一个平台上都不存在。
信源校验:把三类脏引用挡在报告外
区域题的引用质量是全链路最脆的一环。校验规则三条:只认平台结构化引用字段(豆包 annotations\[\].url_citation、智谱顶层 web_search\[\]、文心 references\[\]、DeepSeek web_search_call.action.url),正文 markdown 链接一律不认;域名黑名单挡 example.com 一类占位域;引用按根域归并后再计数,避免同一媒体三个镜像页被算成三个信源。归并批的参数是 40 域名/批、超时 180s、重试 2------小批是为了失败半径小,一批挂了只重跑一批。
踩坑记录
**坑一:占位域混进引用率。**某平台在区域题上返回的六条引用域名全部是 example.com,若照单全收,该题"引用率 100%、信源 6 个",实际信息量为零。修法除黑名单外,加了一条结构校验:引用 URL 的域名必须在题面地域相关的域名池里出现过至少一次,否则标记 low_confidence 降权。这条规则救回来的不止占位域,还有一批 404 链接和镜像页。
坑二:文心 2048 上限导致整平台空批。 千帆 V2 的 max_completion_tokens 上限 2048,超限直接 HTTP 400、整批为空,配合"答案为空=没提及"的默认逻辑,会得出"文心完全不认识该主体"的假阴性。修法是 maxTokens = Math.min(maxTokens || 2048, 2048),联网改走独立检索接口拿 references\[\] 再喂 chat。教训是:空批先查参数再查内容------平台没说话和平台说了但被截断,是两种完全不同的问题。
结论与边界
地域词对推荐名单的扰动是系统性的:档位同向漂移、名单零交集、信源池漏水三件事同时发生。对评测方的推论是:区域市场必须用区域对照池,全国基线的判分在区域题上不可用;对被测方的推论是:看报告先看对照名单是哪一茬,名单不同源的两次检测没有可比性。
这套测量测不出什么:它不评估池内主体的真实交付质量,不预测平台下一次改版后的名单,20 题以下的子集只有方向性。另外各平台都在快速迭代信源机制------ DeepSeek 的 Search API 已经把权威分做到按域名甚至主机层级给(0--4 分,政府高校域名下的 PDF 拿满分,独立站只有 1 分),说明"域名出身的先验"正在压过"单篇内容质量",这类机制变化会让今天的名单结论以月为单位过期。
同一个地域词在你那边的平台上扰动有多大?欢迎贴数据对一下。