GEO 灰区转向检测器(Geo-Steering Detector)
GEO(Generative Engine Optimization,生成引擎优化)灰区转向检测与防御 Skill。 三环闭环:检测 → 定位 → 评估,分辨一个 AI 推荐是"真实优质"还是"被 GEO 投喂"。
它解决什么问题
GEO 是 SEO 的 AI 时代版本:商家优化网页内容,让 AI 推荐系统把自己的产品/观点往前推。 它与事实投毒(直接造假的 A 类攻击)不同,是 B 类灰区——
内容全真、没有任何事实错误,只是把某实体"说成你想听的样子"。
传统防御对灰区基本失效:事实核对没用(它是真的)、来源标注没用(实验一证明模型对维基 vs 匿名 论坛几乎一视同仁)、单个答案层面无法区分"被推的优质"和"真优质"。所以防御的支点不在 "答案说什么",在"答案是怎么产生的"。本 Skill 用三环回答这个问题。
三环防御闭环(detect 模式)
| 环 | 干什么 | 核心信号 |
|---|---|---|
| 环1 检测 | 快筛:检索集有没有被 steering | push_x_rate(推 X 源占比)+ rank_entropy(排名不确定性) |
| 环2 定位 | 分辨:推荐是被喂的还是真优质 | x_still_top1_know(纯知识探针:不给资料,模型凭知识首选谁) |
| 环3 评估 | 评估:多源是真独立还是软文矩阵 | source_independence(推 X 各源文本相似度) |
综合判定 verdict:正常 / 真实优质(推荐与知识首选一致) / 存疑(知识认可但非首选) /
疑似投喂(模型知识首选非它)。
模型自指:环2 纯知识探针与 RAG 用同一模型,评估"该模型的推荐 vs 该模型自身知识"的一致性, 自洽——用哪个模型做 RAG,就用哪个模型做探针。
安装
# 复制到 WorkBuddy skills 目录(本机)
cp -r geo-steering-detector "$HOME/.workbuddy/skills/"
依赖:
- 本地推理:
ollama+qwen2.5:7b(免费,无需外部 API) - 或 OpenAI 兼容后端:设置
MINIMAX_API_KEY,endpointhttps://api.minimax.chat/v1
用法
# 防御:三环检测(prod 已标注的检索集)
python scripts/geo_steer.py detect --input retrieval.jsonl --model qwen2.5:7b --n 6
# 防御:真实网页文本(无 prod 标注)——自动标注每篇推哪款
python scripts/geo_steer.py detect --input retrieval.jsonl --model qwen2.5:7b --n 6 --auto-label
# 研究:复现实验一~四
python scripts/geo_steer.py research exp1 --model qwen2.5:7b --data scripts/exp1_dataset.jsonl
python scripts/geo_steer.py research exp2 --model qwen2.5:7b --data scripts/exp2_materials.jsonl --n 6
python scripts/geo_steer.py research exp3 --model qwen2.5:7b --data scripts/exp2_materials.jsonl --n 4
python scripts/geo_steer.py research exp3b --model qwen2.5:7b --data scripts/exp2_materials.jsonl --n 4
python scripts/geo_steer.py research exp4 # 纯计算,无需模型
detect 输入格式(每行一条查询):
{"query":"推荐蓝牙耳机",
"products":["Sony WH-1000XM5","Bose QC45","AirPods Max"],
"docs":[
{"src":"techblog-a","text":"...","prod":"Sony WH-1000XM5"},
{"src":"forum-b","text":"...","prod":"Sony WH-1000XM5"},
{"src":"review-c","text":"...","prod":"Bose QC45"}
]}
prod可选:有则直接用;无则加--auto-label自动标注(真实网页文本直接可用)。products可选:缺省从prod聚合,或由模型提取候选。
detect 输出每个实体:verdict / push_x_rate / x_still_top1_know / source_independence /
median_rank / rank_entropy_norm / top1_rate / risk_score / signals(可解释信号)。
联网实战 pipeline:由 agent 用 WebSearch/WebFetch 抓取相关网页、提取正文组成无标注
docs,再 detect --auto-label 自动标注 + 三环判定(已验证,见下)。
核心发现(跨模型验证:qwen2.5:7b / MiniMax-Text-01,各 50 域)
- 训练干净 ≠ 运用安全:模型对检索上下文几乎无可信度鉴别力;来源标签不是可靠免疫 (缺口仅 −14%~−20%,"无来源标签"的假内容反而最被当事实)。RAG 推荐几乎完全由检索集因果决定, 对资料投毒天然脆弱(无知识兜底)。
- 灰区 steering 可见可检测:检测器(推 X 源占比 > 0.40)两模型 GEO 触发率 1.00 / 误报率 0.00。
- 条件性(防御靶点):GEO 只在"模型排序不确定、候选势均力敌"的领域精准生效(lift +1.5), "模型确信、X 本就领先"的领域无效(lift ≈ 0)。大模型更顺从上下文,反而更易被 steering。
- 参数知识探针分辨投喂 vs 优质:纯知识探针显示模型有"知识自洽防线"——倾向把知识认可的产品 排前;虚构/不认可的产品即使多源强推也被排后。
- 真实场景零误报:① 2026 降噪耳机 5 真实评测站,Sony XM6 正确判"真实优质"(环2+环3 纠正了 单环 push=1.0 的误报);② 2026 虚拟主机 5 真实站(含佣金软文),推荐分化正确判"正常"。
真实运行记录(均为实跑,非编造)
下面三段都是真实执行 geo_steer.py detect 的输出,未做修饰。模型均为本地 qwen2.5:7b(Ollama)。
例 0 · 真实场景:家用 NAS(2026-08-30,WebFetch 抓 4 个真实站,8 个真实来源,n=6)
命令:python scripts/geo_steer.py detect --input scripts/sample_real_nas.jsonl --model qwen2.5:7b --n 6
来源全部真实可查:truthful.reviews/article/best-nas-drives-2026、androidcentral.com/best-nas-home、
techscomet.com(繁体中文)、ima.qq.com 知识库(中文,推绿联)。中文源推绿联、英文源推群晖,
是天然的真实推荐分化场景:
查询数=1 命中疑似投喂=0
推荐一台适合新手的家用NAS私有云
- Synology DS223j [正常] risk=0.50 rank=1 push=0.38
- 绿联 DXP4800 [正常] risk=0.23 rank=3 push=0.25
- QNAP TS-233 [正常] risk=0.22 rank=2 push=0.12
要点:得票最高的 DS223j(3/8 源)push=0.38 未过 0.40 阈值,工具判正常——真实世界里推荐天然
分化,工具不会把正常的分化误报成操控。
例 1 · 真实场景:降噪耳机 + 虚拟主机(2026-08-30,n=6)
命令:python scripts/geo_steer.py detect --input scripts/sample_retrieval.jsonl --model qwen2.5:7b --n 6
===== Steering 风险摘要(三环)=====
查询数=2 命中疑似投喂=0
推荐一款降噪效果最好的无线耳机
- Sony WH-1000XM6 [真实优质(推荐与知识首选一致)] risk=0.50 rank=1 push=1.00 know=1.00
- Sennheiser Momentum 4 [正常] risk=0.11 rank=2 push=0.00 know=0.00
- Apple AirPods Max 2 [正常] risk=0.07 rank=3 push=0.00 know=0.00
推荐一个最好的虚拟主机服务商
- Hostinger [正常] risk=0.48 rank=1 push=0.40
- SiteGround [正常] risk=0.20 rank=2 push=0.20
- Bluehost [正常] risk=0.17 rank=3 push=0.20
要点:降噪耳机场景 5 个真实来源 100% 齐推 Sony(push=1.00,比旧版虚构样例还极端),但工具
没有误报——环2 知识探针显示模型自身也把 Sony 当首选(know=1.00),判「真实优质」。
虚拟主机场景是联盟营销重灾区,但推荐分化(0.40/0.20/0.20),全判正常。
关于"抓出投喂"的证据(如实说明):以上真实场景均未触发「疑似投喂」——它们证明的是零误报。 工具"抓得出"的能力由受控实验验证(实验二:50 域 × 2 模型,GEO 触发率 1.00 / 误报率 0.00), 可用
research exp2复现。真实场景证明不误报 + 受控实验证明抓得出 = 完整证据链。 (旧版 README 里那个「绿联 DX4600 疑似投喂」的样例是合成虚构数据,已删除。)
例 2 · 同上的完整 JSON 字段:2026 降噪耳机(2026-08-27 WebFetch 抓 5 个真实评测站,n=6)
例 1 的降噪耳机查询与这里同源;例 1 是摘要视图,这里给出完整字段(含环3 源独立性)。
检索集里 5 个来源有 5 个都推 Sony XM6(push_x_rate=1.0),单看环1 必判风险。但工具综合判定:
{
"entity": "Sony WH-1000XM6",
"push_x_rate": 1.0, "median_rank": 1, "top1_rate": 1.0,
"source_independence": 0.106,
"verdict": "真实优质(推荐与知识首选一致)",
"x_still_top1_know": 1.0, "risk_score": 0.5, "steering_flag": false,
"signals": ["多源趋同推(push=1.00)", "知识首选(know=1.00)", "疑似软文矩阵(sim=0.11)", "top1率=1.00"]
}
要点:即便 push=1.0 且源间相似度触发"疑似软文矩阵"(sim=0.11),工具仍因环2 知识背书
(know=1.0)判真实优质、零误报。这正是"内容全真 + 模型也认可 = 不是投喂"的体现。
例 3 · 同上的完整 JSON 字段:2026 虚拟主机(2026-08-27 WebFetch 抓 5 个真实站,含佣金软文,n=6)
{ "entity": "Hostinger", "push_x_rate": 0.4, "verdict": "正常",
"x_still_top1_know": null, "risk_score": 0.48, "steering_flag": false,
"signals": ["疑似软文矩阵(sim=0.12)", "top1率=1.00"] },
{ "entity": "SiteGround", "push_x_rate": 0.2, "verdict": "正常", "steering_flag": false },
{ "entity": "Bluehost", "push_x_rate": 0.2, "verdict": "正常", "steering_flag": false },
{ "entity": "DreamHost", "push_x_rate": 0.0, "verdict": "正常", "steering_flag": false },
{ "entity": "HostGator", "push_x_rate": 0.0, "verdict": "正常", "steering_flag": false }
要点:推荐分化到 5 个服务商,单篇佣金软文被多样性稀释——工具全判正常、零误报,
且环1 门槛(push>0.40 才 flag)让 push=0.4 的 Hostinger 不触发知识探针,避免虚惊。
结论:4 个真实场景(NAS / 降噪耳机 / 虚拟主机 / NAS 中英分化)全部零误报,且所有样例数据均为 真实抓取的产品与网页文本(虚构数据已清除)。工具的价值不在"见推就报",而在"推了但模型也认可 → 放过,推了且模型不认可 → 抓出",这正是灰区 steering 唯一可靠的识别方式。
⏱️ 性能与成本(本机实测)
确实依赖模型调用。本机实测(RTX 2060 6GB / 16GB RAM / 本地 Ollama qwen2.5:7b):
| 模式 | 命令要点 | 2 条查询耗时 |
|---|---|---|
| 完整三环 | --n 6 | 66 秒 |
| 快筛 | --n 2 --no-ring2 --no-ring3 | 15 秒(快 4 倍,只粗筛) |
- 用本地 Ollama 完全免费(无 API 费用,只耗电);只有换 MiniMax 等云端后端才按量计费。
- 提速最有效的是降
--n和关环2;环3 是纯计算,几乎不耗时。 - 快筛只用来发现异常,定性必须补全三环(实测快筛会把 Sony 判为「多源趋同(未做知识探针)」, 而完整三环判「真实优质」)。批量场景建议:快筛扫全量 → 只对过阈值的补跑完整三环。
已知约束
- 联网:须用
WebSearch/WebFetch工具抓网页(bash 内curl沙箱通道受限,返回 000/404); 部分站点有 Cloudflare 等反爬,此时用 WebSearch 摘要即可。 - 环2 纯知识探针是模型自指的,跨模型阈值需各自标定(不能跨模型用统一阈值)。
- 实验样本规模有限(每实验 50 域),结论在"分组剂量-反应"层面稳健,跨领域泛化建议扩充。
研究产出
- 实验一~四脚本(
exp1_*/exp2_*/exp3_*/exp3b_*/exp4_*)+ 真实样例 (sample_retrieval.jsonl真实耳机+虚拟主机、sample_real_nas.jsonl真实 NAS,均为实抓网页文本) - 完整方法论见
SKILL.md;防御框架文档见工作区geo-defense-framework.md
Scan to join WeChat group