From 4cc44bf57cdf4ecfce0bc9732639dacfdedf85f2 Mon Sep 17 00:00:00 2001 From: WangLiZhao <1838393649@qq.com> Date: Thu, 18 Jun 2026 16:27:11 +0800 Subject: [PATCH] =?UTF-8?q?fix(task):=20=E4=BF=AE=E6=AD=A3=E9=94=99?= =?UTF-8?q?=E8=AF=AF=E4=BF=A1=E6=81=AF=E6=B3=A8=E5=85=A5=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- service/task/worker.go | 36 ++++++++++++++++++++---------------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/service/task/worker.go b/service/task/worker.go index 7bad2ec..20dd537 100644 --- a/service/task/worker.go +++ b/service/task/worker.go @@ -277,7 +277,7 @@ func (w *asyncWorker) parseAndRetry(ctx context.Context, body map[string]any, ta return body, nil } -// injectErrorMessage 将错误信息拼接到 user 消息中 +// injectErrorMessage 将错误信息插入到最后一个 user 消息之前 func injectErrorMessage(payload map[string]any, err error) map[string]any { if err == nil { return payload @@ -288,30 +288,34 @@ func injectErrorMessage(payload map[string]any, err error) map[string]any { 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-- { msg, ok := messages[i].(map[string]any) if !ok { continue } - if gconv.String(msg["role"]) != "user" { - continue + if gconv.String(msg["role"]) == "user" { + lastUserIdx = i + break } - - 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 } + 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 }