检索增强生成系统

一个开源的检索增强生成(RAG)系统,用于分析Jeffrey Epstein调查中公开的文件,支持研究人员、记者和调查人员搜索、分析并发现数百万页官方文件中的关联。

  • by avenoxai
  • Python
  • 本地部署
  • 6 星标
  • 更新于
在 GitHub 查看 kalista78/epstein-llm-friendly

使用说明

爱泼斯坦数据集RAG系统

一个开源的检索增强生成(RAG)系统,用于分析杰弗里·爱泼斯坦调查中公开发布的文件。旨在使研究人员、记者和调查人员能够搜索、分析和查找数百万页美国司法部、众议院委员会和联邦调查局官方发布的内容之间的联系。

概述

该项目提供:

  • 混合搜索:结合BM25关键字+矢量语义搜索,实现准确检索
  • 实体图:通过关系映射提取人员、组织和地点
  • 证据等级引用:每个结果都包括来源、页码和贝茨编号
  • MCP服务器:通过模型上下文协议与Claude、GPT和其他LLM代理集成
  • 多后端嵌入:支持Google Gemini API和OpenRouter

数据源

该系统设计用于官方公开发布:

来源 描述
美国司法部爱泼斯坦图书馆 约350万页,18万张图片,2K+视频
众议院监督委员会 其他文件发布
联邦调查局信息自由库 《信息自由法》发布

备注:此存储库包含处理代码和预先计算的嵌入。原始文件应从官方来源下载。

快速开始

先决条件

  • Python 3.10+
  • PostgreSQL(可选,SQLite用于开发)
  • Meilisearch(用于关键字搜索)

安装

# Clone the repository
git clone https://github.com/yourusername/epsteindataset.git
cd epsteindataset

# Create virtual environment
python -m venv venv
source venv/bin/activate  # or `venv\Scripts\activate` on Windows

# Install dependencies
pip install -r requirements.txt

# Download spaCy model for entity extraction
python -m spacy download en_core_web_sm

# Copy environment template
cp .env.example .env

配置

编辑 .env 使用API密钥(选择一个):

# Option 1: Google Gemini API (Direct)
GEMINI_API_KEY=your_gemini_api_key

# Option 2: OpenRouter API
OPENROUTER_API_KEY=your_openrouter_api_key

使用预构建数据集

存储库包括预处理的数据:

  • corpus.sqlite -带有提取文本和元数据的SQLite数据库
  • data_archive.zip -其他处理数据
import sqlite3

# Connect to the corpus
conn = sqlite3.connect('corpus.sqlite')
cursor = conn.cursor()

# Query example
cursor.execute("SELECT * FROM documents LIMIT 10")
for row in cursor.fetchall():
    print(row)

运行MCP服务器

# Start the MCP server for LLM integration
python -m src.mcp_server.server

建筑

┌─────────────────────────────────────────────────────────────┐
│                     LLM Agent / User                        │
└─────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────┐
│                      MCP Server                             │
│  Tools: search, fetch_page, entity_lookup, evidence_pack    │
└─────────────────────────────────────────────────────────────┘
                              │
              ┌───────────────┼───────────────┐
              ▼               ▼               ▼
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│  Hybrid Search  │ │  Entity Graph   │ │ Citation Builder│
│  (BM25+Vector)  │ │  (Co-occurrence)│ │  (Provenance)   │
└─────────────────┘ └─────────────────┘ └─────────────────┘
              │               │               │
              └───────────────┼───────────────┘
                              ▼
┌─────────────────────────────────────────────────────────────┐
│                    Storage Layer                            │
│  PostgreSQL/SQLite │ Meilisearch │ LanceDB/Qdrant          │
└─────────────────────────────────────────────────────────────┘

MCP工具

MCP服务器为LLM代理提供以下工具:

工具 说明
search 混合关键字+带过滤器的矢量搜索
fetch_page 通过文档ID和页码获取整页内容
entity_lookup 按名称查找实体
entity_neighbors 发现实体连接
timeline 实体的按时间顺序排列的事件
evidence_pack 经过严格引用的精心策划的证据

示例用法(Claude)

User: Who visited Little Saint James in 2005?

Agent: [calls search tool]
       Query: "Little Saint James visitors 2005"
       Filters: {date_start: "2005-01-01", date_end: "2005-12-31"}

Results: [
  {
    "text": "Flight log entry showing...",
    "citation": {
      "source": "DOJ Dataset 3",
      "page_number": 142,
      "bates_number": "DOJ-00045821"
    }
  }
]

项目结构

epsteindataset/
├── src/
│   ├── embeddings/       # Gemini/OpenRouter embedding providers
│   ├── processing/       # PDF extraction, OCR, chunking
│   ├── search/           # Hybrid search, vector stores
│   ├── database/         # SQLAlchemy models, schema
│   └── mcp_server/       # MCP server implementation
├── scripts/              # Data processing scripts
├── config/               # Configuration files
├── tests/                # Test suite
├── corpus.sqlite         # Pre-processed document database
├── data_archive.zip      # Additional processed data
├── requirements.txt      # Python dependencies
├── .env.example          # Environment template
└── README.md

嵌入成本估算

使用Gemini gemini-embedding-001 每百万代币15美元:

场景 页面 估计。代币 标准 批量API
小语料库 10万 3500万 ~5美元 ~2.5美元
中等 50万 17.5亿 ~26美元 ~13美元
全部司法部 350万 12亿 约180美元 约90美元

隐私与道德

本项目处理敏感调查材料。拜托:

  1. 不要重新分发原始媒体 -仅链接到官方来源
  2. 保留编辑 -永远不要试图泄露编辑过的内容
  3. 尊重受害者隐私 -不要识别或推测受害者
  4. 报告PII泄漏 -如果你发现无意中暴露了个人身份信息,请向司法部报告

美国司法部明确警告称,发布的信息可能包含无意中的非公开个人身份信息。这个系统反映了这种姿态。

贡献

欢迎投稿!请参阅 贡献.md 作为指导方针。

需要帮助的领域:

  • 提高手写文档的OCR质量
  • 实体解析和重复数据删除
  • 构建可视化界面
  • 性能优化

许可证

此项目根据MIT许可证获得许可-请参阅 许可证 了解详情。

免责声明

这是一个用于分析公开文件的研究工具。这些文件中有名字并不意味着有不当行为。始终:

  • 将结果框定为“文档中提及”,而非结论
  • 提供完整的引用
  • 考虑周围页面的上下文

致谢


备注:本项目不隶属于任何政府机构或官方调查。