借助GRPO提升多轮对话能力

借助GRPO提升多轮对话能力

作者:Mouse

原文:https://zhuanlan.zhihu.com/p/1889629318340146872

在上一篇文章个性训练-借助GRPO塑造一个有个性且智商在线的大模型中提到了之前面临的一些问题,其中最主要的问题就是多轮对话的问题,由于现在主流的grpo训练都只支持单轮对话,所以训练出来的模型多轮对话效果很不理想,再经过了快一个月的探索和实验之后终于是得到了解决(至少有很大的提升),下面直接开始说。

引言

这次的灵感来源于一直以来对于目前推理模型的疑问,为了节省上下文,目前的推理模型都是将之前对话中的think内容删掉,也就是说之前的思考并不会影响当前的思考,那假如面临需要planing的场景呢,比如当前很流行的deep research,或者claude-pokemon,需要提前思考规划,必须保留之前的think,而且多次的think之间肯定是有联系的,所以我猜测目前的推理模型无法很好的解决多次思考的场景,为了验证这个猜想,我改编了deductive-reasoning Public这个数据集。下面是一条数据示例:

社区活动中心的公益募捐箱在昨晚被盗,失窃金额约500元。作为中心负责人,你需要在下周社区委员会会议前查明真相。当天晚上只有两位志愿者留在中心加班:

• 罗阿姨
• 高教练

现场发现了两件可疑物品:

• 一瓶安眠药
• 一把扳手

根据监控记录,募捐箱只可能在以下两个房间被盗:

1. 活动室
2. 休息室

房间布局如下:

  北  
西 1 东
西 2 东
  南  

每位嫌疑人都有一个可能的作案动机:

• 贪婪
• 虚荣

要想成功偷走募捐箱,嫌疑人必须单独在某个房间,且至少有一件工具协助作案。

请回答以下问题:

A. 谁偷走了募捐箱?
B. 募捐箱是在哪个房间被盗的?
C. 偷窃者的动机是什么?
D. 安眠药在哪个房间?
E. 动机是贪婪的嫌疑人在哪个房间?
F. 扳手在哪个房间?
G. 干扰线索1序号?
H. 干扰线索2序号?

# 线索:

[
1. 社区微信群聊天记录显示,高教练曾发言:"我只是想得到大家的认可,从来不在乎钱。"[线索]
2. 活动中心保洁阿姨说:"我昨天下班时看到罗阿姨在翻找药箱,说是头疼要找止痛药。"[干扰]
3. 你在查看监控时发现,安眠药要么在活动室,要么是高教练去过活动室。[线索]
4. 社区居民王大爷反映:"最近活动中心的设施维修得不错,特别是那些需要用扳手的地方。"[干扰]
5. 监控显示扳手在高教练所在房间的正南方的房间里。[线索]
6. 募捐箱是被扳手撬开的,上面留有明显的撬痕。[线索]
]

# 答案:
A. 罗阿姨
B. 休息室
C. 贪婪
D. 活动室
E. 休息室
F. 休息室
G. 2
H. 4

有趣的事情出现了,如果一次性将所有线索给推理模型(deepseekr1,qwq,grok-think,gemini2.0-think),所有模型都能很简单的推理出正确答案,比如下面deepseek-v3(甚至不需要think模型):

图片

deepseek-v3-3024

但如果我跟它说我要一条一条给线索,首先deepseek-r1:

图片

deepseek-r1

是的,我都还没给线索,她就直接开始推理出结果了,那假如换deepseek-v3呢:

图片

deepseek-v3-3024

明显错的很离谱了。

问题梳理

  1. 目前的推理模型或者对话模型在长期的逻辑一致性不是很好(我的测试中只有claude在这样多次推理中准确率比较高,但依旧比起直接给完线索下降很多)

  2. 目前没有可以训练多轮推理的框架

  3. 如果能实现这样的长期逻辑一致性,说不定能提高多轮对话的能力,因为这本质上也是多轮对话交互

实验

  1. 训练框架:改了ms-swift的grpo_trainer(不过他们现在的版本也支持了,但还在持续完善中,目前我也直接用的他们的trainer了),当时等不及了,就自己写了一个grpo-多轮工具调用。

  2. 模型和参数:在之前的个性模型上基于grpo,lora训练

  3. 训练方案设计:

