thomasjjj/youtube_genocide_identifier
GitHub: thomasjjj/youtube_genocide_identifier
该工具抓取 YouTube 视频转录文本,并借助多家 LLM 按国际法律标准分析其中是否存在灭绝煽动内容,辅助研究与监控工作。
Stars: 5 | Forks: 0
# YouTube 灭绝煽动分析工具包
这是一个 Python CLI,用于收集 YouTube 文本记录,并根据国际法律标准分析其中是否存在灭绝煽动行为。
本工具用于研究和监控支持。它不是法律判定系统,其结果应由合格的专业人员进行审查。
## 功能
- 获取 YouTube 文本记录,并将其存储在 SQLite 和文本文件中。
- 使用 `yt-dlp` 获取基本视频元数据,并支持 `pytube` 作为回退方案。
- 支持 OpenAI、Claude、Gemini 和本地 Ollama 模型。
- 通过 provider 的 structured-output 设置和本地 Pydantic 验证来强制执行共享的 JSON schema。
- 包含合成的文本记录测试,以便操作员在进行实时分析之前,可以将模型的回答与预期结果进行比较。
- 在每次分析结果中存储 provider、模型、token 数量、schema 版本和时间戳。
- 根据 provider、模型和 schema 版本缓存分析结果。
## 要求
- Python `>=3.10,<3.15`
- 托管模型的 provider 凭证,或用于本地模型的正在运行的 Ollama 服务
- `requirements.txt` 中的运行时依赖项
- `requirements-dev.txt` 中的开发/测试依赖项
## 安装
```
python -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install --upgrade pip setuptools wheel
python -m pip install -r requirements-dev.txt
```
复制示例环境文件并配置至少一个 provider:
```
Copy-Item example_credentials.env .env
```
## Provider 配置
将 `AI_PROVIDER` 设置为以下之一:
- `openai`
- `claude`
- `gemini`
- `ollama`
默认模型设置:
```
OPENAI_MODEL=gpt-5.5
CLAUDE_MODEL=claude-opus-4-8
GEMINI_MODEL=gemini-3.5-flash
OLLAMA_MODEL=gpt-oss:20b
```
Provider 凭证:
```
OPENAI_API_KEY=...
ANTHROPIC_API_KEY=...
GEMINI_API_KEY=...
```
对于 Ollama,请安装 Ollama,在本地启动它,并拉取选定的模型:
```
ollama pull gpt-oss:20b
```
如果由于内存或模型可用性问题导致无法加载本地模型,CLI 将报告特定于 provider 的错误。
## 用法
交互式完整 pipeline:
```
python genocide_detect.py
```
使用显式的 provider 和模型进行分析:
```
python genocide_detect.py "https://www.youtube.com/watch?v=VIDEO_ID" --provider openai --model gpt-5.5
python genocide_detect.py analyze VIDEO_ID --provider claude
python genocide_detect.py analyze VIDEO_ID --provider gemini --force-analysis
python genocide_detect.py analyze VIDEO_ID --provider ollama --model gpt-oss:20b
```
在进行实时分析之前运行合成模型测试:
```
python genocide_detect.py test-models --provider openai --model gpt-5.5
python genocide_detect.py test-models --list-cases
python genocide_detect.py analyze VIDEO_ID --provider ollama --test-first
```
合成测试套件特意涵盖了:
- 明确煽动摧毁受保护群体
- 带有足够上下文的隐蔽或非人化的摧毁言论
- 强烈但非种族灭绝性质的政策批评
- 针对非受保护目标的激进言论
- 答案应为 `Cannot determine` 的上下文不足或模棱两可的情况
仅提取文本记录:
```
python genocide_detect.py extract "https://www.youtube.com/watch?v=VIDEO_ID"
python genocide_detect.py extract VIDEO_ID --overwrite
```
列出已缓存的文本记录:
```
python genocide_detect.py list --limit 20
```
## 输出契约
每个 provider 都必须返回匹配此 schema 的 JSON:
```
{
"answer": "Yes | No | Cannot determine",
"reasoning": "string",
"evidence": ["string"]
}
```
应用程序会在受支持的情况下要求每个 provider 提供结构化的 JSON,然后使用 Pydantic 验证返回的文本。无效或不完整的输出将被拒绝,而不是被静默保存。
## 验证
```
python -m pytest
python -m black --check .
python -m pip_audit -r requirements.txt
```
## 项目结构
```
.
|-- config.py
|-- genocide_detect.py
|-- requirements.txt
|-- requirements-dev.txt
|-- src/
| |-- gpt.py
| |-- llm_providers.py
| |-- schemas.py
| |-- system_prompt.py
| |-- youtube_metadata.py
| `-- youtube_transcript.py
`-- tests/
```
标签:AI风险缓解, DLL 劫持, Petitpotam, Python, 命令控制, 大语言模型, 安全规则引擎, 数据采集, 文本分析, 无后门, 舆情分析, 逆向工具