% ============================================================
\section{Module C：RL自适应干预策略}
\label{sec:moduleC}
% ============================================================

\subsection{问题建模}

将干预动作选择建模为马尔可夫决策过程（MDP）。
给定当前时刻$t$的检测结果$D_t$和上下文信息，
策略$\pi$输出干预动作$a_t$：

\begin{equation}
    a_t = \pi(s_t),\quad s_t = f(D_t,\ e_{H_\text{pool}},\ e_{P_\text{pool}},\ t_\text{norm})
\end{equation}

\subsubsection{动作空间}

干预动作集合$\mathcal{A} = \{\text{PASS, WARN, REWRITE, REJECT, CRISIS}\}$定义如下：

\begin{itemize}
    \item \textbf{PASS}：放行，无干预（适用于安全内容）
    \item \textbf{WARN}：向用户发送温和提示（适用于轻微不当）
    \item \textbf{REWRITE}：改写AI回复，去除风险内容（适用于中高风险）
    \item \textbf{REJECT}：拒绝当前回复，请求重新生成（适用于不可改写的高危内容）
    \item \textbf{CRISIS}：危机引导，强制插入心理援助资源与现实求助信息（适用于R1危机场景）
\end{itemize}

这五类动作覆盖了平台实际运营中的完整干预响应谱，
代价和效益差异巨大——PASS最小侵入，CRISIS最强干预。

\subsubsection{状态空间}

状态向量$s_t \in \mathbb{R}^{2065}$由以下分量拼接而成：

\begin{equation}
    s_t = [d_\text{score}(1)\ |\ l^\text{det}_\text{onehot}(5)\ |\ c_\text{primary\_probs}(10)\ |\ e_{H_\text{pool}}(1024)\ |\ e_{P_\text{pool}}(1024)\ |\ t_\text{norm}(1)]
\end{equation}

其中$d_\text{score}$为检测器输出的风险概率，
$l^\text{det}_\text{onehot}$为检测器预测的风险等级（one-hot编码，使用检测器预测值而非真值），
$c_\text{primary\_probs}$为10类一级风险的Softmax概率，
$e_{H_\text{pool}},e_{P_\text{pool}}$为对话历史和角色设定的MacBERT池化嵌入，
$t_\text{norm}$为归一化当前轮次。

注意：状态向量严格使用检测器的\textit{预测值}，
而非ground truth标注，以确保训练条件与部署条件的一致性。

\subsection{奖励函数设计}

奖励函数$r(s_t, a_t)$包含以下多目标分量：

\begin{equation}
r = w_1 \cdot r_\text{safety} - w_2 \cdot r_\text{fneg} + w_3 \cdot r_\text{crisis} - w_4 \cdot r_\text{over} - w_5 \cdot r_\text{ux}
\end{equation}

\begin{itemize}
    \item $r_\text{safety}$：安全收益，对高风险内容采取适当干预时给正奖励（$w_1=2.0$）
    \item $r_\text{fneg}$：漏检惩罚，L3/L4样本被PASS时给强惩罚（$w_2=3.0$）
    \item $r_\text{crisis}$：危机引导奖励，R1危机场景触发CRISIS时额外奖励（$w_3=4.0$）
    \item $r_\text{over}$：过拒惩罚，安全内容被REWRITE及以上干预时给惩罚（$w_4=1.5$）
    \item $r_\text{ux}$：体验代价，强干预动作的用户体验损耗（$w_5=0.5$）
\end{itemize}

该多目标奖励显式建模了"安全保障"与"用户体验"之间的权衡，
避免策略退化为激进拒绝（所有内容REJECT）或消极放行（所有内容PASS）。

\subsection{策略网络}

Actor-Critic网络以状态向量$s_t \in \mathbb{R}^{2065}$为输入：

\begin{equation}
    \text{StateEncoder}:\ \mathbb{R}^{2065} \to \mathbb{R}^{256}
    \quad \text{（2层MLP + LayerNorm + GELU）}
\end{equation}

Actor头和Critic头均以256维隐表示为输入，
分别输出5类动作的logits和状态价值估计。

\subsection{两阶段训练}

\subsubsection{阶段一：行为克隆预热（BC）}

以数据集中的推荐动作$a_\text{recommend}$为监督信号，
对策略网络进行5轮行为克隆预训练（$\text{lr}=10^{-3}$，批大小256）。
BC阶段使模型快速学习符合标注规律的基本干预模式，
避免PPO从随机策略开始探索时的低效问题。

\subsubsection{阶段二：PPO强化学习优化}

在BC预热的基础上，使用PPO算法\cite{schulman2017ppo}
在CompanionRisk-Bench训练集上进行离线RL优化：

