描述该功能
当前 ChatInferencer 的 infer_every 模式存在一个根本问题:
每一轮推理都是从原始 ground truth 对话中截取 history,
而不是把模型自己上一轮的输出追加进去。
这意味着模型永远看不到自己之前说过的话,
根本无法评测真正意义上的多轮对话能力(记忆、上下文一致性、连续推理等)。
新增一个 MultiTurnInferencer,支持:
- 每轮将模型自身的历史回复作为后续轮次的上下文输入,真正串联多轮
- 统一的多轮数据集格式(dialogue 字段)
- 支持单轮打分与 session 整体打分
简单思路:
class MultiTurnInferencer(BaseInferencer):
def inference(self, retriever, ...):
for sample in retriever.test_ds:
history = []
for turn in sample['dialogue']:
if turn['role'] == 'user':
history.append(turn)
elif turn['role'] == 'assistant':
# 关键:用真实历史(含模型自己的回复)生成
response = self.model.generate_from_template([history], ...)
history.append({'role': 'assistant', 'content': response})
可能的改动点:
- 新建 opencompass/openicl/icl_inferencer/icl_multiturn_inferencer.py
- 评测器支持多轮 session 的分轮打分与整体聚合
- 补充多轮数据集 schema 及接入文档
是否希望自己实现该功能?
描述该功能
当前 ChatInferencer 的 infer_every 模式存在一个根本问题:
每一轮推理都是从原始 ground truth 对话中截取 history,
而不是把模型自己上一轮的输出追加进去。
这意味着模型永远看不到自己之前说过的话,
根本无法评测真正意义上的多轮对话能力(记忆、上下文一致性、连续推理等)。
新增一个 MultiTurnInferencer,支持:
简单思路:
可能的改动点:
是否希望自己实现该功能?