LLM-colosseum开发者访谈:如何设计大模型的战斗AI系统
在AI领域,评估大模型能力的方式正在经历一场革命。今天我们将深入探讨一个创新项目——LLM-colosseum,它通过让大模型在《街头霸王III》中对战来评估其智能水平。这个项目不仅提供了一种全新的大模型评估范式,更为AI与游戏交互开辟了新的可能性。
项目概述:当AI遇见街头霸王
LLM-colosseum的核心创意是让大型语言模型(LLM)通过API控制《街头霸王III》中的角色进行实时对战。不同于传统的基准测试,这种方式能够评估AI的实时决策、环境理解和策略规划能力。
项目的GitHub地址:https://gitcode.com/GitHub_Trending/ll/llm-colosseum
评估标准:AI战士的五大素质
根据项目README.md,一个优秀的AI战士需要具备以下关键能力:
- 快速响应:实时游戏要求AI能在毫秒级时间内做出决策
- 智能规划:像顶级玩家一样思考多步之后的战局发展
- 创新思维:使用出其不意的招式打乱对手节奏
- 适应能力:从失败中学习并调整策略
- 持久战斗力:在整场比赛中保持高水平表现
系统架构:大模型如何玩转街霸
核心组件概览
LLM-colosseum的战斗AI系统主要由以下几个模块构成:
- 游戏环境:基于Diambra Arena构建的《街头霸王III》环境
- AI控制器:agent/robot.py中的Robot类及其子类
- 对战管理:eval/game.py中的Game和Player类
- 本地运行配置:local.py中的模型配置和启动逻辑
战斗AI的工作流程
AI战士的战斗流程可以概括为"观察-规划-行动"三个阶段:
- 观察阶段:AI通过视觉或文本形式获取游戏状态
- 规划阶段:调用LLM生成下一步行动序列
- 行动阶段:将AI决策转化为游戏操作并执行
核心技术解析:从代码看AI如何战斗
Robot类设计:AI战士的大脑
在agent/robot.py中,我们定义了AI战士的抽象基类Robot,以及两个具体实现:TextRobot和VisionRobot。
class Robot(metaclass=abc.ABCMeta):
@abc.abstractmethod
def call_llm(self, max_tokens: int = 50, top_p: float = 1.0) -> Generator:
"""调用语言模型生成动作指令"""
raise NotImplementedError("call_llm method must be implemented")
@abc.abstractmethod
def observe(self, observation: dict, actions: dict, reward: float):
"""观察游戏环境"""
pass
def plan(self) -> None:
"""规划下一步行动"""
# 从LLM获取移动指令
next_steps_from_llm = self.get_moves_from_llm()
# 将移动转换为游戏按钮操作
next_buttons_to_press = [
button for combo in next_steps_from_llm
for button in META_INSTRUCTIONS_WITH_LOWER[combo][self.current_direction.lower()]
+ [0] * NB_FRAME_WAIT # 添加帧等待
]
self.next_steps.extend(next_buttons_to_press)
def act(self) -> int:
"""执行动作"""
if not self.next_steps:
return 0 # 无动作
return self.next_steps.pop(0)
两种AI战士:文本型与视觉型
项目提供了两种不同类型的AI战士:
TextRobot:基于文本描述的AI
TextRobot通过文本描述理解游戏状态,适合纯文本大模型:
class TextRobot(Robot):
def context_prompt(self) -> str:
"""生成包含游戏状态的文本提示"""
# 位置提示
# 能量提示
# 上一动作提示
# 分数提示
return f"{position_prompt}\n{power_prompt}\n{last_action_prompt}\n{score_prompt}"
def call_llm(self, max_tokens: int = 50, top_p: float = 1.0) -> Generator[ChatResponse, None, None]:
"""调用文本模型生成动作"""
move_list = "- " + "\n - ".join([move for move in META_INSTRUCTIONS])
system_prompt = f"""你是世界上最优秀的《街头霸王III》玩家。
你的角色是{self.character}。目标是击败对手。
{self.context_prompt()}
可用招式:
{move_list}
----
用项目符号列表回复招式,格式: `- <招式名称>`"""
messages = [
ChatMessage(role="system", content=system_prompt),
ChatMessage(role="user", content="你的下一步招式是:")
]
return client.stream_chat(messages)
VisionRobot:基于图像理解的AI
VisionRobot直接分析游戏画面,适合多模态大模型:
class VisionRobot(Robot):
def last_image_to_image_node(self) -> ImageNode:
"""将游戏画面转换为模型可理解的图像节点"""
rgb_array = self.observations[-1]["frame"]
img = Image.fromarray(rgb_array)
buffer = io.BytesIO()
img.save(buffer, format="PNG")
return ImageNode(
image=base64.b64encode(buffer.getvalue()).decode("utf-8"),
image_mimetype="image/png",
)
def call_llm(self, max_tokens: int = 50, top_p: float = 1.0) -> Generator[CompletionResponse, None, None]:
"""调用多模态模型生成动作"""
move_list = "- " + "\n - ".join([move for move in META_INSTRUCTIONS])
system_prompt = f"""你是世界上最优秀的《街头霸王III》玩家。
你的角色是{self.character}。目标是击败对手。
当前游戏状态如图所示。
可用招式:
{move_list}
----
用项目符号列表回复3个招式,格式: `- <招式名称>`"""
return client.stream_complete(
prompt=system_prompt,
image_documents=[self.last_image_to_image_node()]
)
对战管理:Game类如何组织战斗
eval/game.py中的Game类负责协调整个对战过程:
class Game:
def run(self):
"""运行游戏对战"""
# 初始化线程处理AI决策
player1_thread = PlanAndActPlayer1(game=self, episode=episode)
player1_thread.start()
player2_thread = PlanAndActPlayer2(game=self, episode=episode)
player2_thread.start()
# 主游戏循环
while True:
if self.render:
self.env.render()
# 执行AI生成的动作
observation, reward, terminated, truncated, info = self.env.step(actions)
# 检查游戏结束条件
if terminated or truncated:
self._determine_winner(episode)
episode.save()
break
多线程设计确保两个AI可以并行思考,不会相互阻塞,这对实时游戏至关重要。
本地运行与模型配置
通过local.py,我们可以配置本地模型进行对战:
def main():
game = Game(
render=True,
save_game=True,
player_1=Player1(
nickname="Baby",
model="ollama:mistral", # 使用Ollama运行的本地模型
robot_type="text", # 文本型AI
temperature=0.7, # 控制AI的随机性
),
player_2=Player2(
nickname="Daddy",
model="ollama:mistral",
robot_type="text",
temperature=0.7,
),
)
game.run()
实战数据:大模型战斗力排行榜
经过546场对战,项目得出了不同模型的ELO评分排行榜:
| 排名 | 模型 | 评分 |
|---|---|---|
| 1 | openai:gpt-4o:text | 1912.5 |
| 2 | openai:gpt-4o-mini:vision | 1835.27 |
| 3 | openai:gpt-4o-mini:text | 1670.89 |
| 4 | openai:gpt-4o:vision | 1656.93 |
| 5 | mistral:pixtral-large-latest:vision | 1654.61 |
有趣的是,多模态模型(vision)在某些情况下表现优于纯文本模型,这可能是因为它们能更直观地理解游戏画面。
结语:AI游戏对战的未来
LLM-colosseum项目展示了一种创新的大模型评估方法,通过游戏对战这种直观且富有趣味性的方式,我们可以更全面地评估AI的综合能力。未来,我们期待看到更多模型加入这场"AI街霸大赛",也期待社区能够贡献更多创新的AI战斗策略。
如果你也想让自己的AI模型参与这场街霸大赛,可以通过修改agent/robot.py中的提示词或决策逻辑,创建自定义的AI战士!
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考





