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
|
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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user