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
|
||
}
|