diff --git a/service/prompt/prompt_compose_service.go b/service/prompt/prompt_compose_service.go index d0032fb..2a6ac9d 100644 --- a/service/prompt/prompt_compose_service.go +++ b/service/prompt/prompt_compose_service.go @@ -274,29 +274,23 @@ func ParseStructResult(raw map[string]any, responseBody string) map[string]any { } contentVal := raw[responseBody] - if contentVal == nil { - return map[string]any{ - "total_rounds": 1, - "rounds": []map[string]any{raw}, - } - } + var rounds []map[string]any + + // 是字符串,尝试解析 contentStr := gconv.String(contentVal) if contentStr == "" || contentStr == "0" { + rounds = append(rounds, map[string]any{responseBody: raw}) return map[string]any{ "total_rounds": 1, - "rounds": []map[string]any{raw}, + "rounds": rounds, } } // 尝试解析为数组 - var arr []map[string]any + var arr []any if err := json.Unmarshal([]byte(contentStr), &arr); err == nil && len(arr) > 0 { - // 数组的每个元素包一层 content - var rounds []map[string]any - for _, item := range arr { - rounds = append(rounds, map[string]any{"content": item}) - } + rounds = append(rounds, map[string]any{responseBody: arr}) return map[string]any{ "total_rounds": len(rounds), "rounds": rounds, @@ -304,15 +298,20 @@ func ParseStructResult(raw map[string]any, responseBody string) map[string]any { } // 尝试解析为单个对象 - var parsed map[string]any + var parsed any if err := json.Unmarshal([]byte(contentStr), &parsed); err == nil { - raw[responseBody] = parsed + rounds = append(rounds, map[string]any{responseBody: parsed}) + return map[string]any{ + "total_rounds": 1, + "rounds": rounds, + } } - // 兜底:包标准结构 + // 兜底:原始字符串作为内容 + rounds = append(rounds, map[string]any{responseBody: contentStr}) return map[string]any{ "total_rounds": 1, - "rounds": []map[string]any{raw}, + "rounds": rounds, } }