利用工具调用让模型自己学会获取线索

system prompt:

系统环境:
无
系统工具:
<tools>
<tool name="get_thread">
  <return type="string"/>
  <desc>提取一条提示信息,可能是有用线索或干扰内容,示例:<tool>{"name":"get_thread"}</tool></desc>
</tool>
</tools>

user prompt:

$谜题

注意:请使用工具来获取线索,一次只能获取一条线索,可能是干扰信息,也可能是线索。最终结果输出到\box,比如::\box{{"A": "小红", "B": "讲台", "C": "高兴", "D": "晚上11:45", "E": "讲台", "F": "教室", "G": "3", "H": "7"}}

规则:

1.模型不知道还有多少线索可用以及接下来的线索是什么
2.模型可以提前作答
3.如果线索给完还没推理出正确答案则判定为失败,迫使模型必须根据现有线索分析判断,而不是等到最后给完一起判断(比如后续全部都是干扰线索的情况)。
4.答对一个小选项就获得0.2分,格式完全正确0.2分。
  1. 实际操作:

由于算力问题(上下文太长了,显存不够),我没有给模型多次作答的机会,比如模型回答错了,但线索还没给完,本来应该是鼓励模型继续输出get_thread来获取线索,但我就没有继续了(一个遗憾)

实验结果:

图片

train reward

图片

test reward

因为训了3个epoch,证明其实一个epoch就够了。

最终效果:

<cot>
这个案子看起来很有趣。社区活动中心的募捐箱被盗,金额约500元,两名嫌疑人:罗阿姨和高教练。两件可疑物品:安眠药和扳手。两个可能的作案地点:活动室(1)和休息室(2)。

每个人都有一个可能的作案动机:贪婪或虚荣。

要想成功偷走募捐箱,嫌疑人必须单独在某个房间,并且至少有一件工具协助作案。

我需要收集更多线索来确定谁是罪犯。让我先获取第一条线索。
</cot>

我需要调查这起募捐箱盗窃案。根据目前的信息,只有两位嫌疑人和两件可疑物品。我想先了解更多信息来缩小范围。

<tool>{"name":"get_thread"}</tool>

<tool_call_response><result id=0>1. 社区微信群聊天记录显示,高教练曾发言:"我只是想得到大家的认可,从来不在乎钱。"</result></tool_call_response>

<cot>
这条信息很有价值!高教练说他不在乎钱,只在乎认可。这意味着他的动机很可能是虚荣,而不是贪婪。

这给了我们一个重要的线索:
- 高教练的动机很可能是虚荣

现在我知道高教练的动机后,可以排除一些可能性。但还是需要更多信息来确定谁是罪犯、在哪个房间作案以及使用的工具。

让我继续获取更多线索。
</cot>

有趣,微信群里有高教练的一条发言。他说自己不在乎钱,只在乎大家的认可。这确实暗示他的动机可能是虚荣,而不是贪婪。

不过这只是一个人的观点,我还是需要更多的证据来确认这一点。让我继续收集更多信息。

<tool>{"name":"get_thread"}</tool>

<tool_call_response><result id=0>2. 活动中心保洁阿姨说:"我昨天下班时看到罗阿姨在翻找药箱,说是头疼要找止痛药。"</result></tool_call_response>

<cot>
这条信息很有意思!罗阿姨被目击到在翻找药箱,说是头疼要找止痛药。这可能与安眠药有关联,因为安眠药通常用于睡眠,但也可能是一种止痛药。

这给了我们另一个重要线索:
- 罗阿姨可能接触过安眠药
- 她说自己头疼,可能与安眠药有关

但我还不知道安眠药在哪个房间,也不知道扳手的位置。这些信息对于确定谁是罪犯、在哪里作案以及使用了什么工具都是关键。

让我继续获取更多线索。
</cot>

保洁阿姨提到罗阿姨在翻找药箱,声称头疼要找止痛药。这确实与安眠药有某种关联,可能是罗阿姨对安眠药有所接触。

不过这只是目击证词,不能完全确定她就是罪犯。我需要更多关于时间线和地点的信息来确定谁有机会实施盗窃。

让我继续深入调查。

<tool>{"name":"get_thread"}</tool>

<tool_call_response><result id=0>3. 你在查看监控时发现,安眠药要么在活动室,要么是高教练去过活动室。</result></tool_call_response>

