safety-gymnasium
Safety-Gymnasium 是一个专为安全强化学习(SafeRL)打造的高可扩展性开源基准库,曾入选 NeurIPS 2023。在传统的强化学习中,智能体往往只追求奖励最大化而忽视潜在风险,Safety-Gymnasium 正是为了解决这一痛点而生。它提供了一套标准化的测试环境和统一的评价体系,让研究人员能够在一个受控且包含明确约束条件的场景中,系统地评估算法如何在完成任务的同时确保安全性。
这款工具特别适合从事强化学习算法研究的研究人员、需要验证安全策略的开发者,以及对 AI 安全性感兴趣的高校师生。其核心亮点在于高度兼容的标准 API 接口,能够无缝对接现有的强化学习框架,并原生支持约束信息的传递。此外,Safety-Gymnasium 拥有优雅的代码架构和精心设计的多样化环境,不仅支持用户轻松自定义场景,还具备极强的可扩展性。无论是用于复现经典论文、对比不同安全算法的性能,还是探索全新的安全控制思路,Safety-Gymnasium 都能提供一个严谨、高效且开放的实验平台,助力推动安全人工智能技术的发展。
使用场景
某自动驾驶初创公司的算法团队正在研发一款能在复杂城市路况中自主导航的配送机器人,核心挑战是如何让机器人在追求效率的同时,严格避免碰撞行人或闯入禁行区。
没有 safety-gymnasium 时
- 环境构建重复造轮子:团队需手动编写带有约束条件的仿真环境代码,耗费数周时间且难以保证物理逻辑的准确性。
- 算法评估标准混乱:缺乏统一的基准测试集,不同安全强化学习算法的性能对比依赖自定义指标,导致结果无法复现且缺乏公信力。
- 约束处理接口不一:现有的通用强化学习库不支持原生的“成本约束”信号,工程师必须魔改底层代码才能传递违规惩罚信息,极易引入 Bug。
- 扩展性差:一旦需要增加新的危险场景(如雨雪天气或突发障碍物),修改现有环境的成本极高,严重拖慢迭代节奏。
使用 safety-gymnasium 后
- 开箱即用的标准环境:直接调用 safety-gymnasium 预置的高保真安全导航场景,将环境搭建时间从数周缩短至几小时,且物理交互经过严格验证。
- 权威统一的评测基准:利用其标准化的 Benchmark 套件,团队能公平地对比 PPO-Lagrangian 等不同算法的安全性与回报率,快速锁定最优方案。
- 原生支持约束接口:借助其兼容约束信息的标准 API,算法可直接接收“碰撞成本”反馈,无需修改底层框架即可实现安全策略训练。
- 灵活的场景定制:通过其优雅的代码架构,开发人员轻松添加了“湿滑路面”等新变量,快速验证算法在极端条件下的鲁棒性。
safety-gymnasium 通过提供统一、可扩展的安全强化学习基准,让研发团队从繁琐的环境工程中解放出来,专注于提升算法在真实世界中的安全决策能力。
运行环境要求
- 未说明
- 部分环境(如 Safe Isaac Gym 系列、Safe Vision 系列)可能需要 GPU 支持,具体型号和显存未说明
- 基础 MuJoCo 环境通常仅需 CPU
未说明

快速开始
安全体操馆
在这里,我们提供一张表格,用于比较 Safety-Gymnasium 和现有的 SafeRL 环境库。 (1): 维护状态(仅限于错误修复和小更新);最后一次提交是在 2021 年 11 月 19 日。Safety-Gym 依赖于 我们设计了多种增强安全性的学习任务,并整合了强化学习社区的贡献: 此外,为了促进社区研究的发展,我们对 Safety-Gym 进行了重新设计,并去除了对 以下是我们目前支持的所有环境列表: 以下是一些 安全导航 任务的截图。 基于视觉的安全强化学习缺乏真实的场景。尽管最初的 作为开胃菜,以下是相关图片: 注: 我们支持基于 Gymnasium API 显式地表达 我们还提供了两个便捷的包装器,用于在 Safety-Gymnasium 环境与标准 Gymnasium API 之间进行转换。 用户可以轻松地应用 Gymnasium 包装器,如下所示: 或者: 此外,对于所有 Safety-Gymnasium 环境,我们还提供了对应的 Gymnasium 环境,其环境 ID 中带有后缀 如果您在服务器上无法成功渲染,可以尝试以下步骤: 对于简单的智能体,我们提供了通过键盘控制机器人运动的功能,以方便调试。只需在任务名称后添加 Debug 后缀,例如 对于更复杂的智能体,您还可以根据特定的输入设备编写自定义的控制逻辑。为此,只需为指定的智能体实现 我们构建了一个高度可扩展的代码框架,便于您理解和掌握,并且平均只需不到 100 行代码即可设计出适合您研究的环境。 有关详细信息,请参阅我们的文档。以下是一个最小示例: Safety-Gymnasium 采用 Apache License 2.0 许可证发布。

