alessoh/threatpulse
GitHub: alessoh/threatpulse
一个以 AI Agent 威胁为核心的自动化威胁情报聚合与分析平台,利用大模型将多源安全数据转化为结构化的威胁画像和响应方案。
Stars: 0 | Forks: 0
# ThreatPulse
**面向 AI agent 时代的威胁情报。** ThreatPulse 以 **AI agent 及 agent 间的威胁**(prompt injection、MCP 工具投毒、agent 蠕虫、memory poisoning)为主导 —— 作为其主要信息源 —— 同时将传统漏洞作为次要关注列表进行追踪。每个威胁都带有明确的 `category`(`agent` 或 `conventional`),并在数据接入时设定。
**在线网站:** https://threatpulse.dev
ThreatPulse 会抓取 CISA、NVD、GitHub Security Advisories、arXiv 以及精选的安全研究信息源(Simon Willison、Embrace The Red、OWASP GenAI、Unit 42、PortSwigger Research、Schneier on Security),使用 Claude 将每条原始数据转化为包含严重程度、分类标签和修复指导的纯英文威胁画像,并通过仪表板、可搜索的库、AI 生成的响应 playbook 以及聊天顾问来呈现所有内容。Agent 来源每 6 小时重新扫描一次;其他所有内容每天扫描一次。
## 功能
- **Agent 威胁仪表板** — 专注于 agent 的统计磁贴,agent 威胁的趋势信息流,以及下方的精简版传统关注列表
- **Gemini 每日洞察** — 由 Google Gemini 根据本周接入的威胁(优先 agent 威胁)每天编写的全景简报,在每次抓取后刷新
- **威胁库** — 可搜索、可筛选的目录;默认显示带有易读 OWASP ASI 标签的 agent 视图,传统视图和综合视图只需一键即可切换
- **Agent 威胁分类体系** — 根据 OWASP Agentic Top 10 (ASI01–ASI10) 对威胁进行分类,并带有攻击面和传播标签
- **AI playbook** — 按需生成并缓存的针对单一威胁的事件响应 playbook(Pro 层级)
- **AI 顾问** — 用于询问有关任何威胁问题的聊天界面
- **自动化收集** — 通过 Vercel Cron 每天进行全量抓取,并通过 GitHub Actions 计划任务每 6 小时抓取一次 agent 来源;在进行任何 AI 调用之前,根据 CVE ID / 来源 URL 进行去重
- **Agent 相关性检查** — 来自 CISA/NVD/安全新闻且展现出 AI agent 视角(MCP、prompt injection、agent 框架)的常规条目将通过 agent 分类体系进行处理,并归入主要的 agent 信息流
- **账户与计费** — JWT 认证,通过 Stripe 实现 Free/Pro/Enterprise 层级
- **电子邮件** — 通过 Resend 为订阅者发送每周 AI 撰写的摘要
## 架构
| 层级 | 技术 |
|---|---|
| Frontend | Next.js 14, React 18, TypeScript, Tailwind CSS |
| Backend | FastAPI (Python), SQLAlchemy, Alembic |
| Database | PostgreSQL (生产环境使用 Neon) |
| AI | Anthropic Claude 用于威胁合成(`claude-sonnet-5`;可通过 `ANTHROPIC_MODEL` 覆盖)+ Google Gemini 用于每日洞察(`gemini-2.5-flash`;可通过 `GEMINI_MODEL` 覆盖) |
| 托管 | Vercel(两个项目:frontend + serverless backend),Vercel Cron 用于抓取 |
| 支付 / 邮件 | Stripe, Resend(均为可选) |
```
threatpulse/
├── frontend/ # Next.js app (dashboard, library, playbooks, pricing)
├── backend/
│ ├── app/
│ │ ├── api/ # REST routes + cron endpoints
│ │ ├── core/ # config, database, auth
│ │ ├── models/ # SQLAlchemy models
│ │ ├── scrapers/ # conventional + agent-threat collectors
│ │ └── services/ # AI synthesis, email, Stripe, digest
│ └── alembic/ # database migrations
├── docs/DEPLOY_VERCEL.md # step-by-step production deployment guide
└── docker-compose.yml # local development stack
```
## 安装(本地开发)
### 前置条件
- [Docker Desktop](https://www.docker.com/products/docker-desktop/)(Windows、Mac 或 Linux)
- 一个 [Anthropic API key](https://console.anthropic.com)(用于威胁合成,必需)
- Stripe 和 Resend 密钥(可选 — 如果没有它们,支付和电子邮件功能将被禁用)
### 使用 Docker 快速开始
```
git clone https://github.com/alessoh/threatpulse.git
cd threatpulse
# 创建您的环境文件
cp .env.example .env # if no example file exists, create .env with the variables below
```
`.env` 的最少内容:
```
ANTHROPIC_API_KEY=sk-ant-...
JWT_SECRET=any-long-random-string
```
然后启动所有服务:
```
docker-compose up
```
这将启动 Postgres、FastAPI 后端(自动应用迁移)、Next.js 前端以及一个 scraper worker。
- Frontend: http://localhost:3000
- API: http://localhost:8000(交互式文档位于 http://localhost:8000/docs)
### 填充演示数据
```
docker-compose exec backend python -m app.scrapers.run --seed
```
这会加载 10 个真实的、有文档记录的威胁(5 个传统威胁,5 个专注于 agent 的威胁),以便仪表板能立即显示数据。
### 不使用 Docker 运行(仅后端)
Windows (PowerShell):
```
cd backend
python -m venv .venv
.venv\Scripts\Activate.ps1
pip install -r requirements.txt
$env:DATABASE_URL = "postgresql://user:pass@host:5432/threatpulse"
$env:JWT_SECRET = python -c "import secrets; print(secrets.token_hex(32))"
alembic upgrade head
uvicorn app.main:app --reload
```
Mac/Linux:步骤相同,但需使用 `source .venv/bin/activate` 和 `export VAR=value`。
## 配置
| 变量 | 必需 | 用途 |
|---|---|---|
| `DATABASE_URL` | ✅ | Postgres 连接字符串 |
| `JWT_SECRET` | ✅ | 认证 token 的签名密钥(应用程序将拒绝使用默认值启动) |
| `ANTHROPIC_API_KEY` | ✅ | 用于威胁合成的 Claude API 访问权限 |
| `ANTHROPIC_MODEL` | — | 覆盖 Claude 模型(默认为 `claude-sonnet-5`) |
| `GEMINI_API_KEY` | — | 用于每日仪表板洞察的 Google Gemini 密钥(如果没有它,将回退到静态文本) |
| `GEMINI_MODEL` | — | 覆盖 Gemini 模型(默认为 `gemini-2.5-flash`) |
| `CRON_SECRET` | 生产环境 | 保护 cron endpoint 的 Bearer token |
| `FRONTEND_URL` / `CORS_ORIGINS` | 生产环境 | 用于重定向和 CORS 的 Frontend 源 |
| `NEXT_PUBLIC_API_URL` | ✅ (frontend) | 后端 URL,在构建时植入 |
| `RESEND_API_KEY` / `EMAIL_FROM` | — | 电子邮件警报和每周摘要 |
| `STRIPE_SECRET_KEY` / `STRIPE_WEBHOOK_SECRET` / `STRIPE_PRICE_*` | — | 订阅 |
| `NVD_API_KEY` | — | 为收集器提供更高的 NVD 速率限制 |
## 部署
完整的生产环境设置 —— 包括 Neon Postgres、两个 Vercel 项目、cron job、Stripe webhook 以及全面兼容 Windows 的命令 —— 均在 **[docs/DEPLOY_VERCEL.md](docs/DEPLOY_VERCEL.md)** 中进行了分步记录。
要在生产环境中手动触发抓取:
```
# Windows PowerShell
Invoke-RestMethod -Uri "https://api.threatpulse.dev/api/cron/scrape-all" -Headers @{ Authorization = "Bearer YOUR_CRON_SECRET" }
```
```
# Mac/Linux
curl -H "Authorization: Bearer YOUR_CRON_SECRET" https://api.threatpulse.dev/api/cron/scrape-all
```
## 进度
### 已完成 ✅
- [x] 全栈应用部署在 Vercel 上(frontend + serverless FastAPI backend)
- [x] 带有迁移和种子数据的 Neon Postgres
- [x] 通过 Vercel Cron 每日自动抓取(CISA KEV、NVD、安全 RSS、GitHub 顾问、arXiv、研究员博客)
- [x] Claude 驱动的威胁合成,具有 JSON 验证、重试和分类限制功能
- [x] 在 AI 调用之前进行去重(根据 CVE ID / 来源 URL)以控制成本
- [x] 与 OWASP Agentic Top 10 保持一致的 agent 威胁分类体系
- [x] 按需生成、缓存的 AI playbook
- [x] 带有 bcrypt 和基于数据库的速率限制的 JWT 认证
- [x] 通过 `alert_logs` 实现幂等的警报/摘要发送
- [x] 生产环境中已修复:弃用的 Claude 模型替换、NVD 收集器 404、arXiv 收集器重定向
- [x] 自定义域名:[threatpulse.dev](https://threatpulse.dev) + api.threatpulse.dev
### 进行中 / 计划中 🚧
- [x] 仪表板上的 Gemini 生成的每日洞察(按天缓存,在每次抓取后刷新)
- [ ] 仪表板优化:计算出的来源计数、真实的增量箭头、上次抓取时间戳
- [ ] 专用的 agent 威胁视图,带有易读的 ASI 标签
- [ ] 针对新严重威胁的电子邮件警报 (Resend)
- [ ] 端到端的 Stripe 结算和层级限制
- [ ] 更快的抓取频率(GitHub Actions 每小时触发一次)
- [ ] 围绕合成和去重的测试套件
- [ ] 结构化日志记录 / 可观测性
## 联系方式
- **作者:** Harry Peter Alesso
- **GitHub:** [@alessoh](https://github.com/alessoh)
- **问题与功能请求:** [GitHub Issues](https://github.com/alessoh/threatpulse/issues)
## 许可证
[MIT](LICENSE) © 2026 Harry Peter Alesso
标签:AI代理, CISA项目, 威胁情报, 开发者工具, 测试用例, 漏洞监测, 网络安全, 请求拦截, 逆向工具, 隐私保护