mirror of
https://github.com/Ed1s0nZ/CyberStrikeAI.git
synced 2026-04-22 02:36:40 +02:00
52 lines
2.4 KiB
Go
52 lines
2.4 KiB
Go
package multiagent
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
|
|
"github.com/cloudwego/eino/schema"
|
|
)
|
|
|
|
// maxToolCallRecoveryAttempts 含首次运行:首次 + 自动重试次数。
|
|
// 例如为 3 表示最多共 3 次完整 DeepAgent 运行(2 次失败后各追加一条纠错提示)。
|
|
// 该常量同时用于 JSON 参数错误和工具执行错误(如子代理名称不存在)的恢复重试。
|
|
const maxToolCallRecoveryAttempts = 5
|
|
|
|
// toolCallArgumentsJSONRetryHint 追加在用户消息后,提示模型输出合法 JSON 工具参数(部分云厂商会在流式阶段校验 arguments)。
|
|
func toolCallArgumentsJSONRetryHint() *schema.Message {
|
|
return schema.UserMessage(`[系统提示] 上一次输出中,工具调用的 function.arguments 不是合法 JSON,接口已拒绝。请重新生成:每个 tool call 的 arguments 必须是完整、可解析的 JSON 对象字符串(键名用双引号,无多余逗号,括号配对)。不要输出截断或不完整的 JSON。
|
|
|
|
[System] Your previous tool call used invalid JSON in function.arguments and was rejected by the API. Regenerate with strictly valid JSON objects only (double-quoted keys, matched braces, no trailing commas).`)
|
|
}
|
|
|
|
// toolCallArgumentsJSONRecoveryTimelineMessage 供 eino_recovery 事件落库与前端时间线展示。
|
|
func toolCallArgumentsJSONRecoveryTimelineMessage(attempt int) string {
|
|
return fmt.Sprintf(
|
|
"接口拒绝了无效的工具参数 JSON。已向对话追加系统提示并要求模型重新生成合法的 function.arguments。"+
|
|
"当前为第 %d/%d 轮完整运行。\n\n"+
|
|
"The API rejected invalid JSON in tool arguments. A system hint was appended. This is full run %d of %d.",
|
|
attempt+1, maxToolCallRecoveryAttempts, attempt+1, maxToolCallRecoveryAttempts,
|
|
)
|
|
}
|
|
|
|
// isRecoverableToolCallArgumentsJSONError 判断是否为「工具参数非合法 JSON」类流式错误,可通过追加提示后重跑一轮。
|
|
func isRecoverableToolCallArgumentsJSONError(err error) bool {
|
|
if err == nil {
|
|
return false
|
|
}
|
|
s := strings.ToLower(err.Error())
|
|
if !strings.Contains(s, "json") {
|
|
return false
|
|
}
|
|
if strings.Contains(s, "function.arguments") || strings.Contains(s, "function arguments") {
|
|
return true
|
|
}
|
|
if strings.Contains(s, "invalidparameter") && strings.Contains(s, "json") {
|
|
return true
|
|
}
|
|
if strings.Contains(s, "must be in json format") {
|
|
return true
|
|
}
|
|
return false
|
|
}
|