Skip to content

ethanrise/GeoInsight

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

GeoInsight - 大模型搜索引用分析工具

通过多轮变体查询,分析不同大模型的搜索引用行为偏好。 示例图片

功能特性

  • 🔀 变体生成:使用大模型生成 10-20 个语义相似但表述不同的问句
  • 🔍 并行搜索:同时调用多个大模型(千问、豆包等)进行网页搜索
  • 📊 引用收集:自动提取并存储每次搜索的引用源
  • 📈 行为分析:统计每个模型对各域名的引用概率,发现引用偏好
  • 🪵 日志系统:支持可配置的日志级别,方便调试和监控
  • 🌐 Web 界面:基于 Gradio 的可视化操作界面

快速开始

1. 安装依赖

最小安装(仅命令行)

pip install openai python-dotenv

完整安装(包含 Web 界面)

pip install -r requirements.txt

这会安装所有依赖:openai, python-dotenv, gradio, matplotlib, pandas

2. 配置 API Key

复制 .env.example.env,填入你的 API 密钥:

cp .env.example .env

编辑 .env

# API 配置
DOUBAO_API_KEY=xxx
DOUBAO_BASE_URL=https://ark.cn-beijing.volces.com/api/v3
DOUBAO_MODEL_ID=doubao-seed-1-6-250615

QIANWEN_API_KEY=xxx
QIANWEN_BASE_URL=https://dashscope.aliyuncs.com/api/v2/apps/protocols/compatible-mode/v1
QIANWEN_MODEL_ID=qwen3-max

# 存储配置(可选)
SQLITE_DB_PATH=./geoinsight/db/citations.db

# 日志级别(可选):DEBUG, INFO, WARNING, ERROR
LOG_LEVEL=INFO

3. 运行分析

命令行方式

python analysis/run_analysis.py "帮我找几家东莞实木家具厂商" --variants 15 --models qianwen,doubao

启用调试模式(输出详细日志):

python analysis/run_analysis.py "问题" --debug

Web 界面方式

# 启动 Web 界面
bash webapp/run.sh
#
python webapp/app.py

然后在浏览器访问 http://localhost:7860

4. 查看报告

运行完成后会自动输出分析报告:

📊 模型引用统计:
  qianwen:
    总引用数:45
    独立域名:18
    查询次数:15

🌐 热门引用域名 (跨模型):
  s.1688.com: 12 次
  zhuanlan.zhihu.com: 8 次

🎯 引用概率分布 (按模型):
  【qianwen】 (共 45 个引用)
    26.67%  s.1688.com                             █████ (12)
    17.78%  zhuanlan.zhihu.com                     ███ (8)

命令行参数

python analysis/run_analysis.py "原始问题" \
  --variants 15 \              # 生成变体数量 (10-20)
  --models qianwen,doubao \    # 使用的搜索模型
  --variant-model qianwen \    # 用于生成变体的模型
  --system-prompt "你是专业助理"  # 系统提示词
  --debug                      # 启用调试模式(详细日志)

Web 界面功能

  • 📝 输入问句:支持多行输入
  • 🔢 变体数量:滑块调节 5-20 个
  • 模型选择:多选框选择要对比的模型
  • 📊 可视化图表
    • 模型引用统计柱状图
    • 热门域名分布条形图
  • 📋 变体列表:表格展示生成的问句变体
  • 📄 详细报告:完整的文字分析报告
  • 💡 示例问句:一键填充示例

数据库

使用 SQLite 存储分析数据,路径可通过 .env 中的 SQLITE_DB_PATH 配置。

数据表

  • runs: 分析运行记录
  • variants: 问句变体
  • results: 模型调用结果
  • citations: 引用源记录

查询示例

from geoinsight.core.analyzer import Analyzer

analyzer = Analyzer(run_id)
analyzer.print_report()

# 获取域名统计
stats = analyzer.get_domain_stats()

# 获取引用概率
probs = analyzer.get_citation_probability()

日志系统

支持通过 .env 配置日志级别:

LOG_LEVEL=DEBUG  # 输出详细日志,包括 API 调用、数据库操作
LOG_LEVEL=INFO   # 输出关键步骤(默认)
LOG_LEVEL=WARNING # 只输出警告和错误

或在命令行启用调试模式:

python analysis/run_analysis.py "问题" --debug

测试

# 运行所有测试
python tests/run_tests.py

# 运行单个测试
python -m unittest tests.test_variant_generator

# 运行单个测试用例
python -m unittest tests.test_analyzer.TestAnalyzer.test_full_pipeline_small

注意: 测试会真实调用 API,消耗配额。

添加新模型

  1. geoinsight/models/ 创建新模型类:
from .chat_base import ChatBase

class ChatKimi(ChatBase):
    def __init__(self):
        super().__init__(
            api_key_key='KIMI_API_KEY',
            base_url_key='KIMI_BASE_URL',
            model_id_key='KIMI_MODEL_ID'
        )
  1. .env 中添加配置:
KIMI_API_KEY=xxx
KIMI_BASE_URL=https://api.moonshot.cn/v1
KIMI_MODEL_ID=moonshot-v1-8k
  1. analysis/run_analysis.pywebapp/app.pymodel_map 中注册:
model_map = {
    'qianwen': ChatQianwen,
    'doubao': ChatDoubao,
    'kimi': ChatKimi,  # 新增
}
  1. webapp/app.pyAVAILABLE_MODELS 中添加显示名称:
AVAILABLE_MODELS = {
    '千问 (Qwen)': 'qianwen',
    '豆包 (Doubao)': 'doubao',
    'Kimi': 'kimi',  # 新增
}

环境变量说明

变量名 说明 默认值
DOUBAO_API_KEY 豆包 API 密钥 必填
DOUBAO_BASE_URL 豆包 API 地址 必填
DOUBAO_MODEL_ID 豆包模型 ID 必填
QIANWEN_API_KEY 千问 API 密钥 必填
QIANWEN_BASE_URL 千问 API 地址 必填
QIANWEN_MODEL_ID 千问模型 ID 必填
SQLITE_DB_PATH 数据库文件路径 ./geoinsight/db/citations.db
LOG_LEVEL 日志级别 INFO

项目结构

GeoInsight/
├── analysis/
│   └── run_analysis.py          # 命令行分析入口
├── webapp/
│   ├── app.py                   # Web 界面主程序
│   └── run.sh                   # 启动脚本
├── geoinsight/
│   ├── db/
│   │   ├── schema.sql
│   │   └── database.py
│   ├── models/
│   │   ├── chat_base.py
│   │   ├── chat_qianwen.py
│   │   └── chat_doubao.py
│   ├── core/
│   │   ├── variant_generator.py
│   │   ├── search_runner.py
│   │   ├── citation_collector.py
│   │   └── analyzer.py
│   ├── utils.py
│   └── __init__.py
├── tests/
├── requirements.txt              # 项目依赖
├── .env
├── .env.example
├── README.md
├── CONTRIBUTING.md
└── CHANGELOG.md

注意事项

  1. API 配额:测试和运行会消耗 API 配额,注意控制变体数量
  2. 并发限制:某些模型有并发限制,max_workers 不宜过大
  3. 数据清理:定期清理数据库避免过大
  4. 日志文件:调试完成后建议将 LOG_LEVEL 改回 INFO
  5. Web 界面:默认监听 0.0.0.0:7860,生产环境注意防火墙设置

License

Apache-2.0 license

About

GeoInsight is a multi-LLM analysis framework for Generative Engine Optimization (GEO), measuring brand visibility, ranking bias, and citation patterns across AI search systems.

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors