BuildTextEvalInputFromEvents 根据一组 Session 事件构建 TextEvalInput。 约定: - 默认将最后一个 assistant 消息视为 Answer。 - 将之前的 user / assistant 消息串联为 Context,用于评估时参考。 - Reference 由调用方自行填充(例如从标注数据集中读取)。
(events []session.Event)
| 15 | // - 将之前的 user / assistant 消息串联为 Context,用于评估时参考。 |
| 16 | // - Reference 由调用方自行填充(例如从标注数据集中读取)。 |
| 17 | func BuildTextEvalInputFromEvents(events []session.Event) *TextEvalInput { |
| 18 | if len(events) == 0 { |
| 19 | return &TextEvalInput{} |
| 20 | } |
| 21 | |
| 22 | var answer string |
| 23 | var context []string |
| 24 | |
| 25 | for idx, e := range events { |
| 26 | msg := e.Content |
| 27 | text := extractMessageText(&msg) |
| 28 | |
| 29 | isLast := idx == len(events)-1 |
| 30 | if isLast && msg.Role == types.MessageRoleAssistant { |
| 31 | answer = text |
| 32 | continue |
| 33 | } |
| 34 | |
| 35 | // 其他消息作为上下文 |
| 36 | context = append(context, fmt.Sprintf("%s: %s", msg.Role, text)) |
| 37 | } |
| 38 | |
| 39 | return &TextEvalInput{ |
| 40 | Answer: answer, |
| 41 | Context: context, |
| 42 | } |
| 43 | } |
| 44 | |
| 45 | // extractMessageText 将 types.Message 中的文本内容展开为单一字符串。 |
| 46 | func extractMessageText(msg *types.Message) string { |
no test coverage detected