fix(task): 修正错误信息注入逻辑

This commit is contained in:
2026-06-18 16:27:11 +08:00
parent dc06d1bb9a
commit 4cc44bf57c

View File

@@ -277,7 +277,7 @@ func (w *asyncWorker) parseAndRetry(ctx context.Context, body map[string]any, ta
return body, nil return body, nil
} }
// injectErrorMessage 将错误信息拼接到 user 消息 // injectErrorMessage 将错误信息插入到最后一个 user 消息之前
func injectErrorMessage(payload map[string]any, err error) map[string]any { func injectErrorMessage(payload map[string]any, err error) map[string]any {
if err == nil { if err == nil {
return payload return payload
@@ -288,30 +288,34 @@ func injectErrorMessage(payload map[string]any, err error) map[string]any {
return payload return payload
} }
errMsg := fmt.Sprintf("\n\n【上一轮输出错误,请修正】%s", err.Error()) errMsg := fmt.Sprintf("【上一轮输出错误,请修正】%s", err.Error())
// 找到最后一个 role=user 的消息,追加错误提示 // 找到最后一个 user 的位置
lastUserIdx := -1
for i := len(messages) - 1; i >= 0; i-- { for i := len(messages) - 1; i >= 0; i-- {
msg, ok := messages[i].(map[string]any) msg, ok := messages[i].(map[string]any)
if !ok { if !ok {
continue continue
} }
if gconv.String(msg["role"]) != "user" { if gconv.String(msg["role"]) == "user" {
continue lastUserIdx = i
}
switch c := msg["content"].(type) {
case string:
msg["content"] = c + errMsg
case []any:
msg["content"] = append(c, map[string]any{
"type": "text",
"text": errMsg,
})
}
break break
} }
}
if lastUserIdx == -1 {
return payload
}
// 在最后一个 user 之前插入错误消息
errMsgObj := map[string]any{
"role": "user",
"content": []map[string]any{{"type": "text", "text": errMsg}},
}
// 切片插入
messages = append(messages[:lastUserIdx], append([]any{errMsgObj}, messages[lastUserIdx:]...)...)
payload["messages"] = messages
return payload return payload
} }