Skip to content
Link14349Public

About

这是基于LLM实现的自动化模拟联合国场景设计&推演工具。

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

MUNagent

MUNagent 是一个使用 Python 开发的模拟联合国历史委员会推演 Agent。它从声明式场景包加载历史背景、会场、角色与剧情,为每名代表创建独立 Agent,并由主席 Agent、全局 DM 与通用引擎共同推进会议。

当前版本聚焦单进程内的多会场闭环:会场分别维护议程和事件表,代表可以安全换场,跨会场通信受声明线路约束,全知全局 DM 统一裁定行动并推动总体局势。

核心能力

  • 独立代表 Agent:每名代表拥有自己的角色目标、私有信息、记忆与行动循环;
  • 多会场推演:各会场拥有独立主席、议程、阶段、命令队列和 EventList;
  • 全局 DM:依据权限、资源、时距等因素裁定行动,并用显式种子生成可复盘结果;
  • 决议成熟度门槛:代表必须审阅精确版本,harness 持续督办主席按条款清单退修或确认, 完成前不能表决,连续无动作会留下审计并显式失败;
  • 程序化信息边界:公开、私密及跨会场信息由引擎过滤,而非只依赖提示词约束;
  • 声明式场景包:历史内容与通用引擎分离,支持单会场 0.1 与多会场 0.2 schema;
  • 本地观察面板:查看会场事件、代表位置、私有记忆和 Agent Loop 记录,无需构建前端;
  • 完整运行存档:保存配置、随机种子、终局原因和权威事件审计,便于复盘。

快速开始

1. 环境要求

  • Python 3.11+
  • 一个支持 OpenAI chat/completions 接口的模型服务

建议在虚拟环境中安装:

python -m venv .venv
source .venv/bin/activate
python -m pip install -e .

2. 配置模型

默认 provider 为 DeepSeek。可以直接设置环境变量:

export MUNAGENT_API_KEY="你的 API Key"

也可以创建 ~/.munagent/config.yaml:

providers:
  deepseek:
    base_url: https://api.deepseek.com
    api_key: sk-你的密钥

default_provider: deepseek
default_model: deepseek-v4-flash

配置优先级为环境变量、指定配置文件、默认配置。自定义 provider 时,可在启动命令中通过 --provider 和 --model 选择。

3. 启动推演

运行单会场模板:

munagent serve scenario-template

运行多会场示例并固定 DM 随机种子:

munagent serve scenario-multivenue-example --seed demo-001

未安装项目时,也可以使用等价命令:

python src/main.py serve scenario-template

启动后访问 http://127.0.0.1:8765/ 打开观察面板。该面板包含角色秘密和完整模型轨迹,仅供本机管理员查看,不应公开部署。

只检查场景加载、服务和存档而不调用模型:

munagent serve scenario-multivenue-example --no-llm

若要重点试跑 DM 的外交、议会与联合政府推演,可使用 1940 英国战时内阁会议包:

python src/main.py serve scenario-british-cabinet-1940 --seed cabinet-1940-001

该包包含 16 名代表,采用五人内阁同版本共识确认政策,约运行 24 分钟。 外交和议会等场外反应由全局 DM 推演;程序适配与测试观察点见包内说明。

常用命令

# 查看运行状态
munagent status

# 查看公开事件;可用 --venue 指定会场
munagent events

# 持续观察新增公开事件
munagent watch

# 停止推演,但保留查询服务
munagent stop

# 停止推演并关闭服务
munagent shutdown

服务使用非默认端口时,为客户端命令添加 --url http://127.0.0.1:<port>。完整参数可通过 munagent --help 和 munagent <command> --help 查看。

场景包

一个典型场景包如下:

<scenario>/
├── AGENTS.md
├── index.yaml
├── background.md
├── communications.yaml       # schema 0.2 必需
├── venues/
│   └── main.yaml
├── reps/
│   └── representative.yaml
├── storyline.yaml
├── mechanism.py              # 空占位文件,当前不参与加载
└── simulation/               # 运行时自动生成

仓库包含两个可直接加载的例子:

  • scenario-template/:向后兼容的 0.1 单会场场景;
  • scenario-multivenue-example/:包含声明式通信线路的 0.2 多会场场景。

角色卡必须将内容分为 public 和 private。代表 ID 由 reps/*.yaml 文件名派生,会场 ID 由 venues/*.yaml 文件名派生;外部剧情只写入 storyline.yaml,代表的发言、提案、签署和指令由运行时产生。

详细字段与跨文件约束见 场景包 schema。创建或修改场景前,请同时阅读对应目录中的 AGENTS.md。

运行存档

每次推演都会在场景目录的 simulation/<run_id>/ 中生成:

<run_id>/
├── run.json
├── events.jsonl
├── _manifest.yaml
├── reps/
└── submissions/

其中 events.jsonl 是管理员级审计记录,可能包含私密事件正文和可见范围。运行目录默认不应提交或分享。

开发与测试

安装开发依赖并运行测试:

python -m pip install -e '.[dev]'
pytest

项目面向 Python 3.11+,公开接口应提供完整类型标注。LLM 测试必须使用 mock,不应消耗真实 API。

项目结构

src/                        通用推演引擎、Agent、LLM 与本地服务
tests/                      单元与集成测试
docs/                       schema、运行服务和 Agent Loop 设计文档
scenario-template/          单会场标准模板
scenario-multivenue-example/ 多会场示例
introduction.md             项目边界与详细设计概览

当前边界

  • 多会场运行在单一进程内,尚未实现跨进程调度或远程消息总线;
  • 长期记忆尚不能跨进程恢复;
  • 主席支持单次点名,尚未实现完整的定时发言队列;
  • 观察面板是包含秘密信息的本机管理界面,不是公开直播页。

进一步阅读

许可证

许可证条款见 LICENSE。

About

这是基于LLM实现的自动化模拟联合国场景设计&推演工具。

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages