camel.environments 包#
子模块#
camel.environments.base 模块#
模块内容#
- class camel.environments.Action(*, index: int = 0, llm_response: str, metadata: ~typing.Dict[str, ~typing.Any] = <factory>, timestamp: ~datetime.datetime = <factory>)[来源]#
基类:
BaseModel表示在环境中采取的一个动作。
这个类定义了输入上下文、LLM生成的输出以及在强化学习框架内进行验证和跟踪所需的元数据。
- llm_response#
由LLM生成的响应。
- Type:
字符串
- metadata#
额外的元数据,如模型参数、提示详情或响应置信度分数。
- Type:
字典[字符串, 任意类型]
- timestamp#
动作生成时的时间戳(UTC)。
- Type:
日期时间
- index: int#
- llm_response: str#
- metadata: Dict[str, Any]#
- model_config: ClassVar[ConfigDict] = {}#
模型的配置,应该是一个符合[ConfigDict][pydantic.config.ConfigDict]的字典。
- timestamp: datetime#
- class camel.environments.Environment(*args, **kwargs)[来源]#
基类:
Protocol- async step(action: 操作) StepResult[来源]#
在环境中执行一步操作。
- Parameters:
action – 包含所需一切内容的操作
environment (在...中取得进展)
- Returns:
包含下一个观察结果、奖励、完成标志和信息的StepResult
- class camel.environments.MultiStepEnv(extractor: BaseExtractor, max_steps: int | None = None, **kwargs)[来源]#
基类:
ABC一个用于强化学习与LLMs的多步骤环境。
- async close() None[来源]#
清理并关闭环境使用的所有资源。 该方法会关闭验证器,调用任何MultiStepEnv中实现的内部关闭函数, 并确保环境被正确关闭。
- Raises:
异常 – 如果在关闭环境时发生错误。
- property current_step: int#
获取当前步骤编号。
- Returns:
当前所处的步骤编号。
- Return type:
int
- property metadata: Dict[str, Any]#
检索环境的元数据。
这提供了额外的参数和配置详情。
- Returns:
环境元数据的副本。
- Return type:
字典[字符串, 任意类型]
- async reset() 观察[来源]#
将环境重置为初始状态。
- Returns:
该剧集的初始观察。
- Return type:
- Raises:
RuntimeError – 如果无法获取初始观察值。
- class camel.environments.Observation(*, question: str, context: ~typing.Dict[str, ~typing.Any] = <factory>, metadata: ~typing.Dict[str, ~typing.Any] | None = None)[来源]#
基类:
BaseModel环境观测。
- question#
向LLM提出的问题。
- Type:
字符串
- context#
问题的附加背景信息。
- Type:
字典[字符串, 任意类型]
- metadata#
关于观测的可选元数据。
- Type:
字典[str, 任意类型] | 无
- context: Dict[str, Any]#
- metadata: Dict[str, Any] | None#
- model_config: ClassVar[ConfigDict] = {}#
模型的配置,应该是一个符合[ConfigDict][pydantic.config.ConfigDict]的字典。
- question: str#
- class camel.environments.Opponent(play_style: Literal['optimal', 'random'] = 'optimal')[来源]#
基类:
objectTic Tac Toe游戏的AI对手。
该类实现了AI对手的不同游戏策略,包括使用带有alpha-beta剪枝的minimax算法的最优策略,以及随机策略。
- get_optimal_move(board: List[str]) int | None[来源]#
使用极小化极大算法获取最优移动。
- Parameters:
board (List[str]) – 当前游戏棋盘,以字符串列表形式表示。
- Returns:
- 最佳移动的索引,如果没有可用移动则为None
。
- Return type:
可选[int]
- minimax(board: List[str], is_maximizing: bool, depth: int = 0, alpha: float = -inf, beta: float = inf) Tuple[float, int | None][来源]#
采用alpha-beta剪枝的Minimax算法用于最优走子选择。
递归评估所有可能的走法以找到最佳选择。 使用alpha-beta剪枝算法来减少搜索空间。
- Parameters:
board (List[str]) – 当前游戏棋盘,以字符串列表形式表示。
is_maximizing (bool) - 如果为True表示最大化玩家(O),如果为False表示最小化玩家(X)。
depth (int) – 搜索树中的当前深度。(默认值:
0)alpha (float) - 用于剪枝的alpha值。(默认:
-math.inf)beta (float) – 用于剪枝的Beta值。(默认:
math.inf)
- Returns:
- 包含以下元素的元组:
- float: 最佳移动的得分(1表示O获胜,-1表示X
获胜,0表示平局)
- Optional[int]: 最佳移动的索引,如果是终局则为
None
- Return type:
元组[浮点数, 可选整数]
- class camel.environments.SingleStepEnv(dataset: StaticDataset | BaseGenerator, verifier: BaseVerifier, **kwargs)[来源]#
基类:
object一个轻量级环境,用于单步强化学习,使用LLMs作为策略。
该环境模拟了一个基于LLM的智能体与来自数据集的问题(如问答或数学问题)之间的单次交互过程,其中智能体生成一个响应并接收反馈。
- Core Flow:
从(可能无限长的)数据集中采样一个问题。
LLM生成单步响应(即动作)。
响应将与真实情况进行比对验证。
奖励是基于正确性和可选的自定义逻辑计算的。
- Key Features:
支持批量评估并跟踪每个样本的状态。
验证器及相关资源的异步设置和拆卸。
支持通过本地RNG进行确定性采样(可选种子)。
通过子类化实现可扩展的奖励计算。
- ACCURACY_REWARD = 1#
- PLACEHOLDER_OBS = Observation(question='Episode ended. This is just a placeholder.', context={}, metadata=None)#
- property metadata: Dict[str, Any]#
检索环境的元数据。
这提供了额外的参数和配置详情。
- Returns:
环境元数据的副本。
- Return type:
字典[字符串, 任意类型]
- async reset(batch_size: int = 1, seed: int | None = None) 观察 | List[观察][来源]#
重置环境并开始一个新的回合。
该方法从数据集中采样一批新的数据点,并返回相应的初始观测值。
如果提供了种子值,将初始化一个本地随机数生成器用于确定性采样。全局随机状态不会受到影响。
- Parameters:
batch_size (int) - 要采样的数据点数量。 (默认值:
1)seed (可选[int]) - 用于确定性采样的种子值。如果为None,则采样是非确定性的。(默认值:
None)
- Returns:
- 该事件的初步观察
情节。
- Return type:
Observation 或 List[Observation]
- Raises:
RuntimeError - 如果在处理完所有先前状态之前调用。
ValueError - 如果批处理大小超过数据集大小。
TypeError - 如果数据集类型不受支持。
- async setup() None[来源]#
通过初始化验证器来设置环境。
该方法确保环境已准备好进行交互。 它会设置必要的组件,包括验证器。
- Raises:
异常 - 如果由于内部错误导致设置失败。
- async step(action: 操作 | List[操作] | str | Dict[int, str]) Tuple[观察, float, bool, Dict[str, Any]] | List[Tuple[观察, float, bool, Dict[str, Any]]][来源]#
使用提出的解决方案在环境中执行一次交互步骤。
该方法处理智能体对当前观察结果的响应,使用验证器验证响应的正确性,计算奖励,并返回最终的状态转换结果。
环境严格遵循单步执行。一旦为某个状态提交了动作,该状态即被标记为完成,且观察结果将不再改变。
- Parameters:
action (Union[Action, List[Action], str, Dict[int, str]]) –
- 智能体采取的动作,
应包含对观察的响应
可以是以下形式: - 单个Action对象(批大小为1时) - Action对象列表(用于批量评估) - 原始字符串(仅当批大小为1时允许) - 将索引映射到其llm_response的字典
(用于批量评估)
- Returns:
一个元组或元组列表,包含: - Observation: 表示回合结束的占位符。 - float: 响应的奖励值。 - bool: 回合是否结束
(在本例中始终为True)。
- dict: 附加信息,包括提出的解决方案,
验证结果和原始数据点。
- Return type:
联合类型[元组[Observation, 浮点数, 布尔值, 字典[字符串, 任意类型]], 列表[…]]
- Raises:
RuntimeError – 如果环境尚未设置,或者未调用reset()。
ValueError - 如果检测到无效的操作格式、重复索引或越界索引。
- class camel.environments.StepResult(*, observation: ~camel.environments.models.Observation, reward: float, rewards_dict: ~typing.Dict[str, float] = <factory>, done: bool, info: ~typing.Dict[str, ~typing.Any] = <factory>)[来源]#
基类:
BaseModel环境步骤的执行结果。
- observation#
下一个观察结果。
- reward#
不同方面的奖励分数字典。
- Type:
浮点数
- done#
该剧集是否已完结。
- Type:
布尔值
- info#
关于该步骤的附加信息。
- Type:
字典[字符串, 任意类型]
- done: bool#
- info: Dict[str, Any]#
- model_config: ClassVar[ConfigDict] = {}#
模型的配置,应该是一个符合[ConfigDict][pydantic.config.ConfigDict]的字典。
- reward: float#
- rewards_dict: Dict[str, float]#
- class camel.environments.TicTacToeEnv(extractor: BaseExtractor | None = None, max_steps: int | None = None, play_style: Literal['optimal', 'random'] = 'optimal', **kwargs)[来源]#
基类:
MultiStepEnv一个用于强化学习的Tic Tac Toe(井字棋)环境,专为LLMs设计。
这个环境实现了一个标准的井字棋游戏,其中LLM智能体作为'X'与作为'O'的AI对手对战。对手可以采用最优策略(带alpha-beta剪枝的minimax算法)或随机策略。
- WIN_COMBINATIONS: ClassVar = [(0, 1, 2), (3, 4, 5), (6, 7, 8), (0, 3, 6), (1, 4, 7), (2, 5, 8), (0, 4, 8), (2, 4, 6)]#
- static available_moves(board: List[str]) List[int][来源]#
获取棋盘上所有可行的走法。
- Parameters:
board (List[str]) – 当前游戏棋盘,以字符串列表形式表示。
- Returns:
表示棋盘上空单元格的索引列表。
- Return type:
整数列表
- static check_winner(board: List[str]) Literal['X', 'O', 'draw'] | None[来源]#
检查棋盘上是否有赢家或平局。
- Parameters:
board (List[str]) – 当前游戏棋盘,以字符串列表形式表示。
- Returns:
- 如果X获胜则显示"X",如果O获胜则显示"O"
如果比赛平局则显示"draw",如果比赛仍在进行中则显示None。
- Return type:
可选[字面量["X", "O", "平局"]]
- async compute_reward() Tuple[float, Dict[str, float]][来源]#
计算当前状态的奖励值。
- Returns:
- 包含总奖励的元组
以及奖励组件的字典: - 胜利得1.0分 - 失败或非法移动得0.0分 - 平局得0.5分 - 对于进行中的游戏,返回对局面的评估
- Return type:
元组[浮点数, 字典[字符串, 浮点数]]
- static evaluate_position_for_x(board: List[str], is_x_turn: bool, depth: int = 0, max_depth: int = 10) float[来源]#
从X的角度评估当前棋盘局势。
使用极小极大算法来确定该位置的价值。
- Parameters:
board (List[str]) – 当前游戏棋盘,以字符串列表形式表示。
is_x_turn (bool) - 如果轮到X走棋则为True,否则为False。
- Returns:
- 表示位置评估的浮点数值:
如果X处于获胜位置则为1.0
如果O处于获胜位置则为0.0
平局时为0.5
- 对于未结束的位置,返回在
完美对弈情况下的预期结果
- Return type:
浮点数