feat: LLM 降级策略 — 全部模型不可用时返回自然语言预设文案
- getFallbackMessage() 随机选择3条预设降级回复 - ProcessInput 失败和流式事件错误均使用降级回复 - 用户看到"开拓者…我现在好像有点恍惚…"而非错误信息 Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -824,6 +824,17 @@ func getEnvInt(key string, fallback int) int {
|
|||||||
return n
|
return n
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// getFallbackMessage returns a natural-sounding fallback when LLM is unavailable.
|
||||||
|
func getFallbackMessage() string {
|
||||||
|
messages := []string{
|
||||||
|
"开拓者…我现在好像有点恍惚…稍等一下好吗?",
|
||||||
|
"唔…忆庭的投影好像出了点小问题。等我一下下♪",
|
||||||
|
"信号有点不太好呢…你稍等我一下哦?",
|
||||||
|
}
|
||||||
|
return messages[time.Now().UnixNano()%int64(len(messages))]
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// registerPluginTools 从插件实例注册其所有工具到注册中心
|
// registerPluginTools 从插件实例注册其所有工具到注册中心
|
||||||
func registerPluginTools(registry *plgManager.ToolRegistry, plugin plgSDK.Plugin) {
|
func registerPluginTools(registry *plgManager.ToolRegistry, plugin plgSDK.Plugin) {
|
||||||
for _, t := range plugin.Tools() {
|
for _, t := range plugin.Tools() {
|
||||||
@@ -1042,10 +1053,10 @@ func handleChat(
|
|||||||
BotUID: req.Source.BotUID,
|
BotUID: req.Source.BotUID,
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
errData, _ := json.Marshal(map[string]string{"delta": "", "error": fmt.Sprintf("处理失败: %v", err)})
|
fallback := getFallbackMessage()
|
||||||
fmt.Fprintf(w, "data: %s\n\n", errData)
|
log.Printf("[chat] ProcessInput 失败,使用降级回复: %v", err)
|
||||||
flusher.Flush()
|
fallbackData, _ := json.Marshal(map[string]string{"delta": fallback, "status": "fallback"})
|
||||||
fmt.Fprintf(w, "data: [DONE]\n\n")
|
fmt.Fprintf(w, "data: %s\n\n", fallbackData)
|
||||||
flusher.Flush()
|
flusher.Flush()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -1071,10 +1082,10 @@ func handleChat(
|
|||||||
|
|
||||||
case model.StreamError:
|
case model.StreamError:
|
||||||
log.Printf("[chat] 流式错误: %v", event.Error)
|
log.Printf("[chat] 流式错误: %v", event.Error)
|
||||||
errData, _ := json.Marshal(map[string]string{"delta": "", "error": event.Error.Error()})
|
fallback := getFallbackMessage()
|
||||||
fmt.Fprintf(w, "data: %s\n\n", errData)
|
log.Printf("[chat] 流式事件错误,发送降级回复: %v", event.Error)
|
||||||
flusher.Flush()
|
fallbackData, _ := json.Marshal(map[string]string{"delta": fallback, "status": "fallback"})
|
||||||
fmt.Fprintf(w, "data: [DONE]\n\n")
|
fmt.Fprintf(w, "data: %s\n\n", fallbackData)
|
||||||
flusher.Flush()
|
flusher.Flush()
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user