<cot>
这条线索非常关键!安眠药要么在活动室,要么高教练去过活动室。

如果安眠药在活动室,那么高教练可能去过那里。但这并不一定意味着他偷了募捐箱,只是可能在那里。

另一种情况是,高教练去过活动室,但不一定是因为安眠药在那里。他可能去别的地方了。

无论如何,这两条线索开始形成一个模式:
1. 高教练的动机是虚荣(从第一条线索推断)
2. 罗阿姨可能接触过安眠药(第二条线索)
3. 安眠药要么在活动室,要么高教练去过活动室(第三条线索)

我还需要更多线索来确定谁是罪犯、在哪个房间作案以及使用的工具。特别是关于扳手的位置和罗阿姨的确切行踪。
</cot>

监控显示安眠药要么在活动室,要么高教练去过活动室。这两条线索开始形成有趣的组合。

我们知道高教练的动机可能是虚荣,而罗阿姨可能接触过安眠药。这些线索正在逐渐拼凑出一幅画面,但还远远不够确定谁是真正的罪犯。

我需要更多信息来完善这个拼图。

<tool>{"name":"get_thread"}</tool>

<tool_call_response><result id=0>4. 社区居民王大爷反映:"最近活动中心的设施维修得不错,特别是那些需要用扳手的地方。"</result></tool_call_response>

<cot>
这条信息似乎与案件关系不大。它只是提到社区中心的设施维修,特别是那些需要用扳手的地方。这可能暗示扳手是一个常用的工具,但没有直接指向任何嫌疑人或作案地点。

目前我已经有了不少线索,但我感觉有些线索可能是干扰项。让我整理一下已有的信息:

1. 高教练的动机很可能是虚荣(他在群里说不在乎钱,只在乎认可)
2. 罗阿姨可能接触过安眠药(保洁阿姨看到她在找止痛药)
3. 安眠药要么在活动室,要么高教练去过活动室

这些线索已经足够让我尝试做出初步判断了。我认为我已经收集了足够的线索,可以尝试回答一些问题。

基于现有线索,我觉得高教练可能是罪犯:
- 他的动机是虚荣,而贪婪通常是金钱相关的动机
- 罗阿姨可能接触过安眠药,这可能是个干扰线索
- 关于扳手的信息不足以确定它的位置,但应该不影响判断

所以我猜测:
A. 高教练偷走了募捐箱
B. 募捐箱是在活动室被盗的
C. 偷窃者的动机是虚荣
D. 安眠药在活动室
E. 动机是贪婪的嫌疑人在休息室
F. 扳手在休息室

但等等,我之前的假设可能有问题。如果高教练的动机是虚荣,那罗阿姨的动机应该是贪婪。如果高教练去过活动室,那罗阿姨可能去过休息室。

让我重新思考一下:
- 高教练不去活动室,而是去休息室
- 罗阿姨不去休息室,而是去活动室

这样更合理。高教练在休息室偷走了募捐箱,而罗阿姨在活动室寻找止痛药。

所以修正后的答案:
A. 罗阿姨偷走了募捐箱
B. 募捐箱是在休息室被盗的
C. 偷窃者的动机是贪婪
D. 安眠药在活动室
E. 动机是贪婪的嫌疑人在休息室
F. 扳手在休息室

但我还不知道干扰线索的具体编号。我会先给出答案,然后继续收集线索验证。
</cot>

社区居民王大爷的话似乎与我们的调查方向不太一致。不过我可以理解这是社区日常的一部分。

通过分析现有线索,我发现了一些有趣的模式。高教练明确表示不在乎钱,只在乎认可,这强烈暗示他的动机不是贪婪,而是虚荣。

罗阿姨被目击到在寻找止痛药,这与安眠药有潜在联系。而监控信息表明安眠药要么在活动室,要么高教练去过活动室。

结合这些线索,我认为罗阿姨更有可能是罪犯。她的行为(寻找止痛药)可能掩盖了真实目的,而高教练虽然动机不同,但更有可能在休息室实施了盗窃。

\box{{"A":"罗阿姨","B":"休息室","C":"贪婪","D":"活动室","E":"休息室","F":"休息室","G":"2","H":"4"}}

