# 使用流程
### 步骤一： 生成模拟用户的数据集 
可自由设置活跃度，关系网络， 正常用户和恶意用户的数量
- 通过 `agents_init.py` 从画像文件（如 `1000_user_profiles.json`）生成智能体 CSV
- 输出 CSV 保存到 `data/our_twitter_sim/...`（如需要可在脚本中调整）

```bash
python agents_init.py
```

### 步骤二： 配置提示词与动作空间(如需修改用户的动作空间，prompt等信息)
- 编辑 `scripts/twitter_simulation/align_with_real_world/system_prompt(static).json`
- 编辑 `scripts/twitter_simulation/align_with_real_world/system_prompt(dynamic).json`
- （可选）设置专用动作空间文件：`scripts/twitter_simulation/align_with_real_world/action_space_prompt.txt`

### 步骤三：配置推荐系统（recsys）
- 在 YAML 中设置：`simulation.recsys_type: reddit`（轻量级）或 `twhin-bert`（真实化）
- 如果使用 TwHIN‑BERT，在 oasis/social_platform/recsys.py 中加载分词器/模型：
```python
twhin_tokenizer = AutoTokenizer.from_pretrained("/path/to/twhin-bert-base", model_max_length=512)
twhin_model = AutoModel.from_pretrained("/path/to/twhin-bert-base").to(device)
```

### 步骤四：（可选）部署 LLM 后端
```bash
# 在 llm_deploy.sh 中编辑 MODEL_NAME / 端口等
sbatch llm_deploy.sh
```

### 步骤五：创建 YAML 配置并运行模拟
```bash
python scripts/twitter_simulation/align_with_real_world/twitter_simulation_large.py
  --config_path scripts/twitter_simulation/align_with_real_world/test.yaml
```

## 步骤六：结果与可视化
- 每次运行输出：`results/<run_name>_<timestamp>/`（包含 `simulation_stats.csv`，以及启用时的图表）
- （可选）使用可视化工具绘制关键指标


## 教程 · 运行模拟与消融实验
单次运行 + 三种消融实验类型（大规模、协作、善意模型对比）

## 1) 环境要求

- Python 3.10，依赖已安装，环境已激活
- 数据与 CSV 已准备（如 `data/our_twitter_sim/...`）
- 可选：LLM 推理后端（vLLM/OpenAI 兼容）

可选（在集群上部署 vLLM）：
```bash
# 先在 llm_deploy.sh 中编辑 MODEL_NAME / 端口
sbatch llm_deploy.sh
```

## 2) 单次运行（Twitter 模拟）

编辑最小 YAML 配置（如 `scripts/twitter_simulation/align_with_real_world/test.yaml`）：
- `data.csv_path`：指向你的 CSV 文件
- `simulation.num_timesteps`：模拟步数
- `simulation.recsys_type`：`twhin-bert` 或 `reddit`
- `model.cfgs`：模型类型 / 数量 / 服务地址

运行：
```bash
python scripts/twitter_simulation/align_with_real_world/twitter_simulation_large.py 
  --config_path scripts/twitter_simulation/align_with_real_world/test.yaml
```

输出：
- `results/<run_name>_<timestamp>/`（CSV 与图表）

## 3) 消融实验 · 大规模

配置示例：
- 110 个智能体：`scripts/big-scale-ablation/110.yaml`
- 1100 个智能体：`scripts/big-scale-ablation/1100-size.yaml`

单次运行：
```bash
python scripts/twitter_simulation/align_with_real_world/twitter_simulation_large.py 
  --config_path scripts/big-scale-ablation/110.yaml
```

批量运行（Slurm）：
```bash
bash scripts/big-scale-ablation/big-scale-ablation.sh
```

## 4) 消融实验 · 协作
通过yaml是否share_refelction来配置 \
True ：表示坏人之间彼此知道同伙儿id是谁，同时共享反思 \
False ： 表示坏人之间不知道同活儿id是谁，同时不共享反思
配置示例（有/无协作）：
- 有协作：`scripts/cooperation-ablation/deepseek-r1-cooperation.yaml`
- 无协作：`scripts/cooperation-ablation/deepseek-r1-no-cooperation.yaml`

单次运行：
```bash
python scripts/twitter_simulation/align_with_real_world/twitter_simulation_large.py 
  --config_path scripts/cooperation-ablation/deepseek-r1-cooperation.yaml
```

批量运行：
```bash
bash scripts/cooperation-ablation/cooperation-ablation.sh
```

## 5) 消融实验 · 不同正常模型

配置示例（善意用户模型对比）：
- `scripts/different_good_model_ablation/good-deepseekv3.yaml`
- `scripts/different_good_model_ablation/good-qwen2.5-32b.yaml`
- `scripts/different_good_model_ablation/good-qwen2.5-72b.yaml`

单次运行：
```bash
python scripts/twitter_simulation/align_with_real_world/twitter_simulation_large.py 
  --config_path scripts/different_good_model_ablation/good-deepseekv3.yaml
```

批量运行：
```bash
bash scripts/different_good_model_ablation/different_good_model_ablation.sh
```

## 6) 使用技巧

- 推荐系统（`recsys_type`）
  - `twhin-bert`：接近真实的信息流；需要 TwHIN‑BERT 设置
  - `reddit`：轻量级占位符；建议初始测试时使用
- 关键 YAML 配置项
  - `data.db_path` / `data.csv_path`
  - `simulation.num_timesteps`
  - `model.cfgs`（模型、数量、地址、停用词）
  - `inference.server_url`（主机 + 端口列表）
- 目录约定
  - `scripts/.../*.yaml`：实验配置文件
  - `scripts/.../*.sh`：Slurm 批量脚本
  - `results/...`：每次运行获得独立的输出目录

## 7) 故障排除

- 路径/大小写敏感：严格匹配文件名和目录
- 端口：避免冲突；根据需要调整 `server_url.ports`
- 结果目录：确保代码中 `os.makedirs(..., exist_ok=True)` 创建路径
- 无 TwHIN‑BERT：将 `recsys_type` 设为 `reddit`