Files
prompts-core/service/utils.go

66 lines
1.2 KiB
Go
Raw Normal View History

2026-05-15 09:45:51 +08:00
// utils 工具函数
2026-05-12 13:59:15 +08:00
package service
import (
"encoding/json"
"fmt"
2026-05-15 09:45:51 +08:00
"github.com/gogf/gf/v2/encoding/gjson"
"github.com/gogf/gf/v2/util/gconv"
2026-05-12 13:59:15 +08:00
)
// ============================================
2026-05-15 09:45:51 +08:00
// json 相关处理
2026-05-12 13:59:15 +08:00
// ============================================
2026-05-15 09:45:51 +08:00
// 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)
2026-05-12 13:59:15 +08:00
}
2026-05-15 09:45:51 +08:00
return j.Map(), nil
2026-05-12 13:59:15 +08:00
}
2026-05-15 09:45:51 +08:00
func convertToMessages(raw any) []map[string]any {
if raw == nil {
return nil
2026-05-12 13:59:15 +08:00
}
2026-05-15 09:45:51 +08:00
j, err := gjson.LoadJson(gconv.Bytes(raw))
if err != nil {
return nil
2026-05-12 13:59:15 +08:00
}
2026-05-15 09:45:51 +08:00
// 1. 如果有 messages
if j.Contains("messages") {
return gconv.Maps(j.Get("messages").Array())
2026-05-12 13:59:15 +08:00
}
2026-05-15 09:45:51 +08:00
// 2. 否则当成单条 message
return []map[string]any{
j.Map(),
2026-05-12 13:59:15 +08:00
}
}
2026-05-15 09:45:51 +08:00
// isMessageValid 校验推理结果是否合法
func isMessageValid(message map[string]any) bool {
if message == nil {
return false
2026-05-12 13:59:15 +08:00
}
2026-05-15 09:45:51 +08:00
return true
2026-05-12 13:59:15 +08:00
}
2026-05-15 09:45:51 +08:00
func formToJSON(form map[string]any) string {
if form == nil {
return "{}"
2026-05-12 13:59:15 +08:00
}
2026-05-15 09:45:51 +08:00
b, _ := json.Marshal(form)
return string(b)
2026-05-12 13:59:15 +08:00
}
func mustMarshal(v any) string {
b, err := json.Marshal(v)
if err != nil {
return "{}"
}
return string(b)
}