Skip to content

[Feature] 支持原生多轮对话评测流程(MultiTurnInferencer) #2437

Description

@shuheng-mo

描述该功能

当前 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 及接入文档

是否希望自己实现该功能?

  • 我希望自己来实现这一功能,并向 OpenCompass 贡献代码!

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Fields

No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions