iamsupersocks/x-coordination-audit
GitHub: iamsupersocks/x-coordination-audit
一个离线社交媒体证据分析引擎,用于从 X 平台数据中提取并量化协同放大、自动化行为及配对时序证据。
Stars: 0 | Forks: 0
# xcoord
**用于分析 X 平台上协同放大、自动化信号及 AI 垃圾内容的离线证据引擎。**
`xcoord` 可将本地的 X/Twitter JSON 导出文件转换为明确的行动图谱和配对时序证据。它能帮助研究人员回答以下问题:
- 是否总是同一批账号反复出现在相同的源帖子周围?
- 两个账号围绕同一个共享 pivot 发布回复或引用变体的速度有多快?
- 某种模式是否重复发生到了具有意义的程度,还是仅仅是个别偶发事件?
- 哪些观察结果支持协同、自动化或内容回收的假设——哪些又不支持?
它**不是**一个神奇的 Bot 概率 API。协同、自动化、共同所有权和 AI 垃圾内容是截然不同的假设,需要不同的证据来支持。
## 功能特性
```
local JSON exports
→ normalized reply / quote / retweet relations
→ explicit pivot campaigns
→ observable timestamp truth
→ account-pair timing samples
→ CSV / JSON / Markdown / GraphML
```

核心特性:
- 设计为离线运行:包内不包含任何网络调用或凭证;
- 不可变的 status-ID 去重;
- 实际支持 `clix` 字段:`author_handle`、`quoted_tweet`、`reply_to_id`、
`retweeted_by`;
- 明确区分时间线所有者、推文作者和转推参与者;
- 当操作时间戳不可用时,不捏造转推延迟;
- 围绕共享 pivot 的绝对配对时间间隔;
- `n`、平均值、中位数、总体/样本标准差、MAD、p90、最小/最大值;
- 确定性的 CSV、JSON、Markdown 和 GraphML 导出。
## 60 秒快速入门
### Python
```
git clone https://github.com/iamsupersocks/x-coordination-audit.git
cd x-coordination-audit
python3.11 -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
xcoord audit fixtures/synthetic_timeline.json -o outputs/demo
```
生成的文件:
```
outputs/demo/
├── pair_stats.csv
├── audit_report.json
├── audit_report.md
└── coordination.graphml
```
### Docker
```
git clone https://github.com/iamsupersocks/x-coordination-audit.git
cd x-coordination-audit
mkdir -p raw outputs
docker build -t xcoord:local .
docker run --rm \
-v "$PWD/raw:/data:ro" \
-v "$PWD/outputs:/out" \
xcoord:local audit /data -o /out
```
或者:
```
docker compose run --rm audit
```
该镜像**仅包含 xcoord**。它不包含浏览器、X session、
cookies 或外部收集器。
## 收集公开的 X 数据
数据收集工作委托给独立的
[`TheoRst/clix`](https://github.com/TheoRst/clix) CLI。`clix` 使用本地
浏览器 cookie 进行身份验证;xcoord 绝不会接触这些凭证。
经测试的收集器安装方法:
```
uv tool install clix0
clix auth login --browser chrome
clix auth status
clix doctor
```
使用仓库自带的辅助工具收集多个账号数据:
```
python3 scripts/collect_clix.py \
Jouhatsu_ai Deep_GeniusAi KaitoEtLIA EloiLJF \
--count 100 \
--pages 10 \
--sleep 3 \
--profile-timeline \
--output-dir raw
xcoord audit raw -o outputs/my-audit
```
该辅助工具绝不会读取或存储凭证。它会生成干净的 JSON 数组以及一个
包含请求限制和**实际返回行数**的清单。
在收集数据之前,请先阅读完整指南:
**[使用 clix 收集公开的 X 数据:安装、身份验证、安全、速率限制与 Docker →](docs/collecting-with-clix.md)**
## 公开的可视化案例研究
案例研究是附属产物:本仓库依然是一个可复用的引擎,
而每项调查都会发布其自身的证据、不确定性及局限性。
### 围绕 `@Jouhatsu_ai` 的放大机制
- 总共审查了 16 个账号;
- 6 个账号拥有足够的重复显式 pivot 证据以进行配对时序分析;
- 10 个外围账号因具有嫌疑、相关性或证据不足而被保留,
而不是被直接静默丢弃;
- 核心集合中包含 173 条原创帖子;
- 154 条标准化的引用/回复互动;
- 112 个显式 pivot/行动;
- 15 个已测量的账号对。

**[阅读完整的简明案例研究 →](case-studies/jouhatsu-network-2026-07-31/README.md)**
该案例研究包含:
- 对观察到的分发机制的通俗易懂的解释;
- 所有已审查账号及其证据状态;
- 精确到分钟的活动时间线;
- 加权账号网络;
- 配对矩阵和散布图;
- 语料库覆盖范围和数据收集限制;
- 一个明确声明并非黑名单的证据账本。
## 输入约定
接受的输入:
1. 一个或多个 JSON 文件;
2. 一个包含直接 `*.json` 子文件的目录;
3. 包含推文对象的顶层数组;
4. 将数组包裹在 `tweets`、`data`、`items`、`timeline`、
`statuses` 或 `results` 下的对象。
```
# 单个文件
xcoord audit raw/account.json -o outputs/run
# 多个文件
xcoord audit raw/a.json raw/b.json -o outputs/run
# 整个目录
xcoord audit raw -o outputs/run
```
常见的字段别名包括:
- ID:`id_str`、`id`、`tweet_id`、`status_id`;
- 账号:`author_handle`、`screen_name`、`username`、`handle` 或嵌套的
`user` / `author`;
- 时间戳:`created_at`、`createdAt`、`timestamp`、`posted_at`;
- 回复 pivot:`reply_to_id`、`in_reply_to_status_id_str`;
- 引用 pivot:`quoted_tweet`、`quoted_status_id`、`quoted_status`;
- 转推 pivot:`retweeted_status`、`retweeted_status_id_str`。
不属于回复、引用或转推事件的原创推文会被
当前的时序引擎忽略。
## 时间戳真实性模型
每个事件都带有明确的时间戳来源:
```
{
"availability": "observed",
"value": "2026-07-30T16:25:29+00:00",
"source": "created_at",
"reason": "event_field_present"
}
```
或者:
```
{
"availability": "unavailable",
"value": null,
"source": null,
"reason": "clix_retweet_original_timestamp_only"
}
```
### 为什么转推需要特殊处理
clix 的个人资料时间线转推可能会暴露原始推文的 `created_at`,
而不是账号点击转推的时间。因此,xcoord 会:
1. 使用 `retweeted_by` 作为操作者;
2. 使用顶层 status ID 作为 pivot;
3. 保留结构连边;
4. 将该操作的时间戳标记为不可用;
5. 将其从延迟统计中排除。
缺失的值依然保持缺失状态。它们绝不会被
转换成零秒响应。
## 行动与配对模型
一个行动由一个明确且不可变的 pivot 状态作为主键标识:
- 回复 → 被回复的 status;
- 引用 → 被引用的 status;
- 转推 → 被转推的原始 status。
对于在同一行动中具有可观察事件的每一对账号,xcoord 会
使用每个账号的最早事件并记录:
```
delay_seconds = abs(t(account_b) - t(account_a))
```
基于独立 pivot 提取的样本会产生以下统计:
- `n`;
- 平均值和中位数;
- 总体和样本标准差;
- MAD;
- 最近秩 p90;
- 最小/最大值;
- 原始延迟样本。
解读规则:`n < 3` 仅供参考。对于倾斜的社交时序数据,
中位数和 MAD 通常比平均值和标准差更稳健。
## 输出格式
| 文件 | 用途 |
|---|---|
| `pair_stats.csv` | 紧凑的配对级统计数据 |
| `audit_report.json` | 完整的机器可读标准化报告 |
| `audit_report.md` | 人类可读的事件、行动和配对表格 |
| `coordination.graphml` | 用于 Gephi/Cytoscape 的无向网络 |
## 检测层级
| 层级 | 当前状态 | 所需证据 |
|---|---|---|
| 重复放大 | 已实现 | 显式的共享 pivot + 重复的时间戳 |
| 配对同步 | 已实现 | `n`、中位数、σ、MAD、p90 |
| 转推结构 | 已实现 | 操作者/pivot 字段;仅在时间戳可观察时计算延迟 |
| 证据账本 | 在案例研究层实现 | 公开指标 + 置信度 + 局限性 |
| 文本模板相似度 | 已规划 | 可复现的近似重复指标 |
| 媒体重传检测 | 已规划 | 精确/感知哈希 + 来源归属 |
| 节奏自动化 | 已规划 | 按时段计算的熵、突发规律性、全天候 (24/7) 时间窗口 |
| 技术性 Bot 确认 | 超出单纯时序分析的范畴 | 独立的技术证据 |
不应将任何单一的“Bot 概率”将这些层级折叠为一个不透明的分数。
## 安全与研究伦理
- 分析公开行为,而非私人身份。
- 保留源 URL 和不可变的 status ID。
- 发布实际的样本数量和不均衡的数据收集窗口。
- 将“协同”、“自动化”和“AI 垃圾内容”作为独立的声明对待。
- 不要将观察名单变成骚扰或大规模举报的目标列表。
- 不要公开浏览器 cookie、session、私人时间线或凭证。
- 如实描述证据支持的内容以及不支持的内容。
## 开发
```
pip install -e ".[dev]"
pytest
python3 scripts/render_case_study.py
uv build
```
案例研究渲染器仅使用 Python 的标准库和汇总的 CSV
输入。公开的 SVG 是确定性的,并且经过回归测试。
## License
xcoord 采用 MIT 协议。外部收集器保留其各自的许可证。
标签:Python, 代码示例, 子域名暴力破解, 数据分析, 无后门, 社交媒体, 社交网络分析, 自动化检测, 虚假信息研究, 请求拦截, 逆向工具