尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

基于LLM的智能体世界杯:构建1v1足球对抗模拟环境

基于LLM的智能体世界杯:构建1v1足球对抗模拟环境 在实际 AI 应用开发中我们常常面临一个核心挑战如何让大语言模型LLM不仅能够回答问题还能像人类一样在复杂环境中进行规划、决策并执行一系列连贯的动作。传统的问答或简单工具调用模式已经难以满足需要多步骤推理和动态交互的场景。这时智能体Agent的概念便成为连接 LLM 与复杂任务的关键桥梁。它赋予 LLM 感知、规划、行动和反思的能力使其能够自主或半自主地完成目标。本文将围绕一个极具趣味性和挑战性的概念——“智能体世界杯”Agentic World Cup展开探讨如何构建一个让 LLM 智能体在 1v1 足球比赛中进行对抗的模拟环境。这不仅是 LLM 推理与决策能力的极限测试场更是理解Agentic 设计模式、多智能体协作与竞争以及环境交互的绝佳实践案例。我们将从零开始解析其核心架构并提供一个可运行的简化实现方案帮助开发者深入理解如何将 LLM 从“聊天机器人”升级为能够参与动态博弈的“策略执行者”。1. 理解智能体Agent与 LLM 的核心差异在深入构建足球智能体之前必须厘清 LLM 与基于 LLM 的智能体之间的根本区别。这是设计有效智能体系统的前提。1.1 LLM强大的模式匹配与文本生成器大语言模型本质上是一个基于海量文本训练出的概率模型。它的核心能力是文本补全与生成根据给定的上文预测并生成最可能的下文。模式识别与抽取从文本中识别实体、关系、情感等模式。知识检索与关联基于训练数据中的知识进行回答。然而LLM 本身是无状态的、被动的、一次性的。它接收一个提示Prompt生成一个响应然后任务结束。它不具备记忆与状态保持无法在多次交互中维持一个内部状态除非通过上下文窗口但容量有限。自主规划与决策不会主动拆解复杂任务为子步骤并决定下一步做什么。工具使用与行动执行无法直接调用 API、操作数据库、控制游戏角色。从结果中学习与反思无法根据行动的结果调整自身策略。1.2 智能体Agent具备感知-规划-行动-反思循环的自治系统智能体是一个软件实体它封装了 LLM并为其增加了以下关键组件和能力形成了经典的ReActReasoning Acting或更广义的Agentic 工作流感知Perception从环境如游戏状态、API 返回、用户输入中获取信息。规划Planning基于目标和当前状态分解任务制定行动计划“下一步我该做什么”。行动Action执行规划好的步骤通常通过调用工具Tools或技能Skills来实现如调用一个函数、发送一个 HTTP 请求。反思Reflection评估行动结果判断是否接近目标必要时重新规划。智能体是有状态的、主动的、持续运行的。它通过一个循环不断地与环境交互直至达成目标或任务终止。LLM 在智能体中的角色智能体的“大脑”。它负责处理感知信息、进行规划推理、决定调用哪个工具并解释工具返回的结果。LLM 提供了通用推理能力而智能体框架则提供了使用这些能力的“手脚”和“工作记忆”。注意不要将 LLM 直接等同于智能体。一个强大的 LLM 是构建优秀智能体的必要条件但非充分条件。智能体系统的设计如工具定义、状态管理、提示工程同样至关重要。2. 设计“智能体世界杯”足球赛的架构要让两个 LLM 智能体进行 1v1 足球比赛我们需要设计一个完整的模拟系统。这个系统包含几个核心部分游戏环境Environment、智能体控制器Agent Controller和裁判系统Referee System。2.1 核心组件与数据流整个系统的运行遵循以下数据流环境初始化生成球场、球员初始位置、比赛状态比分、时间。回合开始环境将当前游戏状态如球员坐标、球权、比分发送给拥有球权的智能体 A。智能体决策智能体 A 的控制器接收状态结合其内部策略由 LLM 驱动决定一个动作如“带球前进”、“传球”、“射门”。动作执行与模拟环境接收动作指令根据游戏物理规则简化版模拟动作结果更新游戏状态如球的位置变化、是否进球。裁判裁决裁判系统检查新状态判断是否犯规、越位、进球并更新比分、球权等。回合交替将更新后的状态发送给另一方智能体 B重复步骤 3-5。循环直至结束达到比赛时间或最大回合数后结束比赛宣布结果。graph TD A[环境初始化] -- B[回合开始: 发送状态给球权方]; B -- C[智能体决策]; C -- D[LLM 推理与规划]; D -- E[生成动作指令]; E -- F[环境执行与物理模拟]; F -- G[裁判系统裁决]; G -- H{比赛结束?}; H -- 否 -- B; H -- 是 -- I[输出比赛结果];2.2 游戏状态与动作的抽象化我们无法让 LLM 直接处理像素级的游戏画面。必须将复杂的游戏状态抽象成 LLM 能够理解的结构化文本描述或 JSON。同样动作也需要抽象为离散的、有限的指令集。游戏状态State示例JSON 格式{ time_elapsed: 350, score: {agent_a: 1, agent_b: 0}, ball_possession: agent_a, ball_position: {x: 40, y: 25}, players: { agent_a: { position: {x: 42, y: 24}, stamina: 80 }, agent_b: { position: {x: 60, y: 25}, stamina: 85 } }, field_size: {width: 100, height: 50}, goal_posts: {left: {x: 0, y_range: [20, 30]}, right: {x: 100, y_range: [20, 30]}} }可用动作Action列表MOVE_TO(x, y): 向目标坐标移动。DRIBBLE(direction, power): 带球向某个方向推进。PASS(target_agent): 传球给队友在1v1中简化为长传转移。SHOOT(power): 向对方球门射门。TACKLE(): 尝试抢断。WAIT(): 等待观察。2.3 智能体控制器的内部设计智能体控制器是 LLM 与游戏环境之间的桥梁。其核心是一个提示Prompt模板它将游戏状态、可用动作、历史信息以及角色设定如“你是一个进攻型足球AI”组合起来提交给 LLM并解析 LLM 的回复以提取动作指令。一个简化的提示模板可能如下你是一个足球比赛中的智能体当前由你控制球员。 ## 比赛规则 - 球场尺寸宽{field_width}高{field_height}。 - 你的球门在左侧对方球门在右侧。 - 目标是射入对方球门得分。 - 每回合只能执行一个动作。 ## 当前状态 {current_state_json} ## 可用动作 {available_actions_list} ## 历史动作最近3回合 {action_history} ## 你的思考 请分析当前局势考虑球员位置、球权、体力和比分。然后决定一个最优动作。 你的输出必须是严格的JSON格式{reasoning: 你的思考过程, action: 动作名称, parameters: {...}} ## 输出LLM 会生成类似{reasoning: 我控球且接近对方球门应该尝试射门。, action: SHOOT, parameters: {power: 85}}的响应。控制器解析这个 JSON将动作指令发送给游戏环境。3. 环境准备与核心依赖配置我们将使用 Python 作为实现语言因为它有丰富的 AI 和模拟库。这是一个简化版的实现侧重于架构演示。3.1 项目初始化与虚拟环境首先创建一个新的项目目录并设置虚拟环境。# 创建项目目录 mkdir agentic_worldcup cd agentic_worldcup # 创建虚拟环境推荐使用 Python 3.9 python -m venv venv # 激活虚拟环境 # Windows: venv\Scripts\activate # Linux/Mac: source venv/bin/activate3.2 安装核心依赖创建requirements.txt文件并安装以下依赖openai1.0.0 # 或 anthropic, groq, 用于调用 LLM API langchain0.1.0 # 可选但能极大简化 Agent 框架搭建 pydantic2.0.0 # 用于数据验证和设置管理 numpy1.24.0 # 用于简单的物理计算如距离、向量 python-dotenv1.0.0 # 管理 API 密钥等环境变量执行安装pip install -r requirements.txt3.3 配置 LLM 连接我们需要一个 LLM 提供商。这里以 OpenAI 的 GPT-4 为例。在项目根目录创建.env文件来存储密钥切勿提交到版本控制系统。# .env 文件内容 OPENAI_API_KEYyour_openai_api_key_here OPENAI_MODELgpt-4-turbo-preview # 或 gpt-3.5-turbo 用于低成本测试在代码中使用python-dotenv加载配置# config.py import os from pydantic_settings import BaseSettings from dotenv import load_dotenv load_dotenv() # 加载 .env 文件中的环境变量 class Settings(BaseSettings): openai_api_key: str os.getenv(OPENAI_API_KEY) openai_model: str os.getenv(OPENAI_MODEL, gpt-3.5-turbo) # 可以添加其他配置如比赛时长、球场大小等 match_duration: int 600 # 模拟秒数 field_width: int 100 field_height: int 50 settings Settings()4. 实现核心模块环境、智能体与裁判我们将系统拆分为三个主要类SoccerEnvironment,LLMAgent, 和Referee。4.1 游戏环境类SoccerEnvironment这个类负责维护游戏状态并基于物理规则执行动作。# environment.py import numpy as np from typing import Dict, Any, Tuple from dataclasses import dataclass, asdict import json dataclass class GameState: 游戏状态数据类 time_elapsed: int 0 score_a: int 0 score_b: int 0 ball_possession: str None # agent_a or agent_b ball_position: Tuple[int, int] (50, 25) # (x, y) player_a_pos: Tuple[int, int] (30, 25) player_b_pos: Tuple[int, int] (70, 25) player_a_stamina: float 100.0 player_b_stamina: float 100.0 class SoccerEnvironment: def __init__(self, field_size: Tuple[int, int] (100, 50)): self.field_width, self.field_height field_size self.state GameState() self.state.ball_possession agent_a # 随机或固定开局 self.action_history [] def get_state_for_agent(self, agent_id: str) - Dict[str, Any]: 为指定智能体构建状态视图可能包含部分信息遮蔽如对手精确体力 state_dict asdict(self.state) # 简化处理返回完整状态。实战中可对对手信息进行模糊化。 state_dict[field_size] {width: self.field_width, height: self.field_height} return state_dict def execute_action(self, agent_id: str, action: str, params: Dict) - Dict[str, Any]: 执行动作更新状态并返回结果信息。 这是一个极度简化的物理模拟。 result {success: True, message: , goal_scored: False} if agent_id ! self.state.ball_possession: result[success] False result[message] You dont have the ball possession! return result if action MOVE_TO: # 简化移动逻辑 target_x params.get(x, self.state.ball_position[0]) target_y params.get(y, self.state.ball_position[1]) # 限制移动范围 target_x max(0, min(self.field_width, target_x)) target_y max(0, min(self.field_height, target_y)) # 更新球员和球的位置假设带球移动 if agent_id agent_a: self.state.player_a_pos (target_x, target_y) else: self.state.player_b_pos (target_x, target_y) self.state.ball_position (target_x, target_y) result[message] fMoved to ({target_x}, {target_y}) elif action SHOOT: power params.get(power, 50) # 简单射门逻辑计算球门距离和命中概率 shooter_pos self.state.player_a_pos if agent_id agent_a else self.state.player_b_pos goal_x self.field_width if agent_id agent_a else 0 # A攻右门B攻左门 goal_center_y self.field_height / 2 distance abs(goal_x - shooter_pos[0]) # 简化概率模型 success_prob min(0.9, (power / 100) * (40 / max(distance, 1))) if np.random.random() success_prob: # 进球 if agent_id agent_a: self.state.score_a 1 else: self.state.score_b 1 result[goal_scored] True result[message] fGOAL! {agent_id} scores! Power: {power} # 球权转移开球 self.state.ball_possession agent_b if agent_id agent_a else agent_a self.state.ball_position (self.field_width // 2, self.field_height // 2) else: result[message] fShot missed with power {power}. # 射门丢失球权 self.state.ball_possession agent_b if agent_id agent_a else agent_a elif action PASS: # 在1v1中传球意味着长传转移有丢失风险 pass_success_prob 0.7 if np.random.random() pass_success_prob: result[message] Pass completed. Ball is now in open space. # 球移动到中场随机位置 self.state.ball_position (self.field_width // 2, np.random.randint(10, self.field_height-10)) # 球权可能丢失简化 if np.random.random() 0.3: self.state.ball_possession agent_b if agent_id agent_a else agent_a else: result[message] Pass intercepted! self.state.ball_possession agent_b if agent_id agent_a else agent_a # 更新时间和体力消耗 self.state.time_elapsed 10 # 每个动作消耗10模拟秒 stamina_cost {MOVE_TO: 2, SHOOT: 5, PASS: 3}.get(action, 1) if agent_id agent_a: self.state.player_a_stamina max(0, self.state.player_a_stamina - stamina_cost) else: self.state.player_b_stamina max(0, self.state.player_b_stamina - stamina_cost) self.action_history.append((agent_id, action, params, result)) return result4.2 智能体类LLMAgent这个类封装了与 LLM 的交互包括构建提示、调用 API 和解析响应。# agent.py import openai from typing import Dict, Any import json from config import settings class LLMAgent: def __init__(self, agent_id: str, role: str balanced): self.agent_id agent_id self.role role # e.g., offensive, defensive, balanced self.client openai.OpenAI(api_keysettings.openai_api_key) self.model settings.openai_model self.memory [] # 简单的对话历史记忆 def _build_prompt(self, game_state: Dict[str, Any], available_actions: list) - str: 构建发送给 LLM 的提示词 prompt_template f 你是一个足球比赛中的AI智能体{self.agent_id}你的角色是{self.role}型球员。 ## 比赛规则与目标 - 球场尺寸宽{game_state[field_size][width]}高{game_state[field_size][height]}。 - 你的目标是将球射入对方球门。对方球门位于{右侧 if self.agent_id agent_a else 左侧}。 - 当前比分Agent A {game_state[score_a]} - {game_state[score_b]} Agent B。 - 比赛已进行 {game_state[time_elapsed]} 秒。 - 你的体力{game_state[players][self.agent_id][stamina]}。 - 球权{在你脚下 if game_state[ball_possession] self.agent_id else 在对手脚下}。 - 球的位置({game_state[ball_position][x]}, {game_state[ball_position][y]})。 - 你的位置({game_state[players][self.agent_id][position][x]}, {game_state[players][self.agent_id][position][y]})。 - 对手位置({game_state[players][agent_b if self.agent_id agent_a else agent_a][position][x]}, ...)。 ## 可用动作 {json.dumps(available_actions, indent2, ensure_asciiFalse)} ## 决策要求 请分析当前局势基于你的角色和比分做出最有利的决策。 输出必须为严格的 JSON 格式包含以下两个字段 1. reasoning: 你的思考过程用中文简要说明。 2. action: 选择的一个动作名称。 3. parameters: 动作参数字典。例如SHOOT需要{{power: 80}}MOVE_TO需要{{x: 50, y: 30}}。 ## 输出示例 {{reasoning: 我控球且距离球门较近体力充足应该尝试射门。, action: SHOOT, parameters: {{power: 85}}}} 现在请做出你的决策。 return prompt_template def decide_action(self, game_state: Dict[str, Any]) - Dict[str, Any]: 基于游戏状态调用LLM决定一个动作 available_actions [ {name: MOVE_TO, description: 向目标坐标移动。需要参数 x, y。}, {name: SHOOT, description: 向对方球门射门。需要参数 power (1-100)。}, {name: PASS, description: 尝试长传转移。无参数。}, {name: WAIT, description: 等待观察。无参数。}, ] prompt self._build_prompt(game_state, available_actions) self.memory.append({role: user, content: prompt}) try: response self.client.chat.completions.create( modelself.model, messagesself.memory[-5:], # 只保留最近5条作为上下文控制token消耗 temperature0.2, # 较低的温度使决策更稳定 response_format{type: json_object} # 强制JSON输出 ) llm_output response.choices[0].message.content action_decision json.loads(llm_output) self.memory.append({role: assistant, content: llm_output}) return action_decision except json.JSONDecodeError as e: print(fAgent {self.agent_id} LLM 返回了非JSON格式: {llm_output}) # 降级处理返回一个默认安全动作 return {reasoning: LLM response parse error, action: WAIT, parameters: {}} except Exception as e: print(fAgent {self.agent_id} API调用失败: {e}) return {reasoning: API error, action: WAIT, parameters: {}}4.3 裁判类与主循环Referee Main Loop裁判类负责裁决犯规、进球有效性等并控制比赛流程。# referee.py class Referee: def __init__(self, max_time: int): self.max_time max_time self.fouls {agent_a: 0, agent_b: 0} def check_goal(self, environment, agent_id: str) - bool: 检查是否进球已在环境逻辑中简化处理这里可扩展复杂规则 # 更复杂的规则可以在这里实现如检查是否越位、是否手球等。 # 本例中进球判定已在环境 execute_action 中完成。 return False def check_offside(self, environment, agent_id: str) - bool: 简化版越位检查1v1场景下通常不需要 return False def check_match_end(self, environment) - bool: 检查比赛是否结束 if environment.state.time_elapsed self.max_time: return True # 也可以设置最大比分差结束 return False# main.py import time from environment import SoccerEnvironment from agent import LLMAgent from referee import Referee def run_match(): print( 启动智能体世界杯 1v1 足球赛 ) env SoccerEnvironment(field_size(100, 50)) agent_a LLMAgent(agent_idagent_a, roleoffensive) agent_b LLMAgent(agent_idagent_b, roledefensive) referee Referee(max_time600) # 10分钟模拟时间 current_agent agent_a if env.state.ball_possession agent_a else agent_b while not referee.check_match_end(env): print(f\n--- 时间: {env.state.time_elapsed}s | 比分 A {env.state.score_a} - {env.state.score_b} B ---) print(f球权: {current_agent.agent_id}) # 1. 获取当前游戏状态 game_state env.get_state_for_agent(current_agent.agent_id) # 2. 智能体决策 decision current_agent.decide_action(game_state) print(f{current_agent.agent_id} 思考: {decision[reasoning]}) print(f{current_agent.agent_id} 决定: {decision[action]} {decision.get(parameters, {})}) # 3. 环境执行动作 result env.execute_action(current_agent.agent_id, decision[action], decision.get(parameters, {})) print(f结果: {result[message]}) if result.get(goal_scored): print(f*** 进球新比分: A {env.state.score_a} - {env.state.score_b} B ***) # 4. 切换球权如果动作执行导致球权转换环境已更新 current_agent agent_a if env.state.ball_possession agent_a else agent_b # 5. 短暂延迟方便观察 time.sleep(0.5) print(\n 比赛结束 ) print(f最终比分: Agent A {env.state.score_a} - {env.state.score_b} Agent B) if env.state.score_a env.state.score_b: print(冠军: Agent A!) elif env.state.score_b env.state.score_a: print(冠军: Agent B!) else: print(比赛平局) if __name__ __main__: run_match()5. 运行验证与结果分析5.1 启动比赛确保你的.env文件已正确配置 OpenAI API 密钥。在项目根目录下运行python main.py你将看到控制台输出比赛进程类似于 启动智能体世界杯 1v1 足球赛 --- 时间: 0s | 比分 A 0 - 0 B --- 球权: agent_a agent_a 思考: 我控球在中场体力充沛作为进攻型球员应该先带球向前推进寻找射门机会。 agent_a 决定: MOVE_TO {x: 65, y: 25} 结果: Moved to (65, 25) --- 时间: 10s | 比分 A 0 - 0 B --- 球权: agent_a agent_a 思考: 我现在更靠近对方球门了可以考虑射门。评估距离和体力后选择中等力量射门。 agent_a 决定: SHOOT {power: 70} 结果: Shot missed with power 70. ...5.2 结果分析与调试运行几次比赛观察以下方面决策合理性智能体是否做出了符合其角色进攻/防守的决策例如进攻型智能体是否更倾向于射门防守型是否更倾向于拦截和等待LLM 输出稳定性LLM 是否始终返回可解析的 JSONtemperature参数设置过低可能导致决策僵化过高可能导致输出格式不稳定。游戏平衡性我们简化的物理模型射门成功率、传球成功率是否导致一方过于强势可能需要调整概率公式。状态感知智能体是否能正确理解状态中的关键信息如比分、体力、位置并据此决策你可以通过修改agent.py中的提示模板_build_prompt方法来显著影响智能体的行为。例如为防守型智能体增加提示“你的首要目标是阻止对方得分优先选择拦截和保持防守位置。”6. 常见问题排查与优化在构建和运行此类 LLM 智能体模拟系统时会遇到一些典型问题。6.1 LLM 相关问题问题现象可能原因检查与解决方式LLM 返回非 JSON 格式导致解析失败。1. 提示词未明确要求 JSON。2.temperature参数过高。3. 模型未支持response_format。1. 在提示词中强调“严格的 JSON 格式”并给出示例。2. 将temperature调低如 0.2。3. 使用 OpenAI 的response_format{type: json_object}参数强制 JSON 输出。4. 在代码中添加try-except对非 JSON 响应进行降级处理如返回默认动作。智能体决策愚蠢或重复。1. 提示词信息不足或误导。2. 上下文记忆太短忘记之前状态。3. 可用动作定义不清晰。1. 优化提示词提供更清晰的局势分析和角色指令。2. 在LLMAgent的memory中保留更长的历史交互注意 token 消耗。3. 在available_actions中为每个动作提供更详细的描述和适用场景。API 调用缓慢或超时。1. 网络问题。2. 模型负载高。3. 提示词过长响应慢。1. 增加请求超时时间。2. 考虑使用更快的模型如gpt-3.5-turbo进行原型测试。3. 精简提示词和上下文历史。6.2 环境与模拟问题问题现象可能原因检查与解决方式游戏很快陷入僵局如双方不停 WAIT。物理/规则模型有缺陷导致某些动作收益为负或无法推进局面。1. 检查execute_action中动作的成功率和后果。确保进攻动作如 SHOOT有合理的成功机会。2. 引入“鼓励机制”例如长时间不射门会扣减虚拟士气或增加失误率。3. 在状态中提供更多激励信息如“距离球门很近射门机会好”。一方智能体明显过强。1. 初始位置或规则不公平。2. 概率模型有偏差。1. 确保初始状态对称。2. 审查SHOOT、PASS的成功概率计算公式确保其基于距离、体力等因素动态变化而非固定值。比赛进程不可预测结果随机。模拟中随机因素np.random.random()过多掩盖了 LLM 决策的价值。降低随机性影响增加基于智能体决策质量的成功率权重。例如射门成功率不仅与距离有关还与决策中的reasoning质量可通过简单规则评分挂钩。6.3 性能与成本问题问题现象可能原因检查与解决方式运行一场比赛 API 调用费用很高。1. 每回合都调用 LLM。2. 使用的模型较贵如 GPT-4。3. 提示词或上下文过长。1.本地模型考虑使用本地部署的轻量级 LLM如 Llama 3.1 的 8B 版本通过 Ollama 运行进行大量模拟仅用 GPT-4 进行关键决策或分析。2.缓存对相同的游戏状态哈希后缓存 LLM 的决策结果。3.简化提示压缩提示词移除冗余描述。4.回合聚合不是每个模拟步都决策可以一个“决策”包含多个基础动作。7. 从原型到进阶最佳实践与扩展方向当前的实现是一个高度简化的原型。要将其发展为更稳健、有趣的“智能体世界杯”可以考虑以下方向。7.1 架构优化最佳实践状态抽象与模糊化目前智能体能看到对手的精确位置和体力这过于“全知”。在更真实的模拟中应为智能体提供部分可观测状态例如只能看到一定范围内的对手体力以“高/中/低”模糊显示。工具Tools化动作将MOVE_TO、SHOOT等动作定义为标准的 LangChain Tools 或 OpenAI Function Calling。这能让 LLM 更规范地理解和使用动作也便于扩展。分层决策与技能不要让 LLM 直接决定底层动作如移动的具体坐标。可以设计高层策略如“进攻左路”、“防守反击”由另一个模块或规则系统将其分解为具体动作序列。记忆与学习引入向量数据库让智能体能够记住历史对局中的成功与失败模式并在新对局中进行检索增强生成RAG实现简单的“经验学习”。并行化与锦标赛使用多进程或异步IO同时运行多场比赛快速进行大规模淘汰赛或循环赛统计不同提示词策略、不同模型智能体的胜率。7.2 扩展功能建议多智能体团队11v11将 1v1 扩展为团队比赛。这需要引入角色前锋、中场、后卫、团队协作指令和更复杂的通信机制。更丰富的物理引擎集成一个简单的 2D 物理库如Pymunk实现更真实的球体运动、碰撞和球员动力学。视觉状态输入将游戏状态渲染成简单的拓扑图或符号图像使用多模态模型如 GPT-4V作为智能体的“眼睛”进行视觉决策。这是迈向更通用智能体的关键一步。强化学习RL微调使用比赛结果作为奖励信号对 LLM 的决策层进行强化学习微调让智能体自我进化。这结合了Agentic RL的思想。人类旁观与干预设计一个前端界面允许人类观看比赛并在关键时刻向某个智能体提供建议通过自然语言观察智能体是否会采纳。构建“智能体世界杯”的核心价值不在于模拟足球本身而在于为研究 LLM 的推理、规划、决策以及在动态环境中执行多步骤任务的能力提供了一个高度可控、可衡量且有趣的测试平台。通过这个项目你可以深入理解 Agentic 设计模式中的每一个环节并亲手调整它们观察其对最终智能体行为的影响。这是从“使用 LLM”到“构建基于 LLM 的智能系统”的关键一步。
返回列表