每步出牌都可复盘:liars-bar-llm中GameRecord数据结构设计与全链路对局记录原理
2026/8/23 16:49:38 网站建设 项目流程

每步出牌都可复盘:liars-bar-llm中GameRecord数据结构设计与全链路对局记录原理

【免费下载链接】liars-bar-llm一个由大语言模型驱动的AI版骗子酒馆对战框架项目地址: https://gitcode.com/gh_mirrors/li/liars-bar-llm

liars-bar-llm 是一个由大语言模型驱动的 AI 版骗子酒馆对战框架,让 DeepSeek、ChatGPT、Claude、Gemini 等主流模型坐在同一张牌桌前互相"撒谎"与"质疑"。本文带你拆解它最核心的设计——GameRecord 对局记录数据结构,以及从出牌、质疑、开枪到自动存盘的全链路对局记录原理,让你对每一步 AI 出牌都能完整复盘。

为什么 AI 对战需要完整的对局复盘?

骗子酒馆(Liar's Bar)是一款心理博弈桌游:每轮随机指定一张目标牌,玩家谎称自己打出目标牌,下家可以选择相信或发起质疑;质疑失败者要执行"开枪"惩罚,直到只剩一名玩家存活。

当玩家换成大语言模型时,复盘价值更高:

  • 🎯 每一步出牌都附带出牌理由模型思维链(thinking),决策依据完整留痕
  • 🎯 每次质疑都记录了质疑理由、质疑结果,能还原"猜谎"过程
  • 🎯 每轮开始时快照了手牌、子弹位置、玩家间印象,信息不丢失

这正是 GameRecord 要解决的问题:把一场"谁说了什么、为什么这么说"的完整博弈过程,结构化地沉淀下来。

GameRecord 数据结构:四级分层设计

核心实现在 game_record.py 中,整个结构像俄罗斯套娃,分为四级:

层级类名职责关键字段
GameRecord一整局游戏的总记录game_idplayer_namesroundswinner
RoundRecord一轮(一次发牌周期)round_idtarget_cardround_playersplayer_initial_statesplayer_opinionsplay_historyround_result
动作PlayAction一次出牌 + 后续质疑played_cardsremaining_cardsplay_reasonbehaviorwas_challengedchallenge_resultplay_thinking
快照PlayerInitialState轮次开始时玩家状态bullet_positioncurrent_gun_positioninitial_hand

几个值得注意的设计细节:

  1. 动作即质疑PlayAction默认带was_challenged=False,质疑发生后才通过update_challenge()把质疑信息"追加"进同一条出牌记录,保证"出牌—质疑—结果"永远绑定在一起,复盘时不会错位
  2. 快照而非引用:每轮开始时深拷贝手牌、枪位和玩家印象(player_opinions),即使后续状态变化,历史轮次依然可还原
  3. 时间戳即文件名generate_game_id()%Y%m%d_%H%M%S时间戳生成game_id,一局一个 JSON 文件,天然按时间排序

一条出牌记录长什么样

demo_records/game_records/20250225_095738.json为例,Claude 质疑失败后的记录包含:出牌方打出的牌、剩余手牌、出牌理由(含"数学依据"的推理)、质疑方的质疑理由、质疑结果(失败)、以及双方的思维链——任何一步决策都可以被完整还原

全链路记录流程:从开局到存盘

game.py主循环在游戏的每个关键节点都会调用GameRecord的方法,形成闭环:

  1. 开局GameRecord.start_game()登记玩家名单,并在构造时自动创建game_records目录
  2. 每轮开始start_round()冻结目标牌、起始玩家、各玩家初始状态与相互印象
  3. 出牌record_play()把 AI 返回的出牌、剩余手牌、理由、表演描述、thinking 写入当前轮
  4. 质疑record_challenge()更新最近一次PlayAction的质疑字段
  5. 开枪record_shooting()记录射手与命中结果,并自动触发auto_save()
  6. 终局finish_game(winner)写入胜利者并再次auto_save()

关键在第 5 步:auto_save()会把整局记录以indent=4ensure_ascii=False的 JSON 格式落盘到game_records/{game_id}.json。也就是说每次开枪都会触发一次完整存盘——即使程序中途异常退出,已进行的轮次也不会丢失。

记录不止于保存:GameRecord 反向驱动 AI 决策

GameRecord 不只是"日志",它同时是 AI 玩家的"记忆接口":

  • get_latest_round_actions(current_player):把本轮历史改写成以当前玩家视角叙述的文本("你打出 2 张牌"或"轮到 Claude 出牌……"),直接拼进出牌提示词
  • get_play_decision_info()/get_challenge_decision_info():注入双方已开枪次数与你对下家的印象,辅助"要不要质疑"的判断
  • get_latest_round_result():轮次结束前生成射击结果文本,喂给反思(reflect)环节,让 AI 更新对对手的画像

这套"记录 → 渲染视角化文本 → 反哺提示词"的闭环,正是各模型印象(player_opinions)一轮比一轮更精准的原因。提示词模板位于prompt/目录,规则说明见prompt/rule_base.txt

一键复盘:JSON 变成人话报告 📊

拿到 JSON 记录后,项目内置三个分析工具,把原始数据变成可读成果:

  • python json_convert.py:把game_records/下所有 JSON 转成中文叙事文本,输出到converted_game_records/,示例见 demo_records/converted_game_records/20250225_095738.txt
  • python player_matchup_analyze.py:提取模型两两对决的质疑事件,生成matchup_records/下的详细对局报告
  • python game_analyze.py:统计胜场、开枪次数、存活积分与模型间胜率矩阵

项目已附带 50 局真实 Demo 数据(4 个模型 6 份两两对决记录),在demo_records/目录下可直接体验,无需先跑一局。

快速上手指南

1️⃣ 克隆仓库

git clone https://gitcode.com/gh_mirrors/li/liars-bar-llm cd liars-bar-llm

2️⃣ 安装依赖并配置模型接口(统一接口配置在llm_client.py

pip install openai

3️⃣ 在game.pyplayer_configs中填入模型名称,运行单局

python game.py

4️⃣ 批量跑 10 局并生成复盘报告

python multi_game_runner.py -n 10 python json_convert.py python game_analyze.py

跑完后打开converted_game_records/里最新的时间戳文本,就能像看小说一样回顾每步出牌、每场质疑与每一次开枪——这就是 GameRecord 全链路记录设计的全部意义。

总结

  • 四级分层:GameRecord → RoundRecord → PlayAction → 状态快照,一局游戏被完整结构化
  • 质疑内嵌出牌PlayAction.update_challenge()让"出牌-质疑-结果"天然绑定,复盘零错位
  • 关键节点自动存盘:开枪、终局触发auto_save(),进程中断也不丢局
  • 记录即记忆:同一份数据以"视角化文本"反哺 AI 提示词,驱动决策与反思

如果你想让 LLM 玩家的行为可解释、可审计、可量化,这套"动作留痕 + 快照冻结 + 自动落盘 + 工具化复盘"的 GameRecord 设计,是很值得参考的对局记录范式。

【免费下载链接】liars-bar-llm一个由大语言模型驱动的AI版骗子酒馆对战框架项目地址: https://gitcode.com/gh_mirrors/li/liars-bar-llm

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询