
企业级业务场景下,对问题的回答准确率有更高的要求,不仅要求结果准确,更看重思考和行动过程准确,需要符合企业实际的业务逻辑。因此,相比ORM,PRM更符合企业级场景对过程正确的高要求。
首先是思维过程准确,基于用户问题,AI需要给出准确的思考过程。比如用户询问“上周华东大区的销售额是多少”,正确的思考过程应该是:
第一步,确定上周的日期范围;
第二步,确定华东大区的系统ID;
第三步,确定销售额字段为Sales,且位于具体的某个宽表;
第四步,组装成完整的SQL语句
第二是行动过程准确,基于思考过程,AI需要采取对应的行动。在企业级场景中,AI更常见的行动不是对话,而是进行数据查询或者进行API调用。比如,以上述思考过程为例,AI应该采取行动,生成SQP查询语句。
SELECT
sale_date, SUM(quantity) AS total_sales
FROM
sales
WHERE
-- 筛选出上周的记录
YEAR(sale_date) = YEAR(CURDATE() - INTERVAL 1 WEEK)
AND WEEK(sale_date) = WEEK(CURDATE() - INTERVAL 1 WEEK)
GROUP BY
sale_date
ORDER BY
sale_date;
如果思维过程和行动过程都准确,那么自然会得到正确的业务结果。
3. PRM的实现流程
下面,我们以客服问答场景为例,简单介绍PRM的实现过程。
1. 任务分解与奖励定义
我们可以将客服对话系统简单地分解为【理解意图】、【检索知识】、【生成回答】这三个环节,分别定义每个环节的奖励信号和奖励规则。
理解意图:奖励信号是意图分类的准确性,通过对比预测意图与实际意图标签,正确+0.3分,错误-0.1分。
知识检索:奖励信号是检索结果的相关性,可以基于BM25或向量相似度进行计算,强相关性得1分,无相关性得0分。
回答生成:通过判断回答的流畅性、信息完整性和友好度进行判断,可构建专门的打分模型进行评估。比如训练一个二分类模型,输入对话历史(如最近 3 轮对话),预测用户是否会给出好评
同时,为每个环节设置权重,假设意图理解为0.3,知识检索为0.5,回答生成为0.2。示例代码如下:
import torch
from transformers import BertTokenizer, BertModel
class DialogueRewardModel(torch.nn.Module):
def __init__(self):
super().__init__()
self.bert = BertModel.from_pretrained("bert-base-uncased")
self.intent_head = torch.nn.Linear(768, 3) # 3种意图
self.retrieval_score = torch.nn.Linear(768, 1)
self.fluency_head = torch.nn.Linear(768, 1)
def forward(self, user_query, bot_response, retrieved_doc):
# 编码用户输入
query_embed = self.bert(**user_query).last_hidden_state.mean(dim=1)
# 阶段1:意图理解奖励
intent_logits = self.intent_head(query_embed)
intent_reward = torch.nn.functional.cross_entropy(intent_logits, true_intent_label)
# 阶段2:检索奖励
doc_embed = self.bert(**retrieved_doc).last_hidden_state.mean(dim=1)
retrieval_sim = torch.cosine_similarity(query_embed, doc_embed, dim=1)
# 阶段3:生成奖励
response_embed = self.bert(**bot_response).last_hidden_state.mean(dim=1)
fluency_score = self.fluency_head(response_embed)
# 综合奖励
total_reward = 0.3 * (intent_reward) + 0.5 * retrieval_sim + 0.2 * fluency_score
return total_reward
2. 准备训练数据
可以使用历史客服对话数据构建轨迹数据集

S代表状态空间,包括了当前用户问题、对话历史、用户情绪得分;A代表动作空间,包括了生成回答的文本或者调用知识库API的决策;R代表奖励,表示在第n个状态下,AI采取行动an所获得的奖励。
3. 进行强化学习
将PRM集成到强化学习框架中,比如PPO,替代环境提供的原始奖励,如以下代码所示:
# 基于 Hugging Face Transformers 的对话策略
from transformers import GPT2LMHeadModel, GPT2Tokenizer
import torch
class DialoguePolicy:
def __init__(self):
self.tokenizer = GPT2Tokenizer.from_pretrained("gpt2-medium")
self.model = GPT2LMHeadModel.from_pretrained("gpt2-medium")
def generate_response(self, state):
input_text = f"User: {state['user_query']}nBot:"
inputs = self.tokenizer(input_text, return_tensors="pt")
outputs = self.model.generate(**inputs, max_length=100)
response = self.tokenizer.decode(outputs[0], skip_special_tokens=True)
return response.split("Bot:")[-1].strip()
# 训练循环(PPO 框架)
def train_ppo(policy, reward_model, epochs=10):
optimizer = torch.optim.Adam(policy.parameters(), lr=1e-5)
for epoch in range(epochs):
state = env.reset() # 假设 env 为模拟对话环境
for t in range(max_steps):
action = policy.generate_response(state)
next_state, done = env.step(action)
reward = get_reward(state, action)
# PPO 更新逻辑(简化)
advantage = calculate_advantage(reward, policy, next_state)
loss = -torch.mean(advantage)
optimizer.zero_grad()
loss.backward()
optimizer.step()

第一步,查询1楼的供水管温度传感器;
第二步,查询该供水管温度传感器的数值;
第三步,查询1楼的回水管温度传感器;
第四步,查询该回水管温度传感器的数值;
第五步,计算两个数值的差
MATCH(r:Sensor) WHERE r.Name =~ ‘.*1F.*' AND r.type =~ ‘.*供水管温度传感器.*' RETURN r

更多精彩文章:
大佬们都在关注的AI Agent,到底是什么?用5W1H分析框架拆解AI Agent(上篇)

风叔,AI大模型领域创业者,前腾讯产品总监,十多年产品设计和商业化经验,对电商、营销、AI和大数据产品具备丰富的实战经验。风叔将坚持输出自己的总结和思考,希望对你有帮助。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END