66 lines
1.2 KiB
Go
66 lines
1.2 KiB
Go
// utils 工具函数
|
|
package service
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
|
|
"github.com/gogf/gf/v2/encoding/gjson"
|
|
"github.com/gogf/gf/v2/util/gconv"
|
|
)
|
|
|
|
// ============================================
|
|
// json 相关处理
|
|
// ============================================
|
|
// parseOutput 解析模型输出为 JSON 格式
|
|
func parseOutput(text string) (map[string]any, error) {
|
|
j, err := gjson.LoadJson([]byte(text))
|
|
if err != nil {
|
|
return nil, fmt.Errorf("解析模型输出失败: %w", err)
|
|
}
|
|
|
|
return j.Map(), nil
|
|
}
|
|
|
|
func convertToMessages(raw any) []map[string]any {
|
|
if raw == nil {
|
|
return nil
|
|
}
|
|
j, err := gjson.LoadJson(gconv.Bytes(raw))
|
|
if err != nil {
|
|
return nil
|
|
}
|
|
// 1. 如果有 messages
|
|
if j.Contains("messages") {
|
|
return gconv.Maps(j.Get("messages").Array())
|
|
}
|
|
// 2. 否则当成单条 message
|
|
return []map[string]any{
|
|
j.Map(),
|
|
}
|
|
}
|
|
|
|
// isMessageValid 校验推理结果是否合法
|
|
func isMessageValid(message map[string]any) bool {
|
|
if message == nil {
|
|
return false
|
|
}
|
|
return true
|
|
}
|
|
|
|
func formToJSON(form map[string]any) string {
|
|
if form == nil {
|
|
return "{}"
|
|
}
|
|
b, _ := json.Marshal(form)
|
|
return string(b)
|
|
}
|
|
|
|
func mustMarshal(v any) string {
|
|
b, err := json.Marshal(v)
|
|
if err != nil {
|
|
return "{}"
|
|
}
|
|
return string(b)
|
|
}
|