Install
openclaw skills install @redfox-data/geo-analyzerGEO(生成式引擎优化)品牌分析工具。自动向豆包、Kimi、DeepSeek、元宝、千问、百度 六个 AI 搜索引擎提问,分析品牌在 AI 回答中的出现率、情绪、信源引用、竞品对比,生成交互式 HTML 报告。当用户需要分析品牌在 AI 搜索引擎中的表现、GEO 优化、AI 搜索品牌监测、品牌 AI 可见度分析时使用。触发词:GEO分析、品牌AI搜索分析、AI搜索引擎优化、品牌可见度、GEO、geo analyzer。
openclaw skills install @redfox-data/geo-analyzer帮助品牌了解自己在 AI 搜索引擎(豆包、Kimi、DeepSeek、元宝、千问、百度)中的表现。系统自动向六个 AI 平台提出相同问题,分析品牌出现率、情绪倾向、信源引用、竞品对比,生成可视化 HTML 报告。
前往 红狐hub 获取 API Key,通过以下方式配置:
# 方式一:配置文件
{ "env": { "REDFOX_API_KEY": "ak_xxxx..." } }
# 方式二:终端环境变量
export REDFOX_API_KEY="ak_xxxx..."
pip3 install requests
向用户收集以下信息(使用 AskUserQuestion 或直接从用户消息中提取):
必填信息:
可选信息:
关键规则:
如果用户没有提供问题列表,需要生成 5 个热门问题。
1.1 搜索品类热度
调用任一 websearch skill 搜索品类相关信息:
python3 ~/.agents/skills/doubao-websearch/scripts/doubao_search.py "{品类} 消费者最关心的问题"
python3 ~/.agents/skills/kimi-websearch/scripts/kimi_search.py "{品类} 品牌推荐 常见问题"
1.2 AI 生成 5 个问题
结合搜索结果和品类知识,生成 5 个用户最可能在 AI 搜索引擎中提问的问题。
问题类型必须覆盖以下三类(推荐类至少 1 个,多场景类与功能类合计至少 4 个):
| 类型 | 示例 | 说明 |
|---|---|---|
| 推荐类 | "{品类}哪个品牌好?"、"推荐几款好用的{品类}" | 测试品牌是否进入通用推荐列表 |
| 多场景类 | "{人群/场景}用什么{品类}好?",如"经常熬夜看手机用什么缓解视疲劳眼药水好"、"学生党上课用眼多适合用的缓解视疲劳眼药水有哪些"、"长期对着电脑办公选什么缓解视疲劳眼药水合适" | 测试品牌在真实使用场景下的可见度 |
| 功能类 | "{功能诉求}的{品类}推荐",如"温和不刺激的缓解视疲劳眼药水推荐"、"缓解视疲劳眼药水哪些好用不贵" | 测试品牌在功能诉求下的匹配度 |
问题生成铁律:
1.3 确认问题列表(必须执行)
将生成的 5 个问题展示给用户,使用 AskUserQuestion 询问确认。必须等待用户明确同意后,才能进入 Step 2 批量搜索。如果用户要求修改,重新调整问题列表并再次确认。
将 5 个问题同时提交到 6 个 AI 平台进行联网搜索。
python3 scripts/geo_search.py --queries '["问题1","问题2",...,"问题5"]' --platforms doubao,kimi,deepseek,yuanbao,qianwen,baidu
脚本自动完成:
output/search_results.json输出文件结构:
{
"queries": ["问题1", "问题2", ...],
"platforms": ["doubao", "kimi", "deepseek", "yuanbao", "qianwen", "baidu"],
"total_tasks": 30,
"completed": 28,
"failed": 2,
"results": [
{
"question": "问题1",
"query_index": 0,
"platform": "doubao",
"content": "AI回答全文...",
"sources": [{"title": "...", "url": "...", "domain": "..."}],
"status": "completed"
}
]
}
等待提示: 搜索过程约需 3-5 分钟,告知用户耐心等待。部分平台任务超时属常见现象,直接用已完成的回答继续分析。
运行分析脚本执行确定性分析(品牌提及检测、域名提取、频次统计):
python3 scripts/geo_analyze.py \
--brand "品牌名" \
--aliases '["别名1","别名2"]' \
--competitors '["竞品A","竞品B"]' \
--search-results output/search_results.json
输出两个文件:
output/deterministic.json — 确定性分析结果(提及率、域名统计等)output/ai_analysis_template.json — AI 分析模板(待填充)这是核心步骤。Agent 需要读取搜索结果,对每份 AI 回答执行深度分析。
4.1 读取搜索结果
读取 output/search_results.json,获取所有 30 份 AI 回答。
4.2 逐份分析
对每份状态为 completed 的回答,分析以下字段:
"positive": 正面/推荐/强调优势"neutral": 中性/客观描述"negative": 负面/强调劣势/不推荐"neutral"name (str): 竞品品牌名rank (int | null): 竞品在推荐列表中的排名,无排名则为 nullsentiment (str): 竞品的情绪倾向 (positive/neutral/negative)分析规则:
4.3 写入 AI 分析结果
将所有分析结果写入 output/ai_analysis.json,格式如下:
[
{
"question": "问题1",
"query_index": 0,
"platform": "doubao",
"brand": "品牌名",
"competitors": ["竞品A", "竞品B"],
"brand_rank": 3,
"brand_context": "品牌被提及时的上下文摘要",
"sentiment": "positive",
"sentiment_reason": "回答中明确推荐该品牌",
"competitors_mentioned": ["竞品A", "竞品C"],
"competitor_details": [
{"name": "竞品A", "rank": 1, "sentiment": "positive"},
{"name": "竞品C", "rank": null, "sentiment": "neutral"}
],
"key_claims": ["关键描述1", "关键描述2"]
}
]
关键规则:
5.1 合并分析
将确定性分析与 AI 分析合并,计算完整指标(GEO 得分、情绪分布、平均排名等):
python3 scripts/geo_analyze.py \
--brand "品牌名" \
--aliases '["别名1"]' \
--competitors '["竞品A","竞品B"]' \
--search-results output/search_results.json \
--ai-analysis output/ai_analysis.json
输出 output/analysis_result.json(包含所有指标数据)。
5.2 生成 HTML 报告
python3 scripts/geo_report.py \
--analysis output/analysis_result.json \
--search-results output/search_results.json
输出 output/geo_report.html(单页交互式,顶部锚点导航,滚动高亮当前板块)。报告结构:
| 板块 | 内容 |
|---|---|
| 顶部摘要 | 品牌名、GEO 综合得分、提及率、覆盖平台、生成时间 + AI 文字总结(综合评估 / 各平台表现 / 发力方向) |
| 品牌指纹 | GEO 综合、提及率、平均排名、正面率四大指标卡 + 分平台得分卡(得分 / 等级徽章 / 提及率 / 条数)+ 行业位置(#排名 · 参与品牌数) |
| 提及矩阵 | 问题 × 平台热力表:已提及 = 出现次数,未提及 = —,查询失败 = ✕ |
| 情感分析 | 整体分布(正 / 中 / 负)+ 各平台情感对比条 + 正面/负面信号标签 + 非中性回答详情卡(含判断依据) |
| 信源分析 | 引用域名 TOP10(带分类标签,品牌域名高亮 *)+ 引用文章 TOP10(可点击)+ 域名分类占比 + 官网是否进入 TOP10 提示 |
| 竞品对比 | 本品牌行(高亮"本品牌"徽章)+ 竞品按提及率降序(最多 10 个),列为提及率 / 平均排名 / 正面率,点击行展开各平台明细 |
| 原始存档 | 按问题分组展示全部 AI 回答原文(品牌词高亮),每条带平台徽章 + 情绪徽章,失败任务标注 [status] |
依赖说明: 情感分析板块依赖 Step 4 写入的 ai_analysis.json,缺失时显示"暂无 AI 情感分析数据"占位,报告其余板块照常生成。
output/geo_report.htmlGEO 分析完成 — {品牌名} 在六大 AI 搜索引擎中的表现:
1. 跨平台提及率: {X}%({被提及数}/{总问题数})
- 豆包: {X}% | Kimi: {X}% | DeepSeek: {X}% | 元宝: {X}% | 千问: {X}% | 百度: {X}%
2. GEO 综合得分: {X}/100
- {最佳平台} 表现最佳({X}分),{最差平台} 表现最弱({X}分)
3. 情绪分布: 正面 {X}% | 中性 {X}% | 负面 {X}%
- 正面率 = 1 − 负面率(中性计入正面)
- {如果有负面,指出主要负面原因}
4. 竞品对比: 共发现 {N} 个竞品
- 提及率最高的竞品: {竞品名}({X}%)
- 您的品牌提及率排名: 第 {N} 位
5. 信源引用: TOP3 引用域名为 {域名1}、{域名2}、{域名3}
- 品牌官网是否被引用: {是/否}(若某平台整体无信源数据,须说明该平台信源不可用,不要当作"官网未被引用")
完整报告: output/geo_report.html
详细定义见 references/geo-metrics.md。核心公式:
GEO 得分 = 提及率得分 × 40% + 排名得分 × 30% + 情绪得分 × 30%
= 提及率×100 × 40% + max(0, 100 - (均排名-1)×10) × 30%
+ 正面率×100 × 30%(正面率 = 1 − 负面率,中性计入正面)
解读:70+ 优秀 / 50-69 良好 / 30-49 一般 / <30 不足。
| 情况 | 处理方式 |
|---|---|
| 未配置 REDFOX_API_KEY | 提示用户前往红狐hub获取 API Key |
| 搜索任务部分失败/超时 | 属常见现象(DeepSeek/Kimi 可能长时间排队),最长等待5min,超时直接用已完成的回答继续分析,在报告中标注失败项,不要反复重试 |
| 搜索全部超时 | 提示用户稍后重试,可能是 API 负载过高 |
| AI 分析结果缺失 | 仅生成确定性分析报告(提及率、域名统计),情绪等模块标注"待分析" |
| 品牌名太短导致误匹配 | 提示用户提供品牌别名以提高匹配精度 |
geo-analyzer/
├── SKILL.md # 本文件
├── scripts/
│ ├── geo_search.py # 批量搜索调度器
│ ├── geo_analyze.py # 分析编排器
│ ├── geo_report.py # 报告生成器
│ └── lib/
│ ├── platforms.py # 6平台适配器
│ ├── analyzer.py # 分析逻辑库
│ └── report_template.py # HTML 模板库
├── output/ # 输出目录
│ ├── search_results.json # 搜索结果
│ ├── deterministic.json # 确定性分析
│ ├── ai_analysis_template.json # AI 分析模板
│ ├── ai_analysis.json # AI 分析结果(Agent 写入)
│ ├── analysis_result.json # 完整分析结果
│ └── geo_report.html # 最终报告
└── references/
└── geo-metrics.md # GEO 指标定义说明