package service import ( "encoding/json" "fmt" "strings" ) // parseAnalysisResponse 解析分析模型输出的判定 JSON。 // 容错:剥 ```json 代码块/首尾空白/多余文字,取首个 {...}。 func parseAnalysisResponse(content string) (retryable bool, reason string, err error) { s := strings.TrimSpace(content) s = strings.TrimPrefix(s, "```json") s = strings.TrimSuffix(s, "```") s = strings.TrimSpace(s) start, end := strings.IndexByte(s, '{'), strings.LastIndexByte(s, '}') if start < 0 || end <= start { return false, "", fmt.Errorf("分析响应中未找到JSON对象: %q", content) } var obj struct { Retryable bool `json:"retryable"` Reason string `json:"reason"` } if err = json.Unmarshal([]byte(s[start:end+1]), &obj); err != nil { return false, "", fmt.Errorf("分析响应JSON解析失败: %v", err) } return obj.Retryable, obj.Reason, nil }