从0搭建自己的桌游设计AI团队

项目代码链接:CJH0220/Table_Game_Team_Agents

制作动机

我是深圳大学人工智能学院的研究生,兴趣爱好就是从事游戏相关的工作。曾经通过印卡姬和即梦平台自制一款角色扮演大富翁桌游,但是由于团队的凝聚力和美术/运营成本被迫难产,只完成了基本设计和简单的DEMO。不过,通过这次经历,我明白了一个主策划应该如何处理团队协作工作,如何安排“生产力”。

作为桌游玩家和策划,总会有一些灵光一闪的想法,比如在大富翁增加角色机制,在三国杀加入购买装备环节,在卡坦岛添加资源卡类型等奇思妙想。但由于设计,美工,测试等环节需要巨大的人力财力,导致初创团队或学生党放弃这些ideas,十分可惜。但现在有一个最新的工具可以降低这些成本,真正做到“0”成本追梦,那就是现在的Agents。

随着Agents的爆火,Agents团队减少了公司人力成本,极大降低了创作门槛。而我自己也具备深度学习,LLM等基础,相信自己能够跟紧潮流,实现项目。我觉得通过Agents智能体协作,去模拟一个游戏设计团队大有可为,这也是这个项目的由来。

现在还可以通过代码智能体如Cursor等辅助编程,但作为科班出身的程序员,在使用辅助编程后也一定要掌握自己的项目内容,代码管理和函数类别调用关系之类的。

技术栈

通过Dify或者coze能够低代码实现智能体交互,但是由于GPT推荐我还是用代码实打实的把游戏机制规则写出来,而不是用LLM来判断规则边界。所以我决定自己搓代码,当然我主要是看完Hello-Agents 后根据他们上面的代码去模拟,也复用了他们优秀的代码。

前端

后端

其他

  • markdown: prompt工程常用语言,博客语言,也是大模型输出结果常见的展示格式。
  • re: 正则表达式,超级简便强大的字符串匹配。
  • JSON:存储和交换文本信息的语法JSON 教程 | 菜鸟教程

1 失败的前设计

下面的模块是被弃置的模块,我会讲解为什么最后放弃了用极多数的Agent搭建一个团队结构。我尝试过用规则工程师+机制工程师+数据管理Agent+代码手Agent 实现用代码逻辑实现游戏内容并确定Agent互相转发接口。

失败原因:

  • 第一:规则描述非常容易不准确。1:设计桌游时会隐藏一些机制(比如从哪抽牌,如何抽取(堆栈/random?),弃牌至哪里,何时洗牌)这些我们默认的细节会被遗忘。2:Agent在长时间序列时会产生轻微幻觉记错卡牌效果甚至数量。这在复杂的游戏中尤其明显。
  • 第二:部分Agent功能独立。美术策划/文案策划其实跟机制编写,游戏测试等关系不大。完全可以单独人工调用,编写一些简单的Html静态页面用于图片调试+豆包等图片生成Agent,即可自己搓卡牌图。而 规则工程师+机制工程师+数据管理Agent+代码手Agent 这一部分只需要交给我们伟大的Cursor大人就行了(滑稽脸)。
  • 第三:臃肿带来的效果衰竭。如果你试图用多模态图片+机制+文字给测试玩家,现在大模型并没有这么强就算有也得巨大的token开销,还得有更强的长记忆能力,图片分析等。哪怕是目前最强的大模型也不一定能够实现。毕竟完整的桌游机制其实文本量和逻辑能力的需求很强,博弈类游戏更需要对对方的预判,交流的捕捉小信息等。这些一股脑输入给大模型,虽然有固定的输出和逻辑链,但是太灾难了。期待后两年的模型提升吧。

1.1团队结构(弃置)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
                          用户

主策划 Agent
│(任务分类)
┌───────────────────┼───────────────────┐──────────────┐
│ │ │ │
规则工程师 Agent 机制设计师Agent 文案策划 Agent 美术策划 Agent
│ │
└──────────── 游戏数据管理Agent

AI裁判 Agent
/游戏引擎/代码逻辑

┌─────────────────────────┼──────────────────────┐
│ │ │
测试玩家 Agents 数值平衡分析 Agent 游戏日志
(2~4个) │ │
│ │ │
└─────────────── 玩家体验分析 Agent ───────────────┘

主策划

1.2 总体流程(弃置)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
用户提出游戏想法

主策划制定设计方向

机制设计

规则工程师生成Rule DSL

数据管理Agent存储

Game Engine运行游戏

测试玩家模拟游戏

数值平衡分析

玩家体验分析

主策划决定版本迭代

2 后续真设计

2.1 团队结构/总体流程

详细代码介绍请查看项目中doc文件夹内。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
                          用户

┌─────────┴─────────┐
│ │
前端 UI 前端 UI
(EditorView) (PlaytestView)
│ │
└─────────┬─────────┘

