逆强化学习:从智能体行为反推其内在偏好与奖励函数

发布时间:2026/8/19 9:12:34
逆强化学习:从智能体行为反推其内在偏好与奖励函数 1. 引言当智能体开始“学习”时我们如何学习它在人工智能和机器人学的世界里我们常常训练一个“学习智能体”去完成特定任务。无论是让机械臂抓取物体还是让虚拟角色在游戏中通关核心都是我们为智能体设计了一个“奖励函数”告诉它什么行为是好的什么是不好的。智能体通过不断试错学习最大化这个奖励最终形成我们期望的策略。但这里存在一个根本性的视角反转如果我们观察到一个智能体已经表现出某种复杂、高效甚至看似“智能”的行为我们能否反过来推断出它内心遵循的“偏好”或“目标”是什么这正是“学习一个学习智能体的偏好”这一课题的核心。它不再是我们教机器而是机器教我们——通过它的行为揭示驱动其行为的深层原则。这个领域在学术界被称为逆强化学习。与传统的强化学习“给定奖励求最优策略”相反逆强化学习是“给定专家策略或行为轨迹反推奖励函数”。为什么这件事如此重要因为直接为复杂任务设计一个完美无缺、能涵盖所有边界情况的奖励函数是极其困难甚至不可能的。人类教练往往通过示范来教学而不是列出一长串复杂的奖励条款。逆强化学习让我们能够从专家的示范中自动提取出那个隐晦的、可能连专家自己都无法清晰表述的“奖励标准”。想象一下自动驾驶领域。我们收集了成千上万小时人类司机的驾驶数据。这些数据背后蕴含着人类对“安全”、“舒适”、“高效”、“合规”等一系列复杂、有时甚至相互冲突的偏好的权衡。通过逆强化学习我们可以从这些数据中学习到一个奖励函数这个函数能更贴切地反映人类的综合驾驶偏好从而训练出行为更拟人、更可接受的自动驾驶策略。这远比工程师手动设计一个“距离前车越近扣分越多”这样简单粗暴的奖励函数要强大和细腻得多。在本文中我将以一个实践者的视角深入拆解逆强化学习的核心思想、主流方法特别是与Boltzmann策略紧密相关的概率框架、实现的关键细节以及在实际项目中容易踩到的坑。我们将不止步于理论公式而是聚焦于如何将其转化为可运行的代码和可解释的洞见。2. 核心范式转换从强化学习到逆强化学习要理解逆强化学习我们必须先清晰地回顾其“正问题”——强化学习的基本框架。这有助于我们看清整个逻辑链条是如何被反转的。2.1 强化学习已知世界的规则与目标在一个标准的强化学习设定中我们通常定义一个马尔可夫决策过程。它包含几个关键要素状态智能体所处的环境情况。动作智能体可以采取的行为。状态转移概率在当前状态下采取某个动作后环境转移到下一个状态的概率。这描述了世界的动态。奖励函数这是核心。它是一个函数在智能体于某个状态采取某个动作并到达下一个状态时给予其一个标量奖励。这个函数编码了任务的目标。折扣因子用于权衡近期奖励和远期奖励的重要性。强化学习智能体的目标是学习一个策略这个策略告诉它在每个状态下应该以何种概率选择哪个动作使得长期累积奖励的期望值最大。整个学习过程是围绕一个已知的奖励函数展开的优化。注意在实际中奖励函数的设计是最大的难点之一。设计不当会导致智能体出现“奖励黑客”行为——找到漏洞获得高奖励但行为完全偏离设计者初衷。例如一个旨在让游戏角色生存的智能体可能会学会卡在某个安全角落一动不动因为“移动”可能带来风险从而降低奖励。2.2 逆强化学习从行为反推意图逆强化学习将上述过程倒置。现在我们假设我们观察到一个或多个“专家”智能体的行为轨迹。这些轨迹是一系列状态-动作对序列。我们假设专家的行为在某种意义上是“最优”或“接近最优”的。我们已知或假设MDP的其他部分如状态、动作、状态转移概率。我们不知道奖励函数。逆强化学习的目标是寻找一个奖励函数使得在该奖励函数下专家策略或观察到的专家行为是最优的或者至少比其他大多数策略更优。这里有一个关键问题满足条件的奖励函数通常不是唯一的。例如在所有状态下都给出零奖励的函数会使任何策略包括专家策略的累积奖励都是零从“值”的角度看所有策略都是等价的。这显然不是我们想要的。因此逆强化学习算法通常需要引入一些正则化或先验假设来从无数个可能的解中挑选出一个“简单”、“合理”或“具有解释性”的奖励函数。为什么说这是在“学习智能体的偏好”因为奖励函数直接量化了智能体对不同状态或状态-动作对的“喜好程度”。高的正奖励意味着“渴望达到”高的负奖励意味着“极力避免”。通过反推出奖励函数我们实际上是在解读该智能体决策背后的价值体系。例如在驾驶数据中反推出的奖励函数可能会给“平稳的加速度”较高的正奖励给“急刹车”较高的负奖励这便揭示了该司机对“乘坐舒适性”的强烈偏好。3. 主流方法剖析最大熵逆强化学习与Boltzmann策略在众多逆强化学习方法中最大熵逆强化学习及其变种因其优雅的概率框架和良好的实践效果成为了当前的主流范式。而要理解它必须从Boltzmann策略说起。3.1 Boltzmann策略将奖励转化为概率在强化学习中当我们通过某种方法如Q-learning估计出每个状态-动作对的长期价值后我们需要一个机制将价值转化为具体的动作选择概率。一种常见且理论性质良好的方式就是Boltzmann策略。Boltzmann策略的动作选择概率由以下公式给出$$ \pi(a|s) \frac{\exp(Q(s, a) / \tau)}{\sum_{a \in A} \exp(Q(s, a) / \tau)} $$其中$\pi(a|s)$ 是在状态 $s$ 下选择动作 $a$ 的概率。$Q(s, a)$ 是状态-动作对的价值函数。$\tau 0$ 是一个温度参数。分母是对所有可能动作的指数价值求和即归一化因子。这个公式的直观解释是什么价值导向价值 $Q(s, a)$ 越高的动作被选中的概率越大。这是策略的核心驱动。随机性探索指数函数 $\exp$ 放大了价值差异但温度参数 $\tau$ 控制着放大的程度。温度参数 $\tau$ 的作用当 $\tau \to \infty$ 时所有动作的价值差异被“抹平”$\exp(Q/\tau) \to 1$策略趋近于均匀随机策略完全探索。当 $\tau \to 0^$ 时价值差异被急剧放大最大价值的动作概率趋近于1策略趋近于确定性贪婪策略完全利用。因此$\tau$ 是控制“探索-利用”权衡的关键旋钮。在实际应用中常采用退火策略初期 $\tau$ 较大鼓励探索后期逐渐减小以收敛到最优策略。3.2 最大熵原理解释专家行为的不确定性现在我们回到逆强化学习问题。我们观察到专家的多条轨迹但这些轨迹并非完全一致。同一个状态下专家可能采取了不同的动作。如何解释这种不一致性最大熵原理提供了一个强大的解释框架在满足与专家数据特征期望相匹配的约束条件下我们应该选择那个不确定性最大即熵最大的概率分布来描述专家的策略。为什么因为任何其他满足同样约束的分布都意味着我们引入了没有证据支持的额外假设即更多的“偏见”。最大熵分布是最保守、最公平的假设。将最大熵原理应用于逆强化学习并与Boltzmann策略结合就得到了最大熵逆强化学习的核心思想假设专家的策略服从Boltzmann分布其“能量”由基于奖励函数的长期价值决定。要求在该策略下生成轨迹的某些特征的期望值例如每个状态被访问的频率或者某个特定特征向量的累积值与专家数据中观察到的这些特征的期望值相等。满足上述约束的所有可能策略中我们选择熵最大的那个。这最终会导出一个具体的、参数化的奖励函数形式。算法流程简述初始化随机初始化奖励函数的参数例如线性奖励函数中的权重向量。前向强化学习基于当前的奖励函数在环境中运行强化学习算法例如通过价值迭代或策略梯度计算出当前最优的软策略即Boltzmann策略以及在该策略下智能体的预期行为特征。反向参数更新比较智能体预期行为特征与专家行为特征。如果智能体的特征与专家不符则调整奖励函数参数使得生成符合专家特征的轨迹能获得更高的奖励。这通常通过梯度下降来实现。迭代重复步骤2和3直到智能体的行为特征与专家特征足够接近或者奖励函数参数收敛。这个过程中特征匹配是关键。例如在自动驾驶例子中特征可以是“平均速度”、“平均加速度”、“与前车的最小距离”等。算法会学习一个奖励函数使得在该函数下学到的策略其“平均加速度”等特征的期望值与人类驾驶数据中的期望值一致。4. 实战演练从零实现一个简易的最大熵IRL理论可能有些抽象我们通过一个经典的“网格世界”环境来具体实现。假设有一个网格智能体从起点出发目标是到达终点。专家演示的路径总是倾向于绕过中间的障碍区域。我们的目标是反推出一个奖励函数该函数会给障碍区域负奖励给终点正奖励。4.1 环境与专家数据准备我们首先定义一个简单的5x5网格世界。状态是网格坐标动作是上、下、左、右。终点在(4,4)起点在(0,0)。中间区域[(2,1), (2,2), (2,3)]是障碍。import numpy as np class GridWorld: def __init__(self, size5): self.size size self.start (0, 0) self.goal (4, 4) self.obstacles [(2,1), (2,2), (2,3)] self.actions [(-1,0), (1,0), (0,-1), (0,1)] # 上下左右 self.action_names [Up, Down, Left, Right] self.state self.start def reset(self): self.state self.start return self.state def step(self, action_idx): x, y self.state dx, dy self.actions[action_idx] nx, ny x dx, y dy # 边界检查 if 0 nx self.size and 0 ny self.size: if (nx, ny) not in self.obstacles: self.state (nx, ny) # 奖励到达目标10其他情况-0.1鼓励缩短路径 if self.state self.goal: reward 10.0 done True else: reward -0.1 done False return self.state, reward, done def get_expert_trajectories(self, num_traj10): 生成专家轨迹。专家策略使用一个简单的A*算法或手动定义的偏好避开障碍。 trajectories [] # 这里为了简化我们手动定义一条“好”的路径并加入一些随机性来模拟多条专家轨迹 good_path [(0,0),(1,0),(2,0),(3,0),(3,1),(3,2),(3,3),(4,3),(4,4)] # 绕开障碍的路径 for _ in range(num_traj): traj [] state self.start for next_state in good_path[1:]: # 从起点之后开始 # 找到从当前state到next_state的动作 for a_idx, (dx, dy) in enumerate(self.actions): if (state[0]dx, state[1]dy) next_state: traj.append((state, a_idx)) state next_state break traj.append((state, None)) # 终点动作标记为None trajectories.append(traj) return trajectories4.2 特征设计与奖励函数参数化在最大熵IRL中我们通常不直接学习每个状态的原始奖励而是学习一个线性奖励函数$R(s) \theta^T \phi(s)$。其中 $\phi(s)$ 是状态 $s$ 的特征向量$\theta$ 是我们要学习的权重参数。对于网格世界一个简单的特征设计是“独热编码”每个非终点的状态。例如在一个5x5的网格中除去终点有24个状态。那么 $\phi(s)$ 就是一个24维的向量只有对应状态的那一维是1其余是0。这样学习到的 $\theta$ 的每个分量就代表了对应状态的奖励值。def state_to_features(state, size5, goal(4,4)): 将状态转换为独热特征向量排除终点。 features np.zeros(size*size - 1) # 总状态数减1排除终点 idx state[0] * size state[1] if state ! goal: if idx (goal[0]*size goal[1]): # 如果状态索引在终点之后需要减1 idx - 1 features[idx] 1.0 # 终点状态的特征向量是全零向量 return features4.3 核心算法实现基于梯度下降的最大熵IRL我们实现一个简化版本省略一些复杂的数学推导聚焦于核心迭代过程根据当前奖励函数参数 $\theta$计算所有状态的价值函数 $V(s)$ 和策略 $\pi(a|s)$。这需要解一个软贝尔曼方程。在策略 $\pi$ 下通过大量模拟计算智能体访问每个状态的期望频率状态访问分布。计算专家数据中每个状态被访问的频率。计算梯度梯度等于专家特征期望减去智能体在当前奖励下的特征期望。更新 $\theta$$\theta \leftarrow \theta \alpha * \text{梯度}$。def compute_soft_value_and_policy(theta, env, gamma0.9, temperature1.0, max_iter100): 给定奖励参数theta通过值迭代计算软价值函数和Boltzmann策略。 size env.size num_states size * size num_actions len(env.actions) V np.zeros(num_states) # 价值函数 Q np.zeros((num_states, num_actions)) # 动作价值函数 # 将状态坐标映射到索引 def state_to_idx(s): return s[0]*size s[1] # 计算每个状态的即时奖励 R(s) theta * phi(s) R np.zeros(num_states) for x in range(size): for y in range(size): s (x, y) idx state_to_idx(s) R[idx] np.dot(theta, state_to_features(s, size, env.goal)) # 值迭代 for _ in range(max_iter): for x in range(size): for y in range(size): s (x, y) s_idx state_to_idx(s) if s env.goal: # 终点状态价值为0 V[s_idx] 0 continue # 计算Q值 for a_idx in range(num_actions): # 简化假设确定性转移 dx, dy env.actions[a_idx] ns (xdx, ydy) if 0 ns[0] size and 0 ns[1] size and ns not in env.obstacles: ns_idx state_to_idx(ns) Q[s_idx, a_idx] R[s_idx] gamma * V[ns_idx] else: # 撞墙或障碍留在原地 Q[s_idx, a_idx] R[s_idx] gamma * V[s_idx] # 软贝尔曼更新: V(s) tau * log( sum_a exp(Q(s,a)/tau) ) new_V temperature * np.log(np.sum(np.exp(Q / temperature), axis1)) if np.max(np.abs(new_V - V)) 1e-6: break V new_V # 计算Boltzmann策略 pi(a|s) exp((Q(s,a)-V(s))/temperature) # 注意这里利用了 log-sum-exp 的技巧V(s) tau * log(sum exp(Q/tau)) # 所以 exp((Q-V)/tau) exp(Q/tau) / exp(V/tau) exp(Q/tau) / sum(exp(Q/tau)) policy np.exp((Q - V.reshape(-1,1)) / temperature) policy policy / np.sum(policy, axis1, keepdimsTrue) # 归一化 return V, Q, policy, R def compute_expected_state_visitation(policy, env, start_state, num_episodes1000, max_steps50): 通过蒙特卡洛模拟计算在给定策略下各个状态的期望访问频率。 size env.size num_states size * size visitation_counts np.zeros(num_states) for _ in range(num_episodes): env.reset() state start_state for step in range(max_steps): s_idx state[0]*size state[1] visitation_counts[s_idx] 1 if state env.goal: break # 根据策略选择动作 a_probs policy[s_idx] action np.random.choice(len(env.actions), pa_probs) # 执行动作简化按策略概率转移 dx, dy env.actions[action] next_state (state[0]dx, state[1]dy) if 0 next_state[0] size and 0 next_state[1] size and next_state not in env.obstacles: state next_state # 否则留在原地对应障碍/边界 expected_visitation visitation_counts / (num_episodes * max_steps) # 粗略归一化 return expected_visitation def maxent_irl_simple(expert_trajs, env, feature_map, learning_rate0.1, num_iterations50): 简化的最大熵IRL实现。 num_features feature_map(env.start, env.size, env.goal).shape[0] theta np.random.randn(num_features) * 0.1 # 初始化参数 # 计算专家特征期望 expert_feature_exp np.zeros(num_features) expert_visitation np.zeros(env.size * env.size) for traj in expert_trajs: for state, _ in traj: expert_feature_exp feature_map(state, env.size, env.goal) s_idx state[0]*env.size state[1] expert_visitation[s_idx] 1 expert_feature_exp / len(expert_trajs) # 平均每条轨迹的特征和 expert_visitation / np.sum(expert_visitation) # 归一化为概率分布 print(专家特征期望前10维:, expert_feature_exp[:10]) # 迭代学习 for i in range(num_iterations): # 前向传递计算当前theta下的策略和状态访问分布 _, _, policy, _ compute_soft_value_and_policy(theta, env, temperature1.0) agent_visitation compute_expected_state_visitation(policy, env, env.start, num_episodes500) # 计算智能体特征期望需要将状态访问分布映射到特征空间 agent_feature_exp np.zeros(num_features) for x in range(env.size): for y in range(env.size): s (x, y) s_idx x*env.size y agent_feature_exp agent_visitation[s_idx] * feature_map(s, env.size, env.goal) # 计算梯度并更新 gradient expert_feature_exp - agent_feature_exp theta learning_rate * gradient # 可选打印损失梯度范数 if i % 10 0: loss np.linalg.norm(gradient) print(fIteration {i}, Gradient Norm: {loss:.4f}) # 打印学习到的奖励theta中绝对值最大的几个状态 abs_theta np.abs(theta) top_indices np.argsort(-abs_theta)[:5] print(f Top reward states (index): {top_indices}, values: {theta[top_indices]}) return theta4.4 运行与结果分析# 初始化环境和生成专家数据 env GridWorld(size5) expert_trajs env.get_expert_trajectories(num_traj20) print(f生成了 {len(expert_trajs)} 条专家轨迹每条长度约 {len(expert_trajs[0])}) # 运行逆强化学习 learned_theta maxent_irl_simple(expert_trajs, env, state_to_features, learning_rate0.5, num_iterations100) # 可视化学习到的奖励 def visualize_rewards(theta, env): size env.size reward_map np.zeros((size, size)) for x in range(size): for y in range(size): s (x, y) reward_map[x, y] np.dot(theta, state_to_features(s, size, env.goal)) # 终点奖励我们单独设为一个大正数以便观察 reward_map[env.goal] 10 print(学习到的奖励地图障碍区域期望为负值) print(reward_map) # 可以进一步用matplotlib绘制热图 visualize_rewards(learned_theta, env)运行上述代码后我们期望看到学习到的theta参数中对应障碍物所在状态的权重为较大的负值而通往目标的路径上的状态权重相对较高或负值较小。这验证了算法成功地从专家绕开障碍的行为中反推出了“障碍物是坏的”这一偏好。5. 关键挑战与实战避坑指南在实际项目中应用逆强化学习远比上述玩具示例复杂。以下是几个最常见的挑战和对应的处理经验。5.1 特征工程奖励函数表达能力的瓶颈逆强化学习学到的奖励函数质量极度依赖于特征的设计。糟糕的特征会导致学到的奖励函数无法解释或者无法泛化到未见过的状态。问题在网格世界中我们用独热编码这在高维连续状态空间如自动驾驶的图像输入中完全不可行。解决方案领域知识注入这是最有效的方法。在自动驾驶中我们可以设计“距离车道中心线的偏移”、“与前后车的时距”、“加速度的绝对值”等物理意义明确的特征。这些特征本身已经编码了人类的部分偏好。使用深度神经网络对于图像等原始输入可以用一个深度神经网络作为特征提取器其参数与奖励函数权重一同学习。这就是深度逆强化学习。网络的前几层学习通用的视觉特征最后一层线性层输出标量奖励。核方法使用高斯过程或核函数来定义状态之间的相似性从而在无限维特征空间中学习奖励函数。实操心得不要一开始就追求端到端的深度IRL。先用一小部分数据结合领域知识设计几个核心特征跑通一个线性奖励模型的基线。观察学到的权重是否符合直觉。这能帮你快速验证数据质量和算法流程。符合直觉后再逐步增加特征复杂度或引入神经网络。5.2 计算成本前向强化学习的内循环最大熵IRL算法有一个内循环每次更新奖励函数参数 $\theta$都需要重新计算在当前奖励下的最优软策略即运行一次前向RL。这非常耗时。问题在复杂环境中每次迭代都运行一次完整的强化学习如训练一个深度Q网络是不现实的。解决方案使用高效的规划器对于状态空间不大的问题可以使用值迭代、策略迭代等动态规划方法它们比基于采样的RL快得多。策略缓存与热启动不要每次从头开始训练RL。可以将上一次迭代得到的策略作为下一次RL训练的初始策略大幅减少收敛所需的步数。采用近似方法如生成对抗模仿学习它通过一个判别器来区分专家轨迹和智能体轨迹从而绕过显式进行前向RL的过程直接优化策略。GAIL在很多复杂任务上比传统IRL更高效。利用采样不需要精确计算整个状态空间的价值函数可以通过从当前策略中采样有限条轨迹来近似计算特征期望。5.3 次优专家与多模态行为我们之前的假设是专家行为是最优的。但现实数据往往包含噪声、错误或仅仅是“足够好”的行为。问题如果专家数据质量不高IRL可能会学习到一个扭曲的奖励函数它试图解释专家的所有次优行为。解决方案最大熵框架的鲁棒性最大熵IRL本身对轻微的次优性有一定容忍度因为它建模的是概率分布而非绝对最优。主动筛选数据在训练前对专家轨迹进行清洗和筛选剔除明显错误或异常的数据段。引入“最优性”变量在模型层面可以为每条轨迹引入一个隐变量表示该轨迹的最优程度。或者采用最大边际方法要求学到的奖励函数使得专家轨迹的累积奖励至少比其它轨迹高出一个边际值。处理多模态行为有时专家在不同情境下会采取截然不同的最优行为如路口左转或直行。简单的单一奖励函数无法解释。可以引入混合模型假设存在多个“子奖励函数”每条轨迹由其中一个生成。5.4 奖励函数的歧义性与正则化如前所述逆强化学习问题本身是病态的存在无数解。我们需要正则化来挑选一个合理的解。问题学到的奖励函数可能非常“奇怪”比如在某些无关紧要的状态上赋予极高的正负奖励虽然能解释数据但毫无泛化能力。解决方案L2正则化在损失函数中加入 $|\theta|_2^2$ 项惩罚大的权重鼓励奖励函数平滑、简单。稀疏性正则化使用L1正则化鼓励 $\theta$ 中许多分量为零即奖励函数只依赖于少数关键特征。这能提高可解释性。先验知识如果我们知道某些状态如安全状态的奖励应该大致在某个范围可以将这种先验作为贝叶斯框架下的先验分布。在我参与的一个机械臂抓取项目中我们最初没有加正则化学到的奖励函数给一些无关的关节角度赋予了极高的权重。加入L2正则化后奖励函数变得平滑主要关注末端执行器与目标物体的距离和姿态泛化到新物体上的成功率显著提升。6. 超越模仿IRL在可解释性与安全中的应用逆强化学习的价值远不止于模仿。它最大的潜力在于为黑盒的智能体决策系统提供可解释性并助力安全验证。6.1 可解释性打开决策黑箱当一个深度强化学习模型在某个任务上表现优异时我们往往很难理解它“为什么”这么做。通过对其行为应用IRL我们可以反推出一个近似奖励函数。这个奖励函数是人类可以解读的。案例一个玩《星际争霸2》的AI取得了超人类水平。通过IRL分析其大量对局我们可能发现其学到的奖励函数中“控制关键资源点”的权重远高于“单位数量”。这揭示了该AI的制胜策略是资源压制而非人海战术。这种洞见对于人类玩家和AI设计者都极具价值。方法收集AI智能体在多种场景下的决策轨迹使用深度逆强化学习进行训练。然后分析学到的奖励网络对输入状态的敏感度或者将线性奖励函数的权重进行排序和可视化。6.2 安全对齐与异常检测我们可以利用IRL来检测一个智能体的行为是否与预设的安全准则或人类价值观对齐。安全准则编码我们可以将一些安全规则如“不得碰撞”编码为一个“安全奖励函数” $R_{safe}$。从行为反推从智能体的实际运行数据中通过IRL学习一个“实际奖励函数” $R_{learned}$。对比分析比较 $R_{safe}$ 和 $R_{learned}$。如果发现 $R_{learned}$ 中某些危险行为如近距离超车获得了较高的正权重而 $R_{safe}$ 中其为负这就发出了对齐警报。表明智能体可能为了追求效率等目标发展出了违背安全准则的内在偏好。异常检测在系统运行中持续用IRL在线学习短期内的奖励函数。如果学到的奖励函数突然发生剧烈变化可能意味着智能体正在采取异常或危险的策略可以触发人工干预。这个方向目前是AI安全研究的前沿。它要求IRL算法足够高效以进行在线学习并且学到的奖励函数要足够稳定和可解释。在实际部署中我们通常不会完全依赖学到的奖励函数做决策而是将其作为一个重要的诊断工具和监控指标。从模仿专家的行为到解读智能体的内心偏好再到确保其与我们的价值观对齐逆强化学习搭建了一座连接行为与意图的桥梁。它迫使我们去思考我们真正希望机器学会的是那一连串的动作还是动作背后所代表的那个关于“好”与“坏”的标准通过让机器告诉我们它的“偏好”我们或许能更好地理解自己设定的目标并最终创造出更安全、更可靠、更值得信赖的智能体。