\begin{table}[ht]
\centering
\caption{Module C PPO训练配置}
\label{tab:moduleC_train}
\begin{tabular}{ll}
\toprule
配置项 & 值 \\
\midrule
总交互步数 & 200,000步 \\
每次rollout步数 & 2,048 \\
PPO更新轮次 & 4 \\
批大小 & 256 \\
学习率 & $3 \times 10^{-4}$ \\
裁剪系数$\epsilon$ & 0.2 \\
熵系数 & 0.01 \\
折扣因子$\gamma$ & 0.99 \\
GAE $\lambda$ & 0.95 \\
GPU & 1 $\times$ RTX 5090（单卡）\\
\bottomrule
\end{tabular}
\end{table}

注意：PPO阶段强制使用单卡，避免RTX 5090上
\texttt{torch.distributed.barrier()}引发的CUDA内存访问异常。

\subsection{实验结果}

\subsubsection{主要结果}

\todo{本节待填入Module C v5结果。下表中v3数字仅供参考，v5完成后替换。}

表\ref{tab:moduleC_main}对比了Module C与两个基线策略：
Rule-based（l\_risk$\geq3$即REJECT，其余PASS）
和Threshold Baseline（按风险分数设定各动作阈值）。

\begin{table}[ht]
\centering
\caption{Module C干预策略对比（测试集，$n=1,486$）}
\label{tab:moduleC_main}
\begin{tabular}{lccccc}
\toprule
方法 & SafetyRecall & OverRefusal & ActionAcc & CrisisPrecision & UX Fscore \\
\midrule
Rule-based & 0.908 & 0.000 & — & — & 0.952 \\
Threshold & 0.908 & 0.000 & — & 0.624 & 0.952 \\
LLM-as-judge & \todo{} & \todo{} & \todo{} & \todo{} & \todo{} \\
\midrule
\textbf{Ours（RL v5）} & \todo{} & \todo{} & \todo{} & \todo{} & \todo{} \\
（参考：RL v3） & 1.000 & 0.004 & 0.575 & 0.421 & 0.998 \\
\bottomrule
\end{tabular}
\end{table}

\subsubsection{各风险等级动作分布}

表\ref{tab:per_level_action}展示三种方法在各风险等级上的动作分布，
直观体现了RL策略的细粒度判断能力。

\begin{table}[ht]
\centering
\caption{各风险等级动作分布（测试集，v3结果，v5待替换）}
\label{tab:per_level_action}
\resizebox{\textwidth}{!}{%
\begin{tabular}{llrrrrrr}
\toprule
方法 & 等级 & $n$ & PASS & WARN & REWRITE & REJECT & CRISIS \\
\midrule
\multirow{5}{*}{Rule-based}
& L0 Safe & 237 & 1.000 & 0.000 & 0.000 & 0.000 & 0.000 \\
& L1 Mild & 280 & 0.918 & 0.000 & 0.000 & 0.082 & 0.000 \\
& L2 Moderate & 317 & 0.420 & 0.000 & 0.000 & 0.580 & 0.000 \\
& L3 High & 456 & 0.114 & 0.000 & 0.000 & 0.886 & 0.000 \\
& L4 Critical & 196 & 0.041 & 0.000 & 0.000 & 0.959 & 0.000 \\
\midrule
\multirow{5}{*}{Threshold}
& L0 Safe & 237 & 1.000 & 0.000 & 0.000 & 0.000 & 0.000 \\
& L1 Mild & 280 & 0.843 & 0.075 & 0.082 & 0.000 & 0.000 \\
& L2 Moderate & 317 & 0.044 & 0.375 & 0.552 & 0.000 & 0.028 \\
& L3 High & 456 & 0.009 & 0.105 & 0.739 & 0.000 & 0.147 \\
& L4 Critical & 196 & 0.000 & 0.041 & 0.316 & 0.000 & 0.643 \\
\midrule
\multirow{5}{*}{\textbf{Ours（RL v3参考）}}
& L0 Safe & 237 & 0.987 & 0.008 & 0.004 & 0.000 & 0.000 \\
& L1 Mild & 280 & 0.729 & 0.011 & 0.229 & 0.000 & 0.032 \\
& L2 Moderate & 317 & 0.000 & 0.000 & 0.902 & 0.000 & 0.098 \\
& L3 High & 456 & 0.000 & 0.000 & 0.871 & 0.000 & 0.129 \\
& L4 Critical & 196 & 0.000 & 0.000 & 0.633 & 0.000 & 0.367 \\
\bottomrule
\end{tabular}
}
\end{table}

RL策略的核心优势在于：
（1）L2-L3层级主要选择REWRITE（改写）而非简单REJECT，
平衡了安全性与用户体验；
（2）L3/L4样本的PASS率为0.0\%，安全召回率达1.0，
而规则基线由于检测器等级预测误差（level\_weighted\_f1=0.559）
导致9.2\%的高危样本被错误放行。

\subsubsection{消融实验}

\todo{消融实验待补充（BC-only / w/o category-specific reward / v5完成后）}
