29 lines
899 B
Go
29 lines
899 B
Go
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
|
|
}
|