视觉输入
Safety-Gym
mujoco-py(1)❌
❌
极少支持
safe-control-gym
PyBullet
❌
❌
❌
速度约束(2)
N/A
❌
❌
❌
mujoco-circle
PyTorch
❌
❌
❌
Safety-Gymnasium
MuJoCo 2.3.0+
✅
✅
✅
mujoco-py 2.0.2.7,该版本于 2019 年 10 月 12 日更新。
(2): 目前没有官方的速度相关环境库,其相关的成本约束是根据现有信息构建的。然而,这一任务在 SafeRL 的研究中被广泛使用,因此我们在 Safety-Gymnasium 中将其封装起来。
(3): 在 gym 0.26.0 版本的更新中,重新定义了新的交互 API。
环境
safety-velocity、safety-run、safety-circle、safety-goal、safety-button 等。我们推出了一套统一的安全增强型学习基准环境库,名为 Safety-Gymnasium。mujoco-py 的依赖。我们基于 MuJoCo 构建了它,并修复了一些 bug。更详细的 bug 报告可以参考 Safety-Gym 的 BUG 报告。
类别
任务
智能体
示例
安全导航
Button[012]
Point, Car, Doggo, Racecar, Ant
SafetyPointGoal1-v0
Goal[012]
Push[012]
Circle[012]
安全速度
Velocity
HalfCheetah, Hopper, Swimmer, Walker2d, Ant, Humanoid
SafetyAntVelocity-v1
安全视觉
BuildingButton[012]
Point, Car, Doggo, Racecar, Ant
SafetyFormulaOne1-v0
BuildingGoal[012]
BuildingPush[012]
FadingEasy[012]
FadingHard[012]
Race[012]
FormulaOne[012]
安全多智能体
MultiGoal[012]
Multi-Point, Multi-Ant
SafetyAntMultiGoal1-v0
多智能体速度
6x1HalfCheetah, 2x3HalfCheetah, 3x1Hopper, 2x1Swimmer, 2x3Walker2d, 2x4Ant, 4x2Ant, 9|8Humanoid
Safety2x4AntVelocity-v0
FreightFrankaCloseDrawer(多智能体)
FreightFranka
FreightFrankaCloseDrawer(多智能体)
FreightFrankaPickAndPlace(多智能体)
ShadowHandCatchOver2UnderarmSafeFinger(多智能体)
ShadowHands
ShadowHandCatchOver2UnderarmSafeJoint(多智能体)
ShadowHandCatchOver2UnderarmSafeJoint(多智能体)
ShadowHandOverSafeFinger(多智能体)
ShadowHandOverSafeJoint(多智能体)
安全 Isaac Gym
FreightFrankaCloseDrawer
FreightFranka
FreightFrankaCloseDrawer
FreightFrankaPickAndPlace
ShadowHandCatchOver2UnderarmSafeFinger
ShadowHands
ShadowHandCatchOver2UnderarmSafeJoint
ShadowHandCatchOver2UnderarmSafeJoint
ShadowHandOverSafeFinger
ShadowHandOverSafeJoint
智能体
任务
基于视觉的安全强化学习
Safety-Gym 能够勉强支持视觉输入,但其场景过于相似。为了便于验证基于视觉的安全强化学习算法,我们开发了一组真实的基于视觉的安全强化学习任务,目前这些任务正在基准测试中进行验证。
环境使用
cost。step 方法会返回 6 个值 (next_obervation, reward, cost, terminated, truncated, info),其中多了一个 cost 字段。import safety_gymnasium
env_id = 'SafetyPointGoal1-v0'
env = safety_gymnasium.make(env_id)
obs, info = env.reset()
while True:
act = env.action_space.sample()
obs, reward, cost, terminated, truncated, info = env.step(act)
if terminated or truncated:
break
env.render()
# Safety-Gymnasium API:step 返回 (next_obervation, reward, cost, terminated, truncated, info)
# Gymnasium API: step 返回 (next_obervation, reward, terminated, truncated, info),而 cost 则包含在与字符串键 `'cost'` 关联的 `info` 字典中。
safety_gymnasium_env = safety_gymnasium.make(env_id)
gymnasium_env = safety_gymnasium.wrappers.SafetyGymnasium2Gymnasium(safety_gymnasium_env)
safety_gymnasium_env = safety_gymnasium.wrappers.Gymnasium2SafetyGymnasium(gymnasium_env)
import gymnasium
import safety_gymnasium
def make_safe_env(env_id):
safe_env = safety_gymnasium.make(env_id)
env = safety_gymnasium.wrappers.SafetyGymnasium2Gymnasium(safe_env)
env = gymnasium.wrappers.SomeWrapper1(env)
env = gymnasium.wrappers.SomeWrapper2(env, argname1=arg1, argname2=arg2)
...
env = gymnasium.wrappers.SomeWrapperN(env)
safe_env = safety_gymnasium.wrappers.Gymnasium2SafetyGymnasium(env)
return safe_env
import functools
import gymnasium
import safety_gymnasium
def make_safe_env(env_id):
return safety_gymnasium.wrappers.with_gymnasium_wrappers(
safety_gymnasium.make(env_id),
gymnasium.wrappers.SomeWrapper1,
functools.partial(gymnasium.wrappers.SomeWrapper2, argname1=arg1, argname2=arg2),
...,
gymnasium.wrappers.SomeWrapperN,
)
Gymnasium。例如:import gymnasium
import safety_gymnasium
safety_gymnasium.make('SafetyPointGoal1-v0') # step 返回 (next_obervation, reward, cost, terminated, truncated, info)
gymnasium.make('SafetyPointGoal1Gymnasium-v0') # step 返回 (next_obervation, reward, terminated, truncated, info)
安装
从 PyPI 安装
pip install safety-gymnasium
从源码安装
conda create -n <envname> python=3.8
conda activate <envname>
git clone https://github.com/PKU-Alignment/safety-gymnasium.git
cd safety-gymnasium
pip install -e .
重要提示
echo "export MUJOCO_GL=osmesa" >> ~/.bashrc
source ~/.bashrc
apt-get install libosmesa6-dev
apt-get install python3-opengl
使用键盘进行调试
SafetyCarGoal2Debug-v0,然后使用 I、K、J 和 L 键来引导机器人的移动。BaseAgent 中的 debug 方法即可。自定义您的环境
# 导入您想要使用的对象
# 或者您也可以自行定义特定的对象,只要符合我们的规范即可
from safety_gymnasium.assets.geoms import Apples
from safety_gymnasium.bases import BaseTask
# 继承 BaseTask 类
class MytaskLevel0(BaseTask):
def __init__(self, config):
super().__init__(config=config)
# 定义一些属性
self.num_steps = 500
self.agent.placements = [(-0.8, -0.8, 0.8, 0.8)]
self.agent.keepout = 0
self.lidar_conf.max_dist = 6
# 将对象添加到环境中
self.add_geoms(Apples(num=2, size=0.3))
def calculate_reward(self):
# 实现您的奖励函数
# 注意:成本计算是基于对象的,因此会自动完成
reward = 1
return reward
def specific_reset(self):
# 根据您的任务需求
def specific_step(self):
# 根据您的任务需求
def update_world(self):
# 根据您的任务需求
@property
def goal_achieved(self):
# 根据您的任务需求
许可证
版本历史
v1.2.02023/08/22v1.1.02023/08/22v1.0.02023/07/21v0.4.12023/07/12v0.4.02023/05/10v0.3.02023/05/10v0.2.02023/04/05v0.1.32023/03/26v0.1.22023/03/14v0.1.12023/03/01v0.1.02023/02/15v0.1.0b02023/02/08相似工具推荐
openclaw
OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
gemini-cli
gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。
markitdown
MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具,专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片(含 OCR)、音频(含语音转录)、HTML 乃至 YouTube 链接等多种格式的解析,能够精准提取文档中的标题、列表、表格和链接等关键结构信息。 在人工智能应用日益普及的今天,大语言模型(LLM)虽擅长处理文本,却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点,它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式,成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外,它还提供了 MCP(模型上下文协议)服务器,可无缝集成到 Claude Desktop 等 LLM 应用中。 这款工具特别适合开发者、数据科学家及 AI 研究人员使用,尤其是那些需要构建文档检索增强生成(RAG)系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器