44 lines
1.2 KiB
Go
44 lines
1.2 KiB
Go
|
|
package service
|
|||
|
|
|
|||
|
|
import (
|
|||
|
|
"encoding/json"
|
|||
|
|
"fmt"
|
|||
|
|
"strings"
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
// ============================================
|
|||
|
|
// 消息解析
|
|||
|
|
// ============================================
|
|||
|
|
func parseModelOutput(text string) (map[string]any, error) {
|
|||
|
|
var result map[string]any
|
|||
|
|
if err := json.Unmarshal([]byte(text), &result); err != nil {
|
|||
|
|
return nil, fmt.Errorf("解析模型输出失败: %w", err)
|
|||
|
|
}
|
|||
|
|
return result, nil
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// cleanJSONString 清理字符串中可能导致JSON解析失败的字符
|
|||
|
|
func cleanJSONString(s string) string {
|
|||
|
|
s = strings.ReplaceAll(s, "\u2018", "'") // 左单引号 ‘
|
|||
|
|
s = strings.ReplaceAll(s, "\u2019", "'") // 右单引号 ’
|
|||
|
|
s = strings.ReplaceAll(s, "\u201c", "\"") // 左双引号 “
|
|||
|
|
s = strings.ReplaceAll(s, "\u201d", "\"") // 右双引号 ”
|
|||
|
|
return s
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
func truncateStr(s string, maxLen int) string {
|
|||
|
|
if len(s) <= maxLen {
|
|||
|
|
return s
|
|||
|
|
}
|
|||
|
|
return s[:maxLen]
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// sessionParseModelOutput 解析会话模型输出
|
|||
|
|
func sessionParseModelOutput(text string) (map[string]any, error) {
|
|||
|
|
var result map[string]any
|
|||
|
|
if err := json.Unmarshal([]byte(text), &result); err != nil {
|
|||
|
|
return nil, fmt.Errorf("解析模型输出失败: %w", err)
|
|||
|
|
}
|
|||
|
|
return result, nil
|
|||
|
|
}
|