fix(task): 修正错误信息注入逻辑
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user