This commit is contained in:
parent
f9b78eefea
commit
26060b7985
|
|
@ -246,6 +246,63 @@ func (a *AdviceChatBiz) ChatWithSession(ctx context.Context, chat *entitys.Advic
|
|||
return
|
||||
}
|
||||
|
||||
// stripEmpty 递归去除 map/slice 中的空值(空字符串、nil、空数组、空对象),减少 JSON token
|
||||
func stripEmpty(v interface{}) interface{} {
|
||||
switch val := v.(type) {
|
||||
case map[string]interface{}:
|
||||
out := make(map[string]interface{})
|
||||
for k, item := range val {
|
||||
cleaned := stripEmpty(item)
|
||||
if cleaned != nil {
|
||||
out[k] = cleaned
|
||||
}
|
||||
}
|
||||
if len(out) == 0 {
|
||||
return nil
|
||||
}
|
||||
return out
|
||||
case []interface{}:
|
||||
var out []interface{}
|
||||
for _, item := range val {
|
||||
cleaned := stripEmpty(item)
|
||||
if cleaned != nil {
|
||||
out = append(out, cleaned)
|
||||
}
|
||||
}
|
||||
if len(out) == 0 {
|
||||
return nil
|
||||
}
|
||||
return out
|
||||
case string:
|
||||
if val == "" {
|
||||
return nil
|
||||
}
|
||||
return val
|
||||
case nil:
|
||||
return nil
|
||||
default:
|
||||
return v
|
||||
}
|
||||
}
|
||||
|
||||
// compactJSON 先去空值再序列化,比直接 JsonStringIgonErr 更省 token
|
||||
func compactJSON(v interface{}) string {
|
||||
data, err := json.Marshal(v)
|
||||
if err != nil {
|
||||
return "{}"
|
||||
}
|
||||
var raw interface{}
|
||||
if err = json.Unmarshal(data, &raw); err != nil {
|
||||
return string(data)
|
||||
}
|
||||
cleaned := stripEmpty(raw)
|
||||
if cleaned == nil {
|
||||
return "{}"
|
||||
}
|
||||
out, _ := json.Marshal(cleaned)
|
||||
return string(out)
|
||||
}
|
||||
|
||||
func (a *AdviceChatBiz) buildChatPromptResponse(ctx context.Context, chat *entitys.AdvicerChatReq, session *dbmodel.AiAdviceSession, chatList []mongo_model.AdvicerChatHisMongoEntity, chatData *entitys.ChatData) ([]openai.ResponseInputMessage, error) {
|
||||
const outputFormatHint = "\n[输出格式]请用 json 格式返回你的回复,结构为 {\"result\":\"回复内容\",\"mission_status\":\"in_progress|completed|fail\",\"mission_complete_desc\":\"本轮进展小结\"}。"
|
||||
var sys strings.Builder
|
||||
|
|
@ -261,31 +318,31 @@ func (a *AdviceChatBiz) buildChatPromptResponse(ctx context.Context, chat *entit
|
|||
sys.WriteString("\n")
|
||||
}
|
||||
sys.WriteString(constants.BasePrompt2)
|
||||
// 全量结构化数据注入
|
||||
// 全量结构化数据注入(stripEmpty 去空值省 token)
|
||||
if chatData != nil {
|
||||
if chatData.ProjectInfo != nil {
|
||||
sys.WriteString("\n[项目信息]\n")
|
||||
sys.WriteString(pkg.JsonStringIgonErr(chatData.ProjectInfo))
|
||||
sys.WriteString("\n[项目信息]")
|
||||
sys.WriteString(compactJSON(chatData.ProjectInfo))
|
||||
}
|
||||
if chatData.ProjectData != nil && len(chatData.ProjectData) > 0 {
|
||||
sys.WriteString("\n[项目资料]\n")
|
||||
sys.WriteString(pkg.JsonStringIgonErr(chatData.ProjectData))
|
||||
sys.WriteString("\n[项目资料]")
|
||||
sys.WriteString(compactJSON(chatData.ProjectData))
|
||||
}
|
||||
if chatData.AdvicerInfo != nil {
|
||||
sys.WriteString("\n[销售信息]\n")
|
||||
sys.WriteString(pkg.JsonStringIgonErr(chatData.AdvicerInfo))
|
||||
sys.WriteString("\n[销售信息]")
|
||||
sys.WriteString(compactJSON(chatData.AdvicerInfo))
|
||||
}
|
||||
if chatData.AdvicerVersion != nil && len(chatData.AdvicerVersion) > 0 {
|
||||
sys.WriteString("\n[销售人设风格]\n")
|
||||
sys.WriteString(pkg.JsonStringIgonErr(chatData.AdvicerVersion))
|
||||
sys.WriteString("\n[销售人设风格]")
|
||||
sys.WriteString(compactJSON(chatData.AdvicerVersion))
|
||||
}
|
||||
if chatData.ClientInfo != nil {
|
||||
sys.WriteString("\n[客户信息]\n")
|
||||
sys.WriteString(pkg.JsonStringIgonErr(chatData.ClientInfo))
|
||||
sys.WriteString("\n[客户信息]")
|
||||
sys.WriteString(compactJSON(chatData.ClientInfo))
|
||||
}
|
||||
if chatData.TalkSkill != nil {
|
||||
sys.WriteString("\n[销售技巧]\n")
|
||||
sys.WriteString(pkg.JsonStringIgonErr(chatData.TalkSkill))
|
||||
sys.WriteString("\n[销售技巧]")
|
||||
sys.WriteString(compactJSON(chatData.TalkSkill))
|
||||
}
|
||||
}
|
||||
sys.WriteString(outputFormatHint)
|
||||
|
|
|
|||
Loading…
Reference in New Issue