nullvaluefound/pharos
GitHub: nullvaluefound/pharos
自托管 AI 驱动的威胁情报聚合器,通过 LLM 富化和确定性聚类将分散的安全资讯提炼为结构化、可关联的威胁情报。
Stars: 0 | Forks: 0
# Pharos
**Pharos** 是一个自托管、开源的 AI 驱动新闻聚合器。它从
RSS/Atom/JSON 源拉取数据,通过 LLM 将每篇文章丰富为结构化的 JSON
(MITRE 组织 / 软件 / 技术 / 战术 ID,CVE,IOC,摘要,
要点),并使用确定性关键字指纹对跨来源的同一事件报道进行聚类——
无需向量数据库,无需 Elasticsearch,无需
繁重的 ML 技术栈。
存储**仅使用 SQLite**:一个用于近期文章的热数据库和一个用于
较旧内容的冷数据库(“archeion”)。
## 功能
- 开箱即用的**精选默认源**:CISA + 国家 CERT,安全
厂商(Microsoft, Mandiant, CrowdStrike, Talos, Unit 42, ...),新闻
(BleepingComputer, Krebs, The Hacker News, ...),独立研究
(Project Zero, Citizen Lab, Schneier, ...),以及通过
Nitter/RSSHub 的 Twitter/X 模板。参见 [docs/DEFAULT_FEEDS.md](./docs/DEFAULT_FEEDS.md)。
- 多用户阅读器,支持按用户订阅、已读/已保存状态、书签
和已保存的搜索(“watches”)。
- 现代、响应式的 SPA Web UI(Vite + React + Tailwind)和 JSON API。
- 通过 OpenAI 结构化输出实现 LLM 驱动的富化处理。
- **一等公民 MITRE ATT&CK 支持** — 组织 ID (G####),软件 ID (S####),
技术 ID (T####, T####.###) 和战术 ID (TA####) 均经过验证、
索引、在聚类中被赋予高权重,并作为指向
attack.mitre.org 的深层链接呈现。参见 [docs/MITRE.md](./docs/MITRE.md)。
- **Constellations**:通过带权重的 Jaccard 算法在命名空间关键字 Token 上实现跨来源的事件聚类
— 完全确定性且可解释
(UI 会显示匹配了 *哪些* Token)。
- 冷/热 SQLite 分离并支持 FTS5 全文搜索。
- 可插拔的 LLM 后端位于轻量级客户端之后(默认为 OpenAI;可与
任何与 OpenAI 兼容的端点配合使用)。
- 三种部署模式:一体化 Docker,多容器 Compose,或
裸机 systemd。
## 快速开始
### 选项 1 — 单行命令(Docker,最快)
```
# Linux / macOS / WSL
curl -fsSL https://raw.githubusercontent.com/nullvaluefound/pharos/main/scripts/quickstart.sh | bash
```
```
# Windows
iwr -useb https://raw.githubusercontent.com/nullvaluefound/pharos/main/scripts/quickstart.ps1 | iex
```
单行命令会克隆仓库,生成 JWT 密钥,提示输入你的
OpenAI 密钥,构建 Docker 栈,并打印随机生成的
管理员密码。
### 选项 2 — Docker(交互式)
```
git clone https://github.com/nullvaluefound/pharos.git && cd pharos
./install.sh --docker # or .\install.ps1 -Docker on Windows
```
预检容器会拒绝让整个栈启动,前提是 `.env` 仍然
包含占位符密钥,因此你不会意外地使用
`sk-replace-me` 密钥启动。
### 选项 3 — 原生开发(Python venv + npm)
```
git clone https://github.com/nullvaluefound/pharos.git && cd pharos
./install.sh --native --dev # or .\install.ps1 -Native -Dev on Windows
source .venv/bin/activate
pharos sweep # ingestion (terminal 1)
pharos light # lantern (terminal 2)
pharos notify # notifier (terminal 3)
uvicorn pharos.api.app:create_app --factory --port 8000 # API (terminal 4)
cd frontend && npm run dev # UI (terminal 5)
```
打开
。
完整安装指南:**[docs/INSTALL.md](./docs/INSTALL.md)**。
## 架构(一段话)
三个流水线阶段 — **ingestion**(摄取,`pharos sweep`),**lantern**(灯,`pharos light`,LLM 富化引擎),**archiver**(归档,`pharos
archive`)— 以及一个 **FastAPI** 服务层。它们完全
通过 SQLite 进行通信:ingestion 插入状态为 `enrichment_status='pending'` 的行,
lantern 提取它们,根据严格的
pydantic schema 验证 LLM 输出,将实体规范化为结构化表,构建
带命名空间的关键字指纹,并使用倒排索引 + 加权
Jaccard 将文章分配到一个“constellation”(星座)。archiver 将
旧行从 `hot.db` 移动到 `cold.db`,同时永久保留结构化的 JSON。
API 通过 `TEMP VIEW` 合并这两个数据库。
```
flowchart LR
Clients[Next.js UI / pharos CLI] -->|HTTPS JSON| API[FastAPI Server]
API -->|read/write| HOT[(hot.db SQLite)]
API -->|read| COLD[(cold.db / archeion)]
Sched[Scheduler sweep] --> Fetch[Fetcher] --> Parse[Parser+Extractor] --> Dedup[Dedup] -->|insert pending| HOT
HOT -->|pending rows| Lantern[Lantern light - LLM Enrichment]
Lantern -->|enriched_json, overview| HOT
Lantern --> FP[Fingerprint Builder] --> CL[Constellation Assigner] --> HOT
Arch[Archiver] -->|move| HOT
Arch --> COLD
```
在 [docs/ARCHITECTURE.md](./docs/ARCHITECTURE.md) 中阅读更多内容。
## 文档
| 主题 | |
|---|---|
| 安装 | [docs/INSTALL.md](./docs/INSTALL.md) |
| 架构 | [docs/ARCHITECTURE.md](./docs/ARCHITECTURE.md) |
| Lantern(LLM + 聚类) | [docs/LANTERN.md](./docs/LANTERN.md) |
| MITRE ATT&CK 集成 | [docs/MITRE.md](./docs/MITRE.md) |
| 配置参考 | [docs/CONFIGURATION.md](./docs/CONFIGURATION.md) |
| API 参考 | [docs/API.md](./docs/API.md) |
| 数据库模式 | [docs/SCHEMA.md](./docs/SCHEMA.md) |
| CLI 参考 | [docs/CLI.md](./docs/CLI.md) |
| 部署说明 | [docs/DEPLOYMENT.md](./docs/DEPLOYMENT.md) |
| 开发指南 | [docs/DEVELOPMENT.md](./docs/DEVELOPMENT.md) |
| 常见问题 / 设计理念 | [docs/FAQ.md](./docs/FAQ.md) |
## CLI 30 秒入门
| 命令 | 用途 |
|---|---|
| `pharos init` | 创建包含 schema 的 `hot.db` 和 `cold.db` |
| `pharos adduser [--admin]` | 创建本地用户 |
| `pharos watch -u ` | 为用户订阅一个源 |
| `pharos catalog` | 显示内置的精选源目录 |
| `pharos seed-feeds -u -p starter` | 为用户订阅精选预设(starter / minimal / full / everything) |
| `pharos sweep` | 阶段 1:摄取调度器 |
| `pharos light` | 阶段 2:lantern(LLM 富化) |
| `pharos archive` | 阶段 3:archiver(热库 -> 冷库),单次执行 |
| `pharos status` | 流水线状态:按 enrichment_status 统计数量 |
| `pharos feeds` | 列出所有源 + 上次轮询状态 |
| `pharos reprocess [--failed-only]` | 将行重置为 pending |
完整参考:[docs/CLI.md](./docs/CLI.md)。
## 许可证
**Pharos 是专有软件。** 个人在
[Pharos Proprietary License v1.0](./LICENSE) 条款下被允许免费进行个人的自托管使用。
**任何商业、组织、政府、托管、托管服务
或面向第三方的使用都需要单独的商业许可证。**
没有自动或点击即同意的商业授予 — 每个
商业许可证均视具体情况逐案颁发。
要申请商业许可证,请在 GitHub 上开启私密咨询:
有关完整的条款、限制和
贡献者授权,请参阅 [`LICENSE`](./LICENSE)。标签:AI安全, ATT&CK映射, Chat Copilot, Cloudflare, CVE追踪, DLL 劫持, IOC提取, JSON API, LLM富化, MITRE ATT&CK, Petitpotam, React, RSSHub, RSS阅读器, SQLite, Syscalls, Tailwind CSS, 全文搜索, 单页应用, 大语言模型, 威胁情报, 安全资讯, 安全运营, 实时处理, 开发者工具, 情报收集, 扫描框架, 新闻聚合器, 漏洞研究, 结构化数据, 网络安全监控, 自动化聚类, 自托管, 请求拦截, 逆向工具, 速率限制处理, 驱动开发