多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

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

每步出牌都可复盘:liars-bar-llm中GameRecord数据结构设计与全链路对局记录原理 每步出牌都可复盘liars-bar-llm中GameRecord数据结构设计与全链路对局记录原理【免费下载链接】liars-bar-llm一个由大语言模型驱动的AI版骗子酒馆对战框架项目地址: https://gitcode.com/gh_mirrors/li/liars-bar-llmliars-bar-llm 是一个由大语言模型驱动的 AI 版骗子酒馆对战框架让 DeepSeek、ChatGPT、Claude、Gemini 等主流模型坐在同一张牌桌前互相撒谎与质疑。本文带你拆解它最核心的设计——GameRecord 对局记录数据结构以及从出牌、质疑、开枪到自动存盘的全链路对局记录原理让你对每一步 AI 出牌都能完整复盘。为什么 AI 对战需要完整的对局复盘骗子酒馆Liars Bar是一款心理博弈桌游每轮随机指定一张目标牌玩家谎称自己打出目标牌下家可以选择相信或发起质疑质疑失败者要执行开枪惩罚直到只剩一名玩家存活。当玩家换成大语言模型时复盘价值更高 每一步出牌都附带出牌理由与模型思维链thinking决策依据完整留痕 每次质疑都记录了质疑理由、质疑结果能还原猜谎过程 每轮开始时快照了手牌、子弹位置、玩家间印象信息不丢失这正是 GameRecord 要解决的问题把一场谁说了什么、为什么这么说的完整博弈过程结构化地沉淀下来。GameRecord 数据结构四级分层设计核心实现在 game_record.py 中整个结构像俄罗斯套娃分为四级层级类名职责关键字段局GameRecord一整局游戏的总记录game_id、player_names、rounds、winner轮RoundRecord一轮一次发牌周期round_id、target_card、round_players、player_initial_states、player_opinions、play_history、round_result动作PlayAction一次出牌 后续质疑played_cards、remaining_cards、play_reason、behavior、was_challenged、challenge_result、play_thinking快照PlayerInitialState轮次开始时玩家状态bullet_position、current_gun_position、initial_hand几个值得注意的设计细节动作即质疑PlayAction默认带was_challengedFalse质疑发生后才通过update_challenge()把质疑信息追加进同一条出牌记录保证出牌—质疑—结果永远绑定在一起复盘时不会错位快照而非引用每轮开始时深拷贝手牌、枪位和玩家印象player_opinions即使后续状态变化历史轮次依然可还原时间戳即文件名generate_game_id()用%Y%m%d_%H%M%S时间戳生成game_id一局一个 JSON 文件天然按时间排序一条出牌记录长什么样以demo_records/game_records/20250225_095738.json为例Claude 质疑失败后的记录包含出牌方打出的牌、剩余手牌、出牌理由含数学依据的推理、质疑方的质疑理由、质疑结果失败、以及双方的思维链——任何一步决策都可以被完整还原。全链路记录流程从开局到存盘game.py主循环在游戏的每个关键节点都会调用GameRecord的方法形成闭环开局GameRecord.start_game()登记玩家名单并在构造时自动创建game_records目录每轮开始start_round()冻结目标牌、起始玩家、各玩家初始状态与相互印象出牌record_play()把 AI 返回的出牌、剩余手牌、理由、表演描述、thinking 写入当前轮质疑record_challenge()更新最近一次PlayAction的质疑字段开枪record_shooting()记录射手与命中结果并自动触发auto_save()终局finish_game(winner)写入胜利者并再次auto_save()关键在第 5 步auto_save()会把整局记录以indent4、ensure_asciiFalse的 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.txtpython 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-llm2️⃣ 安装依赖并配置模型接口统一接口配置在llm_client.pypip install openai3️⃣ 在game.py的player_configs中填入模型名称运行单局python game.py4️⃣ 批量跑 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),仅供参考
返回列表