NEW LIFE / AI 游戏与交互世界
AgenticAvalon
#AI#NPC#阿瓦隆#社交推理
[ 团队 ]
- 李博宏
- 陈嘉耀
- 吴嘉
> 提交时间:2026/9/24 02:57:10
> 最后更新:2026/9/24 02:57:50
[ 项目介绍 ]
一个可以直接在终端玩的 1 名人类 + 4/5 个 LLM agent 社交推理游戏。保留 Avalon 基础规则,玩家依次选择沉默或消耗 Resolve 进行公开交流。AI 通过短手稿与 social card 留下永久记录,死亡与重生之间保留重要记忆。善良 AI 维护独立判断与画像;邪恶 AI 共享代码维护的战略状态,并各自生成简短手稿。
Python 3.10+,需要配置真实 LLM 服务。启动时自动读取配置,不使用 mock 或失败回退。
Agent 使用完整角色配置的概率联合信念,角色边际、队伍风险和条件概率均由代码推导。规则排除不可能的配置,模型只解释结构化语言证据,再从更新后的信念选择行动。证据去重、审计和开发视图见 Agent cognition;终端使用 --debug-cognition 查看独立私有调试输出。
Godot 图形界面
现在可以通过图形界面操作整局比赛。用 Godot 4(本机已验证 4.8.dev6)打开 frontend-godot/project.godot,点击「运行项目」; macOS 也可双击项目根目录中的 Play Avalon.app。 Python 后端会自动启动,沿用现有 .venv 和 .env 配置,游戏过程中无需终端输入。 界面为中文,支持 5/6 人、身份揭晓、选队、全部 Resolve(决心)操作、密封投票、匿名任务、安全轮、任务后议会与三选一出局投票、刺杀和重新开局。 中央「圆桌手稿」展示已落笔的短句、作者、行动和稳定记录 ID,玩家席位分列两侧。 可按角色或关键词、记录编号筛选;翻看旧记录时,新回答不会拉走阅读位置,点击「回到最新」恢复跟随。 「编年史」保存公开行动。引文、记录编号和回应链接都可打开原始记录,角色座位显示当前世数。 AI 思考期间仍可查阅历史,筛选与页签在刷新后保留,新开一局时清除。 真人也可输入短句并选择引用。所有手稿都可能成为后续证据。 AI 请求失败时会停在当前决策,可在界面点击重试。 安装要求、结构和验证说明见 Godot UI README。
PixiJS 网页界面
Assets/ 是同一套游戏的网页前端。先启动本地浏览器后端(默认离线联调,不调用外部模型),再启动 Vite:
PYTHONPATH=. .venv/bin/python -m avalon.web_server --mode offline --port 8765
cd Assets && npm run dev
打开终端提示的本地地址即可。网页端通过 /api/session、/api/state 和 /api/command 使用现有 GameSession;规则、身份、投票、任务结算和公开记录不会在前端重复实现。需要真实模型时,将后端参数改为 --mode live 并确保 .env 已配置。
本地试用真实 API 与 V5 梅林投票策略时,可以单独构建并启动一个网页后端,保留已有的离线联调会话:
cd Assets && npm run build && cd ..
PYTHONPATH=. .venv/bin/python -m avalon.web_server --mode live --merlin-policy v5 --port 8766 --assets-dir Assets/dist
打开 http://127.0.0.1:8766。V5 只作用于 AI 梅林的投票;真人梅林仍由玩家自己投票。未指定 --merlin-policy v5 时默认使用原投票策略。网页显示的是本地试用配置,不代表 V5 已通过生产效果门槛;R5 配对全局测试的结论仍为 FULL_GAME_EFFECT_NOT_ESTABLISHED。
新启动的 live 网页默认启用“积极发言”:讨论或议会阶段,只要能够合法支付 1 点决心,就要求模型生成简短的公开发言;证据不足时表达保留意见或提出问题。沉默及“沉默却附带草稿”的回复会被拒绝并限次重试,不会被程序改写成发言。决心耗尽时仍可沉默。该行为独立于 V5 投票策略;需要原讨论策略时添加 --discussion-policy baseline。正在运行的旧后端需要新进程才能加载修复。
新启动的 live 后端会在终端打印本地 AI 行动诊断文件路径。该文件记录失败尝试的阶段、合法行动、重试次数、固定校验原因和响应 ID;讨论行动成功提交后还记录实际行动种类、事件序号及回复中是否有未使用的发言草稿。文件不记录密钥、提示词、角色或模型回复正文。正在运行的旧进程不会自动加载这一诊断功能。
快速开始
进入本 README 所在目录,安装依赖,复制 .env.example 为 .env(PowerShell:Copy-Item .env.example .env),填入 API key 和模型名称。配置细节见下方「接入 LLM」。然后运行:
python -m pip install -r requirements.txt
python -m avalon --dossier
你是 P1。程序只向你显示自己的身份及规则允许知道的信息。每个输入都有提示;回车接受默认选项,help 查看帮助,q 或 Ctrl+C 退出。Windows 如使用 Python Launcher,可将 python 换成 py -3。
# 6 人局,1 位人类 + 5 个 agent
python -m avalon --players 6
# 无人值守演示;只有 --demo 会把人类席位交给 agent
python -m avalon --demo --seed 7 --dossier
# 人类试玩,同时记录公开事件
python -m avalon --log public-game.jsonl
# 指定本局逆时针发言;不指定时在开局随机决定方向
python -m avalon --direction counterclockwise
# 所有选项
python -m avalon --help
--seed 固定发牌、首任队长和发言方向,三者使用独立随机序列。普通游戏不传它,每局随机;相同 seed 不保证 LLM 发言或整局结果相同。公开日志和 agent 上下文不包含 seed。--demo 同样调用真实 LLM。
腐化城堡场景
启动时默认加载 腐化城堡 system prompt,并显示 [WORLD] 腐化城堡。所有角色都以在被腐化的中世纪城堡中活下来为个人动机,围绕外出搜寻物资、名单、信任和风险发言。旧神监听言语,因此所有公开交流都是手写。文字通常为 1–3 个短句;沉默也是合法选择。
角色使用自然、日常的现代中文,像平时玩桌游时一样直接讨论队伍、投票和任务。直接称呼 P2、P3,不再使用「阁下、旧卷、守誓」等中世纪措辞,也不照搬历史记录里的古风句式。不同角色仍可表达不同性格,但不强制同一套口头禅、不编造剧情。质询回应、补记和任务后议会采用相同的日常表达。
提示词在每局开始时读取,后续发言和重试使用同一份内容;修改提示词文件后重新开局生效,修改 Python 协议文本还需重启后端。缺失、空白或编码无效会在开局前报错。选队、投票、任务及胜负仍按下述规则结算。危险轮的失败远征导致全体队员死亡,安全轮失败则只计分、不致死;议会出局也会死亡,在下一任务轮以原身份重生。重生延续关系判断、承诺、前世摘要和重要记忆,不重发完整历史。终局没有下一轮时保留待重生状态;重新开局是独立对局。读取和安装方式见 提示词说明。
怎么操作
环节 输入示例 行为
队长选队 1 3 或 P1,P3 选择指定人数,不允许重复座位
社交出牌 ACCUSE P3 公开指控 P3
社交出牌 DEFEND P2 公开支持 P2,也可以为自己辩护
社交出牌 HEDGE P4 保留判断
社交出牌 PRESSURE P2 施压并观察目标的反应
社交出牌 BAIT P5 诱导并观察目标的反应
沉默 PASS 或直接回车 免费结束自己的正常讨论轮次
加强承诺 COMMIT ACCUSE P3 共花 2 Resolve,公开标记为 COMMITTED
质询 / 引证 CHALLENGE P3 #17 / CITE #17 花 1 Resolve,引用已有公开事件编号
等待 / 反应 HOLD,之后 REACT DEFEND P2 或 SKIP HOLD 预付 1,REACT 不再收费;SKIP 保留等待
回应质询 RESPOND HEDGE P2 / DECLINE 回应花 1,拒绝免费并公开记录
队长定稿 LOCK / REVISE P3 P2 免费锁队,或花 1 把 P3 替换为 P2
全员投票 A / R(也支持 y / n) 免费赞成 / 反对;收齐后一起公开
强承诺投票 SA / SR 花 1 强烈赞成 / 反对,仍然只有一票
邪恶执行任务 s / f 秘密提交成功 / 失败牌
议会提名 P2 本次任务队长提名一名仍存活的角色
出局投票 A / R / B 赞成 / 反对 / 弃票;回车为弃票,均免费
刺客行动 P2 三次任务成功后选择 Merlin
每次提案,从队长开始按座位顺序获得一次正常讨论机会,可以 PASS 或选择付费行动;社交牌可重复使用。AI 会阅读此前的公开发言,再选择是否落笔。已有社交牌语义保留;花费 Resolve 或加强承诺不会直接增加信任、嫌疑或任务分数。