FastAPI 后端 API
(/task, /logs, /playtest/*)

┌───────────────┴────────────────┐
│ │
策划工作台流程 揭幕战测试流程
(/task, /logs) (/playtest/*)
│ │
主策划 Agent (ChiefDesigner) 揭幕战对局编排器
│ run_playtest(...)
┌───────┼────────┬────────┐ │
│ │ │ │ │
文案策划 机制设计 美术策划 日志服务 两名测试玩家 Agents
Agent Agent Agent RunLog (PlaytestAgents)
(Narrative)(Mechanics)(Act) Service │
│ │ │
│ └─ 调用豆包文生图 │
│ (DoubaoImage) │
│ │
└─ 返回文本/图片结果给前端 ◀───────────┐ │
│ │
程序裁判 Referee + 游戏引擎 Engine

玩家体验分析 Agent (ExperienceAnalyst)

游戏测试日志
(backend/logs/*.json, playtest_*.json)

前端历史回放视图
(Editor 日志查看 / Playtest 回放)

2.2 游戏规则

规则说明书:揭幕战(简单版)

一、基本信息

人数:2 人对战。每名玩家起始 5 点血量,先把对手血量打到 0 的一方获胜。

二、兵马牌与克制关系(必记)

  • 类型:骑兵、弓兵、枪兵。等级:1 / 2 / 3 级,同类型时数字越大越强。

  • 弓兵牌克制关系(易混,请细看):

    • 骑兵 克 弓兵:骑兵打弓兵时,骑兵赢,弓兵方掉 1 血。
  • 弓兵 克 枪兵:弓兵打枪兵时,弓兵赢,枪兵方掉 1 血。

    • 枪兵 克 骑兵:枪兵打骑兵时,枪兵赢,骑兵方掉 1 血。

    口诀:骑克弓、弓克枪、枪克骑。

  • 同类型对决只比等级,如骑兵3 > 骑兵2 > 骑兵1。

三、平局与血量变化(明确数值)

  • 平局:双方出的牌类型与等级完全相同(如骑兵1 vs 骑兵1)时,本回合判定为平局。
  • 平局时双方血量变化均为 0(你 -0,对手 -0),无任何人掉血。
  • 非平局:败方本回合血量 -1,胜方血量不变;结算后会显示当前双方血量。

四、手牌与出战牌展示

  • 每回合抽到的 2 张牌都会加入你的手牌;你从中选 1 张「展示」给对手看,展示仅公开信息,不弃牌。
  • 手牌列表以编号 1、2、3… 显示,决策时只能从该列表中选择;出战牌即你本回合打出的那一张,结算后进入弃牌堆。

五、牌库与弃牌堆

  • 总计 60 张:三种兵种各 20 张(1 级 10 张、2 级 5 张、3 级 5 张)。手牌上限 5 张。
  • 用过的出战牌进入弃牌堆;牌库抽空时,弃牌堆洗匀后作为新牌库,保证对局流畅。

六、回合流程(从你的视角)

  1. 抽 2 张 → 2 张都进手牌。
  2. 从这 2 张中选 1 张展示给对手(2 张仍都在你手牌中)。
  3. 若手牌 > 5 张,从手牌中弃 1 张至弃牌堆,直至手牌 ≤ 5 张。
  4. 从手牌选 1 张出战,与对手本回合出战牌结算(胜/负/平,血量变化见上)。
  5. 本回合用过的出战牌进入弃牌堆。

七、牌组分析与策略(降低学习成本)

  • 决策时系统会提供:我方血量、对手血量、当前手牌列表、对手本回合展示的牌、对手本局已出过的牌。
  • 建议先看清「手上具体有哪些牌」和「对手展示/出过什么」,再结合骑克弓、弓克枪、枪克骑判断哪张胜率更高,最后做出选择。

八、游戏结束

当任意一方血量降至 0 时游戏结束,另一方获胜;获胜者可发表简短感言。

九、测试玩家与体验说明

  • 两名测试玩家由系统分配不同 persona,决策时会结合上述信息进行思考。
  • 左侧流式日志中会展示每位玩家的思考内容(手牌、对手情况、胜率判断等),便于观察对局与规则理解。

该规则通过不断地和机制设计师和文案设计师调整。

3 结果展示

环境准备

后端(Python)

建议使用虚拟环境(Conda/venv 均可)。依赖在 backend/requirements.txt

前端(Node.js)

需要 Node.js(建议 18+ 或 20+)与 npm。

如何运行(从导包到打开前端界面)

下面以 Windows PowerShell 为例。

1) 配置后端 .env

后端会从 backend/app/.env 读取 LLM/文生图配置(由 backend/app/config.py 加载)。

  • 路径:backend/app/.env
  • 说明:你已经在项目里维护该文件;如果要换模型/Key,改这里即可

2) 启动后端(FastAPI)

在项目根目录执行:

1
2
3
cd "e:\llm\hello_agents\Table_game_team_easy\backend"
python -m pip install -r requirements.txt
python -m uvicorn main:app --host 0.0.0.0 --port 8000 --reload

启动后可验证:

  • GET http://localhost:8000/ 应返回 {"message":"Boardgame AI Agent Running"}

3) 启动前端(Vite)

新开一个 PowerShell:

1
2
3
cd "e:\llm\hello_agents\Table_game_team_easy\frontend"
npm install
npm run dev

Vite 启动后,终端会输出一个本地地址(通常是 http://localhost:5173)。用浏览器打开它即可进入前端界面。

运行结果

前端主页面

image.png

右上角有游戏测试和策划工作台按钮,根据输入需求,主策划Agent会分配工作至不同Agent以实现你的需求。

尽量先把需求在前面提出,如上述示例一般描述。因为我启用了强相关判断,在文本前端识别绘画->硬性调用文生图。这样可以减少大模型的调用频率。

美术策划生成图片

image.png

需要更好看更准确的图片,需要反复跟大模型打磨提示词,可以用常见的大模型如豆包,ChatGPT等。

机制设计师提供建议

image.png

在设置Agent时我尽可能让机制设计师回复详细内容,可以斟酌使用。

文案优化

image.png

异常情况

image.png

回复无关内容默认无法处理。

测试游戏情况

可以看到游戏的每个回合Agent的想法和执行操作。

image.png

image.png

image.png

最后会输出各自的体验报告,并由体验分析师总结。