/aha moment,由于之前的训练设定,模型不知道是否还有线索,所以需要提前推理,但给它猜对了,但假如我继续给完线索

<tool_call_response><result id=0>5. 监控显示扳手在高教练所在房间的正南方的房间里。</result></tool_call_response>

<cot>
这条线索非常关键!监控显示扳手在高教练所在房间的正南方的房间里。

根据地图布局:


西 1 东 西 2 东 南

其中:
1是活动室
2是休息室

如果扳手在高教练所在房间的正南方,那么:
- 如果高教练在活动室(1),那么扳手在休息室(2)
- 如果高教练在休息室(2),那么扳手不在这里(因为休息室没有南边的房间)

但我们已经知道高教练的动机是虚荣,罗阿姨的动机是贪婪。高教练不去活动室,而是去休息室。所以扳手应该在休息室。

现在我可以更新我的答案:
A. 罗阿姨偷走了募捐箱
B. 募捐箱是在休息室被盗的
C. 偷窃者的动机是贪婪
D. 安眠药在活动室
E. 动机是贪婪的嫌疑人在休息室(罗阿姨在休息室)
F. 扳手在休息室
G. 干扰线索1序号?应该是2,因为罗阿姨翻找药箱的信息无关紧要
H. 干扰线索2序号?应该是4,关于设施维修的信息无关紧要

但我之前说罗阿姨在活动室寻找止痛药,实际上她在休息室寻找止痛药,这是个错误的推测。不过这不改变最终结论。

所有线索都一致指向罗阿姨是罪犯,在休息室用扳手实施了盗窃,动机是贪婪。
</cot>

这条线索非常关键!监控显示扳手在高教练所在房间的正南方的房间里。

根据地图布局,休息室(2)在活动室(1)的正南方。所以如果高教练在活动室,扳手就在休息室;如果高教练在休息室,扳手就不在这个区域(因为没有更南的房间)。

但我们已经确定高教练的动机是虚荣,而罗阿姨的动机是贪婪。根据逻辑,高教练应该在休息室,而罗阿姨应该在活动室寻找止痛药。

现在我可以确认:
- 高教练在休息室
- 扳手在休息室
- 罗阿姨在休息室寻找止痛药(实际上她可能只是假装找止痛药)

所有线索都指向同一个结论:罗阿姨是罪犯,在休息室用扳手实施了盗窃,动机是贪婪。

\box{{"A":"罗阿姨","B":"休息室","C":"贪婪","D":"活动室","E":"休息室","F":"休息室","G":"2","H":"4"}}


<tool_call_response><result id=0>6. 募捐箱是被扳手撬开的,上面留有明显的撬痕。(线索给完)</result></tool_call_response>

<cot>
最后一条线索完美证实了我的推理!募捐箱是被扳手撬开的,上面留有明显的撬痕。

这进一步证明了我的所有答案是正确的:
A. 罗阿姨偷走了募捐箱
B. 募捐箱是在休息室被盗的
C. 偷窃者的动机是贪婪
D. 安眠药在活动室
E. 动机是贪婪的嫌疑人在休息室(罗阿姨在休息室)
F. 扳手在休息室
G. 干扰线索1序号是2(罗阿姨翻找药箱的信息)
H. 干扰线索2序号是4(设施维修的信息)

所有的线索都一致指向同一个故事:罗阿姨利用贪婪的动机,在休息室使用扳手撬开了募捐箱,然后取走了里面的500元。
</cot>

最后一块拼图到位了!监控显示募捐箱确实是被扳手撬开的,上面有明显的撬痕。

这完全符合我的推理:罗阿姨作为贪婪的人,在休息室找到了扳手,并用它撬开了募捐箱,取走了里面的500元。

所有线索都完美吻合,现在我可以确定:

\box{{"A":"罗阿姨","B":"休息室","C":"贪婪","D":"活动室","E":"休息室","F":"休息室","G":"2","H":"4"}}
推理的效果,还是让我比较的满意!!

总结和展望

  1. grpo多轮工具调用的训练能很好的提升模型多轮对话中的效果(一致性,逻辑性,记忆力)

  2. 能让模型获得规划和试探的能力,且保持个性的维持

  3. 后续打算把agent能力和个性训练结合,让角色扮演过程中出现更有意思的互动效果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

强化学习曾小健

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值