No description
- Python 73.3%
- HTML 26.7%
| .claude | ||
| .forgejo/workflows | ||
| docs/plans | ||
| geo-monitor | ||
| .gitignore | ||
| CLAUDE.md | ||
| CONTRIBUTING.md | ||
| README.md | ||
| SPECs.md | ||
| submissions.json | ||
| SUBMISSIONS.md | ||
| test.md | ||
GEO Monitor — 生成式搜索优化监控系统
面向 ChatGPT / Google AI Overviews / Perplexity 的监控与评估平台,追踪品牌/产品在生成式答案中的可见度、推荐倾向、引用来源与风险,形成"发现 → 分析 → 优化 → 复测"闭环。
功能特性
- 多平台采集 — Mock / ChatGPT / Perplexity / Google AI Overviews / 自定义 LLM 通道
- AI 评估 — 通过 LLM 对答案进行结构化评估:提及、推荐、情感、事实一致性、风险
- 关键词-查询关联 — 自动检测关键词与查询的关联,按查询展示 Mention Rate / Recommend Rate
- LLM 查询生成 — 基于关键词自动生成评估用查询(支持选择意图类型和生成数量)
- 语义提及检测 — 通过 LLM 检测关键词提及(含语义指代,如"这款产品"指代品牌名)
- Dashboard 可视化 — 趋势图、风险告警、查询分析、按查询展开关键词详情
- 关键词管理 — 增删改查、批量导入、类型筛选
- 定时调度 — APScheduler 支持 cron 定时跑批
- 告警通知 — P0/P1 风险自动检测 + Webhook 通知
- 自定义 LLM — 支持任意 OpenAI 兼容 API(Ollama、DeepSeek、自建节点等)
快速开始
1. 安装
cd geo-monitor
pip install -e ".[dev]"
2. 配置
cp .env.example .env
# 编辑 .env 填入 LLM API Key 和自定义 API 地址
3. 初始化 & 运行
# 初始化数据库并加载示例数据
geo-monitor init
# 启动 API 服务 + Dashboard
geo-monitor serve --reload --port 8000
访问 http://localhost:8000/ 打开 Dashboard。
4. CLI 命令
geo-monitor init # 初始化 DB + 加载示例配置
geo-monitor keywords list # 查看关键词
geo-monitor keywords load -f keywords.yaml # 从 YAML 加载关键词
geo-monitor queries list # 查看查询
geo-monitor queries load -f queries.yaml # 从 YAML 加载查询
geo-monitor run -p mock -o report.md # 跑一轮采集+评估+生成报告
geo-monitor serve --reload --port 8000 # 启动 API 服务
配置项
在 .env 文件或环境变量中设置(前缀 GEO_):
| 变量 | 说明 | 默认值 |
|---|---|---|
GEO_LLM_API_KEY |
LLM API Key(评估和查询生成必需) | 空(使用 Mock) |
GEO_LLM_API_BASE |
自定义 API 地址 | 空(OpenAI 默认) |
GEO_LLM_MODEL |
模型名称 | gpt-4o-mini |
GEO_SCHEDULER_CRON |
定时调度 cron 表达式 | 0 */6 * * * |
GEO_SCHEDULER_PLATFORMS |
定时调度平台(逗号分隔) | mock |
GEO_ALERT_WEBHOOK_URL |
告警 Webhook URL | 空(禁用) |
自定义 LLM 示例:
# Ollama
GEO_LLM_API_BASE=http://localhost:11434
GEO_LLM_MODEL=ollama/llama3
# DeepSeek
GEO_LLM_API_BASE=https://api.deepseek.com
GEO_LLM_MODEL=deepseek/deepseek-chat
# 自建 OpenAI 兼容节点
GEO_LLM_API_BASE=https://your-node.com/v1
GEO_LLM_MODEL=gpt-4o-mini
API 端点
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/dashboard |
Dashboard 概览数据 |
| GET | /api/trends?days=30 |
趋势数据(按平台/日期) |
| GET | /api/alerts?days=7 |
风险告警列表 |
| GET | /api/keywords |
关键词列表(含关联查询数) |
| POST | /api/keywords |
新增关键词 |
| PUT | /api/keywords/{id} |
编辑关键词 |
| DELETE | /api/keywords/{id} |
删除关键词 |
| GET | /api/keywords/{id}/queries |
关键词关联的查询 |
| GET | /api/queries |
查询列表(含 mention/recommend rate + 关联关键词) |
| POST | /api/queries |
新增查询 |
| DELETE | /api/queries/{id} |
删除查询 |
| GET | /api/queries/{id}/details |
查询详情(关键词关联统计) |
| POST | /api/queries/generate |
AI 生成查询(预览) |
| POST | /api/queries/generate-and-save |
AI 生成并保存查询 |
| POST | /api/detect-mentions |
LLM 语义提及检测 |
| GET | /api/runs |
采集运行历史 |
| GET | /api/runs/{id}/results |
运行结果(含 keyword_mentions) |
| POST | /api/runs/trigger |
触发新运行 |
| GET | /api/settings |
查看 LLM 配置 |
| PUT | /api/settings |
保存 LLM 配置 |
完整 API 文档:启动服务后访问 http://localhost:8000/docs
项目结构
geo-monitor/
├── app/
│ ├── main.py # FastAPI 应用 + 27 个 API 端点
│ ├── cli.py # Typer CLI(init/serve/run/keywords/queries)
│ ├── config.py # Pydantic Settings(环境变量配置)
│ ├── db.py # SQLAlchemy 异步连接
│ ├── models.py # 数据模型(Keyword/Query/CollectionRun/RawAnswer/EvaluationResult/KeywordMention)
│ ├── schemas.py # Pydantic 输入/输出 schema
│ ├── services.py # 核心服务(采集执行/查询生成/提及检测)
│ ├── loader.py # YAML 配置加载
│ ├── reports.py # Markdown 报告生成
│ ├── scheduler.py # APScheduler 定时调度
│ ├── alerts.py # 告警通知(Webhook)
│ ├── collectors/ # 平台采集器
│ │ ├── base.py # 抽象基类
│ │ ├── mock.py # Mock 采集器
│ │ ├── chatgpt.py # ChatGPT / 自定义 LLM 采集器
│ │ ├── perplexity.py # Perplexity 采集器
│ │ └── google_aio.py # Google AI Overviews 采集器
│ ├── evaluators/ # AI 评估器
│ │ ├── llm_evaluator.py # LiteLLM 多模型评估
│ │ └── mock_evaluator.py# 规则引擎 Mock 评估
│ └── static/
│ └── index.html # Dashboard 前端(单文件 SPA)
├── config/
│ ├── keywords.yaml # 示例关键词库
│ └── queries.yaml # 示例问题集
├── tests/ # 测试套件
├── pyproject.toml
└── .env.example # 配置模板
技术栈
- 后端: Python 3.11+, FastAPI, SQLAlchemy (async), Typer, LiteLLM
- 前端: 原生 HTML/CSS/JS + Chart.js
- 数据库: SQLite (aiosqlite)
- 调度: APScheduler
- LLM: 支持 OpenAI / Ollama / DeepSeek / 任意 OpenAI 兼容 API
备注
- 本项目中的 GEO 指「生成式搜索优化(Generative Engine Optimization)」,不是地理空间相关含义