camel-ai/oasis · 上手攻略
- 仓库:camel-ai/oasis
- 链接:https://github.com/camel-ai/oasis
- 分类:agent(社交仿真 / 大规模 LLM Agent)
- 作者:spark
- 更新:2026-07-16
是什么
OASIS(Open Agent Social Interaction Simulations with One Million Agents)是 CAMEL-AI 团队开源的"百万级 LLM Agent 社交模拟器"。它不是单 Agent 框架,也不是 Chatbot 工具,而是一个离散时间步的社交媒体沙盘:用 LLM 驱动的"虚拟用户",在仿 Twitter / Reddit / 电商平台里互相关注、发帖、点赞、评论、转发、举报、群聊,从而让研究者能在受控环境里观察信息扩散、回音壁、群体极化、跟风、虚假信息传播等社会动力学现象。GitHub 4.9k+ Star、Apache-2.0、Python 包名 camel-oasis,主仓库最近一次重要更新为 2025-12 的 camel-ai==0.2.78 同步。
它本质上是一个多智能体强化式仿真环境,采用了类 PettingZoo 的接口(reset / step / close),可以与 RL 库或纯 LLM 调用结合。论文 2024-11 上 arXiv(2411.11581),属于学术可复现的研究型项目,形态介于"工具"和"benchmark"之间。
解决什么问题
研究大规模社交现象时,真实平台要么不可实验(伦理/合规)、要么数据不可得,要么尺度不够。OASIS 提供三件事:
- 可控可复现:固定随机种子、固定 prompt、固定模型,可以精确复现"100 万 agent 在 30 天里发生了什么"。
- 可大规模:声称可扩展到 1,000,000 个 agent,官方实测 100 agent 单步 token 量约 335,600 输入 + 16,750 输出;用户需自行按激活概率(activation probability)× 时间步估算成本。
- 可量化:内置 SQLite 数据库记录全部 action 和 post 状态,研究者可以离线跑传播、影响力、极化、回流等指标。
典型场景:研究错误信息传播、群体极化的形成机制、推荐算法对回音壁的放大、平台治理(举报、限流、删帖)的效果、做社会计算的仿真 demo 给非技术受众看、做 AI 红队/对抗仿真。
快速安装
系统要求
- Python ≥ 3.10(CAMEL 与 OASIS 已普遍要求 3.10+)
- 能访问 LLM API(OpenAI 兼容、或通过 CAMEL 适配 Qwen / DeepSeek 等)
- 磁盘:单次中等规模模拟产出几百 MB~几 GB 的 SQLite 都常见
安装命令
# 1) 创建虚拟环境
python3 -m venv .venv && source .venv/bin/activate
# 2) 安装 OASIS(PyPI 包名 camel-oasis)
pip install -U camel-oasis
# 3) CAMEL 通常会被作为依赖拉入;如未带或要最新版:
pip install -U camel-ai
# 4) 准备 LLM 凭证(以 OpenAI 为例)
export OPENAI_API_KEY="sk-..."
注意:包名是
camel-oasis,仓库名是oasis。导入语句是import oasis,与包名不同,踩坑过一次。
数据准备
需要一个 agent profile 文件,描述每个虚拟用户的人口属性、兴趣等。仓库自带示例:
# 从 GitHub 下载示例 profile
mkdir -p ./data/reddit
wget https://raw.githubusercontent.com/camel-ai/oasis/main/data/reddit/user_data_36.json \
-O ./data/reddit/user_data_36.json
核心用法
下面是 README 给出的最小可运行 demo(基于 CAMEL 的 ModelFactory + oasis.make):
import asyncio
import os
from camel.models import ModelFactory
from camel.types import ModelPlatformType, ModelType
import oasis
from oasis import (ActionType, LLMAction, ManualAction,
generate_reddit_agent_graph)
async def main():
# 1) 定义模型(也可用 Qwen / DeepSeek 等 OpenAI 兼容端点)
openai_model = ModelFactory.create(
model_platform=ModelPlatformType.OPENAI,
model_type=ModelType.GPT_4O_MINI,
)
# 2) 声明允许的 action(OASIS 共 23 种)
available_actions = [
ActionType.LIKE_POST, ActionType.DISLIKE_POST,
ActionType.CREATE_POST, ActionType.CREATE_COMMENT,
ActionType.LIKE_COMMENT, ActionType.DISLIKE_COMMENT,
ActionType.SEARCH_POSTS, ActionType.SEARCH_USER,
ActionType.TREND, ActionType.REFRESH,
ActionType.DO_NOTHING,
ActionType.FOLLOW, ActionType.MUTE,
]
# 3) 生成 agent 图(profile 决定每个 agent 的人设)
agent_graph = await generate_reddit_agent_graph(
profile_path="./data/reddit/user_data_36.json",
model=openai_model,
available_actions=available_actions,
)
db_path = "./data/reddit_simulation.db"
if os.path.exists(db_path):
os.remove(db_path)
# 4) 构造环境
env = oasis.make(
agent_graph=agent_graph,
platform=oasis.DefaultPlatformType.REDDIT,
database_path=db_path,
)
await env.reset()
# 5) 第一步:手动注入两个 agent 的开场动作
actions_1 = {}
actions_1[env.agent_graph.get_agent(0)] = [
ManualAction(action_type=ActionType.CREATE_POST,
action_args={"content": "Hello, world!"}),
ManualAction(action_type=ActionType.CREATE_COMMENT,
action_args={"post_id": "1",
"content": "Welcome to the OASIS World!"}),
]
actions_1[env.agent_graph.get_agent(1)] = ManualAction(
action_type=ActionType.CREATE_COMMENT,
action_args={"post_id": "1",
"content": "I like the OASIS world."},
)
await env.step(actions_1)
# 6) 第二步:让所有 agent 自由行动(用 LLM 决策)
actions_2 = {agent: LLMAction()
for _, agent in env.agent_graph.get_agents()}
await env.step(actions_2)
await env.close()
if __name__ == "__main__":
asyncio.run(main())
跑完后 ./data/reddit_simulation.db 里就是完整的动作与帖子流,可以直接用 SQLite 客户端或 pandas 读出来做指标分析。
常用进阶开关
- 激活概率:每步只有部分 agent 被唤醒(避免全量 LLM 调用爆 token),典型值 0.1~0.5。
- 推荐算法:支持 interest-based 与 hot-score-based,可注入自己的排序函数研究回音壁。
- 多模态扩展:官方 roadmap 已列入"支持多模态平台"。
- 群聊:2025-06 加入 create/send/leave group chat。
- Interview Action:向指定 agent 提问并收集回答(2025-06)。
- 报告 / 举报:2025-06 加入
REPORT_POST用于模拟内容审核。
典型适用场景
- 学术论文复现:信息扩散 / 回音壁 / 群体极化 / 平台治理(参考 arXiv 2411.11581)。
- 红队 / 对抗演练:研究虚假账户、bot 网络、舆论操纵的传播模型。
- 推荐算法实验:在受控用户群上 A/B 不同排序策略,量化回音壁与长尾。
- 教学演示:直观展示"1000 个 LLM 在一周内都聊了什么",做 AI 伦理与社会计算的课堂案例。
- 预训练数据合成:用 OASIS 跑出大量"逼真"对话帖,作为下游训练语料(注意合规)。
坑与注意
- Token 成本:100 agent × 1 step × activation 1.0 已经要 33 万输入 token;上 10k agent 单步轻松破百万 token。预算要做预案,建议先小规模跑通。
- profile 生成本身也耗 LLM:批量 profile 走 LLM 生成,不要一次性塞 1k 上下文写几千人;profile 文件可以离线预处理。
- SQLite 锁:并发写入要小心,官方默认单进程顺序 step。如果开多进程,迁移到 Postgres。
- 可复现 ≠ 真实:仿真里的"传播动力学"是 LLM 行为涌现的近似,不等于真人;下结论时务必说明。
- API 限流:大规模实验要上指数退避或代理池,否则容易 429 中断。
- license 注意:Apache-2.0,商用与论文使用都 OK,但需保留 NOTICE。
- 版本耦合:与
camel-ai主包强绑定,跟随升级时关注 README 顶部 "Update camel-ai version" 公告。
与同类对比
| 工具 | 规模 | 接口 | 重点 |
|---|---|---|---|
| OASIS | 1M agent | PettingZoo 风格 / asyncio | 社交媒体 + 真实推荐 + 23 action |
| AgentSociety (THU) | 10k+ | RL + LLM 混合 | 城市级市民行为仿真 |
| Generative Agents (Stanford) | ~25 | 类文本日志 | 单小镇记忆与社交 |
| Socially Fair / SOTOPIA | <100 | 对话为主 | 社交能力评测 |
| Concordia (DeepMind) | 数十 | 组件式 | 通用社会模拟框架 |
OASIS 的核心差异是直接对标真实平台(Twitter/Reddit)的 action 与推荐,且规模到百万级——做大规模社会计算实验,目前最接近"可发表复现"的方案。
一句话推荐结论
想做"LLM 驱动的大规模社交仿真"且希望快速出可发表 demo,OASIS 是当前最省力的开源选择;规模超过 1 万 agent 请先把 token 预算与限流策略写进脚本。