GEO 助手(Generative Engine Optimization Assistant)
完成"AI 搜索可见度的诊断 → 优化 → 监测"闭环。生成式 AI 不"读"网页,它提取提及、评估位次、判断情感、追溯引用源;本技能围绕这四件事量化品牌在 AI 回答中的真实处境。
何时使用
- 需要知道品牌在豆包 / DeepSeek / Kimi / 千问 / ChatGPT 等平台被提及的现状与位次
- 已有真实抓取的 AI 回答原文,需要量化提及率、情感倾向、引用源质量、竞品差距
- 需要挖掘"用户会在 AI 里怎么问"(品牌词 / 场景词 / 蒸馏词 / 竞品词)并排优先级
- 需要梳理实体-属性-值三元组与 L1-L4 分层信源矩阵、检测跨平台口径一致性
- 需要做日 / 周 / 月三级监测与告警,或排查"AI 投毒"异常线索
- 需要做合规审核(事实 / 品牌 / 平台 / 风险四道门)后再发布内容
何时不使用
- 只想做纯文字润色、翻译、摘要(走常规写作,不启动五模块流程)
- 传统 SEO 的外链建设、竞价投放、排名提升
- 没有任何真实 AI 回答原文,却要求给出"品牌在 AI 中的可见度"(无输入不得出结论)
角色分工(重要)
| 环节 | 执行者 | 说明 |
|---|---|---|
| 指标计算、位次定位、信源分层、评分、告警、门禁 | 规则引擎 app/geo_assistant.py |
确定性、零第三方依赖、可复算 |
| 结论解读、结构化改写、E-E-A-T 补强文案、策略撰写 | Agent(LLM) | 使用 references/prompts.md 模板 |
引擎结果高于 LLM 自述:未通过 optimize / compliance 校验前,禁止声称内容"已 AI 友好化"。禁止 LLM 代写 answers.json 中的任何回答原文。
硬约束(贯穿全程,详见 references/constraints.md)
- 不臆造 AI 回答:
answers.json只能来自真实提问抓取,缺样本即标[需补充],不得用示例库或 LLM 生成替代。 - 不臆造引用与效果数据:引用链接必须真实出现;到达量/转化率/ROI 缺失写
[需补充],不用行业均值填充。 - 不编造背书与资质:E-E-A-T 建议只提"需第三方测试报告",不写机构名与结论。
- demo 数据隔离:
--mode demo的报告必须带"禁止对外发布"警示,不得写入客户交付物。 - 反 AI 投毒:不生成批量软文、不建议使用马甲站多版本稿件、不建议删除真实负面评价。
- 反投毒只报线索不报定罪:输出"异常现象 + 验证方式",不输出"某竞品投毒"的定性结论。
输入与输出
| 文件 | 模块 | 必填 |
|---|---|---|
profile.json |
全部 | 是(init-profile 生成模板) |
answers.json |
M1 / M3 / 合规 | 诊断时必填 |
facts.json / sources.json |
M4 / 反投毒 | 否 |
history.json |
M5 | 否 |
content.md |
M2 / 合规 | 否 |
pages.json + site_meta.json |
M2(llms.txt) | 否 |
每个模块输出同名 .json(机器可读)+ .md(人读报告),字段格式见 examples/。
五模块与驱动命令
引擎目录为技能根目录下的 app/,全部命令以 python app/geo_assistant.py <子命令> 调用。
| 模块 | 名称 | 命令要点 | 核心产出 |
|---|---|---|---|
| M1 | AI 可见度诊断 | diagnose --profile --answers [--mode demo] [--strict] |
diagnose.json/md:提及率、首条占位率、情感、引用源等级、信息准确率、SOV、可见度分、差距项 |
| M2 | 内容优化测量 | optimize --input --platform --mode full --pages --site-meta [--strict] |
optimize.json/md + llms.txt:结构分、E-E-A-T 四维、数据密度、平台策略、Schema 建议 |
| M3 | 关键词挖掘 | keywords --profile --answers --count 30 |
keywords.json/md:四类词 + 意图 + 优先级分量分 |
| M4 | 知识图谱与信源矩阵 | knowledge --profile --facts --sources |
knowledge.json/md:三元组、属性覆盖率、冲突、L1-L4 分布与缺口 |
| M5 | 三级监测 | monitor --history --level daily\|weekly\|monthly [--add-snapshot file] |
monitor_*.json/md:环比指标 + 告警 |
| — | 合规 + 反投毒 | compliance --content --profile --answers --sources [--strict] |
compliance.json/md:PASS/WARN/FAIL/BLOCK + 投毒线索(未执行的门标注"未执行") |
| — | 一键全链路 | pipeline --profile --answers --content --facts --sources --history --level weekly --out-dir out/ |
report.md(含"未执行模块"表)+ 各模块产出 |
辅助:init-profile、platforms [--platform doubao] [--matrix 自定义矩阵.json] [--out-dir out/]。
--strict 在模块未达标时返回退出码 2,可直接用于 CI 卡口。
三点必须知道的行为:
- 终端会同步提示待处理项。报告里的告警/违例(含"样本为 0、诊断结果为空")除写入文件外,还会在命令结束时以
[提示] N 条待处理项打印到终端。只看到[OK]不代表没有告警,务必一并阅读该提示。 - 结果可复现。默认每次运行写入当前时间戳;如需逐字节比对(CI 回归、交叉复核、结果缓存),设置环境变量
SOURCE_DATE_EPOCH(Unix 秒,UTC)冻结"现在",同一输入的产出将完全一致:
set SOURCE_DATE_EPOCH=1704164645 && python app/geo_assistant.py diagnose --profile profile.json --answers answers.json --out-dir out/
(Linux/macOS 用SOURCE_DATE_EPOCH=1704164645 python ...) - 输入 JSON 无法解析时报
[错误] JSON 解析失败:<文件>(line N column M),不会抛 Python 堆栈。
执行顺序(非 pipeline 场景)
init-profile生成并填写品牌档案 → 重点核对易错项:品牌名、别名、产品线、官网、行业、官方信息、竞品。diagnose出基线。这一步没有真实抓取数据就等于没有结论,先收数据。keywords定位该问什么、优先问什么。knowledge补齐实体属性与信源分层,这是后续所有提升的地基。optimize→ LLM 按references/prompts.md改写 → 再次optimize复测至violations为空。compliance过四道门 → FAIL/BLOCK 必须回第 5 步修订。monitor --add-snapshot持续落盘 → 按日/周/月出报告。
降级策略
详情见 references/constraints.md#五、降级策略,要点:
| 场景 | 处置 |
|---|---|
| 品牌档案校验 Error | 阻断并列出缺失项 |
| 单平台样本 < 6 条 | 该平台结论标注"趋势参考" |
无 answers.json |
M1 跳过;M3 蒸馏词为 0 并标 [需补充] |
无 facts / sources |
M4 输出空图谱 + 不可用声明,不臆造三元组 |
| 正文 < 100 词 | M2 降级为仅 E-E-A-T 与平台建议 |
| 平台不在偏好矩阵 | 降级为 ChatGPT + Kimi 混合偏好并说明 |
| 域名无法归类 | 记 unknown(权重 0.2)并提示人工补录 |
监测窗口快照数 < min_snapshots_per_window(默认回退 6) |
环比告警降级为 low,message 加「样本不足,仅供趋势参考」前缀并附双窗口样本数 |
与既有 GEO 技能的分工
geo-content-optimizer:深度语义改写(结构化重写、E-E-A-T 文案补强)。geo-assistant(本技能):框架中除深度改写外的全部能力,尤其是诊断、关键词、图谱信源、监测、合规门禁。- 两技能同时使用时,最终判定以本技能的
optimize与compliance输出为准,禁止出现互相矛盾的结论。
Pay Skill 付费发布(可选商业化)
本技能把"一份 GEO 报告"作为按次付费商品,有两条并行可选的 HTTP 402 付费链路:
- 渠道 A(微信 / SkillHub):封装为 SkillHub Pay Skill,经微信 Agent Pay(X402)在对话内完成授权支付。接入要素:开发者密钥与
SKILLHUB-SHA256-RSA2048签名、X402 AI 预下单、HTTP 402 +Weixin-Pay-Required/X-Out-Trade-No支付触发返回、微信查单验真与幂等履约。 - 渠道 B(支付宝 A2M / AI 按量付费):以自研 API 形态接入支付宝 402 付费链路,完整覆盖:402 账单下发(
Payment-Needed头)、携带凭证重试(Payment-Proof头)、验付调用(alipay.aipay.agent.payment.verify)、履约确认(alipay.aipay.agent.fulfillment.confirm)、订单持久化与幂等(INIT → PAID → FULFILLED+already_fulfilled防重复交付)。
两渠道协议独立、互不替代,可任选其一或并行接入。SKU 分档(诊断 / 优化 / 合规 / 全链路)、resource_id 命名、报文结构、订单表设计与上线 checklist 见 references/pay-skill-agent-pay-x402.md。
付费不改变结论口径:付款购买的是"一次报告生成与解读服务",不是更好的结论。付费形态下仍须完整遵守上文硬约束——answers.json 必须真实抓取、demo 数据严禁用于对外交付、compliance 的 FAIL / BLOCK 如实返回、效果指标缺失仍标 [需补充]、反投毒只报线索不报定罪;商品文案也不得承诺"提升 AI 排名""保证被推荐"等效果。
> 402 支付链路运行在技能服务端,本技能目录保持 Python 标准库零依赖:涉及 RSA2 签名的实现不写入 app/,由服务端自行引入所需库。
快速示例
python app/geo_assistant.py init-profile --out profile.json
python app/geo_assistant.py diagnose --profile examples/profile.json --answers examples/answers.demo.json --mode demo --out-dir out/
python app/geo_assistant.py keywords --profile examples/profile.json --answers examples/answers.demo.json --out-dir out/
python app/geo_assistant.py knowledge --profile examples/profile.json --facts examples/facts.json --sources examples/sources.json --out-dir out/
python app/geo_assistant.py optimize --input examples/content.md --profile examples/profile.json --platform doubao --pages examples/pages.json --site-meta examples/site_meta.json --out-dir out/
python app/geo_assistant.py compliance --content examples/content.md --profile examples/profile.json --answers examples/answers.demo.json --sources examples/sources.json --out-dir out/
python app/geo_assistant.py monitor --history examples/history.json --level weekly --out-dir out/
python app/geo_assistant.py pipeline --profile examples/profile.json --answers examples/answers.demo.json --data-mode demo --content examples/content.md --facts examples/facts.json --sources examples/sources.json --history examples/history.json --pages examples/pages.json --site-meta examples/site_meta.json --level weekly --out-dir out/
> demo 模式:diagnose 用 --mode demo,pipeline 用 --data-mode demo,二者都会把"禁止对外发布"写进报告。
命令跨多行时的续行符按 shell 区分:PowerShell 用反引号 `,cmd 用 ^,Linux / macOS 用 \;本文件示例为 PowerShell 语法。示例数据必须配 --mode demo。
目录结构
geo-assistant/
├── SKILL.md
├── README.md
├── app/
│ ├── __init__.py 包声明(`import app` 可读版本号)
│ ├── geo_assistant.py 离线规则引擎(Python 3 标准库,零依赖)
│ └── data/
│ └── platform_matrix.json 平台偏好矩阵热更新(覆盖内置默认值)
├── references/
│ ├── workflow.md 五模块流程、输入 schema、命令与降级
│ ├── constraints.md 硬约束、四道合规门、反投毒、降级策略、禁止事项
│ ├── engines.md 算法口径、评分公式、阈值与已知局限
│ ├── prompts.md Agent(LLM)各模块执行模板
│ ├── quality-gates.md 质量门、评分分级、交付前检查清单
│ ├── pay-skill-agent-pay-x402.md 按次付费发布方案(微信 X402 / 支付宝 402 A2M 双渠道)
│ └── roadmap.md MVP V1-V4 路线与差异化策略
├── assets/
│ └── report-template.md 交付报告骨架
├── tests/
│ ├── __init__.py
│ ├── test_engine.py 零依赖回归测试集(unittest)
│ ├── test_pay_service.py Pay Skill 文档契约与付费红线守护
│ └── test_robustness.py JSON 报错、终端告警、结果可复现守护
└── examples/
├── profile.json / answers.demo.json / facts.json / sources.json
├── history.json / pages.json / site_meta.json / content.md