返回 Skill 列表
extension
分类: 数据与分析无需 API Key

geo-steering-detector

GEO(生成引擎优化)转向检测与防御。检测 RAG / 检索增强系统的检索集是否被灰区 steering——内容全真、但某实体被多源一致强推、且模型排序不确定;以及评估模型对来源标注的可信度敏感性。触发词:检测 GEO 污染、RAG 检索集是否被转向、灰区 steering、生成引擎优化防御、模型是否轻信检索内容、来源可信度评估、AI 推荐被操控。

person作者: user_61f6dd3ahubcommunity

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,endpoint https://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-2026androidcentral.com/best-nas-hometechscomet.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% 齐推 Sonypush=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