LLM Sentry: GEO (生成式引擎优化) 实时监测平台
Monorepo 多项目仓库 - 本仓库包含 LLM Sentry 项目的所有子模块
LLM Sentry 是一个专为 GEO (Generative Engine Optimization) 设计的自动化监测与分析平台。它能够实时追踪品牌或内容在主流 AI 搜索引擎(如 DeepSeek、豆包)回答中的曝光情况,并量化分析其引用来源。
💻 桌面客户端: 项目提供
geo_client2桌面应用(基于 Wails + Go + React),提供图形化界面进行任务管理、搜索监测、登录授权等功能,支持本地 SQLite 数据存储,无需部署后端服务即可使用。
📦 项目结构 (Monorepo)
本仓库采用 monorepo 架构,包含以下独立子项目:
GEO/ (Root Monorepo)
├── geo_db/ # 【数据库服务】PostgreSQL 容器化部署
│ ├── pyproject.toml # 项目配置
│ ├── docker-compose.yml
│ ├── init.sql
│ └── README.md
│
├── llm_sentry_monitor/ # 【监控抓取服务】Web 自动化与数据采集
│ ├── pyproject.toml # 项目配置
│ ├── main.py
│ ├── providers/ # 多模型适配器 (DeepSeek, 豆包)
│ ├── core/ # 域名清洗与引用解析引擎
│ └── README.md
│
├── geo_client2/ # 【桌面客户端】Wails + Go + React 桌面应用
│ ├── main.go # Wails 入口
│ ├── backend/ # Go 后端(认证、任务、搜索、Provider)
│ ├── frontend/ # React 前端(React 18 + Vite + TypeScript)
│ ├── go.mod # Go 依赖
│ └── README.md # 客户端文档
│
├── scripts/ # 共享脚本工具
├── pyproject.toml # 工作区配置
├── .workspace.json # 工作区元数据
├── Makefile # 统一构建与运行指令
├── README.md # 本文件
└── MONOREPO.md # Monorepo 架构说明
子项目说明
geo_db/: PostgreSQL 数据库服务模块,提供数据持久化能力llm_sentry_monitor/: 监控抓取服务,负责模拟用户行为并解析 AI 回答geo_client2/: 桌面客户端应用,基于 Wails v2 + Go + React 构建,提供图形化界面进行 GEO 监测任务管理
geo_client2 桌面客户端
geo_client2 是一个轻量级桌面应用,提供以下功能:
核心功能:
- ✅ 任务管理:创建、执行、取消、重试监测任务
- ✅ 搜索监测:支持 DeepSeek、豆包等平台的 AI 搜索监测
- ✅ 登录授权:管理各平台的登录状态,支持持久化登录
- ✅ 本地存储:使用 SQLite 本地数据库,无需外部数据库服务
- ✅ 设置管理:配置无头模式、超时时间等运行参数
- ✅ 日志查看:实时查看任务执行日志
技术特点:
- 🚀 轻量级:包体积约 10-20MB(相比 Electron 版本减少 85%+)
- ⚡ 高性能:Go 后端 + 系统原生 WebView,启动速度快
- 🔒 本地优先:数据存储在本地,保护隐私
- 🎨 现代 UI:React + Tailwind + shadcn/ui,界面美观
快速开始:
cd geo_client2
# 安装依赖
cd frontend && pnpm install
cd .. && go mod tidy
# 开发模式
wails dev
# 构建应用
wails build
详细使用说明请参阅 geo_client2/README.md
📖 关于 Monorepo 架构的详细说明,请参阅 MONOREPO.md
1. 核心价值
在 AI 驱动搜索的时代,传统的 SEO 正在向 GEO 演进。本项目旨在解决以下核心痛点:
- 曝光监测:实时了解 AI 在回答特定行业问题时,是否提及了你的品牌。
- 引用溯源:精准提取 AI 回答中的参考链接,分析哪些站点(知乎、官网、自媒体)被 AI 采纳为 RAG 上下文。
- 声量占比 (SoV):量化统计不同品牌在 AI 搜索引擎中的收录权重与占比。
2. 技术架构
项目采用解耦的服务化架构,分为数据持久化层和业务执行层:
GEO/ (Root)
├── geo_db/ # 【数据库服务】
│ ├── docker-compose.yml # PostgreSQL 15 容器化部署
│ └── init.sql # 自动化表结构初始化 (Records & Citations)
└── llm_sentry_monitor/ # 【监控抓取服务】
├── main.py # 任务调度与业务逻辑入口
├── providers/ # 多模型适配器 (基于 Playwright 的网页自动化)
└── core/ # 域名清洗与引用解析引擎
关键技术栈
- 自动化引擎:Playwright (模拟真实用户行为,绕过 API 限制,获取最真实的联网搜索结果)。
- 数据存储:PostgreSQL (利用 JSONB 存储复杂引用元数据)。
- 解析算法:基于
tldextract的顶级域名清洗与 SoV 统计模型。
3. 核心流程逻辑
- 模拟提问:通过设计 Prompt 矩阵(对比、建议、查询),模拟真实用户向 DeepSeek/豆包提问。
- 联网搜索:驱动浏览器自动开启"联网模式",获取 AI 实时检索后的回答。
- 多轮执行:支持对同一查询条件执行多轮搜索(
query_count参数),用于测试结果稳定性或获取多次查询的平均数据。 - 引用提取:解析 Markdown 文本及页面 DOM,提取所有
[1][2]形式的参考资料链接。 - 量化分析:将 URL 还原为域名,存入数据库并计算各站点的收录占比。
4. 快速开始指南 (极简模式)
为了简化操作,我们提供了 Makefile 指令:
1. 环境初始化 (使用 uv 管理虚拟环境)
make setup
该指令会自动创建 .venv 虚拟环境并安装所有依赖。
2. 启动数据库
make db
3. 执行监测任务
make run
4. 帮助与清理
make help # 查看所有指令
make clean # 停止数据库并清理缓存
提示:首次运行
make run时建议在非无头模式下手动完成登录。
5. API 使用
项目提供 REST API 接口用于任务管理。启动服务后,可通过 API 创建监测任务:
创建任务接口
POST /mock
请求参数:
keywords: 搜索关键词列表(必填)platforms: 平台列表,可选值:["deepseek", "doubao", "bocha"](默认:["deepseek"])query_count: 查询次数(执行轮数),默认1。设置为大于 1 的值时,系统会对每个关键词-平台组合执行多轮搜索settings: 可选设置headless: 是否无头模式(默认:false)timeout: 超时时间(毫秒,默认:60000)delay_between_tasks: 任务间延迟(秒,默认:5)
示例请求:
{
"keywords": ["AI搜索引擎", "生成式搜索"],
"platforms": ["deepseek", "doubao"],
"query_count": 3,
"settings": {
"headless": false,
"delay_between_tasks": 5
}
}
多轮执行功能
query_count 参数允许对同一查询条件执行多次搜索,适用于:
- 稳定性测试:验证 AI 回答的一致性
- 数据采集:获取多次查询的平均结果,减少单次查询的随机性
- 趋势分析:观察不同时间点的搜索结果变化
执行逻辑:系统会按照 query_count 的值,对每个 (关键词, 平台) 组合循环执行指定轮数。
LLM Sentry - 助力品牌在生成式搜索时代赢得先机